diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index a81d9f767b6..7b9f21c270e 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -183,9 +183,8 @@ impl Request { !init.window.handle().is_undefined() { // Step 13.1 if request.mode == NetTraitsRequestMode::Navigate { - return Err(Error::Type( - "Init is present and request mode is 'navigate'".to_string())); - } + request.mode = NetTraitsRequestMode::SameOrigin; + } // Step 13.2 request.omit_origin_header.set(false); // Step 13.3 @@ -211,17 +210,13 @@ impl Request { } // Step 14.5 if let Ok(parsed_referrer) = parsed_referrer { - if parsed_referrer.cannot_be_a_base() && + if (parsed_referrer.cannot_be_a_base() && parsed_referrer.scheme() == "about" && - parsed_referrer.path() == "client" { + parsed_referrer.path() == "client") || + parsed_referrer.origin() != origin { *request.referrer.borrow_mut() = NetTraitsRequestReferrer::Client; } else { // Step 14.6 - if parsed_referrer.origin() != origin { - return Err(Error::Type( - "RequestInit's referrer has invalid origin".to_string())); - } - // Step 14.7 *request.referrer.borrow_mut() = NetTraitsRequestReferrer::ReferrerUrl(parsed_referrer); } } @@ -576,7 +571,7 @@ impl RequestMethods for Request { let referrer = r.referrer.borrow(); USVString(match &*referrer { &NetTraitsRequestReferrer::NoReferrer => String::from("no-referrer"), - &NetTraitsRequestReferrer::Client => String::from("client"), + &NetTraitsRequestReferrer::Client => String::from("about:client"), &NetTraitsRequestReferrer::ReferrerUrl(ref u) => { let u_c = u.clone(); u_c.into_string() diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index bca20e4f735..b7a485acf49 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -164191,7 +164191,7 @@ "testharness" ], "fetch/api/request/request-error.html": [ - "bfd03777a43be514a0839ab14f5206f486332fdb", + "ff308916884f69b3f4aa8f2017c4d9fe0caf0f00", "testharness" ], "fetch/api/request/request-headers.html": [ @@ -164203,7 +164203,7 @@ "testharness" ], "fetch/api/request/request-init-001.sub.html": [ - "096424b40f6a21e989a6a5d8684b29ee8cbb963e", + "49bc4349b4e7a85d88cacd54227355aa986535f1", "testharness" ], "fetch/api/request/request-init-002.html": [ diff --git a/tests/wpt/metadata/fetch/api/request/request-init-001.sub.html.ini b/tests/wpt/metadata/fetch/api/request/request-init-001.sub.html.ini index 8cdedca0d04..d1b426ce775 100644 --- a/tests/wpt/metadata/fetch/api/request/request-init-001.sub.html.ini +++ b/tests/wpt/metadata/fetch/api/request/request-init-001.sub.html.ini @@ -1,20 +1,10 @@ [request-init-001.sub.html] type: testharness - [Check referrer init value of about:client and associated getter] - expected: FAIL - [Check referrer init value of and associated getter] expected: FAIL [Check referrerPolicy init value of and associated getter] expected: FAIL - [Check referrer init value of http://test.url and associated getter] - expected: FAIL - [Check referrerPolicy init value of same-origin and associated getter] expected: FAIL - - [Check mode init value of navigate and associated getter] - expected: FAIL - diff --git a/tests/wpt/metadata/fetch/api/request/request-structure.html.ini b/tests/wpt/metadata/fetch/api/request/request-structure.html.ini index c07e5b03246..d31604e3fcb 100644 --- a/tests/wpt/metadata/fetch/api/request/request-structure.html.ini +++ b/tests/wpt/metadata/fetch/api/request/request-structure.html.ini @@ -2,7 +2,3 @@ type: testharness [Request has arrayBuffer method] expected: FAIL - - [Check referrer attribute] - expected: FAIL - diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-error.html b/tests/wpt/web-platform-tests/fetch/api/request/request-error.html index 0339ae1526b..a04bfde75b7 100644 --- a/tests/wpt/web-platform-tests/fetch/api/request/request-error.html +++ b/tests/wpt/web-platform-tests/fetch/api/request/request-error.html @@ -26,6 +26,11 @@ "Expect TypeError exception"); },"Input URL has credentials"); + test(function() { + assert_throws(new TypeError() , function() { new Request("", {"mode" : "navigate"}); }, + "Expect TypeError exception"); + },"RequestInit's mode is navigate"); + test(function() { assert_throws(new TypeError() , function() { new Request("", {"referrer" : "http://:not a valid URL"}); }, "Expect TypeError exception"); diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-init-001.sub.html b/tests/wpt/web-platform-tests/fetch/api/request/request-init-001.sub.html index 9383b435a2e..ea302d623d5 100644 --- a/tests/wpt/web-platform-tests/fetch/api/request/request-init-001.sub.html +++ b/tests/wpt/web-platform-tests/fetch/api/request/request-init-001.sub.html @@ -49,8 +49,8 @@ "strict-origin-when-cross-origin" ] }; - var modes = {"givenValues" : ["same-origin", "no-cors", "cors", "navigate"], - "expectedValues" : ["same-origin", "no-cors", "cors", "same-origin"] + var modes = {"givenValues" : ["same-origin", "no-cors", "cors"], + "expectedValues" : ["same-origin", "no-cors", "cors"] }; var credentials = {"givenValues" : ["omit", "same-origin", "include"], "expectedValues" : ["omit", "same-origin", "include"]