toolkit/components/passwordmgr/test/test_notifications_popup.html

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4   <meta charset="utf-8"/>
     5   <title>Test for Login Manager in popup Windows</title>
     6   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
     7   <script type="text/javascript" src="pwmgr_common.js"></script>
     8   <script type="text/javascript" src="notification_common.js"></script>
     9   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
    10 </head>
    11 <body>
    12 Login Manager test: notifications in popup windows
    13 <p id="display"></p>
    15 <div id="content" style="display: none">
    16   <iframe id="iframe"></iframe>
    17 </div>
    19 <pre id="test">
    20 <script class="testbody" type="text/javascript">
    22 /** Test for Login Manager: notifications in popup windows.
    24 Test flow:
    25   1) runNextTest starts the sub-tests by loading them into the iframe.
    26   2) The subtests trigger a PopupNotification which trigger checkTest (from the
    27      panel event listener).
    28   3) An action is taken on the notification which triggers the
    29      passwordmgr-storage-changed observer that calls runNextTest (from step 1).
    30 **/
    33 var subtests = [
    34                 // query arguments are: username, password, features, auto-close (delimited by '|')
    35                 "subtst_notifications_11.html?notifyu1|notifyp1|menubar=no,toolbar=no,location=no|autoclose",  // 1
    36                 "subtst_notifications_11.html?notifyu1|pass2|menubar=no,toolbar=no,location=no|autoclose",     // 2
    37                 "subtst_notifications_11.html?notifyu2|notifyp2||",  // 3
    38                 "subtst_notifications_11.html?notifyu2|pass2||",     // 4
    39                ];
    41 function runNextTest() {
    42     testNum++;
    43     ok(true, "Starting test #" + testNum);
    44     if (testNum <= subtests.length) {
    45         iframe.src = subtests[testNum-1];
    46     } else {
    47         // final check which will call finish
    48         checkTest();
    49     }
    50 }
    52 PasswordMgrObserver = {
    53   observe: function passwordMgrObserver_observe(subject, topic, data) {
    54       // Only run the next test for actions triggered from a doorhanger (rather
    55       // than cleanup with removeLogin)
    56       if (data == "removeLogin")
    57           return;
    58       runNextTest();
    59   },
    60 };
    62 // Remember, Never for This Site, Not Now
    63 function checkTest() {
    64     var popup, login, logins;
    66     switch(testNum) {
    68       case 1:
    69         popup = getPopup(popupNotifications, "password-save");
    70         ok(popup, "got notification popup");
    71         // Sanity check, no logins should exist yet.
    72         logins = pwmgr.getAllLogins();
    73         is(logins.length, 0, "Should not have any logins yet");
    75         // password-save with chrome hidden
    76         clickPopupButton(popup, kRememberButton);
    77         break;
    79       case 2:
    80         // Check result of clicking kRememberButton
    81         logins = pwmgr.getAllLogins();
    82         is(logins.length, 1, "Should only have 1 login");
    83         login = SpecialPowers.wrap(logins[0]).QueryInterface(Ci.nsILoginMetaInfo);
    84         ok(login.timesUsed, 1, "Check times used on new entry");
    86         // password-change with chrome hidden
    87         popup = getPopup(popupNotifications, "password-change");
    88         ok(popup, "got notification popup");
    89         clickPopupButton(popup, kChangeButton);
    90         break;
    92       case 3:
    93         // Check to make sure we updated the password, timestamps and use count for
    94         // the login being changed with this form.
    95         logins = pwmgr.getAllLogins();
    96         is(logins.length, 1, "Should only have 1 login");
    97         login = SpecialPowers.wrap(logins[0]).QueryInterface(Ci.nsILoginMetaInfo);
    98         is(login.password, "pass2", "Check password changed");
    99         is(login.timesUsed, 2, "check .timesUsed incremented on change");
   100         ok(login.timeCreated < login.timeLastUsed, "timeLastUsed bumped");
   101         ok(login.timeLastUsed == login.timePasswordChanged, "timeUsed == timeChanged");
   103         login1.password = "pass2";
   104         pwmgr.removeLogin(login1);
   105         login1.password = "notifyp1";
   107         // password-save with chrome visible
   108         var popupWin = iframe.contentWindow.popupWin;
   109         ok(popupWin, "Check popupWin is accessible");
   110         var popupNotificationsInPopup = getPopupNotifications(popupWin);
   111         ok(popupNotificationsInPopup, "Got popupNotificationsInPopup");
   112         popup = getPopup(popupNotificationsInPopup, "password-save");
   113         ok(popup, "got notification popup");
   114         clickPopupButton(popup, kRememberButton);
   115         popupWin.close();
   116         break;
   118       case 4:
   119         // Check result of clicking kRememberButton
   120         logins = pwmgr.getAllLogins();
   121         is(logins.length, 1, "Should only have 1 login now");
   122         login = SpecialPowers.wrap(logins[0]).QueryInterface(Ci.nsILoginMetaInfo);
   123         ok(login.timesUsed, 1, "Check times used on new entry");
   125         // password-change with chrome visible
   126         var popupWin = iframe.contentWindow.popupWin;
   127         ok(popupWin, "Check popupWin is accessible");
   128         var popupNotificationsInPopup = getPopupNotifications(popupWin);
   129         ok(popupNotificationsInPopup, "Got popupNotificationsInPopup");
   130         popup = getPopup(popupNotificationsInPopup, "password-change");
   131         ok(popup, "got notification popup");
   132         clickPopupButton(popup, kChangeButton);
   133         popupWin.close();
   134         break;
   136       case 5:
   137         // Check to make sure we updated the password, timestamps and use count for
   138         // the login being changed with this form.
   139         logins = pwmgr.getAllLogins();
   140         is(logins.length, 1, "Should have 1 login");
   141         login = SpecialPowers.wrap(logins[0]).QueryInterface(Ci.nsILoginMetaInfo);
   142         is(login.password, "pass2", "Check password changed");
   143         is(login.timesUsed, 2, "check .timesUsed incremented on change");
   144         ok(login.timeCreated < login.timeLastUsed, "timeLastUsed bumped");
   145         ok(login.timeLastUsed == login.timePasswordChanged, "timeUsed == timeChanged");
   147         // cleanup
   148         SpecialPowers.removeObserver(PasswordMgrObserver, "passwordmgr-storage-changed");
   149         popupNotifications.panel.removeEventListener("popupshown", checkTest, false);
   151         login2.password = "pass2";
   152         pwmgr.removeLogin(login2);
   153         login2.password = "notifyp2";
   155         ok(true, "notification tests finished.");
   156         SimpleTest.finish();
   158         break;
   160       default:
   161         ok(false, "Unexpected call to checkTest for test #" + testNum);
   163     }
   164 }
   166 const Ci = SpecialPowers.Ci;
   167 const Cc = SpecialPowers.Cc;
   168 ok(Ci != null, "Access Ci");
   169 ok(Cc != null, "Access Cc");
   171 var pwmgr = Cc["@mozilla.org/login-manager;1"].
   172             getService(Ci.nsILoginManager);
   173 ok(pwmgr != null, "Access pwmgr");
   175 pwmgr.removeAllLogins();
   177 var nsLoginInfo = new SpecialPowers.wrap(SpecialPowers.Components).
   178                       Constructor("@mozilla.org/login-manager/loginInfo;1",
   179                                   Ci.nsILoginInfo, "init");
   180 var login1 = new nsLoginInfo("http://mochi.test:8888", "http://mochi.test:8888", null,
   181                              "notifyu1", "notifyp1", "user", "pass");
   182 var login2 = new nsLoginInfo("http://mochi.test:8888", "http://mochi.test:8888", null,
   183                              "notifyu2", "notifyp2", "user", "pass");
   185 SpecialPowers.addObserver(PasswordMgrObserver, "passwordmgr-storage-changed", false);
   187 // popupNotifications (not *popup*) is a constant, per-tab container. So, we
   188 // only need to fetch it once.
   189 var popupNotifications = getPopupNotifications(window.top);
   190 ok(popupNotifications, "Got popupNotifications");
   192 popupNotifications.panel.addEventListener("popupshown", checkTest, false);
   194 var iframe = document.getElementById("iframe");
   195 var testNum = 0;
   197 SimpleTest.waitForFocus(runNextTest);
   199 SimpleTest.waitForExplicitFinish();
   200 </script>
   201 </pre>
   202 </body>
   203 </html>

mercurial