Commit Graph

157 Commits

Author SHA1 Message Date
Vincent Sanders
c0ef8ce645 clean up html box, no functionality change just cosmetic
split up the html box headers
tidy up the documentation comments
avoid forward declarations in normalisation implementation
2020-04-28 23:30:20 +01:00
Vincent Sanders
f6883d6761 use dom type interface instead of strcasecmp 2020-04-26 17:31:15 +01:00
Vincent Sanders
b577de7c5b remove forward declarations
reorder module to remove need for forward function declarations.
remove unecessary and confusing parameter macros
2020-04-26 11:21:02 +01:00
Vincent Sanders
084861a31b Implement javascript scheme url script https://wiki.whatwg.org/wiki/URL_schemes 2020-04-17 22:43:44 +01:00
Vincent Sanders
e2f34232a2 refactor html mouse action
This reduces the source complexity of the html_mouse_action()
 previously this was a single function of several thousand
 lines with over 30 local variables allocated on the stack.

Variables are now mostly held in a single static structure which
 drasticaly reduces the size of stack frame required and improves
 lookup locality.

The generated code does cause two additional function calls as the
 compiler avoids inlining the sub functions. The optimiser seems to
 produce somewhat better code within the sub functions.

In the final analysis there appears to be no significant performance
 loss or gain with this change, just more readable source.
2020-04-13 12:09:07 +01:00
Daniel Silverstone
cbc28d2c98
html: Also close js thread on html_stop()
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2020-03-29 14:31:42 +01:00
Daniel Silverstone
6a2ce2b3c7
HTML: Use new js_closethread()
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2020-03-22 10:18:30 +00:00
Daniel Silverstone
efbfaa0cb1
JS: Move ownership of jsthread from browser to htmlc
Since it makes more sense for the htmlc to be responsible for
when the JS thread gets destroyed, move its lifetime from the
responsibility of the browser window to the html content.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2020-03-22 10:00:29 +00:00
Daniel Silverstone
17b28e85c1
JS: Split concept of JS context into heap and thread
In preparation for proper splitting of Javascript support into
heaps and threads, this renames the types and corrects the no-js
builds to still work.  At this time no substantive change in
semantics exists, and the duktape build won't work.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2020-03-21 18:30:41 +00:00
Michael Drake
f3b7a0c44c HTML Script: Check for success on intern of mimetype. 2020-02-23 14:28:27 +00:00
Daniel Silverstone
16163aab03
HTML: Ignore dom exceptions we don't care about
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2020-02-23 09:36:07 +00:00
Daniel Silverstone
fa520638fa
HTML: Ignore LOADING status in html_proceed_to_done()
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2020-02-21 14:26:33 +00:00
Daniel Silverstone
2f8868309a
HTML: Don't transition the content state machine if we do nothing
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2020-02-21 14:09:39 +00:00
Daniel Silverstone
db370bfdb7
HTML: Complete content state machine after async script
The async script completion process needs to complete the
content state machine so that browser throbbers eventually
stop once async scripts have fetched and run, even if that
happens *after* conversion finishes.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2020-02-21 10:48:00 +00:00
Vincent Sanders
55ba27c68f re-order config include so strcasecmp is correctly detected on RISC OS/win32 2019-12-22 11:11:04 +00:00
Daniel Silverstone
eba05b0d38
html_script: Count sync scripts to prevent unpausing early
If there is more than one incomplete sync script then it's
important that we don't unpause hubbub too early.  This commit
adds a counter so that if there're unfinished sync scripts in
the set, we don't unpause until the last one completes.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-12-19 20:50:33 +00:00
Michael Drake
faf667ada7 HTML: box_consturction: cleanup name dom_string in box_object. 2019-12-10 19:26:12 +00:00
Michael Drake
4c4b57d511 HTML redraw: Never draw box scrollbars for textareas.
The scrollbars for textareas are rendered by the widget.

This stops us from putting broken scrollbars over the top of the
textarea's own scrollbars.
2019-12-09 14:33:53 +00:00
Michael Drake
eb88c92749 html: css fetcher: Fix passing LWC borrow to fetcher_add, which consumes.
Fixes abort on exit when corestring finalisation tried to unref
what should have been the final ref:

    $ ./nsgtk3
    corrupted double-linked list
    Aborted (core dumped)
2019-12-02 10:58:36 +00:00
Michael Drake
65e5512160 html: Fire DOM KeyboardEvents on keypresses. 2019-12-01 21:25:46 +00:00
Michael Drake
7e6723e27a html: Add function for issuing a keypress event. 2019-12-01 21:25:46 +00:00
Michael Drake
a2190f91c9 html: Split out helper for firing DOM events and swallowing errors. 2019-12-01 21:25:46 +00:00
Michael Drake
12fd5ddd69 HTML: Rename fire_dom_event to fire_generic_dom_event. 2019-12-01 21:25:46 +00:00
Daniel Silverstone
715586bb65
html_saw_insecure_objects: Don't infinite loop on objects
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-12-01 17:05:28 +00:00
Daniel Silverstone
33c81b6932
html_css_fetcher: Use corestring_lwc_x_ns_css
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-12-01 17:05:28 +00:00
Daniel Silverstone
6fc2666d07
Allow contents to indicate if they believe they may not be secure.
HTML contents reference many other objects.  The browser window
needs to know if any of them may not be secure, in which case it
needs to report that in its page state.  If other content types
might refer to sub-contents, they will need to define the callback
too.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-12-01 15:49:08 +00:00
Daniel Silverstone
9a02a41cd6
box_construct: Do not leak attributes in <embed> boxes
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-11-30 20:37:07 +00:00
Michael Drake
dc9de4998f HTML redraw: Don't render scrollbars when the CSS doesn't permit it. 2019-11-30 15:20:21 +00:00
Vincent Sanders
4a1ca97c65 make unknown content drag assert have meanigful message 2019-11-29 21:32:46 +00:00
Vincent Sanders
69236590d0 change mouse action drag handling to use a more efficient dispatch 2019-11-17 10:40:34 +00:00
Vincent Sanders
e34f9d3a38 move remaining mouse action drag handling into separate functions 2019-11-17 10:13:56 +00:00
Vincent Sanders
ae39b9f955 move more select menu handling into mouse_action_select_menu() 2019-11-17 10:12:37 +00:00
Vincent Sanders
185d034323 make mouse track and mouse action content handlers return an error code 2019-11-12 22:48:00 +00:00
Vincent Sanders
074407d251 Remove redundant drag handling for content selection
This redundant code was added by:
4747bbbfb2 HTML drags now go via content msg.
and then added again with:
c2a718075a A load of refactoring of how content selection and input work.
2019-11-12 21:54:35 +00:00
Vincent Sanders
b9bc34b875 split out html interaction header elements and rename source 2019-11-12 21:54:35 +00:00
Michael Drake
8e1154eb1c Content: Remove redundant and unused redraw message fields.
This was archaic support for rendering images as "overlays",
and avoiding a redraw via the browser window redraw and HTML
contents.  Basically it was "plot this image here", but it
was too error prone, so it was removed a long time ago.

