[epiphany/gnome-3-32] session: never save before first successful page load



commit 6d33c5b9bec0833c8c42a9abc106a71480a40842
Author: Michael Catanzaro <mcatanzaro gnome org>
Date:   Sat Dec 14 19:52:32 2019 +0000

    session: never save before first successful page load
    
    If WebKit is somehow so broken that it can't load any pages, we
    currently overwrite the session state file with empty state, deleting
    all the user's saved tabs. That's not very friendly.
    
    Fixes #887
    
    
    (cherry picked from commit 886f2ffcf7ddf17825136e52e19588442bcdfa36)

 src/ephy-session.c | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)
---
diff --git a/src/ephy-session.c b/src/ephy-session.c
index ed8fb3502..7c3029b20 100644
--- a/src/ephy-session.c
+++ b/src/ephy-session.c
@@ -64,6 +64,7 @@ struct _EphySession {
   GCancellable *save_cancellable;
   guint closing : 1;
   guint dont_save : 1;
+  guint loaded_page : 1;
 };
 
 #define SESSION_STATE           "type:session_state"
@@ -122,8 +123,13 @@ load_changed_cb (WebKitWebView  *view,
                  WebKitLoadEvent load_event,
                  EphySession    *session)
 {
-  if (!ephy_web_view_load_failed (EPHY_WEB_VIEW (view)))
-    ephy_session_save (session);
+  if (ephy_web_view_load_failed (EPHY_WEB_VIEW (view)))
+    return;
+
+  if (load_event == WEBKIT_LOAD_FINISHED)
+    session->loaded_page = TRUE;
+
+  ephy_session_save (session);
 }
 
 static void
@@ -875,14 +881,6 @@ save_session_sync (GTask        *task,
   GList *w;
   int ret = -1;
 
-  /* If any web view has an insane URL, then something has probably gone wrong
-   * inside WebKit. For instance, if the web process is nonfunctional, the UI
-   * process could have an invalid URI property. Yes, this would be a WebKit
-   * bug, but Epiphany should be robust to such issues. Do not clobber an
-   * existing good session file with our new bogus state. Bug #768250. */
-  if (!session_seems_sane (data->windows))
-    return;
-
   buffer = xmlBufferCreate ();
   writer = xmlNewTextWriterMemory (buffer, 0);
   if (writer == NULL)
@@ -974,6 +972,19 @@ ephy_session_save_idle_cb (EphySession *session)
 
   session->save_source_id = 0;
 
+  /* If we have never successfully loaded any page, or any web view has an
+   * insane URL, then something has probably gone wrong inside WebKit. For
+   * instance, if the web process is nonfunctional, the UI process could have
+   * an invalid URI property. Yes, this would be a WebKit bug, but Epiphany
+   * should be robust to such issues. Do not clobber an existing good session
+   * file with our new bogus state. Bug #768250.
+   */
+  data = save_data_new (session);
+  if (!session->loaded_page || !session_seems_sane (data->windows)) {
+    save_data_free (data);
+    return G_SOURCE_REMOVE;
+  }
+
   if (session->save_cancellable) {
     g_cancellable_cancel (session->save_cancellable);
     g_object_unref (session->save_cancellable);
@@ -989,7 +1000,6 @@ ephy_session_save_idle_cb (EphySession *session)
 
   g_application_hold (G_APPLICATION (ephy_shell_get_default ()));
   session->save_cancellable = g_cancellable_new ();
-  data = save_data_new (session);
   task = g_task_new (session, session->save_cancellable,
                      save_session_in_thread_finished_cb, NULL);
   g_task_set_task_data (task, data, (GDestroyNotify)save_data_free);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]