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

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

Issue 1762893002: Reland of Set the request mode and the credentials mode of FetchEvent in the service worker correct… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Taint the response from SW Created 4 years, 9 months 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/FetchManager.cpp
diff --git a/third_party/WebKit/Source/modules/fetch/FetchManager.cpp b/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
index 735755a1ab4ee2dc6af0b949d8fc9fb3adefc1a6..d06a16cc27c9c4a3ac6607b905e2fa5a940e1d18 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
@@ -223,11 +223,12 @@ void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceRespo
}
m_responseHttpStatusCode = response.httpStatusCode();
+ FetchRequestData::Tainting tainting = m_request->responseTainting();
if (response.url().protocolIsData()) {
if (m_request->url() == response.url()) {
// A direct request to data.
- m_request->setResponseTainting(FetchRequestData::BasicTainting);
+ tainting = FetchRequestData::BasicTainting;
} else {
// A redirect to data: scheme occured.
// Redirects to data URLs are rejected by the spec because
@@ -236,7 +237,7 @@ void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceRespo
// mode is also rejected by Chromium side.
switch (m_request->mode()) {
case WebURLRequest::FetchRequestModeNoCORS:
- m_request->setResponseTainting(FetchRequestData::OpaqueTainting);
+ tainting = FetchRequestData::OpaqueTainting;
break;
case WebURLRequest::FetchRequestModeSameOrigin:
case WebURLRequest::FetchRequestModeCORS:
@@ -254,17 +255,37 @@ void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceRespo
ASSERT_NOT_REACHED();
break;
case WebURLRequest::FetchRequestModeNoCORS:
- m_request->setResponseTainting(FetchRequestData::OpaqueTainting);
+ tainting = FetchRequestData::OpaqueTainting;
break;
case WebURLRequest::FetchRequestModeCORS:
case WebURLRequest::FetchRequestModeCORSWithForcedPreflight:
- m_request->setResponseTainting(FetchRequestData::CORSTainting);
+ tainting = FetchRequestData::CORSTainting;
break;
case WebURLRequest::FetchRequestModeNavigate:
RELEASE_ASSERT_NOT_REACHED();
break;
}
}
+ if (response.wasFetchedViaServiceWorker()) {
+ switch (response.serviceWorkerResponseType()) {
tyoshino (SeeGerritForStatus) 2016/03/07 14:48:22 it looks good to just honor the tainting of the re
horo 2016/03/08 03:11:02 +CC:mek@ According to https://github.com/slightly
tyoshino (SeeGerritForStatus) 2016/03/08 05:30:05 Great! Thanks for the explanation.
+ case WebServiceWorkerResponseTypeBasic:
+ case WebServiceWorkerResponseTypeDefault:
+ tainting = FetchRequestData::BasicTainting;
+ break;
+ case WebServiceWorkerResponseTypeCORS:
+ tainting = FetchRequestData::CORSTainting;
+ break;
+ case WebServiceWorkerResponseTypeOpaque:
+ tainting = FetchRequestData::OpaqueTainting;
+ break;
+ case WebServiceWorkerResponseTypeOpaqueRedirect:
+ // ServiceWorker can't respond to the request from fetch() with an opaque redirect response.
tyoshino (SeeGerritForStatus) 2016/03/07 14:48:22 let's wrap comments to fit 80 col
horo 2016/03/08 03:11:02 Done.
+ case WebServiceWorkerResponseTypeError:
+ // When ServiceWorker respond to the request from fetch() with an error response, FetchManager::Loader::didFail() must be called instead.
tyoshino (SeeGerritForStatus) 2016/03/07 14:48:22 let's wrap comments to fit 80 col
horo 2016/03/08 03:11:02 Done.
+ RELEASE_ASSERT_NOT_REACHED();
+ break;
+ }
+ }
FetchResponseData* responseData = nullptr;
CompositeDataConsumerHandle::Updater* updater = nullptr;
@@ -302,7 +323,7 @@ void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceRespo
// as a redirect response, and execute tainting.
}
if (!taintedResponse) {
- switch (m_request->responseTainting()) {
+ switch (tainting) {
case FetchRequestData::BasicTainting:
taintedResponse = responseData->createBasicFilteredResponse();
break;
@@ -532,6 +553,8 @@ void FetchManager::Loader::performHTTPFetch(bool corsFlag, bool corsPreflightFla
ResourceRequest request(m_request->url());
request.setRequestContext(m_request->context());
request.setHTTPMethod(m_request->method());
+ request.setFetchRequestMode(m_request->mode());
+ request.setFetchCredentialsMode(m_request->credentials());
const Vector<OwnPtr<FetchHeaderList::Header>>& list = m_request->headerList()->list();
for (size_t i = 0; i < list.size(); ++i) {
request.addHTTPHeaderField(AtomicString(list[i]->first), AtomicString(list[i]->second));

Powered by Google App Engine
This is Rietveld 408576698