diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2019-12-19 20:50:33 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2019-12-19 20:50:33 +0000 |
commit | eba05b0d389a83d09798099e8894e297c973ac6e (patch) | |
tree | d63710bcda3d008347c6746aac9b19d41f647991 | |
parent | 918b1d0fed158fdb48a61536ff7aec7495916298 (diff) | |
download | netsurf-eba05b0d389a83d09798099e8894e297c973ac6e.tar.gz netsurf-eba05b0d389a83d09798099e8894e297c973ac6e.tar.bz2 |
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>
-rw-r--r-- | content/handlers/html/html_script.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/content/handlers/html/html_script.c b/content/handlers/html/html_script.c index f4754fe8a..e11e47c56 100644 --- a/content/handlers/html/html_script.c +++ b/content/handlers/html/html_script.c @@ -284,6 +284,15 @@ convert_script_sync_cb(hlcache_handle *script, struct html_script *s; script_handler_t *script_handler; dom_hubbub_error err; + unsigned int active_sync_scripts = 0; + + /* Count sync scripts which have yet to complete (other than us) */ + for (i = 0, s = parent->scripts; i != parent->scripts_count; i++, s++) { + if (s->type == HTML_SCRIPT_SYNC && + s->data.handle != script && s->already_started == false) { + active_sync_scripts++; + } + } /* Find script */ for (i = 0, s = parent->scripts; i != parent->scripts_count; i++, s++) { @@ -314,7 +323,7 @@ convert_script_sync_cb(hlcache_handle *script, } /* continue parse */ - if (parent->parser != NULL) { + if (parent->parser != NULL && active_sync_scripts == 0) { err = dom_hubbub_parser_pause(parent->parser, false); if (err != DOM_HUBBUB_OK) { NSLOG(netsurf, INFO, "unpause returned 0x%x", err); @@ -338,7 +347,7 @@ convert_script_sync_cb(hlcache_handle *script, s->already_started = true; /* continue parse */ - if (parent->parser != NULL) { + if (parent->parser != NULL && active_sync_scripts == 0) { err = dom_hubbub_parser_pause(parent->parser, false); if (err != DOM_HUBBUB_OK) { NSLOG(netsurf, INFO, "unpause returned 0x%x", err); |