Bug 1100687 - part 2: fix browser_blockHPKP.js, r?jaws draft
authorGijs Kruitbosch <gijskruitbosch@gmail.com>
Fri, 26 Feb 2016 15:16:13 +0000
changeset 334932 670d003fa14d993dc2ec89101b99756df7e1eca0
parent 334931 fd38504e009243aadf661c5b1135ade954bcb087
child 515031 11df59a1c695a20390e42c9c5ae0abe84652a027
push id11675
push usergijskruitbosch@gmail.com
push dateFri, 26 Feb 2016 15:19:40 +0000
reviewersjaws
bugs1100687
milestone47.0a1
Bug 1100687 - part 2: fix browser_blockHPKP.js, r?jaws MozReview-Commit-ID: DxvN94O8fhi
browser/base/content/test/general/browser.ini
browser/base/content/test/general/browser_blockHPKP.js
--- a/browser/base/content/test/general/browser.ini
+++ b/browser/base/content/test/general/browser.ini
@@ -523,17 +523,16 @@ tags = mcb
 tags = mcb
 [browser_bug1225194-remotetab.js]
 [browser_e10s_switchbrowser.js]
 [browser_e10s_about_process.js]
 [browser_e10s_chrome_process.js]
 [browser_e10s_javascript.js]
 [browser_blockHPKP.js]
 tags = psm
-skip-if = e10s # bug 1100687 - test directly manipulates content (content.document.getElementById)
 [browser_mcb_redirect.js]
 tags = mcb
 [browser_windowactivation.js]
 [browser_contextmenu_childprocess.js]
 [browser_bug963945.js]
 [browser_readerMode.js]
 support-files =
   readerModeArticle.html
--- a/browser/base/content/test/general/browser_blockHPKP.js
+++ b/browser/base/content/test/general/browser_blockHPKP.js
@@ -56,54 +56,51 @@ function loadPinningPage() {
   gBrowser.selectedBrowser.loadURI("https://" + kPinningDomain + kURLPath + "valid");
 }
 
 // After the site is pinned try to load with a subdomain site that should
 // fail to validate
 var successfulPinningPageListener = {
   handleEvent: function() {
     gBrowser.selectedBrowser.removeEventListener("load", this, true);
-    gBrowser.addProgressListener(certErrorProgressListener);
+    promiseErrorPageLoaded(gBrowser.selectedBrowser).then(errorPageLoaded);
     gBrowser.selectedBrowser.loadURI("https://" + kBadPinningDomain);
   }
 };
 
 // The browser should load about:neterror, when this happens, proceed
 // to load the pinning domain again, this time removing the pinning information
-var certErrorProgressListener = {
-  onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) {
-    if (aStateFlags & Ci.nsIWebProgressListener.STATE_STOP) {
-      let textElement = content.document.getElementById("errorShortDescText");
-      let text = textElement.innerHTML;
-      ok(text.indexOf("MOZILLA_PKIX_ERROR_KEY_PINNING_FAILURE") > 0,
-         "Got a pinning error page");
-      gBrowser.removeProgressListener(this);
-      gBrowser.selectedBrowser.addEventListener("load",
-                                                successfulPinningRemovalPageListener,
-                                                true);
-      gBrowser.selectedBrowser.loadURI("https://" + kPinningDomain + kURLPath + "zeromaxagevalid");
-    }
-  }
+function errorPageLoaded() {
+  ContentTask.spawn(gBrowser.selectedBrowser, null, function*() {
+    let textElement = content.document.getElementById("errorShortDescText");
+    let text = textElement.innerHTML;
+    ok(text.indexOf("MOZILLA_PKIX_ERROR_KEY_PINNING_FAILURE") > 0,
+       "Got a pinning error page");
+  }).then(function() {
+    BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(pinningRemovalLoaded);
+    gBrowser.selectedBrowser.loadURI("https://" + kPinningDomain + kURLPath + "zeromaxagevalid");
+  });
 };
 
 // After the pinning information has been removed (successful load) proceed
 // to load again with the invalid pin domain.
-var successfulPinningRemovalPageListener = {
-  handleEvent: function() {
-    gBrowser.selectedBrowser.removeEventListener("load", this, true);
-    gBrowser.selectedBrowser.addEventListener("load",
-                                              successfulLoadListener,
-                                              true);
-
-    gBrowser.selectedBrowser.loadURI("https://" + kBadPinningDomain);
-  }
+function pinningRemovalLoaded() {
+  BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(badPinningPageLoaded);
+  gBrowser.selectedBrowser.loadURI("https://" + kBadPinningDomain);
 };
 
 // Finally, we should successfully load
 // https://bad.include-subdomains.pinning-dynamic.example.com.
-var successfulLoadListener = {
-  handleEvent: function() {
-    gBrowser.selectedBrowser.removeEventListener("load", this, true);
-    gBrowser.removeTab(gBrowser.selectedTab);
+function badPinningPageLoaded() {
+  BrowserTestUtils.removeTab(gBrowser.selectedTab).then(function() {
     ok(true, "load complete");
     finish();
-  }
+  });
 };
+
+function promiseErrorPageLoaded(browser) {
+  return new Promise(resolve => {
+    browser.addEventListener("DOMContentLoaded", function onLoad() {
+      browser.removeEventListener("DOMContentLoaded", onLoad, false, true);
+      resolve();
+    }, false, true);
+  });
+}