Bug 806736 - Port test_privbrowsing.html to the new per-tab PB APIs. r=jdm
☠☠ backed out by b3d7e749388b ☠ ☠
authorRaymond Lee <raymond@raysquare.com>
Wed, 19 Dec 2012 01:07:49 +0800
changeset 125551 a7d5ea538c57f4148ded6a1e8c2e3a21b57cb3c0
parent 125550 62c52b199c9a566593444a029022f2783e88462f
child 125552 ef0483c37e00dce2b1273d912e93cf5aea858ca1
push id2151
push userlsblakk@mozilla.com
push dateTue, 19 Feb 2013 18:06:57 +0000
treeherdermozilla-beta@4952e88741ec [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjdm
bugs806736
milestone20.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 806736 - Port test_privbrowsing.html to the new per-tab PB APIs. r=jdm
toolkit/components/passwordmgr/test/Makefile.in
toolkit/components/passwordmgr/test/privbrowsing_perwindowpb_iframe.html
toolkit/components/passwordmgr/test/test_privbrowsing_perwindowpb.html
--- a/toolkit/components/passwordmgr/test/Makefile.in
+++ b/toolkit/components/passwordmgr/test/Makefile.in
@@ -87,15 +87,21 @@ MOCHITEST_FILES += \
     test_privbrowsing.html \
     $(NULL)
 
 ifneq ($(OS_TARGET),Linux)
 MOCHITEST_FILES += \
     test_prompt.html \
     $(NULL)
 endif
+
+else
+MOCHITEST_FILES += \
+    privbrowsing_perwindowpb_iframe.html \
+    test_privbrowsing_perwindowpb.html \
+    $(NULL)
 endif
 
 # This test doesn't pass because we can't ensure a cross-platform
 # event that occurs between DOMContentLoaded and Pageload
 # test_bug_221634.html
 
 include $(topsrcdir)/config/rules.mk
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/privbrowsing_perwindowpb_iframe.html
@@ -0,0 +1,8 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+</head>
+<body>
+<iframe id="iframe"></iframe>
+</body>
+</html>
copy from toolkit/components/passwordmgr/test/test_privbrowsing.html
copy to toolkit/components/passwordmgr/test/test_privbrowsing_perwindowpb.html
--- a/toolkit/components/passwordmgr/test/test_privbrowsing.html
+++ b/toolkit/components/passwordmgr/test/test_privbrowsing_perwindowpb.html
@@ -7,17 +7,16 @@ https://bugzilla.mozilla.org/show_bug.cg
   <title>Test for Bug 248970</title>
   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <script type="text/javascript" src="notification_common.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
 </head>
 <body>
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=248970">Mozilla Bug 248970</a>
 <p id="display"></p>
-<iframe id="iframe"></iframe>
 <pre id="test">
 <script class="testbody" type="text/javascript">
 
 /** Test for Bug 248970 **/
 // based on test_notifications.html
 
 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
 const Ci = Components.interfaces;
@@ -34,67 +33,64 @@ var subtests = [
                    "subtst_privbrowsing_2.html", // 5
                    "subtst_privbrowsing_2.html", // 6
                    "subtst_privbrowsing_3.html", // 7
                    "subtst_privbrowsing_3.html", // 8
                    "subtst_privbrowsing_4.html", // 9
                    "subtst_privbrowsing_3.html" // 10
                ];
 
-
 var testNum = 0;
 function loadNextTest() {
   // run the initialization code for each test
   switch (++ testNum) {
     case 1:
-      ok(!pb.privateBrowsingEnabled, "Test #" + testNum + " should be run outside of private mode");
+      popupNotifications = normalWindowPopupNotifications;
+      iframe = normalWindowIframe;
       break;
 
     case 2:
-      pb.privateBrowsingEnabled = true;
-      ok(pb.privateBrowsingEnabled, "Test #" + testNum + " should be run inside of private mode");
+      popupNotifications = privateWindowPopupNotifications;
+      iframe = privateWindowIframe;
       break;
 
     case 3:
-      pb.privateBrowsingEnabled = false;
-      ok(!pb.privateBrowsingEnabled, "Test #" + testNum + " should be run outside of private mode");
+      popupNotifications = normalWindowPopupNotifications;
+      iframe = normalWindowIframe;
       break;
 
     case 4:
       pwmgr.addLogin(login);
-      ok(!pb.privateBrowsingEnabled, "Test #" + testNum + " should be run outside of private mode");
       break;
 
     case 5:
-      pb.privateBrowsingEnabled = true;
-      ok(pb.privateBrowsingEnabled, "Test #" + testNum + " should be run inside of private mode");
+      popupNotifications = privateWindowPopupNotifications;
+      iframe = privateWindowIframe;
       break;
 
     case 6:
-      pb.privateBrowsingEnabled = false;
-      ok(!pb.privateBrowsingEnabled, "Test #" + testNum + " should be run outside of private mode");
+      popupNotifications = normalWindowPopupNotifications;
+      iframe = normalWindowIframe;
       break;
 
     case 7:
       pwmgr.addLogin(login);
-      ok(!pb.privateBrowsingEnabled, "Test #" + testNum + " should be run outside of private mode");
       break;
 
     case 8:
-      pb.privateBrowsingEnabled = true;
-      ok(pb.privateBrowsingEnabled, "Test #" + testNum + " should be run inside of private mode");
+      popupNotifications = privateWindowPopupNotifications;
+      iframe = privateWindowIframe;
       break;
 
     case 9:
-      ok(pb.privateBrowsingEnabled, "Test #" + testNum + " should be run inside of private mode");
       break;
 
     case 10:
-      pb.privateBrowsingEnabled = false;
-      ok(!pb.privateBrowsingEnabled, "Test #" + testNum + " should be run outside of private mode");
+      popupNotifications = normalWindowPopupNotifications;
+      iframe = normalWindowIframe;
       break;
 
     default:
       ok(false, "Unexpected call to loadNextTest for test #" + testNum);
   }
 
   ok(true, "Starting test #" + testNum);
   iframe.src = prefix + subtests[testNum-1];
@@ -180,96 +176,119 @@ function checkTest() {
       break;
 
     default:
       ok(false, "Unexpected call to checkTest for test #" + testNum);
 
   }
 }
 
-
-var _PBSvc = null;
-function get_PBSvc() {
-  if (_PBSvc)
-    return _PBSvc;
-
-  netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-  try {
-    _PBSvc = Cc["@mozilla.org/privatebrowsing;1"].
-             getService(Ci.nsIPrivateBrowsingService);
-    return _PBSvc;
-  } catch (e) {}
-  return null;
+var mainWindow = window.QueryInterface(Ci.nsIInterfaceRequestor)
+                    .getInterface(Ci.nsIWebNavigation)
+                    .QueryInterface(Ci.nsIDocShellTreeItem)
+                    .rootTreeItem
+                    .QueryInterface(Ci.nsIInterfaceRequestor)
+                    .getInterface(Ci.nsIDOMWindow);
+var contentPage = "http://mochi.test:8888/tests/toolkit/components/passwordmgr/test/privbrowsing_perwindowpb_iframe.html";
+function testOnWindow(aIsPrivate, aCallback) {
+  var win = mainWindow.OpenBrowserWindow({private: aIsPrivate});
+  win.addEventListener("load", function onLoad() {
+    win.removeEventListener("load", onLoad, false);
+    win.addEventListener("DOMContentLoaded", function onInnerLoad() {
+      if (win.content.location.href == "about:privatebrowsing") {
+        win.gBrowser.loadURI(contentPage);
+        return;
+      }
+      win.removeEventListener("DOMContentLoaded", onInnerLoad, true);
+      win.gBrowser.selectedBrowser.focus();
+      SimpleTest.executeSoon(function() { aCallback(win); });
+    }, true);
+    SimpleTest.executeSoon(function() { win.gBrowser.loadURI(contentPage); });
+  }, true);
 }
 
-
 var ignoreLoad = false;
 function handleLoad(aEvent) {
-  netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-
   // ignore every other load event ... We get one for loading the subtest (which
   // we want to ignore), and another when the subtest's form submits itself
   // (which we want to handle, to start the next test).
   ignoreLoad = !ignoreLoad;
   if (ignoreLoad) {
     ok(true, "Ignoring load of subtest #" + testNum);
     return;
   }
   ok(true, "Processing submission of subtest #" + testNum);
 
   checkTest();
 
   if (testNum < subtests.length) {
     loadNextTest();
   } else {
     ok(true, "private browsing notification tests finished.");
-    prefBranch.clearUserPref("browser.privatebrowsing.keep_current_session");
+
+    normalWindow.close();
+    privateWindow.close();
+
     SimpleTest.finish();
   }
 }
 
-
-var pb = get_PBSvc();
-if (!pb) { // Private Browsing might not be available
-  ok(true, "Private browsing service is not available");
-} else {
-  netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+var pwmgr = Cc["@mozilla.org/login-manager;1"].
+            getService(Ci.nsILoginManager);
+ok(pwmgr != null, "Access pwmgr");
 
-  ok(Ci != null, "Access Ci");
-  ok(Cc != null, "Access Cc");
+// We need to make sure no logins have been stored by previous tests
+// for forms in |url|, otherwise the change password notification
+// would turn into a prompt, and the test will fail.
+var url = "http://test2.example.com";
+is(pwmgr.countLogins(url, "", null), 0, "No logins should be stored for " + url);
 
-  var prefBranch = Cc["@mozilla.org/preferences-service;1"].
-                   getService(Ci.nsIPrefBranch);
-  prefBranch.setBoolPref("browser.privatebrowsing.keep_current_session", true);
+var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1",
+                                             Ci.nsILoginInfo, "init");
+var login = new nsLoginInfo(url, url, null, "notifyu1", "notifyp1", "user", "pass");
 
-  var pwmgr = Cc["@mozilla.org/login-manager;1"].
-              getService(Ci.nsILoginManager);
-  ok(pwmgr != null, "Access pwmgr");
+var normalWindow;
+var privateWindow;
+
+var iframe;
+var normalWindowIframe;
+var privateWindowIframe;
 
-  // We need to make sure no logins have been stored by previous tests
-  // for forms in |url|, otherwise the change password notification
-  // would turn into a prompt, and the test will fail.
-  var url = "http://test2.example.com";
-  is(pwmgr.countLogins(url, "", null), 0, "No logins should be stored for " + url);
+var popupNotifications;
+var normalWindowPopupNotifications;
+var privateWindowPopupNotifications;
 
-  var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1",
-                                               Ci.nsILoginInfo, "init");
-  var login = new nsLoginInfo(url, url, null, "notifyu1", "notifyp1", "user", "pass");
+testOnWindow(false, function(aWin) {
+  var selectedBrowser = aWin.gBrowser.selectedBrowser;
 
-  var iframe = document.getElementById("iframe");
-  iframe.onload = handleLoad;
+  normalWindow = aWin;
+
+  normalWindowIframe = selectedBrowser.contentDocument.getElementById("iframe");
+  normalWindowIframe.onload = handleLoad;
 
   // popupNotifications (not *popup*) is a constant, per-tab container. So, we
   // only need to fetch it once.
-  var popupNotifications = getPopupNotifications(window.top);
-  ok(popupNotifications, "Got popupNotifications");
+  normalWindowPopupNotifications = getPopupNotifications(selectedBrowser.contentWindow.top);
+  ok(normalWindowPopupNotifications, "Got popupNotifications in normal window");
 
-  SimpleTest.waitForExplicitFinish();
+  testOnWindow(true, function(aPrivateWin) {
+    var selectedBrowser = aPrivateWin.gBrowser.selectedBrowser;
+
+    privateWindow = aPrivateWin;
+
+    privateWindowIframe = selectedBrowser.contentDocument.getElementById("iframe");
+    privateWindowIframe.onload = handleLoad;
 
-  loadNextTest();
-}
+    // popupNotifications (not *popup*) is a constant, per-tab container. So, we
+    // only need to fetch it once.
+    privateWindowPopupNotifications = getPopupNotifications(selectedBrowser.contentWindow.top);
+    ok(privateWindowPopupNotifications, "Got popupNotifications in private window");
 
+    loadNextTest();
+  });
+});
 
+SimpleTest.waitForExplicitFinish();
 </script>
 </pre>
 </body>
 </html>