These are some last vestiges that made the redraw message
look more complex than it is.
2019-11-11 21:54:15 +00:00
Vincent Sanders
0e16c01cdc remove unecessary user warning 2019-11-10 20:32:37 +00:00
Vincent Sanders
e95c11dac8 remove user warning and log error instead 2019-11-07 21:35:24 +00:00
Vincent Sanders
0dbc6e5ecd fix keypress entry on text area
accidentaly broken in commit fca421e204
2019-11-07 21:20:04 +00:00
Vincent Sanders
570f2dc036 remove user warning and fix up error handling in form select menus 2019-11-07 18:52:49 +00:00
Vincent Sanders
7de3100624 remove unecessary user warning 2019-11-06 23:26:48 +00:00
Vincent Sanders
fca421e204 remove user warning and propogate error return 2019-11-06 23:13:20 +00:00
Vincent Sanders
cbb0c05258 remove unecessary user warning calls and improve error propogation in html box 2019-11-05 23:05:42 +00:00
Vincent Sanders
4372104e0e fix utils configuration header ordering 2019-10-11 17:39:33 +01:00
Vincent Sanders
12cca32059 fix core find in page behaviour when case sensitivity is toggled 2019-09-21 10:53:41 +01:00
Vincent Sanders
d94afaa0e1 make the gtk_search structure private to teh gtk search object 2019-09-21 10:53:41 +01:00
Daniel Silverstone
524965b867 Box Conversion: Cancel conversion during html_destroy
If dom_to_box is still in progress when we destroy an HTML
content, we need to cancel the conversion otherwise we will
end up with a scheduled callback into infinity.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-08-23 21:58:07 +01:00
Michael Drake
5e45c4498c HTML: Don't allow objects to redraw until we have a layout. 2019-08-06 09:42:37 +01:00
Daniel Silverstone
9318ee5d6a html_begin_conversion: If we pause in completing parse, try again later.
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-08-05 21:29:18 +01:00
Michael Drake
be23d522db HTML: Box coordinates: Take fast route to float container.
And assert that floats have a float_container.
2019-08-05 21:15:28 +01:00
Daniel Silverstone
170dc5d524 Excise the llcache query pathway.
In further preparation for the auth and cert queries being handled
as special contents from `about:` this excises the query pathway
from the llcache pretty much entirely.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-08-05 20:56:07 +01:00
Daniel Silverstone
2be3ebd918 content: Rename content_broadcast_errorcode()
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-08-05 15:25:15 +01:00
Daniel Silverstone
6ba199c7d7 Content messages: Remove ERRORCODE, rework ERROR
This reworks CONTENT_MSG_ERROR to be structured data and
removes the CONTENT_MSG_ERRORCODE message kind.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-08-05 14:30:30 +01:00
Vincent Sanders
2171f13ab3 enable gnu extensions to get strcasestr from string.h 2019-08-05 10:01:13 +01:00
Daniel Silverstone
b15b204f49 form: Fix situation where a gadget initialises with NULL value
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-08-04 22:12:10 +01:00
Daniel Silverstone
05c6ee02d9 html: Mirror gadget values in and out of the DOM
Currently only supporting text input, password input, and hidden
input, along with text areas, this mirrors the text values in
and out of the DOM, allowing JS to adjust the gadget values and
for the gadget values to be interrogated from JS.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-08-04 22:07:42 +01:00
Vincent Sanders
3be2b98cc2 change browser_window_drop_file_at_point() to take unscaled coordinates 2019-08-04 14:24:33 +01:00
Vincent Sanders
f21c41a2e5 change browser_window_redraw to use unscaled coordinates 2019-08-04 11:25:35 +01:00
Daniel Silverstone
1905200154 Add content handlers for queries
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-08-04 11:22:40 +01:00
Vincent Sanders
357e8a8ad2 remove unnecessary browser_window_redraw_rect interface 2019-08-03 21:58:21 +01:00
Vincent Sanders
d4c01894c2 change browser_window_get_features to use unscaled coordinates 2019-08-03 14:29:06 +01:00
Vincent Sanders
0ebfff259f change browser_window_mouse_track to use unscaled coordinates 2019-08-03 14:29:05 +01:00
Vincent Sanders
0a8ed41a1a change browser_window_mouse_click to use unscaled coordinates
this means frontends no longer need to scale mouse click events thus
simplifying their implementation.
2019-08-03 14:29:05 +01:00
Daniel Silverstone
182c4ddefe box_construct: Check error return from dom_has_attribute
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-08-03 14:27:44 +01:00
Daniel Silverstone
acee5faa3f html_interaction.c: Default node to <HTML> node
In order to cope when an entire document is `visibility: hidden`
we default to the <HTML> node when interacting with the document
to ensure we don't drop off the end of the box model without
identifying at least one node to fire events at.

This resolves #2658

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-08-01 13:56:42 +01:00
Michael Drake
4b6967fee4 Layout: Apply min/max width to replaced elements when width is given. 2019-07-30 21:55:29 +01:00
Vincent Sanders
c2fa6af0ff make content close check the content status itself
make content handler open and close return error status
2019-07-10 16:42:52 +01:00
Michael Drake
1c3ce67c62 HTML: Viewport width/height in length context are fixed point. 2019-06-29 21:59:15 +01:00
Daniel Silverstone
64ee8e1b00 html.c: Correct ordering for reformat time
Fix a minor bug where we'd likely never end up reformatting.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-06-05 22:59:49 +01:00
Daniel Silverstone
9c32564085 html_script.c: html_script_exec() reqacquire script ptr
Since executing a script can cause more scripts to be appended
to the script array, and that can cause a reallocation which might
move the script array, reacquire the script pointer after running
the script so that we don't wander off into the reeds.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-06-01 13:25:14 +01:00
Michael Drake
b330fd9f0e HTML: Update selection media data for new libcss API. 2019-05-07 14:01:51 +01:00
Michael Drake
51feeadcf9 HTML: Set up the CSS length measuring context in CSS pixels. 2019-05-06 21:30:05 +01:00
Michael Drake
a43b83de03 HTML: Squash error-path leaks in select box construction. 2019-05-06 17:29:53 +01:00
Michael Drake
0db71994ea HTML: Before building the box tree, get viewport dimensions. 2019-05-06 15:38:33 +01:00
Michael Drake
0f3b279167 HTML content handler: Handle content msg for getdims. 2019-05-06 15:38:33 +01:00
Daniel Silverstone
52ef77ceef Do not prevent reattempting conversion of HTML contents
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-05-06 15:10:01 +01:00
Vincent Sanders
35bc2ccbb8 change content get_source_data interfaces to return uint8_t and size_t
previously these interfaces returned char * and unsigned int which was
undesirable.
2019-05-05 22:50:25 +01:00
Daniel Silverstone
8474c5d4c0 Logging: migrate and provide content interface
Migrate the console enums into netsurf/console.h and add
support so that contents can raise a message to log to
the console.

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-05-05 22:17:10 +01:00
Daniel Silverstone
3021142aad Support content_exec for content_html
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-05-05 16:00:03 +01:00
Vincent Sanders
d566debc48 change back to unsigned long to avoid warning on gnueabihf platforms 2019-05-04 23:11:14 +01:00
Daniel Silverstone
ed829a4772 JS: Attribute external JS to the URI it came from in backtraces
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-05-04 17:32:17 +01:00
Daniel Silverstone
9769e8f2c0 Clean up async/defer JS contents during parent finalisation
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-05-04 16:42:47 +01:00
Michael Drake
a03b4a3c14 CSS: Update for change to libcss append sheet API.
When appending stylesheets to the selection context, it now
takes the media query string associated with the sheet, rather
than the type bitfield.

