| Index: third_party/WebKit/LayoutTests/imported/wpt/dom/events/AddEventListenerOptions-passive.html
|
| diff --git a/third_party/WebKit/LayoutTests/imported/wpt/dom/events/AddEventListenerOptions-passive.html b/third_party/WebKit/LayoutTests/imported/wpt/dom/events/AddEventListenerOptions-passive.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1f0118efa63ba09d54c310bfb8465c8850eded10
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/imported/wpt/dom/events/AddEventListenerOptions-passive.html
|
| @@ -0,0 +1,113 @@
|
| +<!DOCTYPE HTML>
|
| +<meta charset="utf-8">
|
| +<title>EventListenerOptions.passive</title>
|
| +<link rel="author" title="Rick Byers" href="mailto:rbyers@chromium.org">
|
| +<link rel="help" href="https://dom.spec.whatwg.org/#dom-addeventlisteneroptions-passive">
|
| +<script src="/resources/testharness.js"></script>
|
| +<script src="/resources/testharnessreport.js"></script>
|
| +<div id="log"></div>
|
| +
|
| +<script>
|
| +
|
| +test(function() {
|
| + var supportsPassive = false;
|
| + var query_options = {
|
| + get passive() {
|
| + supportsPassive = true;
|
| + return false;
|
| + },
|
| + get dummy() {
|
| + assert_unreached("dummy value getter invoked");
|
| + return false;
|
| + }
|
| + };
|
| +
|
| + document.addEventListener('test_event', null, query_options);
|
| + assert_true(supportsPassive, "addEventListener doesn't support the passive option");
|
| +
|
| + supportsPassive = false;
|
| + document.removeEventListener('test_event', null, query_options);
|
| + assert_false(supportsPassive, "removeEventListener supports the passive option when it should not");
|
| +}, "Supports passive option on addEventListener only");
|
| +
|
| +function testPassiveValue(optionsValue, expectedDefaultPrevented) {
|
| + var defaultPrevented = undefined;
|
| + var handler = function handler(e) {
|
| + assert_false(e.defaultPrevented, "Event prematurely marked defaultPrevented");
|
| + e.preventDefault();
|
| + defaultPrevented = e.defaultPrevented;
|
| + }
|
| + document.addEventListener('test', handler, optionsValue);
|
| + var uncanceled = document.body.dispatchEvent(new Event('test', {bubbles: true, cancelable: true}));
|
| +
|
| + assert_equals(defaultPrevented, expectedDefaultPrevented, "Incorrect defaultPrevented for options: " + JSON.stringify(optionsValue));
|
| + assert_equals(uncanceled, !expectedDefaultPrevented, "Incorrect return value from dispatchEvent");
|
| +
|
| + document.removeEventListener('test', handler, optionsValue);
|
| +}
|
| +
|
| +test(function() {
|
| + testPassiveValue(undefined, true);
|
| + testPassiveValue({}, true);
|
| + testPassiveValue({passive: false}, true);
|
| + testPassiveValue({passive: true}, false);
|
| + testPassiveValue({passive: 0}, true);
|
| + testPassiveValue({passive: 1}, false);
|
| +}, "preventDefault should be ignored if-and-only-if the passive option is true");
|
| +
|
| +function testPassiveWithOtherHandlers(optionsValue, expectedDefaultPrevented) {
|
| + var handlerInvoked1 = false;
|
| + var dummyHandler1 = function() {
|
| + handlerInvoked1 = true;
|
| + };
|
| + var handlerInvoked2 = false;
|
| + var dummyHandler2 = function() {
|
| + handlerInvoked2 = true;
|
| + };
|
| +
|
| + document.addEventListener('test', dummyHandler1, {passive:true});
|
| + document.addEventListener('test', dummyHandler2);
|
| +
|
| + testPassiveValue(optionsValue, expectedDefaultPrevented);
|
| +
|
| + assert_true(handlerInvoked1, "Extra passive handler not invoked");
|
| + assert_true(handlerInvoked2, "Extra non-passive handler not invoked");
|
| +
|
| + document.removeEventListener('test', dummyHandler1);
|
| + document.removeEventListener('test', dummyHandler2);
|
| +}
|
| +
|
| +test(function() {
|
| + testPassiveWithOtherHandlers({}, true);
|
| + testPassiveWithOtherHandlers({passive: false}, true);
|
| + testPassiveWithOtherHandlers({passive: true}, false);
|
| +}, "passive behavior of one listener should be unaffeted by the presence of other listeners");
|
| +
|
| +function testOptionEquivalence(optionValue1, optionValue2, expectedEquality) {
|
| + var invocationCount = 0;
|
| + var handler = function handler(e) {
|
| + invocationCount++;
|
| + }
|
| + document.addEventListener('test', handler, optionValue1);
|
| + document.addEventListener('test', handler, optionValue2);
|
| + document.body.dispatchEvent(new Event('test', {bubbles: true}));
|
| + assert_equals(invocationCount, expectedEquality ? 1 : 2, "equivalence of options " +
|
| + JSON.stringify(optionValue1) + " and " + JSON.stringify(optionValue2));
|
| + document.removeEventListener('test', handler, optionValue1);
|
| + document.removeEventListener('test', handler, optionValue2);
|
| +}
|
| +
|
| +test(function() {
|
| + // Sanity check options that should be treated as distinct handlers
|
| + testOptionEquivalence({capture:true}, {capture:false, passive:false}, false);
|
| + testOptionEquivalence({capture:true}, {passive:true}, false);
|
| +
|
| + // Option values that should be treated as equivalent
|
| + testOptionEquivalence({}, {passive:false}, true);
|
| + testOptionEquivalence({passive:true}, {passive:false}, true);
|
| + testOptionEquivalence(undefined, {passive:true}, true);
|
| + testOptionEquivalence({capture: true, passive: false}, {capture: true, passive: true}, true);
|
| +
|
| +}, "Equivalence of option values");
|
| +
|
| +</script>
|
|
|