diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2009-07-10 00:26:37 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2009-07-10 00:26:37 +0000 |
commit | 5feb7018c5228a22d370d070c1f7c3dad2c71e25 (patch) | |
tree | 9899af55ee95f4e48f2df822ce43deccdafb2829 /content/fetchcache.c | |
parent | 801ef751afd7b5adb7ef41335192638c8443c6f6 (diff) | |
download | netsurf-5feb7018c5228a22d370d070c1f7c3dad2c71e25.tar.gz netsurf-5feb7018c5228a22d370d070c1f7c3dad2c71e25.tar.bz2 |
Replace parent_url with a pointer to the parent content.
svn path=/trunk/netsurf/; revision=8428
Diffstat (limited to 'content/fetchcache.c')
-rw-r--r-- | content/fetchcache.c | 57 |
1 files changed, 10 insertions, 47 deletions
diff --git a/content/fetchcache.c b/content/fetchcache.c index a606be6d5..cb5cc9132 100644 --- a/content/fetchcache.c +++ b/content/fetchcache.c @@ -228,7 +228,7 @@ struct content * fetchcache(const char *url, * \param post_urlenc url encoded post data, or 0 if none * \param post_multipart multipart post data, or 0 if none * \param verifiable this transaction is verifiable - * \param parent_url URL of fetch which spawned this one, or 0 if none + * \param parent Content which spawned this one, or NULL if none * * Errors will be sent back through the callback. */ @@ -240,7 +240,7 @@ void fetchcache_go(struct content *content, const char *referer, int width, int height, char *post_urlenc, struct form_successful_control *post_multipart, - bool verifiable, const char *parent_url) + bool verifiable, struct content *parent) { char error_message[500]; union content_msg_data msg_data; @@ -348,7 +348,7 @@ void fetchcache_go(struct content *content, const char *referer, fetchcache_callback, content, content->no_error_pages, post_urlenc, post_multipart, verifiable, - parent_url, headers); + parent, headers); for (i = 0; headers[i]; i++) free(headers[i]); free(headers); @@ -884,9 +884,8 @@ void fetchcache_notmodified(struct content *c, const void *data) /* No cached content, so unconditionally refetch */ struct content_user *u; const char *ref = fetch_get_referer(c->fetch); - const char *parent = fetch_get_parent_url(c->fetch); + struct content *parent = fetch_get_parent(c->fetch); char *referer = NULL; - char *parent_url = NULL; if (ref) { referer = strdup(ref); @@ -900,19 +899,6 @@ void fetchcache_notmodified(struct content *c, const void *data) } } - if (parent) { - parent_url = strdup(parent); - if (!parent_url) { - c->type = CONTENT_UNKNOWN; - c->status = CONTENT_STATUS_ERROR; - msg_data.error = messages_get("NoMemory"); - content_broadcast(c, CONTENT_MSG_ERROR, - msg_data); - free(referer); - return; - } - } - fetch_abort(c->fetch); c->fetch = 0; @@ -923,10 +909,9 @@ void fetchcache_notmodified(struct content *c, const void *data) for (u = c->user_list->next; u; u = u->next) { fetchcache_go(c, referer, u->callback, u->p1, u->p2, c->width, c->height, 0, 0, - false, parent_url); + false, parent); } - free(parent_url); free(referer); } } @@ -939,11 +924,11 @@ void fetchcache_redirect(struct content *c, const void *data, unsigned long size) { char *url, *url1; - char *referer, *parent_url; + char *referer; char *scheme; long http_code; const char *ref; - const char *parent; + struct content *parent; bool can_fetch; bool parent_was_verifiable; union content_msg_data msg_data; @@ -956,7 +941,7 @@ void fetchcache_redirect(struct content *c, const void *data, /* Extract fetch details */ http_code = fetch_http_code(c->fetch); ref = fetch_get_referer(c->fetch); - parent = fetch_get_parent_url(c->fetch); + parent = fetch_get_parent(c->fetch); parent_was_verifiable = fetch_get_verifiable(c->fetch); /* Ensure a redirect happened */ @@ -964,10 +949,8 @@ void fetchcache_redirect(struct content *c, const void *data, /* 304 is handled by fetch_notmodified() */ assert(http_code != 304); - /* Clone referer and parent url - * originals are destroyed in fetch_abort() */ + /* Clone referer -- original is destroyed in fetch_abort() */ referer = ref ? strdup(ref) : NULL; - parent_url = parent ? strdup(parent) : NULL; /* set the status to ERROR so that this content is * destroyed in content_clean() */ @@ -986,18 +969,6 @@ void fetchcache_redirect(struct content *c, const void *data, return; } - /* Ensure parent url cloning succeeded - * _must_ be after content invalidation */ - if (parent && !parent_url) { - LOG(("Failed cloning parent url")); - - msg_data.error = messages_get("BadRedirect"); - content_broadcast(c, CONTENT_MSG_ERROR, msg_data); - - free(referer); - return; - } - /** \todo 300, 305, 307 * More specifically: * + 300 needs to serve up the fetch body to the user @@ -1018,7 +989,6 @@ void fetchcache_redirect(struct content *c, const void *data, msg_data.error = messages_get("BadRedirect"); content_broadcast(c, CONTENT_MSG_ERROR, msg_data); - free(parent_url); free(referer); return; } @@ -1031,7 +1001,6 @@ void fetchcache_redirect(struct content *c, const void *data, msg_data.error = messages_get("BadRedirect"); content_broadcast(c, CONTENT_MSG_ERROR, msg_data); - free(parent_url); free(referer); return; } @@ -1045,7 +1014,6 @@ void fetchcache_redirect(struct content *c, const void *data, msg_data.error = messages_get("BadRedirect"); content_broadcast(c, CONTENT_MSG_ERROR, msg_data); - free(parent_url); free(referer); return; } @@ -1058,7 +1026,6 @@ void fetchcache_redirect(struct content *c, const void *data, content_broadcast(c, CONTENT_MSG_ERROR, msg_data); free(url1); - free(parent_url); free(referer); return; } @@ -1073,7 +1040,6 @@ void fetchcache_redirect(struct content *c, const void *data, content_broadcast(c, CONTENT_MSG_ERROR, msg_data); free(url); - free(parent_url); free(referer); return; } @@ -1084,7 +1050,6 @@ void fetchcache_redirect(struct content *c, const void *data, free(scheme); free(url); - free(parent_url); free(referer); return; } @@ -1143,7 +1108,6 @@ void fetchcache_redirect(struct content *c, const void *data, msg_data); free(url); - free(parent_url); free(referer); return; } @@ -1160,13 +1124,12 @@ void fetchcache_redirect(struct content *c, const void *data, /* Start fetching the replacement content */ fetchcache_go(replacement, referer, callback, p1, p2, c->width, c->height, NULL, NULL, - parent_was_verifiable, parent_url); + parent_was_verifiable, parent); } } /* Clean up */ free(url); - free(parent_url); free(referer); } |