summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--content/fetchers/resource.c1
-rw-r--r--render/html.c29
-rw-r--r--render/html.h3
3 files changed, 30 insertions, 3 deletions
diff --git a/content/fetchers/resource.c b/content/fetchers/resource.c
index dc6fd8c72..1cd04f2dd 100644
--- a/content/fetchers/resource.c
+++ b/content/fetchers/resource.c
@@ -76,6 +76,7 @@ static const char *fetch_resource_paths[] = {
"default.css",
"internal.css",
"quirks.css",
+ "user.css",
"credits.html",
"licence.html",
"favicon.ico",
diff --git a/render/html.c b/render/html.c
index 64bf59437..679100cca 100644
--- a/render/html.c
+++ b/render/html.c
@@ -160,6 +160,7 @@ static lwc_string *html_charset;
static nsurl *html_default_stylesheet_url;
static nsurl *html_adblock_stylesheet_url;
static nsurl *html_quirks_stylesheet_url;
+static nsurl *html_user_stylesheet_url;
nserror html_init(void)
{
@@ -188,6 +189,11 @@ nserror html_init(void)
if (error != NSERROR_OK)
goto error;
+ error = nsurl_create("resource:user.css",
+ &html_user_stylesheet_url);
+ if (error != NSERROR_OK)
+ goto error;
+
for (i = 0; i < NOF_ELEMENTS(html_types); i++) {
error = content_factory_register_handler(html_types[i],
&html_content_handler);
@@ -205,6 +211,11 @@ error:
void html_fini(void)
{
+ if (html_user_stylesheet_url != NULL) {
+ nsurl_unref(html_user_stylesheet_url);
+ html_user_stylesheet_url = NULL;
+ }
+
if (html_quirks_stylesheet_url != NULL) {
nsurl_unref(html_quirks_stylesheet_url);
html_quirks_stylesheet_url = NULL;
@@ -665,8 +676,10 @@ void html_finish_conversion(html_content *c)
css_stylesheet *sheet;
css_origin origin = CSS_ORIGIN_AUTHOR;
- if (i < STYLESHEET_START)
+ if (i < STYLESHEET_USER)
origin = CSS_ORIGIN_UA;
+ if (i < STYLESHEET_START)
+ origin = CSS_ORIGIN_USER;
if (hsheet->type == HTML_STYLESHEET_EXTERNAL &&
hsheet->data.external != NULL) {
@@ -1153,7 +1166,8 @@ bool html_find_stylesheets(html_content *c, xmlNode *html)
/* stylesheet 0 is the base style sheet,
* stylesheet 1 is the quirks mode style sheet,
- * stylesheet 2 is the adblocking stylesheet */
+ * stylesheet 2 is the adblocking stylesheet,
+ * stylesheet 3 is the user stylesheet */
c->stylesheets = talloc_array(c, struct html_stylesheet,
STYLESHEET_START);
if (c->stylesheets == NULL)
@@ -1164,6 +1178,8 @@ bool html_find_stylesheets(html_content *c, xmlNode *html)
c->stylesheets[STYLESHEET_QUIRKS].data.external = NULL;
c->stylesheets[STYLESHEET_ADBLOCK].type = HTML_STYLESHEET_EXTERNAL;
c->stylesheets[STYLESHEET_ADBLOCK].data.external = NULL;
+ c->stylesheets[STYLESHEET_USER].type = HTML_STYLESHEET_EXTERNAL;
+ c->stylesheets[STYLESHEET_USER].data.external = NULL;
c->stylesheet_count = STYLESHEET_START;
c->base.active = 0;
@@ -1201,6 +1217,15 @@ bool html_find_stylesheets(html_content *c, xmlNode *html)
c->base.active++;
}
+ ns_error = hlcache_handle_retrieve(html_user_stylesheet_url, 0,
+ content_get_url(&c->base), NULL,
+ html_convert_css_callback, c, &child, accept,
+ &c->stylesheets[STYLESHEET_USER].data.external);
+ if (ns_error != NSERROR_OK)
+ goto no_memory;
+
+ c->base.active++;
+
node = html;
/* depth-first search the tree for link elements */
diff --git a/render/html.h b/render/html.h
index c8e146d90..7f057b44b 100644
--- a/render/html.h
+++ b/render/html.h
@@ -132,7 +132,8 @@ struct content_html_iframe {
#define STYLESHEET_BASE 0 /* base style sheet */
#define STYLESHEET_QUIRKS 1 /* quirks mode stylesheet */
#define STYLESHEET_ADBLOCK 2 /* adblocking stylesheet */
-#define STYLESHEET_START 3 /* start of document stylesheets */
+#define STYLESHEET_USER 3 /* user stylesheet */
+#define STYLESHEET_START 4 /* start of document stylesheets */
/** Render padding and margin box outlines in html_redraw(). */
extern bool html_redraw_debug;