bug 1451150 - make TRRService wait for the correct CP event r?valentin draft
authorDaniel Stenberg <daniel@haxx.se>
Wed, 04 Apr 2018 00:16:55 +0200
changeset 776957 39224525e68bc1076ca972d5a6423dc4d0e33980
parent 776583 4a3275936ddf871103b53e00608e2b8d5aee7e69
push id105038
push userbmo:daniel@haxx.se
push dateTue, 03 Apr 2018 22:31:03 +0000
reviewersvalentin
bugs1451150
milestone61.0a1
bug 1451150 - make TRRService wait for the correct CP event r?valentin MozReview-Commit-ID: LwBjw7EKBhR
netwerk/dns/TRRService.cpp
--- a/netwerk/dns/TRRService.cpp
+++ b/netwerk/dns/TRRService.cpp
@@ -281,36 +281,41 @@ TRRService::Observe(nsISupports *aSubjec
 
   } else if (!strcmp(aTopic, kOpenCaptivePortalLoginEvent)) {
     // We are in a captive portal
     LOG(("TRRservice in captive portal\n"));
     mCaptiveIsPassed = false;
   } else if (!strcmp(aTopic, NS_CAPTIVE_PORTAL_CONNECTIVITY)) {
     nsAutoCString data = NS_ConvertUTF16toUTF8(aData);
     LOG(("TRRservice captive portal was %s\n", data.get()));
-    if (!mTRRBLStorage) {
-      mTRRBLStorage = DataStorage::Get(DataStorageClass::TRRBlacklist);
-      if (mTRRBLStorage) {
-        bool storageWillPersist = true;
-        if (NS_FAILED(mTRRBLStorage->Init(storageWillPersist))) {
-          mTRRBLStorage = nullptr;
-        }
-        if (mClearTRRBLStorage) {
-          if (mTRRBLStorage) {
-            mTRRBLStorage->Clear();
+    if (data.Equals("clear")) {
+      if (!mTRRBLStorage) {
+        mTRRBLStorage = DataStorage::Get(DataStorageClass::TRRBlacklist);
+        if (mTRRBLStorage) {
+          bool storageWillPersist = true;
+          if (NS_FAILED(mTRRBLStorage->Init(storageWillPersist))) {
+            mTRRBLStorage = nullptr;
           }
-          mClearTRRBLStorage = false;
+          if (mClearTRRBLStorage) {
+            if (mTRRBLStorage) {
+              mTRRBLStorage->Clear();
+            }
+            mClearTRRBLStorage = false;
+          }
         }
       }
+      if (mConfirmationState != CONFIRM_OK) {
+        mConfirmationState = CONFIRM_TRYING;
+        MaybeConfirm();
+      } else {
+        LOG(("TRRservice CP clear when already up!\n"));
+      }
+      mCaptiveIsPassed = true;
     }
 
-    mConfirmationState = CONFIRM_TRYING;
-    MaybeConfirm();
-    mCaptiveIsPassed = true;
-
   } else if (!strcmp(aTopic, kClearPrivateData) ||
              !strcmp(aTopic, kPurge)) {
     // flush the TRR blacklist, both in-memory and on-disk
     if (mTRRBLStorage) {
       mTRRBLStorage->Clear();
     }
   }
   return NS_OK;