diff options
author | John-Mark Bell <jmb@netsurf-browser.org> | 2013-02-27 03:55:48 +0000 |
---|---|---|
committer | John-Mark Bell <jmb@netsurf-browser.org> | 2013-02-27 03:55:48 +0000 |
commit | 6b9f7c3094248c4b0594040bf93b7a5a071d8d6e (patch) | |
tree | 3f4afb3791c98c16527bae3b0dfe2f9a64de19aa /render | |
parent | cd3e073354dacbd18baf0039b71b2739bd266357 (diff) | |
download | netsurf-6b9f7c3094248c4b0594040bf93b7a5a071d8d6e.tar.gz netsurf-6b9f7c3094248c4b0594040bf93b7a5a071d8d6e.tar.bz2 |
Use correct base URL for inline stylesheets
Diffstat (limited to 'render')
-rw-r--r-- | render/html_css.c | 2 | ||||
-rw-r--r-- | render/html_css_fetcher.c | 20 | ||||
-rw-r--r-- | render/html_internal.h | 6 |
3 files changed, 23 insertions, 5 deletions
diff --git a/render/html_css.c b/render/html_css.c index b98632e61..3eabec419 100644 --- a/render/html_css.c +++ b/render/html_css.c @@ -296,7 +296,7 @@ html_stylesheet_from_domnode(html_content *c, return NSERROR_OK; } - error = html_css_fetcher_add_item(style, &key); + error = html_css_fetcher_add_item(style, c->base_url, &key); if (error != NSERROR_OK) { dom_string_unref(style); return error; diff --git a/render/html_css_fetcher.c b/render/html_css_fetcher.c index 31e2cba13..9bd3b21a6 100644 --- a/render/html_css_fetcher.c +++ b/render/html_css_fetcher.c @@ -37,6 +37,7 @@ typedef struct html_css_fetcher_item { uint32_t key; dom_string *data; + nsurl *base_url; struct html_css_fetcher_item *r_next, *r_prev; } html_css_fetcher_item; @@ -142,6 +143,7 @@ static void html_css_fetcher_free(void *ctx) nsurl_unref(c->url); if (c->item != NULL) { + nsurl_unref(c->item->base_url); dom_string_unref(c->item->data); RING_REMOVE(items, c->item); free(c->item); @@ -195,7 +197,7 @@ static void html_css_fetcher_poll(lwc_string *scheme) /* Nothing to do */ assert(c->locked == false); } else if (c->item != NULL) { - char header[64]; + char header[4096]; fetch_set_http_code(c->parent_fetch, 200); @@ -222,6 +224,18 @@ static void html_css_fetcher_poll(lwc_string *scheme) } if (c->aborted == false) { + snprintf(header, sizeof header, + "X-NS-Base: %.*s", + (int) nsurl_length(c->item->base_url), + nsurl_access(c->item->base_url)); + msg.type = FETCH_HEADER; + msg.data.header_or_data.buf = + (const uint8_t *) header; + msg.data.header_or_data.len = strlen(header); + html_css_fetcher_send_callback(&msg, c); + } + + if (c->aborted == false) { msg.type = FETCH_DATA; msg.data.header_or_data.buf = (const uint8_t *) @@ -280,7 +294,8 @@ void html_css_fetcher_register(void) html_css_fetcher_finalise); } -nserror html_css_fetcher_add_item(dom_string *data, uint32_t *key) +nserror html_css_fetcher_add_item(dom_string *data, nsurl *base_url, + uint32_t *key) { html_css_fetcher_item *item = malloc(sizeof(*item)); @@ -290,6 +305,7 @@ nserror html_css_fetcher_add_item(dom_string *data, uint32_t *key) *key = item->key = current_key++; item->data = dom_string_ref(data); + item->base_url = nsurl_ref(base_url); RING_INSERT(items, item); diff --git a/render/html_internal.h b/render/html_internal.h index f92948b0d..90f014307 100644 --- a/render/html_internal.h +++ b/render/html_internal.h @@ -268,11 +268,13 @@ nserror html_css_free_stylesheets(html_content *html); bool html_css_process_link(html_content *htmlc, dom_node *node); bool html_css_update_style(html_content *c, dom_node *style); -nserror html_css_new_selection_context(html_content *c, css_select_ctx **ret_select_ctx); +nserror html_css_new_selection_context(html_content *c, + css_select_ctx **ret_select_ctx); /* in render/html_css_fetcher.c */ void html_css_fetcher_register(void); -nserror html_css_fetcher_add_item(dom_string *data, uint32_t *key); +nserror html_css_fetcher_add_item(dom_string *data, nsurl *base_url, + uint32_t *key); /* in render/html_object.c */ |