From 36eff6da2bfe5b183c2b4876bb2afe9dedec9b39 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Mon, 3 Oct 2011 15:56:47 +0000 Subject: Port more internals to nsurl. Front ends may need updating. svn path=/trunk/netsurf/; revision=12926 --- css/css.c | 31 ++++++++++++++++++++++++++----- css/internal.c | 35 +++++++++++++++++++---------------- css/select.c | 3 ++- css/select.h | 3 ++- 4 files changed, 49 insertions(+), 23 deletions(-) (limited to 'css') diff --git a/css/css.c b/css/css.c index 1f61524f1..5566cbca0 100644 --- a/css/css.c +++ b/css/css.c @@ -173,7 +173,7 @@ nserror nscss_create(const content_handler *handler, } error = nscss_create_css_data(&result->data, - content__get_url(&result->base), + nsurl_access(content__get_url(&result->base)), charset, result->base.quirks, nscss_content_done, result); if (error != NSERROR_OK) { @@ -401,7 +401,7 @@ nserror nscss_clone(const struct content *old, struct content **newc) /* Simply replay create/process/convert */ error = nscss_create_css_data(&new_css->data, - content__get_url(&new_css->base), + nsurl_access(content__get_url(&new_css->base)), old_css->data.charset, new_css->base.quirks, nscss_content_done, new_css); @@ -550,6 +550,9 @@ css_error nscss_handle_import(void *pw, css_stylesheet *parent, css_error error; nserror nerror; + nsurl *ns_url; + nsurl *ns_ref; + assert(parent == c->sheet); error = css_stylesheet_get_url(c->sheet, &referer); @@ -584,15 +587,30 @@ css_error nscss_handle_import(void *pw, css_stylesheet *parent, /* Create content */ c->imports[c->import_count].media = media; + /* TODO: Why aren't we getting a relative url part, to join? */ + nerror = nsurl_create(lwc_string_data(url), &ns_url); + if (nerror != NSERROR_OK) { + free(ctx); + return CSS_NOMEM; + } + + /* TODO: Constructing nsurl for referer here is silly, avoid */ + nerror = nsurl_create(referer, &ns_ref); + if (nerror != NSERROR_OK) { + nsurl_unref(ns_url); + free(ctx); + return CSS_NOMEM; + } + /* Avoid importing ourself */ - if (strcmp(lwc_string_data(url), referer) == 0) { + if (nsurl_compare(ns_url, ns_ref, NSURL_COMPLETE)) { c->imports[c->import_count].c = NULL; /* No longer require context as we're not fetching anything */ free(ctx); ctx = NULL; } else { - nerror = hlcache_handle_retrieve(lwc_string_data(url), - 0, referer, NULL, nscss_import, ctx, + nerror = hlcache_handle_retrieve(ns_url, + 0, ns_ref, NULL, nscss_import, ctx, &child, accept, &c->imports[c->import_count].c); if (nerror != NSERROR_OK) { @@ -601,6 +619,9 @@ css_error nscss_handle_import(void *pw, css_stylesheet *parent, } } + nsurl_unref(ns_url); + nsurl_unref(ns_ref); + #ifdef NSCSS_IMPORT_TRACE LOG(("Import %d '%s' -> (handle: %p ctx: %p)", c->import_count, lwc_string_data(url), diff --git a/css/internal.c b/css/internal.c index 4c80e639e..bf9e1844f 100644 --- a/css/internal.c +++ b/css/internal.c @@ -20,7 +20,7 @@ #include "css/internal.h" -#include "utils/url.h" +#include "utils/nsurl.h" /** * URL resolution callback for libcss @@ -37,33 +37,36 @@ css_error nscss_resolve_url(void *pw, const char *base, lwc_string *rel, lwc_string **abs) { lwc_error lerror; - char *abs_url, *norm_url; - url_func_result res; + nserror error; + nsurl *nsbase; + nsurl *nsabs; - /* Resolve URI */ - res = url_join(lwc_string_data(rel), base, &abs_url); - if (res != URL_FUNC_OK) { - return res == URL_FUNC_NOMEM ? CSS_NOMEM : CSS_INVALID; + /* Create nsurl from base */ + /* TODO: avoid this */ + error = nsurl_create(base, &nsbase); + if (error != NSERROR_OK) { + return error == NSERROR_NOMEM ? CSS_NOMEM : CSS_INVALID; } - /* Normalise it */ - res = url_normalize(abs_url, &norm_url); - if (res != URL_FUNC_OK) { - free(abs_url); - return res == URL_FUNC_NOMEM ? CSS_NOMEM : CSS_INVALID; + /* Resolve URI */ + error = nsurl_join(nsbase, lwc_string_data(rel), &nsabs); + if (error != NSERROR_OK) { + nsurl_unref(nsbase); + return error == NSERROR_NOMEM ? CSS_NOMEM : CSS_INVALID; } - free(abs_url); + nsurl_unref(nsbase); /* Intern it */ - lerror = lwc_intern_string(norm_url, strlen(norm_url), abs); + lerror = lwc_intern_string(nsurl_access(nsabs), + strlen(nsurl_access(nsabs)), abs); if (lerror != lwc_error_ok) { *abs = NULL; - free(norm_url); + nsurl_unref(nsabs); return lerror == lwc_error_oom ? CSS_NOMEM : CSS_INVALID; } - free(norm_url); + nsurl_unref(nsabs); return CSS_OK; } diff --git a/css/select.c b/css/select.c index cd3c7ec87..1ec675e1f 100644 --- a/css/select.c +++ b/css/select.c @@ -1639,7 +1639,8 @@ css_error node_presentational_hint(void *pw, void *node, return CSS_PROPERTY_NOT_SET; - res = url_join((const char *) bg, ctx->base_url, &url); + res = url_join((const char *) bg, nsurl_access(ctx->base_url), + &url); xmlFree(bg); diff --git a/css/select.h b/css/select.h index c90e7f7a4..237af5ffb 100644 --- a/css/select.h +++ b/css/select.h @@ -24,6 +24,7 @@ #include #include "css/css.h" +#include "utils/nsurl.h" struct content; @@ -34,7 +35,7 @@ typedef struct nscss_select_ctx { css_select_ctx *ctx; bool quirks; - const char *base_url; + nsurl *base_url; } nscss_select_ctx; css_stylesheet *nscss_create_inline_style(const uint8_t *data, size_t len, -- cgit v1.2.3