Bug 1879781 - Remove nsIEventListenerService::getEventTargetChainFor r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D203875
This commit is contained in:
@@ -219,21 +219,6 @@ EventListenerService::GetListenerInfoFor(
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
EventListenerService::GetEventTargetChainFor(
|
||||
EventTarget* aEventTarget, bool aComposed,
|
||||
nsTArray<RefPtr<EventTarget>>& aOutArray) {
|
||||
NS_ENSURE_ARG(aEventTarget);
|
||||
WidgetEvent event(true, eVoidEvent);
|
||||
event.SetComposed(aComposed);
|
||||
nsTArray<EventTarget*> targets;
|
||||
nsresult rv = EventDispatcher::Dispatch(aEventTarget, nullptr, &event,
|
||||
nullptr, nullptr, nullptr, &targets);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
aOutArray.AppendElements(targets);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
EventListenerService::HasListenersFor(EventTarget* aEventTarget,
|
||||
const nsAString& aType, bool* aRetVal) {
|
||||
|
||||
@@ -74,18 +74,6 @@ interface nsIEventListenerService : nsISupports
|
||||
*/
|
||||
Array<nsIEventListenerInfo> getListenerInfoFor(in EventTarget aEventTarget);
|
||||
|
||||
/**
|
||||
* Returns an array of event targets.
|
||||
* aEventTarget will be at index 0.
|
||||
* The objects are the ones that would be used as DOMEvent.currentTarget while
|
||||
* dispatching an event to aEventTarget
|
||||
* @note Some events, especially 'load', may actually have a shorter
|
||||
* event target chain than what this methods returns.
|
||||
*/
|
||||
[can_run_script]
|
||||
Array<EventTarget> getEventTargetChainFor(in EventTarget aEventTarget,
|
||||
in boolean composed);
|
||||
|
||||
/**
|
||||
* Returns true if a event target has any listener for the given type.
|
||||
*/
|
||||
|
||||
@@ -174,28 +174,7 @@ function runTests() {
|
||||
is(SpecialPowers.unwrap(infos[0].listenerObject), l,
|
||||
"Should have the right listener object (4)");
|
||||
|
||||
// Event target chain tests
|
||||
l3 = document.getElementById("testlevel3");
|
||||
var textnode = l3.firstChild;
|
||||
var chain = els.getEventTargetChainFor(textnode, true);
|
||||
ok(chain.length > 3, "Too short event target chain.");
|
||||
ok(SpecialPowers.compare(chain[0], textnode), "Wrong chain item (1)");
|
||||
ok(SpecialPowers.compare(chain[1], l3), "Wrong chain item (2)");
|
||||
ok(SpecialPowers.compare(chain[2], l2), "Wrong chain item (3)");
|
||||
ok(SpecialPowers.compare(chain[3], root), "Wrong chain item (4)");
|
||||
|
||||
var hasDocumentInChain = false;
|
||||
var hasWindowInChain = false;
|
||||
for (var i = 0; i < chain.length; ++i) {
|
||||
if (SpecialPowers.compare(chain[i], document)) {
|
||||
hasDocumentInChain = true;
|
||||
} else if (SpecialPowers.compare(chain[i], window)) {
|
||||
hasWindowInChain = true;
|
||||
}
|
||||
}
|
||||
|
||||
ok(hasDocumentInChain, "Should have document in event target chain!");
|
||||
ok(hasWindowInChain, "Should have window in event target chain!");
|
||||
|
||||
try {
|
||||
els.getListenerInfoFor(null);
|
||||
|
||||
@@ -64,8 +64,6 @@ support-files = [
|
||||
|
||||
["test_event_retarget.html"]
|
||||
|
||||
["test_event_stopping.html"]
|
||||
|
||||
["test_link_prefetch.html"]
|
||||
|
||||
["test_shadowdom_active_pseudo_class.html"]
|
||||
|
||||
@@ -1,174 +0,0 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=887541
|
||||
-->
|
||||
<head>
|
||||
<title>Test for event model 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>
|
||||
|
||||
var els = SpecialPowers.Cc["@mozilla.org/eventlistenerservice;1"]
|
||||
.getService(SpecialPowers.Ci.nsIEventListenerService);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
createIframe()
|
||||
.then((aDocument) => {
|
||||
function eventListener(e) {
|
||||
eventChain.push(this);
|
||||
}
|
||||
|
||||
function isEventChain(actual, expected, msg) {
|
||||
is(actual.length, expected.length, msg);
|
||||
for (var i = 0; i < expected.length; i++) {
|
||||
is(actual[i], expected[i], msg + " at " + i);
|
||||
}
|
||||
|
||||
if (actual.length) {
|
||||
var chain = els.getEventTargetChainFor(actual[0], false); // Events should be dispatched on actual[0].
|
||||
ok(expected.length < chain.length, "There should be additional chrome event targets.");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* <div elemOne> ------ <shadow-root shadowOne>
|
||||
* |
|
||||
* <span elemTwo>
|
||||
* |
|
||||
* <span elemThree>
|
||||
*/
|
||||
|
||||
var elemOne = aDocument.createElement("div");
|
||||
var elemTwo = aDocument.createElement("span");
|
||||
var elemThree = aDocument.createElement("span");
|
||||
var shadowOne = elemOne.attachShadow({mode: "open"});
|
||||
|
||||
shadowOne.appendChild(elemTwo);
|
||||
elemTwo.appendChild(elemThree);
|
||||
|
||||
// Test stopping "abort" event.
|
||||
|
||||
elemOne.addEventListener("abort", eventListener);
|
||||
elemTwo.addEventListener("abort", eventListener);
|
||||
elemThree.addEventListener("abort", eventListener);
|
||||
shadowOne.addEventListener("abort", eventListener);
|
||||
|
||||
var eventChain = [];
|
||||
|
||||
var customEvent = new CustomEvent("abort", { "bubbles" : true });
|
||||
elemThree.dispatchEvent(customEvent);
|
||||
isEventChain(eventChain, [elemThree, elemTwo, shadowOne], "Test that abort event is stopped at shadow root.");
|
||||
|
||||
// Test stopping "error" event.
|
||||
|
||||
elemOne.addEventListener("error", eventListener);
|
||||
elemTwo.addEventListener("error", eventListener);
|
||||
elemThree.addEventListener("error", eventListener);
|
||||
shadowOne.addEventListener("error", eventListener);
|
||||
|
||||
eventChain = [];
|
||||
|
||||
customEvent = new CustomEvent("error", { "bubbles" : true });
|
||||
elemThree.dispatchEvent(customEvent);
|
||||
isEventChain(eventChain, [elemThree, elemTwo, shadowOne], "Test that error event is stopped at shadow root.");
|
||||
|
||||
// Test stopping "select" event.
|
||||
|
||||
elemOne.addEventListener("select", eventListener);
|
||||
elemTwo.addEventListener("select", eventListener);
|
||||
elemThree.addEventListener("select", eventListener);
|
||||
shadowOne.addEventListener("select", eventListener);
|
||||
|
||||
eventChain = [];
|
||||
|
||||
customEvent = new CustomEvent("select", { "bubbles" : true });
|
||||
elemThree.dispatchEvent(customEvent);
|
||||
isEventChain(eventChain, [elemThree, elemTwo, shadowOne], "Test that select event is stopped at shadow root.");
|
||||
|
||||
// Test stopping "change" event.
|
||||
|
||||
elemOne.addEventListener("change", eventListener);
|
||||
elemTwo.addEventListener("change", eventListener);
|
||||
elemThree.addEventListener("change", eventListener);
|
||||
shadowOne.addEventListener("change", eventListener);
|
||||
|
||||
eventChain = [];
|
||||
|
||||
customEvent = new CustomEvent("change", { "bubbles" : true });
|
||||
elemThree.dispatchEvent(customEvent);
|
||||
|
||||
// Test stopping "reset" event.
|
||||
|
||||
elemOne.addEventListener("reset", eventListener);
|
||||
elemTwo.addEventListener("reset", eventListener);
|
||||
elemThree.addEventListener("reset", eventListener);
|
||||
shadowOne.addEventListener("reset", eventListener);
|
||||
|
||||
eventChain = [];
|
||||
|
||||
customEvent = new CustomEvent("reset", { "bubbles" : true });
|
||||
elemThree.dispatchEvent(customEvent);
|
||||
isEventChain(eventChain, [elemThree, elemTwo, shadowOne], "Test that reset event is stopped at shadow root.");
|
||||
|
||||
// Test stopping "load" event.
|
||||
|
||||
elemOne.addEventListener("load", eventListener);
|
||||
elemTwo.addEventListener("load", eventListener);
|
||||
elemThree.addEventListener("load", eventListener);
|
||||
shadowOne.addEventListener("load", eventListener);
|
||||
|
||||
eventChain = [];
|
||||
|
||||
customEvent = new CustomEvent("load", { "bubbles" : true });
|
||||
elemThree.dispatchEvent(customEvent);
|
||||
isEventChain(eventChain, [elemThree, elemTwo, shadowOne], "Test that load event is stopped at shadow root.");
|
||||
|
||||
// Test stopping "resize" event.
|
||||
|
||||
elemOne.addEventListener("resize", eventListener);
|
||||
elemTwo.addEventListener("resize", eventListener);
|
||||
elemThree.addEventListener("resize", eventListener);
|
||||
shadowOne.addEventListener("resize", eventListener);
|
||||
|
||||
eventChain = [];
|
||||
|
||||
customEvent = new CustomEvent("resize", { "bubbles" : true });
|
||||
elemThree.dispatchEvent(customEvent);
|
||||
isEventChain(eventChain, [elemThree, elemTwo, shadowOne], "Test that resize event is stopped at shadow root.");
|
||||
|
||||
// Test stopping "scroll" event.
|
||||
|
||||
elemOne.addEventListener("scroll", eventListener);
|
||||
elemTwo.addEventListener("scroll", eventListener);
|
||||
elemThree.addEventListener("scroll", eventListener);
|
||||
shadowOne.addEventListener("scroll", eventListener);
|
||||
|
||||
eventChain = [];
|
||||
|
||||
customEvent = new CustomEvent("scroll", { "bubbles" : true });
|
||||
elemThree.dispatchEvent(customEvent);
|
||||
isEventChain(eventChain, [elemThree, elemTwo, shadowOne], "Test that scroll event is stopped at shadow root.");
|
||||
|
||||
// Test stopping "selectstart" event.
|
||||
|
||||
elemOne.addEventListener("selectstart", eventListener);
|
||||
elemTwo.addEventListener("selectstart", eventListener);
|
||||
elemThree.addEventListener("selectstart", eventListener);
|
||||
shadowOne.addEventListener("selectstart", eventListener);
|
||||
|
||||
eventChain = [];
|
||||
|
||||
customEvent = new CustomEvent("selectstart", { "bubbles" : true });
|
||||
elemThree.dispatchEvent(customEvent);
|
||||
isEventChain(eventChain, [elemThree, elemTwo, shadowOne], "Test that selectstart event is stopped at shadow root.");
|
||||
|
||||
SimpleTest.finish();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user