Author: jmb
Date: Sun Nov 27 08:14:36 2011
New Revision: 13182
URL:
http://source.netsurf-browser.org?rev=13182&view=rev
Log:
return;
Fix bug #3442642: allow scheme-specific fetchers to have a say in whether an URL can be
fetched.
Modified:
trunk/netsurf/beos/beos_fetch_rsrc.cpp
trunk/netsurf/content/fetch.c
trunk/netsurf/content/fetch.h
trunk/netsurf/content/fetchers/about.c
trunk/netsurf/content/fetchers/curl.c
trunk/netsurf/content/fetchers/data.c
trunk/netsurf/content/fetchers/file.c
trunk/netsurf/content/fetchers/resource.c
Modified: trunk/netsurf/beos/beos_fetch_rsrc.cpp
URL:
http://source.netsurf-browser.org/trunk/netsurf/beos/beos_fetch_rsrc.cpp?...
==============================================================================
--- trunk/netsurf/beos/beos_fetch_rsrc.cpp (original)
+++ trunk/netsurf/beos/beos_fetch_rsrc.cpp Sun Nov 27 08:14:36 2011
@@ -78,6 +78,11 @@
LOG(("fetch_rsrc_finalise called for %s", scheme));
}
+static bool fetch_rsrc_can_fetch(const nsurl *url)
+{
+ return true;
+}
+
static void *fetch_rsrc_setup(struct fetch *parent_fetch, const char *url,
bool only_2xx, const char *post_urlenc,
const struct fetch_multipart_data *post_multipart,
@@ -340,6 +345,7 @@
}
fetch_add_fetcher("rsrc",
fetch_rsrc_initialise,
+ fetch_rsrc_can_fetch,
fetch_rsrc_setup,
fetch_rsrc_start,
fetch_rsrc_abort,
Modified: trunk/netsurf/content/fetch.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/content/fetch.c?rev=13182...
==============================================================================
--- trunk/netsurf/content/fetch.c (original)
+++ trunk/netsurf/content/fetch.c Sun Nov 27 08:14:36 2011
@@ -60,6 +60,7 @@
/** Information about a fetcher for a given scheme. */
typedef struct scheme_fetcher_s {
lwc_string *scheme_name; /**< The scheme. */
+ fetcher_can_fetch can_fetch; /**< Ensure an URL can be fetched. */
fetcher_setup_fetch setup_fetch; /**< Set up a fetch. */
fetcher_start_fetch start_fetch; /**< Start a fetch. */
fetcher_abort_fetch abort_fetch; /**< Abort a fetch. */
@@ -157,6 +158,7 @@
bool fetch_add_fetcher(lwc_string *scheme,
fetcher_initialise initialiser,
+ fetcher_can_fetch can_fetch,
fetcher_setup_fetch setup_fetch,
fetcher_start_fetch start_fetch,
fetcher_abort_fetch abort_fetch,
@@ -174,6 +176,7 @@
}
new_fetcher->scheme_name = scheme;
new_fetcher->refcount = 0;
+ new_fetcher->can_fetch = can_fetch;
new_fetcher->setup_fetch = setup_fetch;
new_fetcher->start_fetch = start_fetch;
new_fetcher->abort_fetch = abort_fetch;
@@ -540,16 +543,15 @@
while (fetcher != NULL) {
lwc_string_isequal(fetcher->scheme_name, scheme, &match);
- if (match == true) {
- lwc_string_unref(scheme);
- return true;
- }
+ if (match == true)
+ break;
+
fetcher = fetcher->next_fetcher;
}
lwc_string_unref(scheme);
- return false;
+ return fetcher == NULL ? false : fetcher->can_fetch(url);
}
Modified: trunk/netsurf/content/fetch.h
URL:
http://source.netsurf-browser.org/trunk/netsurf/content/fetch.h?rev=13182...
==============================================================================
--- trunk/netsurf/content/fetch.h (original)
+++ trunk/netsurf/content/fetch.h Sun Nov 27 08:14:36 2011
@@ -124,6 +124,7 @@
/* API for fetchers themselves */
typedef bool (*fetcher_initialise)(lwc_string *);
+typedef bool (*fetcher_can_fetch)(const nsurl *);
typedef void* (*fetcher_setup_fetch)(struct fetch *, nsurl *,
bool, const char *,
const struct fetch_multipart_data *,
@@ -138,6 +139,7 @@
*
* \param scheme scheme fetcher is for (caller relinquishes ownership)
* \param initialiser fetcher initialiser
+ * \param can_fetch fetcher can fetch function
* \param setup_fetch fetcher fetch setup function
* \param start_fetch fetcher fetch start function
* \param abort_fetch fetcher fetch abort function
@@ -148,6 +150,7 @@
*/
bool fetch_add_fetcher(lwc_string *scheme,
fetcher_initialise initialiser,
+ fetcher_can_fetch can_fetch,
fetcher_setup_fetch setup_fetch,
fetcher_start_fetch start_fetch,
fetcher_abort_fetch abort_fetch,
Modified: trunk/netsurf/content/fetchers/about.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/content/fetchers/about.c?...
==============================================================================
--- trunk/netsurf/content/fetchers/about.c (original)
+++ trunk/netsurf/content/fetchers/about.c Sun Nov 27 08:14:36 2011
@@ -669,6 +669,11 @@
}
}
+static bool fetch_about_can_fetch(const nsurl *url)
+{
+ return true;
+}
+
/** callback to set up a about fetch context. */
static void *
fetch_about_setup(struct fetch *fetchh,
@@ -792,6 +797,7 @@
fetch_add_fetcher(scheme,
fetch_about_initialise,
+ fetch_about_can_fetch,
fetch_about_setup,
fetch_about_start,
fetch_about_abort,
Modified: trunk/netsurf/content/fetchers/curl.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/content/fetchers/curl.c?r...
==============================================================================
--- trunk/netsurf/content/fetchers/curl.c (original)
+++ trunk/netsurf/content/fetchers/curl.c Sun Nov 27 08:14:36 2011
@@ -113,6 +113,7 @@
static bool fetch_curl_initialise(lwc_string *scheme);
static void fetch_curl_finalise(lwc_string *scheme);
+static bool fetch_curl_can_fetch(const nsurl *url);
static void * fetch_curl_setup(struct fetch *parent_fetch, nsurl *url,
bool only_2xx, const char *post_urlenc,
const struct fetch_multipart_data *post_multipart,
@@ -252,6 +253,7 @@
if (!fetch_add_fetcher(scheme,
fetch_curl_initialise,
+ fetch_curl_can_fetch,
fetch_curl_setup,
fetch_curl_start,
fetch_curl_abort,
@@ -318,6 +320,10 @@
}
}
+bool fetch_curl_can_fetch(const nsurl *url)
+{
+ return nsurl_enquire(url, NSURL_HOST);
+}
/**
* Start fetching data for the given URL.
Modified: trunk/netsurf/content/fetchers/data.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/content/fetchers/data.c?r...
==============================================================================
--- trunk/netsurf/content/fetchers/data.c (original)
+++ trunk/netsurf/content/fetchers/data.c Sun Nov 27 08:14:36 2011
@@ -73,6 +73,11 @@
{
LOG(("fetch_data_finalise called for %s", lwc_string_data(scheme)));
curl_easy_cleanup(curl);
+}
+
+static bool fetch_data_can_fetch(const nsurl *url)
+{
+ return true;
}
static void *fetch_data_setup(struct fetch *parent_fetch, nsurl *url,
@@ -330,6 +335,7 @@
fetch_add_fetcher(scheme,
fetch_data_initialise,
+ fetch_data_can_fetch,
fetch_data_setup,
fetch_data_start,
fetch_data_abort,
Modified: trunk/netsurf/content/fetchers/file.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/content/fetchers/file.c?r...
==============================================================================
--- trunk/netsurf/content/fetchers/file.c (original)
+++ trunk/netsurf/content/fetchers/file.c Sun Nov 27 08:14:36 2011
@@ -110,6 +110,11 @@
/** callback to initialise the file fetcher. */
static void fetch_file_finalise(lwc_string *scheme)
{
+}
+
+static bool fetch_file_can_fetch(const nsurl *url)
+{
+ return true;
}
/** callback to set up a file fetch context. */
@@ -645,6 +650,7 @@
fetch_add_fetcher(scheme,
fetch_file_initialise,
+ fetch_file_can_fetch,
fetch_file_setup,
fetch_file_start,
fetch_file_abort,
Modified: trunk/netsurf/content/fetchers/resource.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/content/fetchers/resource...
==============================================================================
--- trunk/netsurf/content/fetchers/resource.c (original)
+++ trunk/netsurf/content/fetchers/resource.c Sun Nov 27 08:14:36 2011
@@ -219,6 +219,11 @@
}
}
+static bool fetch_resource_can_fetch(const nsurl *url)
+{
+ return true;
+}
+
/** callback to set up a resource fetch context. */
static void *
fetch_resource_setup(struct fetch *fetchh,
@@ -350,6 +355,7 @@
fetch_add_fetcher(scheme,
fetch_resource_initialise,
+ fetch_resource_can_fetch,
fetch_resource_setup,
fetch_resource_start,
fetch_resource_abort,