diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index d074dca0d4e6..37043adb4aed 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -1183,6 +1183,27 @@ impl<'a> DocumentMethods for &'a Document { } } + // https://html.spec.whatwg.org/#dom-document-hasfocus + fn HasFocus(self) -> bool { + let target = self; // Step 1. + let window = self.window.root(); + let window = window.r(); + let browsing_context = window.browsing_context(); + let browsing_context = browsing_context.as_ref(); + + match browsing_context { + Some(browsing_context) => { + let condidate = browsing_context.active_document(); // Step 2. + if condidate.node.get_unique_id() == target.node.get_unique_id() { // Step 3. + true + } else { + false //TODO Step 4. + } + } + None => false + } + } + // https://dom.spec.whatwg.org/#dom-document-documenturi fn DocumentURI(self) -> DOMString { self.URL() diff --git a/components/script/dom/webidls/Document.webidl b/components/script/dom/webidls/Document.webidl index 687650a6c3a2..36ec4431f372 100644 --- a/components/script/dom/webidls/Document.webidl +++ b/components/script/dom/webidls/Document.webidl @@ -114,7 +114,7 @@ partial /*sealed*/ interface Document { // user interaction readonly attribute Window/*Proxy?*/ defaultView; // readonly attribute Element? activeElement; - // boolean hasFocus(); + boolean hasFocus(); // attribute DOMString designMode; // boolean execCommand(DOMString commandId, optional boolean showUI = false, optional DOMString value = ""); // boolean queryCommandEnabled(DOMString commandId); diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index d000553cacc0..6ad7377c65af 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -30,9 +30,6 @@ [Document interface: operation writeln(DOMString)] expected: FAIL - [Document interface: operation hasFocus()] - expected: FAIL - [Document interface: attribute designMode] expected: FAIL @@ -1098,9 +1095,6 @@ [Document interface: calling writeln(DOMString) on document.implementation.createDocument(null, "", null) with too few arguments must throw TypeError] expected: FAIL - [Document interface: document.implementation.createDocument(null, "", null) must inherit property "hasFocus" with the proper type (61)] - expected: FAIL - [Document interface: document.implementation.createDocument(null, "", null) must inherit property "designMode" with the proper type (62)] expected: FAIL