From b8fbb465b2dd76b7fd27582fe9d376d870f404e0 Mon Sep 17 00:00:00 2001 From: Gustavo Noronha Silva Date: Fri, 29 May 2009 12:29:38 -0300 Subject: Fix missing HTTP information when opening links in new tabs Bug #120341 This changeset reworks ephy_shell_new_tab_full (and its callers) to use a WebKitNetworkRequest instead of an URL when handling openning links in new tabs. This gains us the advantage of feeding the new WebView with the same WebKitNetworkRequest WebKit would use to navigate to the new address. --- src/ephy-session.c | 7 +++++-- src/ephy-shell.c | 30 ++++++++++++++++++------------ src/ephy-shell.h | 3 ++- src/ephy-window.c | 14 +++++++------- src/epiphany.defs | 2 +- 5 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/ephy-session.c b/src/ephy-session.c index 4dabe3f46..d4e38b988 100644 --- a/src/ephy-session.c +++ b/src/ephy-session.c @@ -641,6 +641,7 @@ session_command_open_uris (EphySession *session, { const char *url = uris[i]; EphyNewTabFlags page_flags; + WebKitNetworkRequest *request; if (url[0] == '\0') { @@ -651,13 +652,15 @@ session_command_open_uris (EphySession *session, page_flags = EPHY_NEW_TAB_OPEN_PAGE; } + request = webkit_network_request_new (url); embed = ephy_shell_new_tab_full (shell, window, NULL /* parent tab */, - url, + request, flags | page_flags, EPHY_EMBED_CHROME_ALL, FALSE /* is popup? */, user_time); + g_object_unref (request); window = EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))); } @@ -698,7 +701,7 @@ session_command_dispatch (EphySession *session) { ephy_shell_new_tab_full (ephy_shell_get_default (), NULL /* window */, NULL /* tab */, - NULL /* URL */, + NULL /* NetworkRequest */, EPHY_NEW_TAB_IN_NEW_WINDOW | EPHY_NEW_TAB_HOME_PAGE, EPHY_EMBED_CHROME_ALL, diff --git a/src/ephy-shell.c b/src/ephy-shell.c index 231069687..b0339207e 100644 --- a/src/ephy-shell.c +++ b/src/ephy-shell.c @@ -35,6 +35,8 @@ #include "ephy-prefs.h" #include "ephy-file-helpers.h" #include "ephy-favicon-cache.h" +#include "ephy-web-view.h" +#include "ephy-embed-utils.h" #include "ephy-window.h" #include "ephy-bookmarks-ui.h" #include "ephy-bookmarks-import.h" @@ -406,7 +408,7 @@ load_homepage (EphyEmbed *embed) * @shell: a #EphyShell * @parent_window: the target #EphyWindow or %NULL * @previous_embed: the referrer embed, or %NULL - * @url: an url to load or %NULL + * @request: a #WebKitNetworkRequest to load or %NULL * @chrome: a #EphyEmbedChrome mask to use if creating a new window * @is_popup: whether the new window is a popup * @user_time: a timestamp, or 0 @@ -420,7 +422,7 @@ EphyEmbed * ephy_shell_new_tab_full (EphyShell *shell, EphyWindow *parent_window, EphyEmbed *previous_embed, - const char *url, + WebKitNetworkRequest *request, EphyNewTabFlags flags, EphyEmbedChrome chrome, gboolean is_popup, @@ -520,7 +522,7 @@ ephy_shell_new_tab_full (EphyShell *shell, { EphyEmbedLoadFlags load_flags = 0; - g_assert (url != NULL); + g_assert (request != NULL); if (flags & EPHY_NEW_TAB_ALLOW_FIXUP) { @@ -530,13 +532,10 @@ ephy_shell_new_tab_full (EphyShell *shell, { load_flags = EPHY_EMBED_LOAD_FLAGS_NONE; } - /* FIXME */ - /* We need to audit every caller to see if this - won't make us send referer for undesirable loads. - Passing NULL referrer atm */ - ephy_embed_load (embed, url, load_flags, NULL); - is_empty = url_is_empty (url); + ephy_web_view_load_request (EPHY_WEB_VIEW (EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed)), + request); + is_empty = url_is_empty (webkit_network_request_get_uri (request)); } /* Make sure the initial focus is somewhere sensible and not, for @@ -582,9 +581,16 @@ ephy_shell_new_tab (EphyShell *shell, const char *url, EphyNewTabFlags flags) { - return ephy_shell_new_tab_full (shell, parent_window, - previous_embed, url, flags, - EPHY_EMBED_CHROME_ALL, FALSE, 0); + EphyEmbed *embed; + WebKitNetworkRequest *request = webkit_network_request_new (url); + + embed = ephy_shell_new_tab_full (shell, parent_window, + previous_embed, request, flags, + EPHY_EMBED_CHROME_ALL, FALSE, 0); + + g_object_unref (request); + + return embed; } /** diff --git a/src/ephy-shell.h b/src/ephy-shell.h index 77dd927f1..00a1765fa 100644 --- a/src/ephy-shell.h +++ b/src/ephy-shell.h @@ -30,6 +30,7 @@ #include "ephy-window.h" #include "ephy-embed.h" +#include #include #include @@ -100,7 +101,7 @@ EphyEmbed *ephy_shell_new_tab (EphyShell *shell, EphyEmbed *ephy_shell_new_tab_full (EphyShell *shell, EphyWindow *parent_window, EphyEmbed *previous_embed, - const char *url, + WebKitNetworkRequest *request, EphyNewTabFlags flags, EphyEmbedChrome chrome, gboolean is_popup, diff --git a/src/ephy-window.c b/src/ephy-window.c index 5d7babc60..ca926c4de 100644 --- a/src/ephy-window.c +++ b/src/ephy-window.c @@ -2562,16 +2562,16 @@ policy_decision_required_cb (WebKitWebView *web_view, const char *uri; EphyEmbed *embed; - uri = webkit_network_request_get_uri (request); embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window)); - ephy_shell_new_tab (ephy_shell_get_default (), - window, - embed, - uri, - EPHY_NEW_TAB_IN_EXISTING_WINDOW | - EPHY_NEW_TAB_OPEN_PAGE); + ephy_shell_new_tab_full (ephy_shell_get_default (), + window, + embed, + request, + EPHY_NEW_TAB_IN_EXISTING_WINDOW | + EPHY_NEW_TAB_OPEN_PAGE, + EPHY_EMBED_CHROME_ALL, FALSE, 0); return TRUE; } diff --git a/src/epiphany.defs b/src/epiphany.defs index d0d5faaa7..ca5785480 100644 --- a/src/epiphany.defs +++ b/src/epiphany.defs @@ -3086,7 +3086,7 @@ (parameters '("EphyWindow*" "parent_window") '("EphyEmbed*" "previous_tab") - '("const-char*" "url") + '("WebKitNetworkRequest*" "request") '("EphyNewTabFlags" "flags") '("EphyEmbedChrome" "chrome") '("gboolean" "is_popup") -- cgit v1.2.3