summaryrefslogtreecommitdiff
path: root/content
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2018-08-27 20:47:37 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2018-08-27 20:47:37 +0100
commit9d8f37ca10c35fea81caa08369c236722ebff9d5 (patch)
treedb304feb704bb155f23651c63991f24267009637 /content
parentd54e0461adafd79ca5d56e57e7816e2b9b56878c (diff)
downloadnetsurf-9d8f37ca10c35fea81caa08369c236722ebff9d5.tar.gz
netsurf-9d8f37ca10c35fea81caa08369c236722ebff9d5.tar.bz2
HTML: Don't try to finish an HTML document's conversion twice.
Diffstat (limited to 'content')
-rw-r--r--content/handlers/html/html.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/content/handlers/html/html.c b/content/handlers/html/html.c
index f721b98ab..62f625f6b 100644
--- a/content/handlers/html/html.c
+++ b/content/handlers/html/html.c
@@ -585,6 +585,22 @@ void html_finish_conversion(html_content *htmlc)
return;
}
+ /* If we already have a selection context, then we have already
+ * "finished" conversion. We can get here twice if e.g. some JS
+ * adds a new stylesheet, and the stylesheet gets added after
+ * the HTML content is initially finished.
+ *
+ * If we didn't do this, the HTML content would try to rebuild the
+ * box tree for the html content when this new stylesheet is ready.
+ * NetSurf has no concept of dynamically changing documents, so this
+ * would break badly.
+ */
+ if (htmlc->select_ctx != NULL) {
+ NSLOG(netsurf, INFO,
+ "Ignoring style change: NS layout is static.");
+ return;
+ }
+
/* create new css selection context */
error = html_css_new_selection_context(htmlc, &htmlc->select_ctx);
if (error != NSERROR_OK) {