summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2019-08-05 20:56:07 +0100
committerDaniel Silverstone <dsilvers@digital-scurf.org>2019-08-05 20:56:07 +0100
commit170dc5d52419450edc440c054a94135c1cc1296a (patch)
tree0943167d6fa71716bd1cd8936b94cfd02fe10e5c /desktop
parentbfb1bb119241d85bb9b400881328496e12a39aed (diff)
downloadnetsurf-170dc5d52419450edc440c054a94135c1cc1296a.tar.gz
netsurf-170dc5d52419450edc440c054a94135c1cc1296a.tar.bz2
Excise the llcache query pathway.
In further preparation for the auth and cert queries being handled as special contents from `about:` this excises the query pathway from the llcache pretty much entirely. Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'desktop')
-rw-r--r--desktop/browser_private.h11
-rw-r--r--desktop/browser_window.c160
-rw-r--r--desktop/download.c9
-rw-r--r--desktop/netsurf.c53
-rw-r--r--desktop/searchweb.c20
-rw-r--r--desktop/sslcert_viewer.c7
-rw-r--r--desktop/sslcert_viewer.h5
-rw-r--r--desktop/treeview.c10
8 files changed, 128 insertions, 147 deletions
diff --git a/desktop/browser_private.h b/desktop/browser_private.h
index 7e2d7e76d..8838436fb 100644
--- a/desktop/browser_private.h
+++ b/desktop/browser_private.h
@@ -401,12 +401,9 @@ nserror browser_window_history_get_scroll(struct browser_window *bw,
*/
void browser_window_history_destroy(struct browser_window *bw);
-
-/** \todo QUERY - Remove this include */
-#include "content/llcache.h"
-/** \todo QUERY - Remove this import */
-nserror netsurf_llcache_query_handler(
- const llcache_query *query,
- void *pw, llcache_query_response cb, void *cbpw);
+/**
+ * Type for handling query responses short-term
+ */
+typedef nserror (*browser_window_query_callback)(bool proceed, void *pw);
#endif
diff --git a/desktop/browser_window.c b/desktop/browser_window.c
index 2adf8a9ca..debb4faf3 100644
--- a/desktop/browser_window.c
+++ b/desktop/browser_window.c
@@ -479,16 +479,6 @@ browser_window_favicon_callback(hlcache_handle *c,
}
break;
- case CONTENT_MSG_QUERY:
- /** \todo QUERY - Decide what is right here */
- /* For now, the only safe decision is to cancel the fetch */
- event->data.query_msg->cb(false, event->data.query_msg->cb_pw);
- break;
-
- case CONTENT_MSG_QUERY_FINISHED:
- /** \todo QUERY - Decide what is right here */
- break;
-
default:
break;
}
@@ -820,6 +810,110 @@ browser_window_content_done(struct browser_window *bw)
return NSERROR_OK;
}
+/* Cheeky import for now */
+nserror netsurf__handle_login(const char * realm, nsurl *url,
+ browser_window_query_callback cb, void *cbpw);
+
+/**
+ * Handle query responses from authentication or SSL requests
+ */
+static nserror
+browser_window__handle_query_response(bool proceed, void *pw)
+{
+ struct browser_window *bw = (struct browser_window *)pw;
+ nserror res = NSERROR_OK;
+
+ if (proceed) {
+ /* We want to restart the request, with the loading
+ * context
+ */
+ res = browser_window__navigate_internal(bw, &bw->loading_parameters);
+
+ if (res != NSERROR_OK) {
+ NSLOG(netsurf, WARNING, "Unable to navigate after query proceeds");
+ }
+ }
+
+ return res;
+}
+
+
+/**
+ * Handle errors during content fetch
+ */
+static nserror
+browser_window__handle_error(struct browser_window *bw,
+ hlcache_handle *c,
+ const hlcache_event *event)
+{
+ const char *message = event->data.errordata.errormsg;
+ nserror code = event->data.errordata.errorcode;
+ bool do_warning = true;
+ nserror res;
+ nsurl *url = hlcache_handle_get_url(c);
+
+ /* Unexpected OK? */
+ assert(code != NSERROR_OK);
+
+ switch (code) {
+ case NSERROR_BAD_AUTH:
+ do_warning = false;
+ break;
+ case NSERROR_BAD_CERTS:
+ do_warning = false;
+ break;
+ case NSERROR_BAD_REDIRECT:
+ /* The message is already filled out */
+ break;
+ case NSERROR_UNKNOWN:
+ message = messages_get_errorcode(code);
+ break;
+ default:
+ break;
+ }
+
+ if (do_warning) {
+ browser_window_set_status(bw, message);
+ /* Only warn the user about errors in top-level windows */
+ if (bw->browser_window_type == BROWSER_WINDOW_NORMAL) {
+ guit->misc->warning(message, NULL);
+ }
+ }
+
+ if (c == bw->loading_content) {
+ bw->loading_content = NULL;
+ } else if (c == bw->current_content) {
+ bw->current_content = NULL;
+ browser_window_remove_caret(bw, false);
+ }
+
+ hlcache_handle_release(c);
+
+ browser_window_stop_throbber(bw);
+
+ switch (code) {
+ case NSERROR_BAD_AUTH:
+ res = netsurf__handle_login(message, url,
+ browser_window__handle_query_response,
+ bw);
+ break;
+ case NSERROR_BAD_CERTS:
+ res = guit->misc->cert_verify(url,
+ bw->loading_ssl_info.certs,
+ bw->loading_ssl_info.num,
+ browser_window__handle_query_response,
+ bw);
+ if (res != NSERROR_OK) {
+ NSLOG(netsurf, DEBUG, "Unable to start GUI callback for SSL certs");
+ }
+ break;
+ default:
+ break;
+ }
+
+ return NSERROR_OK;
+}
+
/**
* Browser window content event callback handler.
@@ -885,30 +979,10 @@ browser_window_callback(hlcache_handle *c, const hlcache_event *event, void *pw)
res = browser_window_content_done(bw);
break;
- case CONTENT_MSG_ERROR: {
- const char *message = event->data.errordata.errormsg;
- if (event->data.errordata.errorcode != NSERROR_UNKNOWN) {
- message = messages_get_errorcode(event->data.errordata.errorcode);
- }
-
- browser_window_set_status(bw, message);
- /* Only warn the user about errors in top-level windows */
- if (bw->browser_window_type == BROWSER_WINDOW_NORMAL) {
- guit->misc->warning(message, NULL);
- }
-
- if (c == bw->loading_content) {
- bw->loading_content = NULL;
- } else if (c == bw->current_content) {
- bw->current_content = NULL;
- browser_window_remove_caret(bw, false);
- }
-
- hlcache_handle_release(c);
-
- browser_window_stop_throbber(bw);
+ case CONTENT_MSG_ERROR:
+ res = browser_window__handle_error(bw, c, event);
break;
- }
+
case CONTENT_MSG_REDIRECT:
if (urldb_add_url(event->data.redirect.from))
urldb_update_url_visit_data(event->data.redirect.from);
@@ -1152,26 +1226,6 @@ browser_window_callback(hlcache_handle *c, const hlcache_event *event, void *pw)
break;
- case CONTENT_MSG_QUERY: {
- /** \todo QUERY - Decide what is right here */
- /* For now, we directly invoke the known global handler for queries */
- llcache_query query = *(event->data.query_msg->query);
- if (query.type == LLCACHE_QUERY_SSL) {
- query.data.ssl.certs = &bw->loading_ssl_info.certs[0];
- query.data.ssl.num = bw->loading_ssl_info.num;
- }
-
- return netsurf_llcache_query_handler(
- &query,
- NULL,
- event->data.query_msg->cb,
- event->data.query_msg->cb_pw);
- break;
- }
- case CONTENT_MSG_QUERY_FINISHED:
- /** \todo QUERY - Decide what is right here */
- break;
-
default:
break;
}
diff --git a/desktop/download.c b/desktop/download.c
index ba5d9bd65..e17855aa1 100644
--- a/desktop/download.c
+++ b/desktop/download.c
@@ -227,7 +227,7 @@ static nserror download_callback(llcache_handle *handle,
case LLCACHE_EVENT_ERROR:
if (ctx->window != NULL)
- guit->download->error(ctx->window, event->data.msg);
+ guit->download->error(ctx->window, event->data.error.msg);
else
download_context_destroy(ctx);
@@ -238,13 +238,6 @@ static nserror download_callback(llcache_handle *handle,
case LLCACHE_EVENT_REDIRECT:
break;
- case LLCACHE_EVENT_QUERY:
- case LLCACHE_EVENT_QUERY_FINISHED:
- /* It's *POSSIBLE* we might have to handle these here
- * but how?
- */
- NSLOG(netsurf, DEBUG, "Encountered query related events during download handling");
- return NSERROR_NOT_IMPLEMENTED;
}
return error;
diff --git a/desktop/netsurf.c b/desktop/netsurf.c
index 041e98aa7..706ca7be0 100644
--- a/desktop/netsurf.c
+++ b/desktop/netsurf.c
@@ -194,7 +194,7 @@ struct auth_data {
char *realm;
nsurl *url;
- llcache_query_response cb;
+ browser_window_query_callback cb;
void *pw;
};
@@ -235,6 +235,9 @@ static nserror netsurf__handle_login_response(
return err;
}
+/* Cheeky */
+nserror netsurf__handle_login(const char * realm, nsurl *url,
+ browser_window_query_callback cb, void *cbpw);
/**
* Helper for getting front end to handle logins.
*
@@ -244,8 +247,8 @@ static nserror netsurf__handle_login_response(
* \param[in] cbpw Private data for continuation
* \return NSERROR_OK, or appropriate error code.
*/
-static nserror netsurf__handle_login(const llcache_query *query,
- void *pw, llcache_query_response cb, void *cbpw)
+nserror netsurf__handle_login(const char * realm, nsurl *url,
+ browser_window_query_callback cb, void *cbpw)
{
struct auth_data *ctx;
char *username;
@@ -253,19 +256,19 @@ static nserror netsurf__handle_login(const llcache_query *query,
nserror err;
NSLOG(llcache, INFO, "HTTP Auth for: %s: %s",
- query->data.auth.realm, nsurl_access(query->url));
+ realm, nsurl_access(url));
ctx = malloc(sizeof(*ctx));
if (ctx == NULL) {
return NSERROR_NOMEM;
}
- ctx->realm = strdup(query->data.auth.realm);
+ ctx->realm = strdup(realm);
if (ctx->realm == NULL) {
free(ctx);
return NSERROR_NOMEM;
}
- ctx->url = nsurl_ref(query->url);
+ ctx->url = nsurl_ref(url);
ctx->cb = cb;
ctx->pw = cbpw;
@@ -294,43 +297,6 @@ static nserror netsurf__handle_login(const llcache_query *query,
return NSERROR_OK;
}
-/**
- * Dispatch a low-level cache query to the frontend
- *
- * \todo QUERY - This should end up as part of browser_window_callback
- *
- * NOTE: Right now this is exported so that it can be invoked from the
- * browser window callback
- *
- * \param query Query descriptor
- * \param pw Private data
- * \param cb Continuation callback
- * \param cbpw Private data for continuation
- * \return NSERROR_OK
- */
-nserror netsurf_llcache_query_handler(const llcache_query *query,
- void *pw, llcache_query_response cb, void *cbpw)
-{
- nserror res = NSERROR_OK;
-
- switch (query->type) {
- case LLCACHE_QUERY_AUTH:
- res = netsurf__handle_login(query, pw, cb, cbpw);
- break;
-
- case LLCACHE_QUERY_REDIRECT:
- /** \todo Need redirect query dialog */
- /* For now, do nothing, as this query type isn't emitted yet */
- break;
-
- case LLCACHE_QUERY_SSL:
- res = guit->misc->cert_verify(query->url, query->data.ssl.certs,
- query->data.ssl.num, cb, cbpw);
- break;
- }
-
- return res;
-}
/* exported interface documented in netsurf/netsurf.h */
nserror netsurf_init(const char *store_path)
@@ -339,7 +305,6 @@ nserror netsurf_init(const char *store_path)
struct hlcache_parameters hlcache_parameters = {
.bg_clean_time = HL_CACHE_CLEAN_TIME,
.llcache = {
- .cb = netsurf_llcache_query_handler,
.minimum_lifetime = LLCACHE_STORE_MIN_LIFETIME,
.minimum_bandwidth = LLCACHE_STORE_MIN_BANDWIDTH,
.maximum_bandwidth = LLCACHE_STORE_MAX_BANDWIDTH,
diff --git a/desktop/searchweb.c b/desktop/searchweb.c
index de38ef191..91a8118ca 100644
--- a/desktop/searchweb.c
+++ b/desktop/searchweb.c
@@ -305,16 +305,6 @@ search_web_ico_callback(hlcache_handle *ico,
provider->ico_handle = NULL;
break;
- case CONTENT_MSG_QUERY:
- /** \todo QUERY - Decide what is right here */
- /* For now, the only safe decision is to cancel the fetch */
- event->data.query_msg->cb(false, event->data.query_msg->cb_pw);
- return NSERROR_OK;
-
- case CONTENT_MSG_QUERY_FINISHED:
- /** \todo QUERY - Decide what is right here */
- return NSERROR_OK;
-
default:
break;
}
@@ -473,16 +463,6 @@ default_ico_callback(hlcache_handle *ico,
ctx->default_ico_handle = NULL;
break;
- case CONTENT_MSG_QUERY:
- /** \todo QUERY - Decide what is right here */
- /* For now, the only safe decision is to cancel the fetch */
- event->data.query_msg->cb(false, event->data.query_msg->cb_pw);
- return NSERROR_OK;
-
- case CONTENT_MSG_QUERY_FINISHED:
- /** \todo QUERY - Decide what is right here */
- return NSERROR_OK;
-
default:
break;
}
diff --git a/desktop/sslcert_viewer.c b/desktop/sslcert_viewer.c
index 2936e89e6..4d8725757 100644
--- a/desktop/sslcert_viewer.c
+++ b/desktop/sslcert_viewer.c
@@ -49,6 +49,7 @@ enum sslcert_viewer_field {
SSLCERT_V_N_FIELDS
};
+typedef nserror (*response_cb)(bool proceed, void *pw);
/**
* ssl certificate verification context.
@@ -57,7 +58,7 @@ struct sslcert_session_data {
struct ssl_cert_info *certs; /**< Certificates */
unsigned long num; /**< Number of certificates in chain */
nsurl *url; /**< The url of the certificate */
- llcache_query_response cb; /**< Cert accept/reject callback */
+ response_cb cb; /**< Cert accept/reject callback */
void *cbpw; /**< Context passed to callback */
treeview *tree; /**< The treeview object */
@@ -476,8 +477,8 @@ nserror sslcert_viewer_fini(struct sslcert_session_data *ssl_d)
/* Exported interface, documented in sslcert_viewer.h */
nserror
sslcert_viewer_create_session_data(unsigned long num,
- nsurl *url,
- llcache_query_response cb,
+ struct nsurl *url,
+ nserror (*cb)(bool proceed, void *pw),
void *cbpw,
const struct ssl_cert_info *certs,
struct sslcert_session_data **ssl_d)
diff --git a/desktop/sslcert_viewer.h b/desktop/sslcert_viewer.h
index 9a57b965c..6955e0167 100644
--- a/desktop/sslcert_viewer.h
+++ b/desktop/sslcert_viewer.h
@@ -25,13 +25,14 @@
#ifndef NETSURF_DESKTOP_SSLCERT_VIEWER_H
#define NETSURF_DESKTOP_SSLCERT_VIEWER_H
-#include "content/llcache.h"
#include "netsurf/mouse.h"
struct sslcert_session_data;
struct redraw_context;
struct core_window_callback_table;
struct rect;
+struct nsurl;
+struct ssl_cert_info;
/**
* Create ssl certificate viewer session data.
@@ -48,7 +49,7 @@ struct rect;
* sslcert_viewer_fini destroys the session data.
*/
nserror sslcert_viewer_create_session_data(
- unsigned long num, nsurl *url, llcache_query_response cb,
+ unsigned long num, struct nsurl *url, nserror (*cb)(bool proceed, void *pw),
void *cbpw, const struct ssl_cert_info *certs,
struct sslcert_session_data **ssl_d);
diff --git a/desktop/treeview.c b/desktop/treeview.c
index 22df7c964..258b54a52 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -4947,16 +4947,6 @@ treeview_res_cb(struct hlcache_handle *handle,
r->height = content_get_height(handle);
break;
- case CONTENT_MSG_QUERY:
- /** \todo QUERY - Decide what is right here */
- /* For now, the only safe decision is to cancel the fetch */
- event->data.query_msg->cb(false, event->data.query_msg->cb_pw);
- return NSERROR_OK;
-
- case CONTENT_MSG_QUERY_FINISHED:
- /** \todo QUERY - Decide what is right here */
- return NSERROR_OK;
-
default:
break;
}