[epiphany/wip/sync: 17/18] sync-service: Fix the sign out flow



commit 4d8cadbdc9dd96887efce8b8c436a77e0e8c6d29
Author: Gabriel Ivascu <ivascu gabriel59 gmail com>
Date:   Sun Jun 25 01:09:42 2017 +0300

    sync-service: Fix the sign out flow
    
    When signing out, the act of destroying the session should not depend on
    the act of unregistering the device. Also, the act of forgetting the
    sync secrets should not depend on the act of destroying the session. All
    the sign out operations need to be independent, so if one fails, the
    others won't fail too.

 lib/sync/ephy-sync-service.c |   43 +++++++++++++++--------------------------
 1 files changed, 16 insertions(+), 27 deletions(-)
---
diff --git a/lib/sync/ephy-sync-service.c b/lib/sync/ephy-sync-service.c
index 03cdc65..7383193 100644
--- a/lib/sync/ephy-sync-service.c
+++ b/lib/sync/ephy-sync-service.c
@@ -635,20 +635,12 @@ destroy_session_cb (SoupSession *session,
                     SoupMessage *msg,
                     gpointer     user_data)
 {
-  EphySyncService *self = EPHY_SYNC_SERVICE (user_data);
-
   if (msg->status_code != 200) {
     g_warning ("Failed to destroy session. Status code: %u, response: %s",
                msg->status_code, msg->response_body->data);
   } else {
     LOG ("Successfully destroyed session");
   }
-
-  /* This is the last step of signing out. Sync secrets can be deleted now. */
-  ephy_sync_service_forget_secrets (self);
-  ephy_sync_service_clear_storage_credentials (self);
-  ephy_sync_utils_set_device_id (NULL);
-  ephy_sync_utils_set_sync_user (NULL);
 }
 
 static void
@@ -686,7 +678,7 @@ ephy_sync_service_destroy_session (EphySyncService *self,
                                              req_hmac_key, 32, options);
   soup_message_headers_append (msg->request_headers, "authorization", header->header);
   soup_message_headers_append (msg->request_headers, "content-type", content_type);
-  soup_session_queue_message (self->session, msg, destroy_session_cb, self);
+  soup_session_queue_message (self->session, msg, destroy_session_cb, NULL);
 
   g_free (token_id_hex);
   g_free (token_id);
@@ -2308,12 +2300,9 @@ delete_open_tabs_record_cb (SoupSession *session,
     LOG ("Successfully deleted open tabs record");
   }
 
-  ephy_sync_service_destroy_session (self, NULL);
-
   /* This is the last storage message of this session, clear queue. */
   while (!g_queue_is_empty (self->storage_queue))
     storage_request_async_data_free (g_queue_pop_head (self->storage_queue));
-
 }
 
 static void
@@ -2321,26 +2310,12 @@ unregister_device_cb (SoupSession *session,
                       SoupMessage *msg,
                       gpointer     user_data)
 {
-  EphySyncService *self = EPHY_SYNC_SERVICE (user_data);
-  char *endpoint;
-  char *id;
-
   if (msg->status_code != 200) {
     g_warning ("Failed to unregister device. Status code: %u, response: %s",
                msg->status_code, msg->response_body->data);
   } else {
     LOG ("Successfully unregistered device");
   }
-
-  /* Delete the open tabs record corresponding to this device. */
-  id = ephy_sync_utils_get_device_id ();
-  endpoint = g_strdup_printf ("storage/tabs/%s", id);
-  ephy_sync_service_queue_storage_request (self, endpoint, SOUP_METHOD_DELETE,
-                                           NULL, -1, -1,
-                                           delete_open_tabs_record_cb, self);
-
-  g_free (endpoint);
-  g_free (id);
 }
 
 static void
@@ -2352,12 +2327,20 @@ ephy_sync_service_unregister_device (EphySyncService *self)
   g_assert (EPHY_IS_SYNC_SERVICE (self));
 
   id = ephy_sync_utils_get_device_id ();
+  /* Delete the client record associated to this device. */
   endpoint = g_strdup_printf ("storage/clients/%s", id);
   ephy_sync_service_queue_storage_request (self, endpoint,
                                            SOUP_METHOD_DELETE,
                                            NULL, -1, -1,
-                                           unregister_device_cb, self);
+                                           unregister_device_cb, NULL);
+  g_free (endpoint);
 
+  /* Delete the open tabs record associated to this device. */
+  endpoint = g_strdup_printf ("storage/tabs/%s", id);
+  ephy_sync_service_queue_storage_request (self, endpoint,
+                                           SOUP_METHOD_DELETE,
+                                           NULL, -1, -1,
+                                           delete_open_tabs_record_cb, self);
   g_free (endpoint);
   g_free (id);
 }
@@ -2369,6 +2352,9 @@ ephy_sync_service_sign_out (EphySyncService *self)
 
   ephy_sync_service_stop_periodical_sync (self);
   ephy_sync_service_unregister_device (self);
+  ephy_sync_service_destroy_session (self, NULL);
+  ephy_sync_service_forget_secrets (self);
+  ephy_sync_service_clear_storage_credentials (self);
 
   /* Clear managers. */
   for (GSList *l = self->managers; l && l->data; l = l->next) {
@@ -2380,7 +2366,10 @@ ephy_sync_service_sign_out (EphySyncService *self)
   ephy_sync_utils_set_bookmarks_sync_is_initial (TRUE);
   ephy_sync_utils_set_passwords_sync_is_initial (TRUE);
   ephy_sync_utils_set_history_sync_is_initial (TRUE);
+
   ephy_sync_utils_set_sync_time (0);
+  ephy_sync_utils_set_device_id (NULL);
+  ephy_sync_utils_set_sync_user (NULL);
 }
 
 void


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