Index: third_party/WebKit/LayoutTests/shadow-dom/events-related-target-scoped.html |
diff --git a/third_party/WebKit/LayoutTests/shadow-dom/events-related-target-scoped.html b/third_party/WebKit/LayoutTests/shadow-dom/events-related-target-scoped.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9871c64c39a61f5d10d9b41aeb9ab9d60d6c4f90 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/shadow-dom/events-related-target-scoped.html |
@@ -0,0 +1,114 @@ |
+<!DOCTYPE html> |
+<script src="../resources/testharness.js"></script> |
+<script src="../resources/testharnessreport.js"></script> |
+<script src="../fast/dom/shadow/resources/shadow-dom.js"></script> |
+ |
+<div id="log"></div> |
+<div id="sandbox"> |
+ <div id = "host"> |
+ <template> |
+ <input id="target1"></input> |
+ <input id="target2"></input> |
+ <input id="target3"></input> |
+ <input id="target4"></input> |
+ <input id="target5"></input> |
+ </template> |
+ </div> |
+</div> |
+ |
+<script> |
+ |
+function moveMouseOver(element) |
+{ |
+ if (!window.eventSender || !window.internals) |
+ return; |
+ |
+ var x = element.offsetLeft + element.offsetWidth / 2; |
+ var y; |
+ if (element.hasChildNodes() || window.internals.shadowRoot(element)) |
+ y = element.offsetTop; |
+ else |
+ y = element.offsetTop + element.offsetHeight / 2; |
+ eventSender.mouseMoveTo(x, y); |
+} |
+ |
+var sandbox = document.getElementById('sandbox'); |
+convertTemplatesToShadowRootsWithin(sandbox); |
+var target1 = getNodeInComposedTree('host/target1'); |
+var target2 = getNodeInComposedTree('host/target2'); |
+var target3 = getNodeInComposedTree('host/target3'); |
+var target4 = getNodeInComposedTree('host/target4'); |
+var target5 = getNodeInComposedTree('host/target5'); |
+ |
+async_test(function(t) { |
+ target1.onfocus = function(e) { |
+ t.step(function() { |
+ assert_equals(e.relatedTarget, null); |
+ assert_false(e.relatedTargetScoped); |
+ t.done(); |
+ }); |
+ }; |
+}, 'Trusted events should have relatedTargetScoped set to false by default.'); |
+ |
+async_test(function(t) { |
+ target3.onfocus = function(e) { |
+ t.step(function() { |
+ assert_equals(e.relatedTarget, target2); |
+ assert_true(e.relatedTargetScoped); |
+ t.done(); |
+ }); |
+ }; |
+}, 'Trusted focus events with a related target should have relatedTargetScoped true.'); |
+ |
+async_test(function(t) { |
+ target1.onmouseenter = function(e) { |
+ t.step(function() { |
+ assert_equals(e.relatedTarget, null); |
+ assert_false(e.relatedTargetScoped); |
+ t.done(); |
+ }); |
+ }; |
+}, 'Trusted mouse events without a related target should have relatedTargetScoped set to false.'); |
+ |
+async_test(function(t) { |
+ target3.onmouseenter = function(e) { |
+ t.step(function() { |
+ assert_equals(e.relatedTarget, target2); |
+ assert_true(e.relatedTargetScoped); |
+ t.done(); |
+ }); |
+ }; |
+}, 'Trusted mouse events with a related target should have relatedTargetScoped true.'); |
+ |
+async_test(function(t) { |
+ target4.onfocus = function(e) { |
+ t.step(function() { |
+ assert_equals(e.relatedTarget, target5); |
+ assert_false(e.relatedTargetScoped); |
+ t.done(); |
+ }); |
+ }; |
+}, 'Untrusted events should have relatedTargetScoped set to false by default.'); |
+ |
+async_test(function(t) { |
+ target5.onfocus = function(e) { |
+ t.step(function() { |
+ assert_equals(e.relatedTarget, target4); |
+ assert_true(e.relatedTargetScoped); |
+ t.done(); |
+ }); |
+ }; |
+}, 'Trusted focus events with a related target should have relatedTargetScoped true.'); |
+ |
+target1.focus(); |
+target2.focus(); |
+target3.focus(); |
+moveMouseOver(target1); |
+moveMouseOver(target2); |
+moveMouseOver(target3); |
+var userFocus1 = new FocusEvent('focus', { relatedTarget: target5 }); |
+target4.dispatchEvent(userFocus1); |
+var userFocus2 = new FocusEvent('focus', { relatedTarget: target4, relatedTargetScoped: true }); |
+target5.dispatchEvent(userFocus2); |
+ |
+</script> |