Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(669)

Unified Diff: third_party/WebKit/Source/modules/fetch/Request.cpp

Issue 1451333002: Update comments in Request constructor to explain referrer handling more clearly (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 24239c4836f4347a712c41c4b901678217ac319a..12fb2a822f2c24e23ae0a9eba24d05494f45efda 100644
--- a/third_party/WebKit/Source/modules/fetch/Request.cpp
+++ b/third_party/WebKit/Source/modules/fetch/Request.cpp
@@ -120,63 +120,83 @@ 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, run these substeps:"
+ // "If any of |init|'s members are present, run these substeps:"
if (init.areAnyMembersSet) {
// "1. If |request|'s |mode| is "navigate", throw a TypeError."
if (request->mode() == WebURLRequest::FetchRequestModeNavigate) {
exceptionState.throwTypeError("Cannot construct a Request with a Request whose mode is 'navigate' and a non-empty RequestInit.");
return nullptr;
}
- // "2. Unset |request|'s omit-Origin-header flag."
- // "3. Set |request|'s referrer to "client"."
- // "4. Set |request|'s referrer policy to the empty string."
- // => RequestInit::RequestInit.
+
+ // TODO(yhirano): Implement the following substep:
+ // "Unset |request|'s omit-Origin-header flag."
+
+ // The step "Set |request|'s referrer to "client"." is performed by the
+ // code below as follows:
+ // - |init.referrer.referrer| gets initialized by the RequestInit
+ // constructor to "about:client" when any of |options|'s member are
yhirano 2015/11/17 09:31:55 members
tyoshino (SeeGerritForStatus) 2015/11/18 13:42:51 Done.
+ // present.
+ // - The code below does the equivalent as the step specified in the
+ // spec by processing the "about:client".
+
+ // TODO(yhirano): Implement the following substep:
+ // "Set |request|'s referrer policy to the empty string."
yhirano 2015/11/17 09:31:54 This is implemented :)
tyoshino (SeeGerritForStatus) 2015/11/18 13:42:51 Fixed
}
- // 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
+ // The following if-clause performs the following two steps:
+ // - "If |init|'s referrer member is present, run these substeps:"
+ // - "If |init|'s referrerPolicy member is present, set |request|'s
yhirano 2015/11/17 09:31:54 This is not implemented :)
tyoshino (SeeGerritForStatus) 2015/11/18 13:42:51 Fixed
+ // referrer policy to it."
+ //
+ // The condition "if any of |init|'s members are present"
+ // (areAnyMembersSet) is used for the if-clause instead of conditions
+ // indicating presence of each member as specified in the spec. This is to
+ // perform the substeps in the previous step together here.
+
+ // Note that JS null and undefined are encoded as an empty string, and thus
yhirano 2015/11/17 09:31:54 redundant?
tyoshino (SeeGerritForStatus) 2015/11/18 13:42:51 Removed
// a null string means referrer member is not set.
- // 16. If |init|'s referrerPolicy member is present, set |request|'s
- // referrer policy to it.
- // areAnyMembersSet will be True, if any members in RequestInit are set and
- // hence the referrer member
+
if (init.areAnyMembersSet) {
- // 1. Let |referrer| be |init|'s referrer member.
+ // Nothing to do for the step "Let |referrer| be |init|'s referrer
+ // member."
+
if (init.referrer.referrer.isEmpty()) {
- // 2. if |referrer| is the empty string, set |request|'s referrer to
- // "no-referrer" and terminate these substeps.
+ // "If |referrer| is the empty string, set |request|'s referrer to
+ // "no-referrer" and terminate these substeps."
request->setReferrerString(FetchRequestData::noReferrerString());
} else {
- // 3. Let |parsedReferrer| be the result of parsing |referrer| with
+ // "Let |parsedReferrer| be the result of parsing |referrer| with
// |baseURL|.
yhirano 2015/11/17 09:31:55 +"
tyoshino (SeeGerritForStatus) 2015/11/18 13:42:51 Done.
KURL parsedReferrer = scriptState->executionContext()->completeURL(init.referrer.referrer);
if (!parsedReferrer.isValid()) {
- // 4. If |parsedReferrer| is failure, throw a TypeError.
+ // "If |parsedReferrer| is failure, throw a TypeError."
exceptionState.throwTypeError("Referrer '" + init.referrer.referrer + "' is not a valid URL.");
return nullptr;
}
if (parsedReferrer.protocolIsAbout() && parsedReferrer.host().isEmpty() && parsedReferrer.path() == "client") {
- // 5. If |parsedReferrer|'s non-relative flag is set, scheme is
+ // "If |parsedReferrer|'s non-relative flag is set, scheme is
// "about", and path contains a single string "client", set
- // request's referrer to "client" and terminate these substeps.
+ // request's referrer to "client" and terminate these
+ // substeps."
request->setReferrerString(FetchRequestData::clientReferrerString());
} else if (!origin->isSameSchemeHostPortAndSuborigin(SecurityOrigin::create(parsedReferrer).get())) {
- // 6. If |parsedReferrer|'s origin is not same origin with
- // |origin|, throw a TypeError.
+ // "If |parsedReferrer|'s origin is not same origin with
+ // |origin|, throw a TypeError."
exceptionState.throwTypeError("The origin of '" + init.referrer.referrer + "' should be same as '" + origin->toString() + "'");
return nullptr;
} else {
- // 7. Set |request|'s referrer to |parsedReferrer|.
+ // "Set |request|'s referrer to |parsedReferrer|."
request->setReferrerString(AtomicString(parsedReferrer.string()));
}
}
request->setReferrerPolicy(init.referrer.referrerPolicy);
}
- // "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|."
+ // The following code performs the following steps:
+ // - "Let |mode| be |init|'s mode member if it is present, and
+ // |fallbackMode| otherwise."
+ // - "If |mode| is "navigate", throw a TypeError."
+ // - "If |mode| is non-null, set |request|'s mode to |mode|."
if (init.mode == "navigate") {
exceptionState.throwTypeError("Cannot construct a Request with a RequestInit whose mode member is set as 'navigate'.");
return nullptr;
@@ -188,6 +208,8 @@ Request* Request::createRequestWithRequestOrString(ScriptState* scriptState, Req
} else if (init.mode == "cors") {
request->setMode(WebURLRequest::FetchRequestModeCORS);
} else {
+ // |inputRequest| is directly checked here instead of setting and
+ // checking |fallbackMode| as specified in the spec.
if (!inputRequest)
request->setMode(WebURLRequest::FetchRequestModeCORS);
}

Powered by Google App Engine
This is Rietveld 408576698