summaryrefslogtreecommitdiff
path: root/desktop/browser_window.c
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/browser_window.c
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/browser_window.c')
-rw-r--r--desktop/browser_window.c160
1 files changed, 107 insertions, 53 deletions
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;
}