summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorJohn-Mark Bell <jmb@netsurf-browser.org>2013-02-27 03:55:48 +0000
committerJohn-Mark Bell <jmb@netsurf-browser.org>2013-02-27 03:55:48 +0000
commit6b9f7c3094248c4b0594040bf93b7a5a071d8d6e (patch)
tree3f4afb3791c98c16527bae3b0dfe2f9a64de19aa /render
parentcd3e073354dacbd18baf0039b71b2739bd266357 (diff)
downloadnetsurf-6b9f7c3094248c4b0594040bf93b7a5a071d8d6e.tar.gz
netsurf-6b9f7c3094248c4b0594040bf93b7a5a071d8d6e.tar.bz2
Use correct base URL for inline stylesheets
Diffstat (limited to 'render')
-rw-r--r--render/html_css.c2
-rw-r--r--render/html_css_fetcher.c20
-rw-r--r--render/html_internal.h6
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 */