summaryrefslogtreecommitdiff
path: root/content/handlers/html
diff options
context:
space:
mode:
Diffstat (limited to 'content/handlers/html')
-rw-r--r--content/handlers/html/html_script.c13
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);