dom/indexedDB/test/exceptions_in_events_iframe.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 Property Test</title>
     9   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
    10   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
    12   <script type="text/javascript;version=1.7">
    13     let testGenerator = testSteps();
    15     function ok(val, message) {
    16       val = val ? "true" : "false";
    17       window.parent.postMessage("SimpleTest.ok(" + val + ", '" + message +
    18                                 "');", "*");
    19     }
    21     function is(a, b, message) {
    22       ok(a == b, message);
    23     }
    25     function grabEventAndContinueHandler(event) {
    26       testGenerator.send(event);
    27     }
    29     function errorHandler(event) {
    30       ok(false, "indexedDB error, code " + event.target.error.name);
    31       finishTest();
    32     }
    34     function unexpectedSuccessHandler(event) {
    35       ok(false, "got success when it was not expected!");
    36       finishTest();
    37     }
    39     function finishTest() {
    40       // Let window.onerror have a chance to fire
    41       setTimeout(function() {
    42         setTimeout(function() {
    43           testGenerator.close();
    44           window.parent.postMessage("SimpleTest.finish();", "*");
    45         }, 0);
    46       }, 0);
    47     }
    49     window.onerror = function() {
    50       return false;
    51     };
    53     function testSteps() {
    54       // Test 1: Throwing an exception in an upgradeneeded handler should
    55       // abort the versionchange transaction and fire an error at the request.
    56       let request = indexedDB.open(window.location.pathname, 1);
    57       request.onerror = errorHandler;
    58       request.onsuccess = unexpectedSuccessHandler;
    59       request.onupgradeneeded = function () {
    60         let transaction = request.transaction;
    61         transaction.oncomplete = unexpectedSuccessHandler;
    62         transaction.onabort = grabEventAndContinueHandler
    63         throw "STOP";
    64       };
    66       let event = yield undefined;
    67       is(event.type, "abort",
    68          "Throwing during an upgradeneeded event should abort the transaction.");
    69       is(event.target.error.name, "AbortError", "Got AbortError object");
    71       request.onerror = grabEventAndContinueHandler;
    72       event = yield undefined;
    74       is(event.type, "error",
    75          "Throwing during an upgradeneeded event should fire an error.");
    77       // Test 2: Throwing during a request's success handler should abort the
    78       // transaction.
    79       let request = indexedDB.open(window.location.pathname, 1);
    80       request.onerror = errorHandler;
    81       request.onblocked = errorHandler;
    82       request.onupgradeneeded = grabEventAndContinueHandler;
    83       request.onsuccess = unexpectedSuccessHandler;
    84       let openrequest = request;
    85       let event = yield undefined;
    87       request.onupgradeneeded = unexpectedSuccessHandler;
    89       let db = event.target.result;
    90       db.onerror = function(event) {
    91         event.preventDefault();
    92       };
    94       event.target.transaction.oncomplete = unexpectedSuccessHandler;
    95       event.target.transaction.onabort = grabEventAndContinueHandler;
    97       is(db.version, 1, "Correct version");
    98       is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");
   100       let objectStore = db.createObjectStore("foo");
   102       is(db.objectStoreNames.length, 1, "Correct objectStoreNames length");
   103       ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
   105       request = objectStore.add({}, 1);
   106       request.onsuccess = function(event) {
   107         throw "foo";
   108       };
   110       event = yield undefined;
   112       is(event.type, "abort", "Got transaction abort event");
   113       is(event.target.error.name, "AbortError", "Got AbortError object");
   114       openrequest.onerror = grabEventAndContinueHandler;
   116       event = yield undefined;
   118       is(event.type, "error", "Got IDBOpenDBRequest error event");
   119       is(event.target, openrequest, "Right event target");
   120       is(event.target.error.name, "AbortError", "Right error name");
   122       // Test 3: Throwing during a request's error handler should abort the
   123       // transaction, even if preventDefault is called on the error event.
   124       let request = indexedDB.open(window.location.pathname, 1);
   125       request.onerror = errorHandler;
   126       request.onblocked = errorHandler;
   127       request.onupgradeneeded = grabEventAndContinueHandler;
   128       request.onsuccess = unexpectedSuccessHandler;
   129       let openrequest = request;
   130       let event = yield undefined;
   132       request.onupgradeneeded = unexpectedSuccessHandler;
   134       let db = event.target.result;
   135       db.onerror = function(event) {
   136         event.preventDefault();
   137       };
   139       event.target.transaction.oncomplete = unexpectedSuccessHandler;
   140       event.target.transaction.onabort = grabEventAndContinueHandler;
   142       is(db.version, 1, "Correct version");
   143       is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");
   145       let objectStore = db.createObjectStore("foo");
   147       is(db.objectStoreNames.length, 1, "Correct objectStoreNames length");
   148       ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
   150       request = objectStore.add({}, 1);
   151       request.onerror = errorHandler;
   152       request = objectStore.add({}, 1);
   153       request.onsuccess = unexpectedSuccessHandler;
   154       request.onerror = function (event) {
   155         event.preventDefault();
   156         throw "STOP";
   157       };
   159       event = yield undefined;
   161       is(event.type, "abort", "Got transaction abort event");
   162       is(event.target.error.name, "AbortError", "Got AbortError object");
   163       openrequest.onerror = grabEventAndContinueHandler;
   165       event = yield undefined;
   167       is(event.type, "error", "Got IDBOpenDBRequest error event");
   168       is(event.target, openrequest, "Right event target");
   169       is(event.target.error.name, "AbortError", "Right error name");
   171       finishTest();
   172       yield undefined;
   173     }
   174   </script>
   176 </head>
   178 <body onload="testGenerator.next();"></body>
   180 </html>

mercurial