From 73b5bf201f47d831e90546bdec4f5664bad44e0c Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Fri, 27 Apr 2018 11:29:47 +0200 Subject: [PATCH] Implement WindowOrWorkerGlobalScope.origin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The test document_domain_setter.html now fails, but AFAIK the origin comparison can never be true (document.origin is the unprefixed domain, while the loaded iframe is from www1.…), and that test fails in all major browsers because of security exceptions anyway. --- .../dom/webidls/WindowOrWorkerGlobalScope.webidl | 2 +- components/script/dom/window.rs | 7 ++++++- components/script/dom/workerglobalscope.rs | 7 ++++++- .../document_domain_setter.html.ini | 4 ++++ tests/wpt/metadata/html/dom/interfaces.https.html.ini | 6 ------ tests/wpt/metadata/html/dom/self-origin.any.js.ini | 11 ----------- tests/wpt/metadata/workers/interfaces.worker.js.ini | 2 +- 7 files changed, 18 insertions(+), 21 deletions(-) create mode 100644 tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter.html.ini delete mode 100644 tests/wpt/metadata/html/dom/self-origin.any.js.ini diff --git a/components/script/dom/webidls/WindowOrWorkerGlobalScope.webidl b/components/script/dom/webidls/WindowOrWorkerGlobalScope.webidl index bd57b80e20d..56fc0cc44d7 100644 --- a/components/script/dom/webidls/WindowOrWorkerGlobalScope.webidl +++ b/components/script/dom/webidls/WindowOrWorkerGlobalScope.webidl @@ -9,7 +9,7 @@ [NoInterfaceObject, Exposed=(Window,Worker)] interface WindowOrWorkerGlobalScope { - // [Replaceable] readonly attribute USVString origin; + [Replaceable] readonly attribute USVString origin; // base64 utility methods [Throws] DOMString btoa(DOMString data); diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index d0270aae9d1..3a672291e8d 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -22,7 +22,7 @@ use dom::bindings::num::Finite; use dom::bindings::refcounted::Trusted; use dom::bindings::reflector::DomObject; use dom::bindings::root::{Dom, DomRoot, MutNullableDom}; -use dom::bindings::str::DOMString; +use dom::bindings::str::{DOMString, USVString}; use dom::bindings::structuredclone::StructuredCloneData; use dom::bindings::trace::RootedTraceableBox; use dom::bindings::utils::{GlobalStaticData, WindowProxyHandler}; @@ -1038,6 +1038,11 @@ impl WindowMethods for Window { fn Name(&self) -> DOMString { self.window_proxy().get_name() } + + // https://html.spec.whatwg.org/multipage/#dom-origin + fn Origin(&self) -> USVString { + USVString(self.origin().immutable().ascii_serialization()) + } } impl Window { diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 6993e2af4c5..0f9924253aa 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -12,7 +12,7 @@ use dom::bindings::inheritance::Castable; use dom::bindings::reflector::DomObject; use dom::bindings::root::{DomRoot, MutNullableDom}; use dom::bindings::settings_stack::AutoEntryScript; -use dom::bindings::str::DOMString; +use dom::bindings::str::{DOMString, USVString}; use dom::bindings::trace::RootedTraceableBox; use dom::crypto::Crypto; use dom::dedicatedworkerglobalscope::DedicatedWorkerGlobalScope; @@ -328,6 +328,11 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope { self.navigation_start_precise) }) } + + // https://html.spec.whatwg.org/multipage/#dom-origin + fn Origin(&self) -> USVString { + USVString(self.upcast::().origin().immutable().ascii_serialization()) + } } diff --git a/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter.html.ini b/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter.html.ini new file mode 100644 index 00000000000..49f6d6d189a --- /dev/null +++ b/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter.html.ini @@ -0,0 +1,4 @@ +[document_domain_setter.html] + [same-origin-domain iframe] + expected: FAIL + diff --git a/tests/wpt/metadata/html/dom/interfaces.https.html.ini b/tests/wpt/metadata/html/dom/interfaces.https.html.ini index c14ad62a925..4f24459327b 100644 --- a/tests/wpt/metadata/html/dom/interfaces.https.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.https.html.ini @@ -4973,9 +4973,6 @@ [Window interface: attribute onmessageerror] expected: FAIL - [Window interface: attribute origin] - expected: FAIL - [Window interface: operation createImageBitmap(ImageBitmapSource, ImageBitmapOptions)] expected: FAIL @@ -5075,9 +5072,6 @@ [Window interface: window must inherit property "onmessageerror" with the proper type] expected: FAIL - [Window interface: window must inherit property "origin" with the proper type] - expected: FAIL - [Window interface: window must inherit property "createImageBitmap(ImageBitmapSource, ImageBitmapOptions)" with the proper type] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/self-origin.any.js.ini b/tests/wpt/metadata/html/dom/self-origin.any.js.ini deleted file mode 100644 index 5b8829d9923..00000000000 --- a/tests/wpt/metadata/html/dom/self-origin.any.js.ini +++ /dev/null @@ -1,11 +0,0 @@ -[self-origin.any.worker.html] - type: testharness - [self.origin should be correct] - expected: FAIL - - -[self-origin.any.html] - type: testharness - [self.origin should be correct] - expected: FAIL - diff --git a/tests/wpt/metadata/workers/interfaces.worker.js.ini b/tests/wpt/metadata/workers/interfaces.worker.js.ini index 41824ed7587..b2529dc21cb 100644 --- a/tests/wpt/metadata/workers/interfaces.worker.js.ini +++ b/tests/wpt/metadata/workers/interfaces.worker.js.ini @@ -260,7 +260,7 @@ expected: FAIL [WorkerGlobalScope interface: attribute origin] - expected: FAIL + expected: TIMEOUT [WorkerGlobalScope interface: operation createImageBitmap(ImageBitmapSource, ImageBitmapOptions)] expected: FAIL