dom/indexedDB/test/webapp_clearBrowserData_appFrame.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 <!--
     2   Any copyright is dedicated to the Public Domain.
     3   http://creativecommons.org/publicdomain/zero/1.0/
     4 -->
     5 <html>
     6 <head>
     7   <title>Indexed Database Clear Browser Data Test</title>
     9   <script type="text/javascript;version=1.7">
    10     "use strict";
    12     function ok(cond, message)
    13     {
    14       alert(JSON.stringify({ type: "ok",
    15                              args: [!!cond, "appFrame: " + message] }));
    16     }
    18     function info(message)
    19     {
    20       alert(JSON.stringify({ type: "info",
    21                              args: ["appFrame: " + message] }));
    22     }
    24     function finish()
    25     {
    26       alert(JSON.stringify({ type: "done" }));
    27     }
    29     window.onerror = ok.bind(window, false);
    31     function testSteps()
    32     {
    33       const objectStoreName = "foo";
    34       const testKey = 1;
    35       const testValue = objectStoreName;
    36       const dbName = location.pathname + location.search;
    38       // Determine whether our parent iframe asked us to create a remote
    39       // browser frame here.
    40       let remote_browser;
    41       if (location.search.indexOf("remote_browser=true") != -1) {
    42         remote_browser = true;
    43       }
    44       else if (location.search.indexOf("remote_browser=false") != -1) {
    45         remote_browser = false;
    46       }
    47       else {
    48         ok(false, "Expected remote_browser={true,false} in query string.");
    49         return;
    50       }
    52       let request = indexedDB.open(dbName, 1);
    53       request.onerror = errorHandler;
    54       request.onupgradeneeded = grabEventAndContinueHandler;
    55       request.onsuccess = unexpectedSuccessHandler;
    56       let event = yield undefined;
    58       let db = event.target.result;
    59       db.onerror = errorHandler;
    60       db.onversionchange = function(event) {
    61         event.target.close();
    62       }
    64       let objectStore = db.createObjectStore(objectStoreName);
    65       objectStore.add(testValue, testKey);
    67       request.onsuccess = grabEventAndContinueHandler;
    68       event = yield undefined;
    70       ok(db === event.target.result, "created database");
    72       objectStore =
    73         db.transaction(objectStoreName).objectStore(objectStoreName);
    74       objectStore.get(testKey).onsuccess = grabEventAndContinueHandler;
    75       event = yield undefined;
    77       ok(testValue == event.target.result, "data exists");
    79       let iframe = document.createElement("iframe");
    80       iframe.setAttribute("mozbrowser", "");
    81       // Send our querystring to the subframe because
    82       // webapp_clearBrowserData_browserFrame uses its pathname + querystring to
    83       // open a database which it assumes hasn't been touched by another test.
    84       iframe.setAttribute("src", "webapp_clearBrowserData_browserFrame.html" + location.search);
    85       iframe.setAttribute("remote", remote_browser);
    86       iframe.addEventListener("mozbrowsershowmodalprompt", function(event) {
    87         let message = JSON.parse(event.detail.message);
    88         switch (message.type) {
    89           case "block":
    90             info("blocking browserFrame");
    91             event.preventDefault();
    93             let request = navigator.mozApps.getSelf();
    94             request.onsuccess = function() {
    95               let app = request.result;
    96               ok(app, "got app");
    98               info("clearing browser data");
    99               app.clearBrowserData();
   101               info("unblocking browserFrame");
   102               event.detail.unblock();
   103             }
   104             break;
   105           case "done":
   106             continueToNextStepSync();
   107             break;
   108           default:
   109             alert(event.detail.message);
   110         }
   111       });
   113       info("loading browser frame");
   115       document.body.appendChild(iframe);
   116       yield undefined;
   118       request = indexedDB.open(dbName, 1);
   119       request.onerror = errorHandler;
   120       request.onupgradeneeded = unexpectedSuccessHandler;
   121       request.onsuccess = grabEventAndContinueHandler;
   122       event = yield undefined;
   124       db = event.target.result;
   125       db.onerror = errorHandler;
   127       objectStore =
   128         db.transaction(objectStoreName).objectStore(objectStoreName);
   129       objectStore.get(testKey).onsuccess = grabEventAndContinueHandler;
   130       event = yield undefined;
   132       ok(testValue == event.target.result, "data still exists");
   134       finish();
   135       yield undefined;
   136     }
   138   </script>
   140   <script type="text/javascript;version=1.7" src="helpers.js"></script>
   141 </head>
   143 <body onload="testGenerator.next();"></body>
   145 </html>

mercurial