diff options
author | Xan Lopez <xan@igalia.com> | 2012-08-14 17:37:20 +0800 |
---|---|---|
committer | Xan Lopez <xan@igalia.com> | 2012-08-14 17:38:20 +0800 |
commit | ad4b199dc292bc14935a5bfe9bd4fcae23e84465 (patch) | |
tree | d0668209e87ad278493d70f732848c93c2ade50b /embed/ephy-web-view.c | |
parent | 4fb2d11028bb659fe4b6f85cdfe5f79f702c8434 (diff) | |
download | gsoc2013-epiphany-ad4b199dc292bc14935a5bfe9bd4fcae23e84465.tar gsoc2013-epiphany-ad4b199dc292bc14935a5bfe9bd4fcae23e84465.tar.gz gsoc2013-epiphany-ad4b199dc292bc14935a5bfe9bd4fcae23e84465.tar.bz2 gsoc2013-epiphany-ad4b199dc292bc14935a5bfe9bd4fcae23e84465.tar.lz gsoc2013-epiphany-ad4b199dc292bc14935a5bfe9bd4fcae23e84465.tar.xz gsoc2013-epiphany-ad4b199dc292bc14935a5bfe9bd4fcae23e84465.tar.zst gsoc2013-epiphany-ad4b199dc292bc14935a5bfe9bd4fcae23e84465.zip |
ephy-web-view: do not store error pages in history
Otherwise we end up with dummy URIs in the history, overwritten titles
("Oops, could not load..."), etc.
Add a unit test to make sure we do not regress.
https://bugzilla.gnome.org/show_bug.cgi?id=655619
Diffstat (limited to 'embed/ephy-web-view.c')
-rw-r--r-- | embed/ephy-web-view.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c index 26d4b2e07..f27226555 100644 --- a/embed/ephy-web-view.c +++ b/embed/ephy-web-view.c @@ -80,6 +80,7 @@ struct _EphyWebViewPrivate { guint is_loading : 1; #endif guint load_failed : 1; + guint history_frozen : 1; char *address; char *typed_address; @@ -2073,6 +2074,24 @@ ephy_web_view_location_changed (EphyWebView *view, g_object_thaw_notify (object); } +static void +ephy_web_view_freeze_history (EphyWebView *view) +{ + view->priv->history_frozen = TRUE; +} + +static void +ephy_web_view_thaw_history (EphyWebView *view) +{ + view->priv->history_frozen = FALSE; +} + +static gboolean +ephy_web_view_is_history_frozen (EphyWebView *view) +{ + return view->priv->history_frozen; +} + #ifdef HAVE_WEBKIT2 static void load_changed_cb (WebKitWebView *web_view, @@ -2287,7 +2306,8 @@ load_status_cb (WebKitWebView *web_view, restore_zoom_level (view, uri); /* History. */ - if (!ephy_web_view_is_loading_homepage (view)) { + if (!ephy_web_view_is_loading_homepage (view) && + !ephy_web_view_is_history_frozen (view)) { char *history_uri = NULL; /* TODO: move the normalization down to the history service? */ @@ -2302,6 +2322,8 @@ load_status_cb (WebKitWebView *web_view, g_free (history_uri); } + + ephy_web_view_thaw_history (view); break; } case WEBKIT_LOAD_FINISHED: { @@ -2501,6 +2523,14 @@ ephy_web_view_load_error_page (EphyWebView *view, #ifdef HAVE_WEBKIT2 webkit_web_view_replace_content (WEBKIT_WEB_VIEW (view), html->str, uri, 0); #else + /* Make our history backend ignore the next page load, since it will be an error page. + * + * FIXME: at this point error pages in WebKit2 do not trigger load + * events, so this is only needed for WebKit1. This might (probably + * will?) change soon, so keep an eye on WebKit2 and change this + * accordingly. + */ + ephy_web_view_freeze_history (view); webkit_web_frame_load_alternate_string (webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (view)), html->str, uri, uri); #endif |