diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2019-08-05 20:56:07 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2019-08-05 20:56:07 +0100 |
commit | 170dc5d52419450edc440c054a94135c1cc1296a (patch) | |
tree | 0943167d6fa71716bd1cd8936b94cfd02fe10e5c /desktop | |
parent | bfb1bb119241d85bb9b400881328496e12a39aed (diff) | |
download | netsurf-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.h | 11 | ||||
-rw-r--r-- | desktop/browser_window.c | 160 | ||||
-rw-r--r-- | desktop/download.c | 9 | ||||
-rw-r--r-- | desktop/netsurf.c | 53 | ||||
-rw-r--r-- | desktop/searchweb.c | 20 | ||||
-rw-r--r-- | desktop/sslcert_viewer.c | 7 | ||||
-rw-r--r-- | desktop/sslcert_viewer.h | 5 | ||||
-rw-r--r-- | desktop/treeview.c | 10 |
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; } |