diff options
-rw-r--r-- | components/script/dom/element.rs | 21 | ||||
-rw-r--r-- | components/script/dom/webidls/ActivatableElement.webidl | 15 | ||||
-rw-r--r-- | components/script/dom/webidls/Element.webidl | 1 | ||||
-rw-r--r-- | tests/wpt/mozilla/meta/MANIFEST.json | 6 | ||||
-rw-r--r-- | tests/wpt/mozilla/meta/mozilla/activation.html.ini | 3 | ||||
-rw-r--r-- | tests/wpt/mozilla/tests/mozilla/activation.html | 52 |
6 files changed, 98 insertions, 0 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index f85f608545f..838da981524 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -2087,6 +2087,27 @@ impl ElementMethods for Element { // Step 4. self.insert_adjacent(position, fragment.upcast()).map(|_| ()) } + + // check-tidy: no specs after this line + fn EnterFormalActivationState(&self) -> ErrorResult { + match self.as_maybe_activatable() { + Some(a) => { + a.enter_formal_activation_state(); + return Ok(()); + }, + None => return Err(Error::NotSupported) + } + } + + fn ExitFormalActivationState(&self) -> ErrorResult { + match self.as_maybe_activatable() { + Some(a) => { + a.exit_formal_activation_state(); + return Ok(()); + }, + None => return Err(Error::NotSupported) + } + } } pub fn fragment_affecting_attributes() -> [Atom; 3] { diff --git a/components/script/dom/webidls/ActivatableElement.webidl b/components/script/dom/webidls/ActivatableElement.webidl new file mode 100644 index 00000000000..2b69baff303 --- /dev/null +++ b/components/script/dom/webidls/ActivatableElement.webidl @@ -0,0 +1,15 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// Interface for testing element activation +// This interface is entirely internal to Servo, and should not be accessible to +// web pages. +[Exposed=(Window,Worker), NoInterfaceObject] +interface ActivatableElement { + [Throws, Pref="dom.testing.element.activation.enabled"] + void enterFormalActivationState(); + + [Throws, Pref="dom.testing.element.activation.enabled"] + void exitFormalActivationState(); +}; diff --git a/components/script/dom/webidls/Element.webidl b/components/script/dom/webidls/Element.webidl index b0ba81d1816..295d76cd1f4 100644 --- a/components/script/dom/webidls/Element.webidl +++ b/components/script/dom/webidls/Element.webidl @@ -122,3 +122,4 @@ partial interface Element { Element implements ChildNode; Element implements NonDocumentTypeChildNode; Element implements ParentNode; +Element implements ActivatableElement; diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index ec188e4011f..debeee40193 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -6510,6 +6510,12 @@ "url": "/_mozilla/mozilla/MouseEvent.html" } ], + "mozilla/activation.html": [ + { + "path": "mozilla/activation.html", + "url": "/_mozilla/mozilla/activation.html" + } + ], "mozilla/bad_cert_detected.html": [ { "path": "mozilla/bad_cert_detected.html", diff --git a/tests/wpt/mozilla/meta/mozilla/activation.html.ini b/tests/wpt/mozilla/meta/mozilla/activation.html.ini new file mode 100644 index 00000000000..e7b9f2349c3 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/activation.html.ini @@ -0,0 +1,3 @@ +[activation.html] + type: testharness + prefs: [dom.testing.element.activation.enabled:true] diff --git a/tests/wpt/mozilla/tests/mozilla/activation.html b/tests/wpt/mozilla/tests/mozilla/activation.html new file mode 100644 index 00000000000..a787f9a7072 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/activation.html @@ -0,0 +1,52 @@ +<!doctype html> +<html> + <head> + <meta charset="utf=8"> + <title>Test of activation state</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <a id="anchor" href="#foo">anchor</a> + <button id="button">button</button> + <label id="label">Label</label> + <input type="submit" id="input" /> + + <span id="foo">foo</span> + </body> + + <script> + function test_activation_state(element, selector) { + return function () { + element.enterFormalActivationState(); + var active = document.querySelector(selector); + assert_true(active.id == element.id, selector + " was active"); + element.exitFormalActivationState(); + } + } + + test( + test_activation_state(document.getElementById("anchor"), "a:active"), + "Activate anchor"); + + test( + test_activation_state(document.getElementById("button"), "button:active"), + "Activate button"); + + test( + test_activation_state(document.getElementById("label"), "label:active"), + "Activate label"); + + test( + test_activation_state(document.getElementById("input"), "input:active"), + "Activate input"); + + test(function () { + assert_throws(null, function () { + var foo = document.getElementById("foo"); + foo.enterFormalActivationState(); + }); + }, "Activation invalid for span"); + </script> +</html> + |