dom/tests/mochitest/localstorage/test_localStorageQuotaPrivateBrowsing_perwindowpb.html

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 <html xmlns="http://www.w3.org/1999/xhtml">
     2 <head>
     3 <title>localStorage and DOM quota test</title>
     5 <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
     6 <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
     8 <script type="text/javascript">
     9 SimpleTest.waitForExplicitFinish();
    11 Components.utils.import("resource://gre/modules/Services.jsm");
    13 const Ci = Components.interfaces;
    14 const CONTENT_PAGE = "http://mochi.test:8888/chrome/dom/tests/mochitest/localstorage/page_blank.html";
    15 const slavePath = "/tests/dom/tests/mochitest/localstorage/";
    16 var currentTest = 1;
    17 var quota;
    19 try {
    20   quota = Services.prefs.getIntPref("dom.storage.default_quota");
    21 } catch (ex) {
    22   quota = 5 * 1024;
    23 }
    24 Services.prefs.setIntPref("browser.startup.page", 0);
    25 Services.prefs.setIntPref("dom.storage.default_quota", 1);
    27 var mainWindow = window.QueryInterface(Ci.nsIInterfaceRequestor).
    28   getInterface(Ci.nsIWebNavigation).QueryInterface(Ci.nsIDocShellTreeItem).
    29   rootTreeItem.QueryInterface(Ci.nsIInterfaceRequestor).
    30   getInterface(Ci.nsIDOMWindow);
    31 var slaveLoadsPending = 1;
    32 var slaveOrigin = "";
    33 var slave = null;
    34 var failureRegExp = new RegExp("^FAILURE");
    36 function startTest() {
    37   testOnWindow(true, function(aWindow) {
    38     info("Private window loaded");
    39     var frame = aWindow.content.document.createElement("iframe");
    40     aWindow.content.document.body.appendChild(frame);
    41     aWindow.content.addEventListener("message", function(aEvent) {
    42       onMessageReceived(aEvent, aWindow)
    43     }, false);
    44     slave = aWindow.content.frames[0];
    46     SimpleTest.waitForFocus(function() doNextTest(aWindow), aWindow);
    47   });
    48 }
    50 function doNextTest(aWindow) {
    51   info("Running test: " + currentTest);
    52   switch (currentTest) {
    53     // Initialy setup the quota to testing value of 1024B and
    54     // set a 500 bytes key with name length 1 (allocate 501 bytes)
    55     case 1:
    56       slaveOrigin = "http://example.com";
    57       slave.location = slaveOrigin + slavePath + "frameQuota.html?add&A&success";
    58       break;
    60     // In subdomain now set another key with length 500 bytes, i.e.
    61     // allocate 501 bytes
    62     case 2:
    63       slaveOrigin = "http://test1.example.com";
    64       slave.location = slaveOrigin + slavePath + "frameQuota.html?add&B&success";
    65       break;
    67     // Try to set the same key value again to check we don't fail
    68     // even 1002 bytes has already been exhausted from the quota
    69     // We just change the value of an existing key.
    70     case 3:
    71       slaveOrigin = "http://test1.example.com";
    72       slave.location = slaveOrigin + slavePath + "frameQuota.html?add&B&success";
    73       break;
    75     // Try to set the same key to a larger value that would lead to
    76     // quota reach and check that the value is still the old one
    77     case 4:
    78       slaveOrigin = "http://test1.example.com";
    79       slave.location = slaveOrigin + slavePath + "frameQuota.html?add2&B&failure";
    80       break;
    82     // In a different subdomain try to set a new 500 bytes key
    83     // and check we fail because we are over the quota
    84     case 5:
    85       slaveOrigin = "https://test2.example.com";
    86       slave.location = slaveOrigin + slavePath + "frameQuota.html?add&C&failure";
    87       break;
    89     // Remove from the second subdomain the second key, it must not fail
    90     // This should release the allocated space of the quota assigned to
    91     // example.com.
    92     case 6:
    93       slaveOrigin = "http://test1.example.com";
    94       slave.location = slaveOrigin + slavePath + "frameQuota.html?remove&B&success";
    95       break;
    97     // Now try again to set 500 bytes key, it must succeed.
    98     case 7:
    99       slaveOrigin = "https://test2.example.com";
   100       slave.location = slaveOrigin + slavePath + "frameQuota.html?add&C&success";
   101       break;
   103     case 8:
   104       // Do a clean up...
   105       // TODO Bug 455070, use just ?clear what invokes call
   106       // of clear() in the target frame. W/o clear method we must
   107       // call clear implemented as removeItem for each item in
   108       // the localStorage.
   109       slaveOrigin = "http://example.com";
   110       slave.location = slaveOrigin + slavePath + "frameQuota.html?clear&A&";
   111       break;
   113     case 9:
   114       // Do a clean up...
   115       slaveOrigin = "http://test1.example.com";
   116       slave.location = slaveOrigin + slavePath + "frameQuota.html?clear&B&";
   117       break;
   119     case 10:
   120       // Do a clean up...
   121       slaveOrigin = "https://test2.example.com";
   122       slave.location = slaveOrigin + slavePath + "frameQuota.html?clear&C&";
   123       break;
   125     default:
   126       Services.prefs.clearUserPref("browser.startup.page")
   127       Services.prefs.setIntPref("dom.storage.default_quota", quota);
   128       aWindow.close();
   129       SimpleTest.finish();
   130   }
   132   ++currentTest;
   133 }
   135 function onMessageReceived(event, aWindow) {
   136   info("Message received: " + event.data);
   137   switch (event.data) {
   138     // Indication of the frame onload event
   139     case "frame loaded":
   140       if (--slaveLoadsPending)
   141         break;
   142       // Just fall through...
   143     // Indication of successfully finished step of a test
   144     case "perf":
   145       slave.postMessage("step", slaveOrigin);
   146       break;
   147     // Indication of all test parts finish (from any of the frames)
   148     case "done":
   149       aWindow.content.localStorage.clear();
   150       slaveLoadsPending = 1;
   151       doNextTest(aWindow);
   152       break;
   153     // Any other message indicates error or succes message of a test
   154     default:
   155       SimpleTest.ok(!event.data.match(failureRegExp), event.data);
   156       break;
   157   }
   158 }
   160 function testOnWindow(aIsPrivate, aCallback) {
   161   var win = mainWindow.OpenBrowserWindow({private: aIsPrivate});
   162   win.addEventListener("load", function onLoad() {
   163     win.removeEventListener("load", onLoad, false);
   164     win.addEventListener("DOMContentLoaded", function onInnerLoad() {
   165       if (win.content.location.href != CONTENT_PAGE) {
   166         win.gBrowser.loadURI(CONTENT_PAGE);
   167         return;
   168       }
   169       win.removeEventListener("DOMContentLoaded", onInnerLoad, true);
   170       win.gBrowser.selectedBrowser.focus();
   171       SimpleTest.executeSoon(function() { aCallback(win); });
   172     }, true);
   173     win.gBrowser.loadURI(CONTENT_PAGE);
   174   }, true);
   175 }
   177 </script>
   178 </head>
   179 <body onload="startTest();">
   180 </body>
   181 </html>

mercurial