Move local history display into separate module using corewindow
API. Note this is purely the rendering and teh browser history module
still constructs the history data.
slightly extends the invalidate core window API with error return and
whole window invalidation. Also renames it to be more inline with
browser window API call.
cannot quite reuse browser window API yet as that applies scaling
the reformat callback was completely unecessary and implementations
appeared potentialy buggy. This rationalises the API and reduces the
number of operations a frontend must provide.
When URLs are added, or address entries are edited or deleted,
a hotlist save is scheduled to happen after 10 seconds, if there
isn't already a hotlist save scheduled.
Now, hotlist_init can be called without a corewindow. This allows the
hotlist backend to be up and running, before any hostlist manager is
opened. Calling hotlist_manager_init attaches the hotlist to a corewindow.
The treeview widget can be repeatedly finialised and initialised. The
content ready flag was not being cleard on initialisation so content
was being used in an bad state. For example this caused an assert when
content_redraw() was called on non-ready resource handles.
The netsurf core no longer uses any locale dependant operations
excepting the mall number or cases where such operations are
explicitly wanted.
the netsurf_init now calls setlocale with the empty string and lets
the c library setup as per its specific implementation.
any core functionality that specificaly processes ascii text must use
the utils/ascii.h header to do so.
The no_delete flag is mislabelled as persistent. In fact it is simply
never altered from its default value. It is serialised and its state
kept on disc but otherwise is completely vestigial.
Previously the expected behaviour for front ends using the correct
API for hotlist, global history, cookie manager, and ssl cert
viewer was that the front end would initialise the treeview module
on startup and finalise it on application exit.
However, this meant that the front ends had to include the core
treeview header, which they didn't otherwise need.
Since the tree module provided access to the new treeview utilities
through the old tree API, and was used by front ends with no changes
for the new treeview API, the tree layer refcounted initialisations
of treeview-based widgets, and only called the underlying treeview
init/fini functions when needed.
This change moves that refcounting into the treeview module. Now
the hotlist, global history, cookie manager, and ssl cert viewer
widgets call call treeview init/fini as part of their own
initialisation and finalisation. This means that front ends
using the correct APIs for treeview-based widgets don't need to
know anything about the underlying treeview, and the tree module
compatibility layer has had its treeview refcounting removed.
Finally, the treeview_init function took a font size parameter.
Now it does not and lit gets font size from config. We probably
want to add a new `treeview_font_size` option to nsoptions, and
have differnent defaults on different platforms. 12pt on RISC OS,
and 11pt elsewhere, most likely.
This removes the toskip parameter, which was only used by the RISC OS
front end. The toskip param was used to skip 8 characters which did
not need to be escaped from the start of the URL. The RISC OS front
end now orders the steps of its URL construction to avoid the need
for this.
change all the frontends to provide the warning callback in the
miscelaneous table instead of using the warn_user function.
Changing all the warn_user callsites still requires completion.
currently NetSurf uses curl_getdate to convert textural date and time
strings into seconds since epoch. It is betetr to move this
functionality to a utility function so curl_getdate can easily be
replaced if required.
When the operations tables were created the browser table was renamed
to miscellaneous except the actual rename patch was never applied,
this fixes that situation.
The printf formatting for size_t is set in c99 as %zu but in windows
it is %Iu this is solved by adding and inttypes style PRI macro for size_t
This also uses this macro everywhere size_t is formatted.
This is an attempt to amelioriate the situation found in #2384 where
we see the cURL connect() failing to complete. Based on the pcap
from the bug log, we believe that RISC OS is likely failing to signal
the completion of the connection to cURL. As such, cURL times out.
This change permits retries of timed out connections in the hope that
a fresh socket FD might subsequently function correctly. The defaults
chosen mean that the previous behaviour of 30 seconds before timeout
is reported will remain the same, but in that time we will make 3 separate
attempts to connect the socket.
The translated message loading is dependant on configuration of
resource location in each frontend, additionally they should have the
ability to deal with errors in this loading in a implementation
specific manner.
This also extends the message loading API to be capable of loading
from an inline memory buffer instead of from a file.
Previously this information was logged when netsurf_init was called
which might be many lines out output into the log.
It is useful to have this information at the beginning of the log to
make it easily found. In addition it makes netsurf_init less complex.
This changes the LOG macro to be varadic removing the need for all
callsites to have double bracketing and allows for future improvement
on how we use the logging macros.
The callsites were changed with coccinelle and the changes checked by
hand. Compile tested for several frontends but not all.
A formatting annotation has also been added which allows the compiler
to check the parameters and types passed to the logging.
The generic bitmap handlers provided by each frontend are called back
from the core and therefore should be in an operation table. This was
one of the very few remaining interfaces stopping the core code from
being split into a library.
The content thumbnailers for each frontend were being provided the
contents url. This was only ever used to call the urldb thumbnail
setting API.
This changes it so the single callsite that passed a valid url adds
the bitmap to that url itself in desktop_history.c instead of forcing
every frontend to require the urldb API.
Additionally the old API could pass the url as NULL which was causing
asserts where this was not an expected parameter value. Because of
this this fixes bug #2286 which was also present in the monkey
frontend as both called nsurl_access() on the url without the NULL
check and caused an assertion.
If saving hotlist to "<path>", we now save to "<path>.bk", then remove
the file at "<path>", and replace it with the one at "<path>.bk".
This should prevent hotlist corruption when someone pulls the plug
while the hotlist is being written.
The cocoa frontend was directly acessing browser internals instead of
using the API. In the case of gui.m there was a check for the browser
window not being root (browser->parent != NULL) . As gui windows can
only ever be associated with the root brower window (i.e. its parent
will always be NULL) this was completely redundant.
By hiding all but the form selection menu option structure from code
outside of render this reduces the API to the absolute minimum to
support this feature.
CERT MEM04-C suggests that zero length allocations behaviour might be
surprising so it should be avoided. This adds a check to ensure a zero
length allocation will be avoided. Additionally it returns errors to
the caller rather than warning directly (in some error paths)
Previously content handler debugging features were accessed by global
variables. This allows the setting of debugging parameters via a
content API giving per content control over debugging features.
Currently only used by the html content handler to toggle global
redraw debugging.
The frontends previously had to use an html renderer API to get the
encoding of a content. This also required the explicit checking of the
contents type rather than using the existing content API to abstract
this knowledge.
This cleans up this header and moves the functionality into more
useful places while reducing the include complexity but only pulling
in whats required.
Update the API which allows frontends to acquire the page features
(images, link urls or form elements) present at the given coordinates
within a browser window.
By making this an explicit browser_window API and using the browser.h
header for the associated data structure with a more appropriate API
naming the usage is much more obvious and contained.
Additionally the link url is now passed around as a nsurl stopping it
being converted from nsurl to text and back again several times.
The local history interface now reports errors to its callers isntead
of inconsistantly waning the user occasionally on error.
The documentation comemhts were also updated to match reality
The browser window common initialisation code returns error codes which
were being ignored. The errors were additionally being reported via
warn_user in inappropriate places within browser history construction.
This removes the global PDF_Password interface that had completely
bitrotted and moves it into the standard misc operation table with a
sensible defualt implementation.
This also cleans up and fixes the gtk frontend implementation of the
pdf password callback so it compiles.
Finally this moves the implementation to a sensible place alongside
the other exporters reducing target makefile complexity futher.
This is the initial part of a series which splits up the API interface
definitions for the frontends removing a great deal of unnecessary file
inclusion and further isolates the fronted API usage from the core
The netsurf.h header should *only* contain the registration, core
initialisation and finalisation methods. Version information is best
placed in its own header.
Also remove any unneeded inclusion of this header limiting it to
solely the places the relevant API is required.
The netsurf core is driven from numerous operation tables most of
which are now set through a common netsurf_register() interface. The
font and plotting interfaces are currently separate and unlike all the
other operation tables are modified for differing contexts.
This change moves the font operations alongside all the other
operations table and remove unnecessary interaction with the renderers
font internals. Further this also removes the need for css internals
to be visible in frontends.
Was comparing against the current start line length, to decide if it
needed redrawing, without taking into account that old start line
might have been longer.
This allows creation of new browsing contents (browser/gui window) in a
tab but without explicitly providing a sibling browsing context to be
placed with.
css import entries may not have a valid content if the resource failed to load
or was unsuitable in some otehr way. The save_complete iterator did not cope with this.
fixes#2166
This rationalises the path construction and basename file
operations. The default implementation is POSIX which works for all
frontends except windows, riscos and amiga which have differeing path
separators and rules.
These implementations are significantly more robust than the previous
nine implementations and also do not use unsafe strncpy or buffers
with arbitrary length limits.
These implementations also carry full documentation comments.