From 4cb38c4704e4ed11cf10fc046b32ef6ef5afa78f Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Sat, 25 Nov 2023 20:02:23 +0000 Subject: [PATCH] css: Add option to ignore author level CSS This adds a new config option, `author_level_css`. When it is disabled, NetSurf will ignore all CSS from the web page. In this case only the default CSS rules from the browser and user CSS rules will be applied. It is enabled by default. Tested by running: ./nsgtk3 --author_level_css=0 --- content/handlers/css/hints.c | 4 ++++ content/handlers/html/box_construct.c | 13 ++++++++----- content/handlers/html/css.c | 5 +++++ desktop/options.h | 3 +++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/content/handlers/css/hints.c b/content/handlers/css/hints.c index defeae10a..286befab9 100644 --- a/content/handlers/css/hints.c +++ b/content/handlers/css/hints.c @@ -1587,6 +1587,10 @@ static void css_hint_list( dom_exception err; dom_string *attr; + if (nsoption_bool(author_level_css) == false) { + return; + } + err = dom_element_get_attribute(node, corestring_dom_type, &attr); if (err == DOM_NO_ERR && attr != NULL) { const char *attr_str = dom_string_data(attr); diff --git a/content/handlers/html/box_construct.c b/content/handlers/html/box_construct.c index eeadb8453..8519c2b1d 100644 --- a/content/handlers/html/box_construct.c +++ b/content/handlers/html/box_construct.c @@ -249,16 +249,19 @@ box_get_style(html_content *c, const css_computed_style *root_style, dom_node *n) { - dom_string *s; - dom_exception err; + dom_string *s = NULL; css_stylesheet *inline_style = NULL; css_select_results *styles; nscss_select_ctx ctx; /* Firstly, construct inline stylesheet, if any */ - err = dom_element_get_attribute(n, corestring_dom_style, &s); - if (err != DOM_NO_ERR) - return NULL; + if (nsoption_bool(author_level_css)) { + dom_exception err; + err = dom_element_get_attribute(n, corestring_dom_style, &s); + if (err != DOM_NO_ERR) { + return NULL; + } + } if (s != NULL) { inline_style = nscss_create_inline_style( diff --git a/content/handlers/html/css.c b/content/handlers/html/css.c index be17ac852..69d54580c 100644 --- a/content/handlers/html/css.c +++ b/content/handlers/html/css.c @@ -683,6 +683,11 @@ html_css_new_selection_context(html_content *c, css_select_ctx **ret_select_ctx) origin = CSS_ORIGIN_USER; } + if (origin == CSS_ORIGIN_AUTHOR && + nsoption_bool(author_level_css) == false) { + continue; + } + if (hsheet->sheet != NULL) { sheet = nscss_get_stylesheet(hsheet->sheet); } diff --git a/desktop/options.h b/desktop/options.h index a12275ef7..b74fab829 100644 --- a/desktop/options.h +++ b/desktop/options.h @@ -123,6 +123,9 @@ NSOPTION_BOOL(animate_images, true) /** Whether to execute javascript */ NSOPTION_BOOL(enable_javascript, false) +/** Whether to allow Author level CSS. */ +NSOPTION_BOOL(author_level_css, true) + /** Maximum time (in seconds) to wait for a script to run */ NSOPTION_INTEGER(script_timeout, 10)