summaryrefslogtreecommitdiffstats
path: root/dom/indexedDB/test/event_propagation_iframe.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/indexedDB/test/event_propagation_iframe.html')
-rw-r--r--dom/indexedDB/test/event_propagation_iframe.html148
1 files changed, 148 insertions, 0 deletions
diff --git a/dom/indexedDB/test/event_propagation_iframe.html b/dom/indexedDB/test/event_propagation_iframe.html
new file mode 100644
index 000000000..c571421c8
--- /dev/null
+++ b/dom/indexedDB/test/event_propagation_iframe.html
@@ -0,0 +1,148 @@
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>Indexed Database Property Test</title>
+
+ <script type="text/javascript;version=1.7">
+
+ let testGenerator = testSteps();
+
+ function ok(val, message) {
+ val = val ? "true" : "false";
+ window.parent.postMessage("SimpleTest.ok(" + val + ", '" + message +
+ "');", "*");
+ }
+
+ function grabEventAndContinueHandler(event) {
+ testGenerator.send(event);
+ }
+
+ function errorHandler(event) {
+ ok(false, "indexedDB error, code " + event.target.error.name);
+ finishTest();
+ }
+
+ function finishTest() {
+ // Let window.onerror have a chance to fire
+ setTimeout(function() {
+ setTimeout(function() {
+ testGenerator.close();
+ ok(windowErrorCount == 1, "Good window.onerror count");
+ window.parent.postMessage("SimpleTest.finish();", "*");
+ }, 0);
+ }, 0);
+ }
+
+ const eventChain = [
+ "IDBRequest",
+ "IDBTransaction",
+ "IDBDatabase"
+ ];
+
+ let captureCount = 0;
+ let bubbleCount = 0;
+ let atTargetCount = 0;
+ let windowErrorCount = 0;
+
+ window.onerror = function(event) {
+ ok(!windowErrorCount++, "Correct number of window.onerror events");
+ setTimeout(function() { testGenerator.next(); }, 0);
+ };
+
+ function errorEventCounter(event) {
+ ok(event.type == "error", "Got an error event");
+ ok(event.target instanceof window[eventChain[0]],
+ "Correct event.target");
+
+ let constructor;
+ if (event.eventPhase == event.AT_TARGET) {
+ atTargetCount++;
+ constructor = eventChain[0];
+ }
+ else if (event.eventPhase == event.CAPTURING_PHASE) {
+ constructor = eventChain[eventChain.length - 1 - captureCount++];
+ }
+ else if (event.eventPhase == event.BUBBLING_PHASE) {
+ constructor = eventChain[++bubbleCount];
+ if (windowErrorCount && bubbleCount == eventChain.length - 1) {
+ event.preventDefault();
+ }
+ }
+ ok(event.currentTarget instanceof window[constructor],
+ "Correct event.currentTarget");
+
+ if (bubbleCount == eventChain.length - 1) {
+ ok(bubbleCount == captureCount,
+ "Got same number of calls for both phases");
+ ok(atTargetCount == 1, "Got one atTarget event");
+
+ captureCount = bubbleCount = atTargetCount = 0;
+ if (windowErrorCount) {
+ finishTest();
+ }
+ }
+ }
+
+ function testSteps() {
+ window.parent.SpecialPowers.addPermission("indexedDB", true, document);
+
+ let request = indexedDB.open(window.location.pathname, 1);
+ request.onerror = errorHandler;
+ request.onupgradeneeded = grabEventAndContinueHandler;
+ let event = yield undefined;
+
+ let db = event.target.result;
+ db.onerror = errorEventCounter;
+ db.addEventListener("error", errorEventCounter, true);
+
+ event.target.onsuccess = grabEventAndContinueHandler;
+
+ db.createObjectStore("foo", { autoIncrement: true });
+ yield undefined;
+
+ let transaction = db.transaction("foo", "readwrite");
+ transaction.addEventListener("error", errorEventCounter, false);
+ transaction.addEventListener("error", errorEventCounter, true);
+
+ let objectStore = transaction.objectStore("foo");
+
+ request = objectStore.add({}, 1);
+ request.onsuccess = grabEventAndContinueHandler;
+ request.onerror = errorHandler;
+ event = yield undefined;
+
+ request = objectStore.add({}, 1);
+ request.onsuccess = function(event) {
+ ok(false, "Did not expect second add to succeed.");
+ };
+ request.onerror = errorEventCounter;
+ yield undefined;
+
+ transaction = db.transaction("foo", "readwrite");
+ transaction.addEventListener("error", errorEventCounter, false);
+ transaction.addEventListener("error", errorEventCounter, true);
+
+ objectStore = transaction.objectStore("foo");
+
+ request = objectStore.add({}, 1);
+ request.onsuccess = grabEventAndContinueHandler;
+ request.onerror = errorHandler;
+ event = yield undefined;
+
+ request = objectStore.add({}, 1);
+ request.onsuccess = function(event) {
+ ok(false, "Did not expect second add to succeed.");
+ };
+ request.onerror = errorEventCounter;
+ yield undefined;
+ }
+ </script>
+
+</head>
+
+<body onload="testGenerator.next();"></body>
+
+</html>