Ensure constant javascript_enabled for HTML contents.

Now we take the value of the javascript_enabled option when the
content is created.  We then use the content's script_enabled
boolean everywhere else.

This prevents us getting inconsistent values for javascript_enabled
if a user toggles the setting while a page is loading.

It was read frequently during box construction, and also the
parser's script enabled setting could change where we handled
a change of encoding.

Now we only care about the setting of the javascript_enabled
option at time of html_content creation.
This commit is contained in:
Michael Drake 2016-01-21 14:11:36 +00:00
parent 3dcf7d80a1
commit 594012ef52
3 changed files with 8 additions and 4 deletions

View File

@ -1627,7 +1627,7 @@ bool box_image(BOX_SPECIAL_PARAMS)
bool box_noscript(BOX_SPECIAL_PARAMS) bool box_noscript(BOX_SPECIAL_PARAMS)
{ {
/* If scripting is enabled, do not display the contents of noscript */ /* If scripting is enabled, do not display the contents of noscript */
if (nsoption_bool(enable_javascript)) if (content->enable_scripting)
*convert_children = false; *convert_children = false;
return true; return true;
@ -3025,7 +3025,7 @@ bool box_extract_link(const html_content *content,
} }
s[j] = 0; s[j] = 0;
if (nsoption_bool(enable_javascript) == false) { if (content->enable_scripting == false) {
/* extract first quoted string out of "javascript:" link */ /* extract first quoted string out of "javascript:" link */
if (strncmp(s, "javascript:", 11) == 0) { if (strncmp(s, "javascript:", 11) == 0) {
apos0 = strchr(s, '\''); apos0 = strchr(s, '\'');

View File

@ -850,6 +850,7 @@ html_create_html_data(html_content *c, const http_parameter *params)
c->scripts = NULL; c->scripts = NULL;
c->jscontext = NULL; c->jscontext = NULL;
c->enable_scripting = nsoption_bool(enable_javascript);
c->base.active = 1; /* The html content itself is active */ c->base.active = 1; /* The html content itself is active */
if (lwc_intern_string("*", SLEN("*"), &c->universal) != lwc_error_ok) { if (lwc_intern_string("*", SLEN("*"), &c->universal) != lwc_error_ok) {
@ -876,7 +877,7 @@ html_create_html_data(html_content *c, const http_parameter *params)
/* Create the parser binding */ /* Create the parser binding */
parse_params.enc = c->encoding; parse_params.enc = c->encoding;
parse_params.fix_enc = true; parse_params.fix_enc = true;
parse_params.enable_script = nsoption_bool(enable_javascript); parse_params.enable_script = c->enable_scripting;
parse_params.msg = NULL; parse_params.msg = NULL;
parse_params.script = html_process_script; parse_params.script = html_process_script;
parse_params.ctx = c; parse_params.ctx = c;
@ -1019,7 +1020,7 @@ html_process_encoding_change(struct content *c,
parse_params.enc = html->encoding; parse_params.enc = html->encoding;
parse_params.fix_enc = true; parse_params.fix_enc = true;
parse_params.enable_script = nsoption_bool(enable_javascript); parse_params.enable_script = html->enable_scripting;
parse_params.msg = NULL; parse_params.msg = NULL;
parse_params.script = html_process_script; parse_params.script = html_process_script;
parse_params.ctx = html; parse_params.ctx = html;

View File

@ -97,6 +97,9 @@ typedef struct html_content {
/** Whether a layout (reflow) is in progress */ /** Whether a layout (reflow) is in progress */
bool reflowing; bool reflowing;
/** Whether scripts are enabled for this content */
bool enable_scripting;
/* Title element node */ /* Title element node */
dom_node *title; dom_node *title;