summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/webcomponents/test_event_retarget.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/tests/mochitest/webcomponents/test_event_retarget.html')
-rw-r--r--dom/tests/mochitest/webcomponents/test_event_retarget.html153
1 files changed, 153 insertions, 0 deletions
diff --git a/dom/tests/mochitest/webcomponents/test_event_retarget.html b/dom/tests/mochitest/webcomponents/test_event_retarget.html
new file mode 100644
index 0000000000..05b4fa3ebe
--- /dev/null
+++ b/dom/tests/mochitest/webcomponents/test_event_retarget.html
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=887541
+-->
+<head>
+ <title>Test for event retargeting in web components</title>
+ <script type="text/javascript" src="head.js"></script>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=887541">Bug 887541</a>
+<script>
+
+SimpleTest.waitForExplicitFinish();
+createIframe()
+ .then((aDocument) => {
+ /*
+ * Creates an event listener with an expected event target.
+ */
+ function createEventListener(expectedTarget, msg) {
+ return function(e) {
+ is(e.target, expectedTarget, msg);
+ };
+ }
+
+ /*
+ * Test of event retargeting through a basic ShadowRoot with a content insertion point.
+ *
+ * <div elemThree> ---- <shadow-root shadowOne>
+ * | |
+ * <div elemOne> <content elemTwo>
+ *
+ * Dispatch event on elemOne
+ */
+
+ var elemOne = aDocument.createElement("div");
+ var elemTwo = aDocument.createElement("content");
+ var elemThree = aDocument.createElement("div");
+ var shadowOne = elemThree.attachShadow({mode: "open"});
+
+ elemThree.appendChild(elemOne);
+ shadowOne.appendChild(elemTwo);
+
+ elemOne.addEventListener("custom", createEventListener(elemOne, "elemOne is in common ancestor tree of elemOne."));
+ elemTwo.addEventListener("custom", createEventListener(elemOne, "elemOne is in common ancestor tree of elemTwo."));
+ elemThree.addEventListener("custom", createEventListener(elemOne, "elemOne is in common ancestor tree of elemThree."));
+ shadowOne.addEventListener("custom", createEventListener(elemOne, "elemOne is in common ancestor tree of shadowOne."));
+
+ var customEvent = new CustomEvent("custom", { "bubbles" : true });
+ elemOne.dispatchEvent(customEvent);
+
+ /*
+ * Test of event retargeting through a basic ShadowRoot with a content insertion point.
+ *
+ * <div elemThree> ---- <shadow-root shadowOne>
+ * | |
+ * <div elemOne> <content elemTwo>
+ *
+ * Dispatch event on elemTwo
+ */
+
+ elemOne = aDocument.createElement("div");
+ elemTwo = aDocument.createElement("content");
+ elemThree = aDocument.createElement("div");
+ shadowOne = elemThree.attachShadow({mode: "open"});
+
+ elemThree.appendChild(elemOne);
+ shadowOne.appendChild(elemTwo);
+
+ elemTwo.addEventListener("custom", createEventListener(elemTwo, "elemTwo is in common ancestor tree of elemTwo."));
+ elemThree.addEventListener("custom", createEventListener(elemThree, "elemThree is in common ancestor tree of elemThree."));
+ shadowOne.addEventListener("custom", createEventListener(elemTwo, "elemTwo is in common ancestor tree of shadowOne."));
+
+ customEvent = new CustomEvent("custom", { "bubbles" : true });
+ elemTwo.dispatchEvent(customEvent);
+
+ /*
+ * Test of event retargeting through a nested ShadowRoots with content insertion points.
+ *
+ * <div elemFive> --- <shadow-root shadowTwo>
+ * | |
+ * <div elemOne> <div elemFour> ----- <shadow-root shadowOne>
+ * | |
+ * <content elemTwo> <content elemThree>
+ *
+ * Dispatch custom event on elemOne.
+ */
+
+ elemOne = aDocument.createElement("div");
+ elemTwo = aDocument.createElement("content");
+ elemThree = aDocument.createElement("content");
+ var elemFour = aDocument.createElement("div");
+ var elemFive = aDocument.createElement("div");
+ var shadowTwo = elemFive.attachShadow({mode: "open"});
+ shadowOne = elemFour.attachShadow({mode: "open"});
+
+ elemFive.appendChild(elemOne);
+ shadowTwo.appendChild(elemFour);
+ elemFour.appendChild(elemTwo);
+ shadowOne.appendChild(elemThree);
+
+ elemOne.addEventListener("custom", createEventListener(elemOne, "elemOne is in common ancestor tree of elemOne."));
+ elemTwo.addEventListener("custom", createEventListener(elemOne, "elemOne is in common ancestor tree of elemTwo."));
+ elemThree.addEventListener("custom", createEventListener(elemOne, "elemOne is in common ancestor tree of elemThree."));
+ elemFour.addEventListener("custom", createEventListener(elemOne, "elemOne is in common ancestor tree of elemFour."));
+ elemFive.addEventListener("custom", createEventListener(elemOne, "elemOne is in common ancestor tree of elemFive."));
+ shadowOne.addEventListener("custom", createEventListener(elemOne, "elemOne is in common ancestor tree of shadowOne."));
+ shadowTwo.addEventListener("custom", createEventListener(elemOne, "elemOne is in common ancestor tree of shadowTwo."));
+
+ customEvent = new CustomEvent("custom", { "bubbles" : true });
+ elemOne.dispatchEvent(customEvent);
+
+ /*
+ * Test of event retargeting through a nested ShadowRoots with content insertion points.
+ *
+ * <div elemFive> --- <shadow-root shadowTwo>
+ * | |
+ * <div elemOne> <div elemFour> ----- <shadow-root shadowOne>
+ * | |
+ * <content elemTwo> <content elemThree>
+ *
+ * Dispatch custom event on elemThree.
+ */
+
+ elemOne = aDocument.createElement("div");
+ elemTwo = aDocument.createElement("content");
+ elemThree = aDocument.createElement("content");
+ elemFour = aDocument.createElement("div");
+ elemFive = aDocument.createElement("div");
+ shadowTwo = elemFive.attachShadow({mode: "open"});
+ shadowOne = elemFour.attachShadow({mode: "open"});
+
+ elemFive.appendChild(elemOne);
+ shadowTwo.appendChild(elemFour);
+ elemFour.appendChild(elemTwo);
+ shadowOne.appendChild(elemThree);
+
+ elemThree.addEventListener("custom", createEventListener(elemThree, "elemThree is in common ancestor tree of elemThree."));
+ elemFour.addEventListener("custom", createEventListener(elemFour, "elemFour is in common ancestor tree of elemFour."));
+ elemFive.addEventListener("custom", createEventListener(elemFive, "elemFive is in common ancestor tree of elemFive."));
+ shadowOne.addEventListener("custom", createEventListener(elemThree, "elemThree is in common ancestor tree of shadowOne."));
+ shadowTwo.addEventListener("custom", createEventListener(elemFour, "elemFour is in common ancestor tree of shadowTwo."));
+
+ customEvent = new CustomEvent("custom", { "bubbles" : true });
+ elemThree.dispatchEvent(customEvent);
+
+ SimpleTest.finish();
+ });
+</script>
+</body>
+</html>