diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs
index 7683fc02330..24d86df0cc0 100644
--- a/components/script/dom/htmlanchorelement.rs
+++ b/components/script/dom/htmlanchorelement.rs
@@ -284,6 +284,23 @@ impl HTMLAnchorElementMethods for HTMLAnchorElement {
self.set_url();
}
+ // https://html.spec.whatwg.org/multipage/#dom-hyperlink-origin
+ fn Origin(&self) -> USVString {
+ // Step 1.
+ self.reinitialize_url();
+
+ USVString(match *self.url.borrow() {
+ None => {
+ // Step 2.
+ "".to_owned()
+ },
+ Some(ref url) => {
+ // Step 3.
+ url.origin().unicode_serialization()
+ },
+ })
+ }
+
// https://html.spec.whatwg.org/multipage/#dom-hyperlink-password
fn Password(&self) -> USVString {
// Step 1.
diff --git a/components/script/dom/webidls/HTMLHyperlinkElementUtils.webidl b/components/script/dom/webidls/HTMLHyperlinkElementUtils.webidl
index 3ff0418b13f..a75ecb970a0 100644
--- a/components/script/dom/webidls/HTMLHyperlinkElementUtils.webidl
+++ b/components/script/dom/webidls/HTMLHyperlinkElementUtils.webidl
@@ -7,7 +7,7 @@
interface HTMLHyperlinkElementUtils {
// stringifier attribute USVString href;
attribute USVString href;
-// attribute USVString origin;
+ readonly attribute USVString origin;
attribute USVString protocol;
attribute USVString username;
attribute USVString password;
diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini
index d9e3bda0495..c2fd0d37c5c 100644
--- a/tests/wpt/metadata/html/dom/interfaces.html.ini
+++ b/tests/wpt/metadata/html/dom/interfaces.html.ini
@@ -6291,12 +6291,6 @@
[Document interface: document.implementation.createDocument(null, "", null) must inherit property "onsort" with the proper type (149)]
expected: FAIL
- [HTMLAnchorElement interface: attribute origin]
- expected: FAIL
-
- [HTMLAnchorElement interface: document.createElement("a") must inherit property "origin" with the proper type (14)]
- expected: FAIL
-
[HTMLAreaElement interface: attribute href]
expected: FAIL
diff --git a/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini b/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini
deleted file mode 100644
index 975c9bddbfc..00000000000
--- a/tests/wpt/metadata/url/a-element-xhtml.xhtml.ini
+++ /dev/null
@@ -1,740 +0,0 @@
-[a-element-xhtml.xhtml]
- type: testharness
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: <\t :foo.com \n> against ]
- expected: FAIL
-
- [Parsing: < foo.com > against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: <> against ]
- expected: FAIL
-
- [Parsing: < \t> against ]
- expected: FAIL
-
- [Parsing: <:foo.com/> against ]
- expected: FAIL
-
- [Parsing: <:foo.com\\> against ]
- expected: FAIL
-
- [Parsing: <:> against ]
- expected: FAIL
-
- [Parsing: <:a> against ]
- expected: FAIL
-
- [Parsing: <:/> against ]
- expected: FAIL
-
- [Parsing: <:\\> against ]
- expected: FAIL
-
- [Parsing: <:#> against ]
- expected: FAIL
-
- [Parsing: <#> against ]
- expected: FAIL
-
- [Parsing: <#/> against ]
- expected: FAIL
-
- [Parsing: <#\\> against ]
- expected: FAIL
-
- [Parsing: <#;?> against ]
- expected: FAIL
-
- [Parsing: > against ]
- expected: FAIL
-
- [Parsing: > against ]
- expected: FAIL
-
- [Parsing: <:23> against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: <::> against ]
- expected: FAIL
-
- [Parsing: <::23> against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: /foo/bar> against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: <[61:24:74\]:98> against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: <#β> against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: against ]
- expected: FAIL
-
- [Parsing: