fune/dom/indexedDB/test/exceptions_in_events_iframe.html
Brian Grinstead 0d460e3432 Bug 1544322 - Part 2.2 - Remove the [type] attribute for one-liner <script> tags loading files in /tests/SimpleTest/ in dom/ r=bzbarsky
This is split from the previous changeset since if we include dom/ the file size is too
large for phabricator to handle.

This is an autogenerated commit to handle scripts loading mochitest harness files, in
the simple case where the script src is on the same line as the tag.

This was generated with https://bug1544322.bmoattachments.org/attachment.cgi?id=9058170
using the `--part 2` argument.

Differential Revision: https://phabricator.services.mozilla.com/D27457

--HG--
extra : moz-landing-system : lando
2019-04-16 03:53:28 +00:00

182 lines
5.9 KiB
HTML

<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<head>
<title>Indexed Database Property Test</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script type="text/javascript">
let testGenerator = testSteps();
function ok(val, message) {
val = val ? "true" : "false";
window.parent.postMessage("SimpleTest.ok(" + val + ", '" + message +
"');", "*");
}
function is(a, b, message) {
ok(a == b, message);
}
function grabEventAndContinueHandler(event) {
testGenerator.next(event);
}
function errorHandler(event) {
ok(false, "indexedDB error, code " + event.target.error.name);
finishTest();
}
function unexpectedSuccessHandler(event) {
ok(false, "got success when it was not expected!");
finishTest();
}
function finishTest() {
// Let window.onerror have a chance to fire
setTimeout(function() {
setTimeout(function() {
testGenerator.return();
window.parent.postMessage("SimpleTest.finish();", "*");
}, 0);
}, 0);
}
window.onerror = function() {
return false;
};
function* testSteps() {
window.parent.SpecialPowers.addPermission("indexedDB", true, document);
// Test 1: Throwing an exception in an upgradeneeded handler should
// abort the versionchange transaction and fire an error at the request.
let request = indexedDB.open(window.location.pathname, 1);
request.onerror = errorHandler;
request.onsuccess = unexpectedSuccessHandler;
request.onupgradeneeded = function() {
let transaction = request.transaction;
transaction.oncomplete = unexpectedSuccessHandler;
transaction.onabort = grabEventAndContinueHandler;
throw new Error("STOP");
};
let event = yield undefined;
is(event.type, "abort",
"Throwing during an upgradeneeded event should abort the transaction.");
is(event.target.error.name, "AbortError", "Got AbortError object");
request.onerror = grabEventAndContinueHandler;
event = yield undefined;
is(event.type, "error",
"Throwing during an upgradeneeded event should fire an error.");
// Test 2: Throwing during a request's success handler should abort the
// transaction.
request = indexedDB.open(window.location.pathname, 1);
request.onerror = errorHandler;
request.onblocked = errorHandler;
request.onupgradeneeded = grabEventAndContinueHandler;
request.onsuccess = unexpectedSuccessHandler;
let openrequest = request;
event = yield undefined;
request.onupgradeneeded = unexpectedSuccessHandler;
let db = event.target.result;
db.onerror = function(event) {
event.preventDefault();
};
event.target.transaction.oncomplete = unexpectedSuccessHandler;
event.target.transaction.onabort = grabEventAndContinueHandler;
is(db.version, 1, "Correct version");
is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");
let objectStore = db.createObjectStore("foo");
is(db.objectStoreNames.length, 1, "Correct objectStoreNames length");
ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
request = objectStore.add({}, 1);
request.onsuccess = function(event) {
throw new Error("foo");
};
event = yield undefined;
is(event.type, "abort", "Got transaction abort event");
is(event.target.error.name, "AbortError", "Got AbortError object");
openrequest.onerror = grabEventAndContinueHandler;
event = yield undefined;
is(event.type, "error", "Got IDBOpenDBRequest error event");
is(event.target, openrequest, "Right event target");
is(event.target.error.name, "AbortError", "Right error name");
// Test 3: Throwing during a request's error handler should abort the
// transaction, even if preventDefault is called on the error event.
request = indexedDB.open(window.location.pathname, 1);
request.onerror = errorHandler;
request.onblocked = errorHandler;
request.onupgradeneeded = grabEventAndContinueHandler;
request.onsuccess = unexpectedSuccessHandler;
openrequest = request;
event = yield undefined;
request.onupgradeneeded = unexpectedSuccessHandler;
db = event.target.result;
db.onerror = function(event) {
event.preventDefault();
};
event.target.transaction.oncomplete = unexpectedSuccessHandler;
event.target.transaction.onabort = grabEventAndContinueHandler;
is(db.version, 1, "Correct version");
is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");
objectStore = db.createObjectStore("foo");
is(db.objectStoreNames.length, 1, "Correct objectStoreNames length");
ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
request = objectStore.add({}, 1);
request.onerror = errorHandler;
request = objectStore.add({}, 1);
request.onsuccess = unexpectedSuccessHandler;
request.onerror = function(event) {
event.preventDefault();
throw new Error("STOP");
};
event = yield undefined;
is(event.type, "abort", "Got transaction abort event");
is(event.target.error.name, "AbortError", "Got AbortError object");
openrequest.onerror = grabEventAndContinueHandler;
event = yield undefined;
is(event.type, "error", "Got IDBOpenDBRequest error event");
is(event.target, openrequest, "Right event target");
is(event.target.error.name, "AbortError", "Right error name");
finishTest();
yield undefined;
}
</script>
</head>
<body onload="testGenerator.next();"></body>
</html>