TODO:

We need to pass all the sheets in, with their full media
query string, rather than filtering it ourselves and setting
the ones we pass in to "screen".

Signed-off-by: Michael Drake <michael.drake@codethink.co.uk>
2019-05-04 14:51:42 +01:00
Michael Drake
920d6fa23d CSS: Update for change to libcss select style API.
LibCSS now takes the client media spec, rather than just the
media type we're selecting for.

Signed-off-by: Michael Drake <michael.drake@codethink.co.uk>
2019-05-04 14:51:42 +01:00
Daniel Silverstone
19b45fb494 Support script insertion after conversion has begun
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2019-05-04 12:18:21 +01:00
Vincent Sanders
826474a1a3 use memcpy instead of strcpy to make the dom string copy intention explicit 2019-03-04 17:32:41 +00:00
Vincent Sanders
61891ada50 validate the form button element type attribute as per spec
https://html.spec.whatwg.org/multipage/form-elements.html#attr-button-type
says if the type attribute is anything but "reset" or "button" it
 is of "submit" type. The previous logic was incorrect and only used
 the button if its type was explicitly submit and noting else.
2019-02-22 21:11:34 +00:00
Michael Drake
e1a3e0427f HTML handler: Reformat passing viewport height when triggered by object.
Previously we correctly used the viewport width, but we were using the
document height instead of viewport height when an HTML child content
triggered a reformat of the parent HTML document.
2019-02-17 09:06:58 +00:00
Michael Drake
776b0242a6 Layout: Add debug logging to show viewport dimensions passed into layout.
Signed-off-by: Michael Drake <michael.drake@codethink.co.uk>
2019-02-17 09:06:58 +00:00
Michael Drake
0a3a40c23e Box construction: Don't handle IMAGE specially. 2018-12-13 12:31:38 +00:00
Vincent Sanders
e275b3175b check dom call return and improve handling of missing form type 2018-10-09 17:00:22 +01:00
Vincent Sanders
7a61c95724 rewrite form_successful_controls_dom as form_dom_to_data
Trying to reason about error propagation and resource leakage within
 the form submission code was impossible because of the
 form_successful_controls_dom function.

This function was over six hundred lines long, had twenty six top
 level local variables and six levels of indent in places.

This commit splits it out into thirteen shorter and more obvious
 functions. The resulting operation is identical except errors are
 properly propagated (all failures were reported as out of memory)
 and resource management can be reasoned about.

The compiler appears to inline the entirety of the code from
 form_submit() down excepting a handful of leaf functions. This
 results in similar code output size as previous implementation.

The new implementation has a greater number of variables passed to sub
 functions than desirable because multiple character sets are required
 to encode names and values in the multipart data list. However as
 noted the compiler effectively inlines all these functions so this
 does not actually become a major problem.
2018-09-29 16:59:34 +01:00
Vincent Sanders
a268252629 gcc on openbsd is unable to reason about res variable usage and generates bogus warning 2018-09-26 21:32:35 +01:00
Vincent Sanders
5c96acd6f1 fix url encoding to be compatible with nsurl API changes.
As part of this fix the form submission error handling and
 reporting has been improved.
2018-09-26 17:21:48 +01:00
Vincent Sanders
e4537cb37e allow comments to supress implicit fallthrough warnings 2018-09-07 12:53:51 +01:00
Michael Drake
9d8f37ca10 HTML: Don't try to finish an HTML document's conversion twice. 2018-08-27 20:47:37 +01:00
Vincent Sanders
eee67a65e8 remove warning by replacing sprintf snprintf 2018-08-24 11:49:56 +01:00
Vincent Sanders
5dd5d5da4b remove warning by replacing strcpy with safer strncpy 2018-08-24 10:26:26 +01:00
Vincent Sanders
5f1defd4a7 fix size_t format specifiers 2018-08-18 23:44:15 +01:00
Michael Drake
62e3ee6c7e Layout: Use box helper for first child checks. 2018-06-29 15:03:47 +01:00