From 3bfb5b96a7c7cb2718a60987e69cd659ed49b9d8 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Thu, 14 Feb 2013 15:09:28 +0000 Subject: browser_window_navigate refactor --- render/form.c | 62 ++++++++++++++++++++++++++++++++--------------- render/html_interaction.c | 23 ++++++++++++------ 2 files changed, 58 insertions(+), 27 deletions(-) (limited to 'render') diff --git a/render/form.c b/render/form.c index c2819b479..998d0f293 100644 --- a/render/form.c +++ b/render/form.c @@ -1443,8 +1443,9 @@ void form_submit(nsurl *page_url, struct browser_window *target, { char *data = NULL; struct fetch_multipart_data *success; - nsurl *action; + nsurl *action_url; nsurl *action_query; + nserror error; assert(form != NULL); @@ -1453,6 +1454,14 @@ void form_submit(nsurl *page_url, struct browser_window *target, return; } + /* Decompose action */ + if (nsurl_create(form->action, &action_url) != NSERROR_OK) { + free(data); + fetch_multipart_data_destroy(success); + warn_user("NoMemory", 0); + return; + } + switch (form->method) { case method_GET: data = form_url_encode(form, success, true); @@ -1462,28 +1471,26 @@ void form_submit(nsurl *page_url, struct browser_window *target, return; } - /* Decompose action */ - if (nsurl_create(form->action, &action) != NSERROR_OK) { - free(data); - fetch_multipart_data_destroy(success); - warn_user("NoMemory", 0); - return; - } - /* Replace query segment */ - if (nsurl_replace_query(action, data, &action_query) != - NSERROR_OK) { - nsurl_unref(action); + error = nsurl_replace_query(action_url, data, &action_query); + if (error != NSERROR_OK) { + nsurl_unref(action_query); free(data); fetch_multipart_data_destroy(success); - warn_user("NoMemory", 0); + warn_user(messages_get_errorcode(error), 0); return; } /* Construct submit url */ - browser_window_go(target, nsurl_access(action_query), - nsurl_access(page_url), true); - nsurl_unref(action); + browser_window_navigate(target, + action_query, + page_url, + BROWSER_WINDOW_GO_FLAG_HISTORY | + BROWSER_WINDOW_GO_FLAG_VERIFIABLE, + NULL, + NULL, + NULL); + nsurl_unref(action_query); break; @@ -1492,19 +1499,34 @@ void form_submit(nsurl *page_url, struct browser_window *target, if (data == NULL) { fetch_multipart_data_destroy(success); warn_user("NoMemory", 0); + nsurl_unref(action_url); return; } - browser_window_go_post(target, form->action, data, 0, - true, nsurl_access(page_url), false, true, 0); + browser_window_navigate(target, + action_url, + page_url, + BROWSER_WINDOW_GO_FLAG_HISTORY | + BROWSER_WINDOW_GO_FLAG_VERIFIABLE, + data, + NULL, + NULL); break; case method_POST_MULTIPART: - browser_window_go_post(target, form->action, 0, success, - true, nsurl_access(page_url), false, true, 0); + browser_window_navigate(target, + action_url, + page_url, + BROWSER_WINDOW_GO_FLAG_HISTORY | + BROWSER_WINDOW_GO_FLAG_VERIFIABLE, + NULL, + success, + NULL); + break; } + nsurl_unref(action_url); fetch_multipart_data_destroy(success); free(data); } diff --git a/render/html_interaction.c b/render/html_interaction.c index dfebc2577..16e9b1c28 100644 --- a/render/html_interaction.c +++ b/render/html_interaction.c @@ -704,10 +704,14 @@ void html_mouse_action(struct content *c, struct browser_window *bw, if (mouse & BROWSER_MOUSE_CLICK_1 && mouse & BROWSER_MOUSE_MOD_1) { /* force download of link */ - browser_window_go_post(bw, nsurl_access(url), 0, 0, - false, - nsurl_access(content_get_url(c)), - true, true, 0); + browser_window_navigate(bw, + url, + content_get_url(c), + BROWSER_WINDOW_GO_FLAG_DOWNLOAD | + BROWSER_WINDOW_GO_FLAG_VERIFIABLE, + NULL, + NULL, + NULL); } else if (mouse & BROWSER_MOUSE_CLICK_2 && mouse & BROWSER_MOUSE_MOD_1) { @@ -856,9 +860,14 @@ void html_mouse_action(struct content *c, struct browser_window *bw, gadget->form, gadget); break; case ACTION_GO: - browser_window_go(browser_window_find_target(bw, target, mouse), - nsurl_access(url), - nsurl_access(content_get_url(c)), true); + browser_window_navigate(browser_window_find_target(bw, target, mouse), + url, + content_get_url(c), + BROWSER_WINDOW_GO_FLAG_HISTORY | + BROWSER_WINDOW_GO_FLAG_VERIFIABLE, + NULL, + NULL, + NULL); break; case ACTION_NONE: break; -- cgit v1.2.3