summaryrefslogtreecommitdiff
path: root/css
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2011-10-03 15:56:47 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2011-10-03 15:56:47 +0000
commit36eff6da2bfe5b183c2b4876bb2afe9dedec9b39 (patch)
tree6cc96c71499d22745947113db5c6fc118c286d1f /css
parenta595d7c4bbe44f7de6c565a4fbbdcff735f0ce99 (diff)
downloadnetsurf-36eff6da2bfe5b183c2b4876bb2afe9dedec9b39.tar.gz
netsurf-36eff6da2bfe5b183c2b4876bb2afe9dedec9b39.tar.bz2
Port more internals to nsurl. Front ends may need updating.
svn path=/trunk/netsurf/; revision=12926
Diffstat (limited to 'css')
-rw-r--r--css/css.c31
-rw-r--r--css/internal.c35
-rw-r--r--css/select.c3
-rw-r--r--css/select.h3
4 files changed, 49 insertions, 23 deletions
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 <libxml/tree.h>
#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,