From 9c1ff9fbc1042402610702f826b7a7ed282e98df Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Fri, 16 Apr 2010 20:36:29 +0000 Subject: Fixup Amiga frontend svn path=/trunk/netsurf/; revision=10410 --- amiga/login.c | 21 +++++++++++++++------ amiga/login.h | 8 +++++++- amiga/sslcert.c | 28 +++++++++++++++++++++------- 3 files changed, 43 insertions(+), 14 deletions(-) (limited to 'amiga') diff --git a/amiga/login.c b/amiga/login.c index 66c3d326d..bfa373926 100755 --- a/amiga/login.c +++ b/amiga/login.c @@ -39,17 +39,18 @@ #include #include -void gui_401login_open(struct browser_window *bw, hlcache_handle *c, - const char *realm) +void gui_401login_open(const char *url, const char *realm, + nserror (*cb)(bool proceed, void *pw), void *cbpw) { struct gui_login_window *lw = AllocVec(sizeof(struct gui_login_window),MEMF_PRIVATE | MEMF_CLEAR); char *host; - url_host(content_get_url(c), &host); + url_host(url, &host); lw->host = host; - lw->url = content_get_url(c); + lw->url = url; lw->realm = (char *)realm; - lw->bw = bw; + lw->cb = cb; + lw->cbpw = cbpw; lw->objects[OID_MAIN] = WindowObject, WA_ScreenTitle,nsscreentitle, @@ -126,6 +127,10 @@ void gui_401login_open(struct browser_window *bw, hlcache_handle *c, void ami_401login_close(struct gui_login_window *lw) { + /* If continuation exists, then forbid refetch */ + if (lw->cb != NULL) + lw->cb(false, lw->cbpw); + DisposeObject(lw->objects[OID_MAIN]); free(lw->host); DelObject(lw->node); @@ -143,7 +148,11 @@ void ami_401login_login(struct gui_login_window *lw) urldb_set_auth_details(lw->url,lw->realm,userpass); FreeVec(userpass); - browser_window_go(lw->bw,lw->url,0,true); + lw->cb(true, lw->cbpw); + + /* Invalidate continuation */ + lw->cb = NULL; + lw->cbpw = NULL; ami_401login_close(lw); } diff --git a/amiga/login.h b/amiga/login.h index 1f0236d72..82fe3d5f8 100755 --- a/amiga/login.h +++ b/amiga/login.h @@ -18,11 +18,17 @@ #ifndef AMIGA_LOGIN_H #define AMIGA_LOGIN_H + +#include + +#include "utils/errors.h" + struct gui_login_window { struct nsObject *node; struct Window *win; Object *objects[GID_LAST]; - struct browser_window *bw; + nserror (*cb)(bool proceed, void *pw); + void *cbpw; char *url; char *realm; char *host; diff --git a/amiga/sslcert.c b/amiga/sslcert.c index 41b51a20a..c02329449 100644 --- a/amiga/sslcert.c +++ b/amiga/sslcert.c @@ -21,6 +21,7 @@ #include #include #include +#include "utils/errors.h" #include "utils/utils.h" #include "utils/messages.h" #include "content/urldb.h" @@ -32,7 +33,8 @@ struct session_data { struct session_cert *certs; unsigned long num; - struct browser_window *bw; + nserror (*cb)(bool proceed, void *pw); + void *cbpw; char *url; struct tree *tree; }; @@ -47,8 +49,9 @@ struct session_cert { void ami_gui_cert_close(struct session_data *data); bool ami_gui_cert_apply(struct session_data *session); -void gui_cert_verify(struct browser_window *bw, hlcache_handle *c, - const struct ssl_cert_info *certs, unsigned long num) +void gui_cert_verify(const char *url, + const struct ssl_cert_info *certs, unsigned long num, + nserror (*cb)(bool proceed, void *pw), void *cbpw) { const struct ssl_cert_info *from; struct session_cert *to; @@ -60,7 +63,7 @@ void gui_cert_verify(struct browser_window *bw, hlcache_handle *c, int res = 0; struct treeview_window *twin; - assert(bw && c && certs); + assert(certs); /* copy the certificate information */ data = calloc(1, sizeof(struct session_data)); @@ -68,13 +71,14 @@ void gui_cert_verify(struct browser_window *bw, hlcache_handle *c, warn_user("NoMemory", 0); return; } - data->url = strdup(content_get_url(c)); + data->url = strdup(url); if (!data->url) { free(data); warn_user("NoMemory", 0); return; } - data->bw = bw; + data->cb = cb; + data->cbpw = cbpw; data->num = num; data->certs = calloc(num, sizeof(struct session_cert)); if (!data->certs) { @@ -205,6 +209,10 @@ void ami_gui_cert_close(struct session_data *data) } */ + /* Send failure if callback exists */ + if (data->cb != NULL) + data->cb(false, data->cbpw); + if (data->tree) { tree_delete_node(data->tree, data->tree->root, false); free(data->tree); @@ -220,6 +228,12 @@ bool ami_gui_cert_apply(struct session_data *session) assert(session); urldb_set_cert_permissions(session->url, true); - browser_window_go(session->bw, session->url, 0, true); + + session->cb(true, session->cbpw); + + /* Invalidate callback */ + session->cb = NULL; + session->cbpw = NULL; + return true; } -- cgit v1.2.3