dom/indexedDB/test/webapp_clearBrowserData.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 "use strict";
     6 const appDomain = "example.org";
     7 const manifestURL =
     8   location.protocol + "//" + appDomain + "/manifest.webapp";
    10 function testSteps()
    11 {
    12   const objectStoreName = "foo";
    13   const testKey = 1;
    14   const testValue = objectStoreName;
    16   // Determine whether the app and browser frames should be in or
    17   // out-of-process.
    18   let remote_app, remote_browser;
    19   if (window.location.href.indexOf("inproc_oop") != -1) {
    20     remote_app = false;
    21     remote_browser = true;
    22   }
    23   else if (window.location.href.indexOf("oop_inproc") != -1) {
    24     remote_app = true;
    25     remote_browser = false;
    26   }
    27   else if (window.location.href.indexOf("inproc_inproc") != -1) {
    28     remote_app = false;
    29     remote_browser = false;
    30   }
    31   else {
    32     ok(false, "Bad test filename!");
    33     return;
    34   }
    36   let request = indexedDB.open(window.location.pathname, 1);
    37   request.onerror = errorHandler;
    38   request.onupgradeneeded = grabEventAndContinueHandler;
    39   request.onsuccess = unexpectedSuccessHandler;
    40   let event = yield undefined;
    42   let db = event.target.result;
    43   db.onerror = errorHandler;
    44   db.onversionchange = function(event) {
    45     event.target.close();
    46   }
    48   let objectStore = db.createObjectStore(objectStoreName);
    49   objectStore.add(testValue, testKey);
    51   request.onsuccess = grabEventAndContinueHandler;
    52   event = yield undefined;
    54   // We need to send both remote_browser and remote_app in the querystring
    55   // because webapp_clearBrowserData_appFrame uses the path + querystring to
    56   // create and open a database which it checks no other test has touched.  If
    57   // we sent only remote_browser, then we wouldn't be able to test both
    58   // (remote_app==false, remote_browser==false) and (remote_app==true,
    59   // remote_browser==false).
    60   let srcURL = location.protocol + "//" + appDomain +
    61     location.pathname.substring(0, location.pathname.lastIndexOf('/')) +
    62     "/webapp_clearBrowserData_appFrame.html?" +
    63     "remote_browser=" + remote_browser + "&" +
    64     "remote_app=" + remote_app;
    66   let iframe = document.createElement("iframe");
    67   iframe.setAttribute("mozbrowser", "");
    68   iframe.setAttribute("mozapp", manifestURL);
    69   iframe.setAttribute("src", srcURL);
    70   iframe.setAttribute("remote", remote_app);
    71   iframe.addEventListener("mozbrowsershowmodalprompt", function(event) {
    72     let message = JSON.parse(event.detail.message);
    73     switch (message.type) {
    74       case "info":
    75       case "ok":
    76         window[message.type].apply(window, message.args);
    77         break;
    78       case "done":
    79         continueToNextStepSync();
    80         break;
    81       default:
    82         throw "unknown message";
    83     }
    84   });
    86   info("loading app frame");
    88   document.body.appendChild(iframe);
    89   yield undefined;
    91   request = indexedDB.open(window.location.pathname, 1);
    92   request.onerror = errorHandler;
    93   request.onupgradeneeded = unexpectedSuccessHandler;
    94   request.onsuccess = grabEventAndContinueHandler;
    95   event = yield undefined;
    97   db = event.target.result;
    98   db.onerror = errorHandler;
   100   objectStore =
   101     db.transaction(objectStoreName).objectStore(objectStoreName);
   102   objectStore.get(testKey).onsuccess = grabEventAndContinueHandler;
   103   event = yield undefined;
   105   ok(testValue == event.target.result, "data still exists");
   107   finishTest();
   108   yield undefined;
   109 }
   111 function start()
   112 {
   113   if (!SpecialPowers.isMainProcess()) {
   114     todo(false, "Test disabled in child processes, for now");
   115     SimpleTest.finish();
   116     return;
   117   }
   119   SpecialPowers.addPermission("browser", true, document);
   120   SpecialPowers.addPermission("browser", true, { manifestURL: manifestURL,
   121                                                  isInBrowserElement: false });
   122   SpecialPowers.addPermission("embed-apps", true, document);
   124   SpecialPowers.setAllAppsLaunchable(true);
   126   window.addEventListener("unload", function cleanup(event) {
   127     if (event.target == document) {
   128       window.removeEventListener("unload", cleanup, false);
   130       SpecialPowers.removePermission("browser", location.href);
   131       SpecialPowers.removePermission("browser",
   132                                      location.protocol + "//" + appDomain);
   133       SpecialPowers.removePermission("embed-apps", location.href);
   134     }
   135   }, false);
   137   SpecialPowers.pushPrefEnv({
   138     "set": [["dom.mozBrowserFramesEnabled", true]]
   139   }, runTest);
   140 }

mercurial