Index: third_party/WebKit/Source/modules/fetch/Request.cpp |
diff --git a/third_party/WebKit/Source/modules/fetch/Request.cpp b/third_party/WebKit/Source/modules/fetch/Request.cpp |
index 6cc792b88301ee34dc12b0111f299471192655fa..d345de4da91e14a25f4ef3d83981e78d40fcee39 100644 |
--- a/third_party/WebKit/Source/modules/fetch/Request.cpp |
+++ b/third_party/WebKit/Source/modules/fetch/Request.cpp |
@@ -120,15 +120,23 @@ Request* Request::createRequestWithRequestOrString(ScriptState* scriptState, Req |
// We don't use fallback values. We set these flags directly in below. |
} |
- // 14. If any of |init|'s members are present, set |request|'s referrer |
- // to client, and |request|'s referrer policy to the empty string. |
- // => RequestInit::RequestInit. |
+ // "14. If any of |init|'s members are present, run these substeps:" |
+ if (init.isAnyMembersSet) { |
+ // "1. If request's |mode| is "navigate", throw a TypeError." |
+ if (request->mode() == WebURLRequest::FetchRequestModeNavigate) { |
+ exceptionState.throwTypeError("Cannot construct a Request with a Request mode as navigate."); |
+ return nullptr; |
+ } |
+ } |
+ |
// 15. If |init|'s referrer member is present, run these substeps: |
// Note that JS null and undefined are encoded as an empty string and thus |
// a null string means referrer member is not set. |
// 16. If |init|'s referrerPolicy member is present, set |request|'s |
// referrer policy to it. |
- if (init.isReferrerSet) { |
+ // isAnyMembersSet will be True, if any members in RequestInit are set and |
+ // hence the referrer member, so prefer using isAnyMembersSet instead isReferrerSet |
yhirano
2015/10/16 18:15:53
Please wrap comments in 80 columns.
Sorry, what do
shiva.jm
2015/10/19 09:03:49
Done.
|
+ if (init.isAnyMembersSet) { |
// 1. Let |referrer| be |init|'s referrer member. |
if (init.referrer.referrer.isEmpty()) { |
// 2. if |referrer| is the empty string, set |request|'s referrer to |
@@ -161,10 +169,14 @@ Request* Request::createRequestWithRequestOrString(ScriptState* scriptState, Req |
request->setReferrerPolicy(init.referrer.referrerPolicy); |
} |
- |
- // "17. Let |mode| be |init|'s mode member if it is present, and |
+ // "16. Let |mode| be |init|'s mode member if it is present, and |
// |fallbackMode| otherwise." |
+ // "17.If mode is "navigate", throw a TypeError. |
// "18. If |mode| is non-null, set |request|'s mode to |mode|." |
+ if (init.mode == "navigate") { |
+ exceptionState.throwTypeError("Cannot construct a Request with a Request mode as navigate."); |
+ return nullptr; |
+ } |
if (init.mode == "same-origin") { |
request->setMode(WebURLRequest::FetchRequestModeSameOrigin); |
} else if (init.mode == "no-cors") { |
@@ -497,6 +509,8 @@ String Request::mode() const |
case WebURLRequest::FetchRequestModeCORS: |
case WebURLRequest::FetchRequestModeCORSWithForcedPreflight: |
return "cors"; |
+ case WebURLRequest::FetchRequestModeNavigate: |
+ return "navigate"; |
} |
ASSERT_NOT_REACHED(); |
return ""; |