Bug 1321740 - Avoid a full sync after signing in due to fxa reauthentication. r=markh
☠☠ backed out by 06f837d52004 ☠ ☠
authorThom Chiovoloni <tchiovoloni@mozilla.com>
Wed, 08 Feb 2017 16:35:00 -0500
changeset 372165 174570c9ca6b0cbe2aa8de2a1fe21e1cf4db977a
parent 372164 c187196bff43c1fe6a1ed34d95574688958f1a39
child 372166 6a03b96cc5bacc226c7518caedc7e717fa814e66
push id10863
push userjlorenzo@mozilla.com
push dateMon, 06 Mar 2017 23:02:23 +0000
treeherdermozilla-aurora@0931190cd725 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmarkh
bugs1321740
milestone54.0a1
Bug 1321740 - Avoid a full sync after signing in due to fxa reauthentication. r=markh MozReview-Commit-ID: 8wVq1RYojUS
services/sync/modules/browserid_identity.js
--- a/services/sync/modules/browserid_identity.js
+++ b/services/sync/modules/browserid_identity.js
@@ -249,28 +249,43 @@ this.BrowserIDManager.prototype = {
     // authentication header, we will notice the lack of the token and fetch a
     // new one.
     this._token = null;
   },
 
   observe(subject, topic, data) {
     this._log.debug("observed " + topic);
     switch (topic) {
-    case fxAccountsCommon.ONLOGIN_NOTIFICATION:
+    case fxAccountsCommon.ONLOGIN_NOTIFICATION: {
       // This should only happen if we've been initialized without a current
       // user - otherwise we'd have seen the LOGOUT notification and been
       // thrown away.
       // The exception is when we've initialized with a user that needs to
       // reauth with the server - in that case we will also get here, but
-      // should have the same identity.
+      // should have the same identity, and so we pass `false` into
+      // initializeWithCurrentIdentity so that we won't do a full sync for our
+      // first sync if we can avoid it.
       // initializeWithCurrentIdentity will throw and log if these constraints
       // aren't met (indirectly, via _updateSignedInUser()), so just go ahead
       // and do the init.
-      this.initializeWithCurrentIdentity(true);
-      break;
+      let firstLogin = !this.username;
+      this.initializeWithCurrentIdentity(firstLogin);
+
+      if (!firstLogin) {
+        // We still want to trigger these even if it isn't our first login.
+        // Note that the promise returned by `initializeWithCurrentIdentity`
+        // is resolved at the start of authentication, but we don't want to fire
+        // this event or start the next sync until after authentication is done
+        // (which is signaled by `this.whenReadyToAuthenticate.promise` resolving).
+        this.whenReadyToAuthenticate.promise.then(() => {
+          Services.obs.notifyObservers(null, "weave:service:setup-complete", null);
+          Weave.Utils.nextTick(Weave.Service.sync, Weave.Service);
+        });
+      }
+    } break;
 
     case fxAccountsCommon.ONLOGOUT_NOTIFICATION:
       Weave.Service.startOver();
       // startOver will cause this instance to be thrown away, so there's
       // nothing else to do.
       break;
 
     case fxAccountsCommon.ON_ACCOUNT_STATE_CHANGE_NOTIFICATION: