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 c62ef76229be9d2a765098793714c03f648b896c..9545e576bda55b4090b33d1c22a8f5ba592050ec 100644 |
--- a/third_party/WebKit/Source/modules/fetch/FetchManager.cpp |
+++ b/third_party/WebKit/Source/modules/fetch/FetchManager.cpp |
@@ -34,6 +34,7 @@ |
#include "platform/network/ResourceError.h" |
#include "platform/network/ResourceRequest.h" |
#include "platform/network/ResourceResponse.h" |
+#include "platform/weborigin/KURL.h" |
#include "platform/weborigin/SchemeRegistry.h" |
#include "platform/weborigin/SecurityOrigin.h" |
#include "platform/weborigin/SecurityPolicy.h" |
@@ -154,6 +155,7 @@ class FetchManager::Loader final |
~Loader() override; |
DECLARE_VIRTUAL_TRACE(); |
+ void didReceiveRedirectTo(const KURL&) override; |
void didReceiveResponse(unsigned long, |
const ResourceResponse&, |
std::unique_ptr<WebDataConsumerHandle>) override; |
@@ -282,6 +284,7 @@ class FetchManager::Loader final |
Member<SRIVerifier> m_integrityVerifier; |
bool m_didFinishLoading; |
bool m_isIsolatedWorld; |
+ Vector<KURL> m_urlList; |
Member<ExecutionContext> m_executionContext; |
}; |
@@ -301,6 +304,7 @@ FetchManager::Loader::Loader(ExecutionContext* executionContext, |
m_isIsolatedWorld(isIsolatedWorld), |
m_executionContext(executionContext) { |
ThreadState::current()->registerPreFinalizer(this); |
+ m_urlList.append(request->url()); |
} |
FetchManager::Loader::~Loader() { |
@@ -316,11 +320,18 @@ DEFINE_TRACE(FetchManager::Loader) { |
visitor->trace(m_executionContext); |
} |
+void FetchManager::Loader::didReceiveRedirectTo(const KURL& url) { |
+ m_urlList.append(url); |
+} |
+ |
void FetchManager::Loader::didReceiveResponse( |
unsigned long, |
const ResourceResponse& response, |
std::unique_ptr<WebDataConsumerHandle> handle) { |
ASSERT(handle); |
+ // TODO(horo): This check could be false when we will use the response url |
+ // in service worker responses. (crbug.com/553535) |
+ DCHECK(response.url() == m_urlList.back()); |
falken
2016/11/30 14:57:37
nit: DCHECK_EQ
horo
2016/12/01 07:42:13
DCHECK_EQ with KURL causes compile failure.
../..
|
ScriptState* scriptState = m_resolver->getScriptState(); |
ScriptState::Scope scope(scriptState); |
@@ -423,7 +434,14 @@ void FetchManager::Loader::didReceiveResponse( |
responseData->setStatusMessage(response.httpStatusText()); |
for (auto& it : response.httpHeaderFields()) |
responseData->headerList()->append(it.key, it.value); |
- responseData->setURL(response.url()); |
+ if (response.urlListViaServiceWorker().isEmpty()) { |
+ // Note: This list is empty, unless it came from a service worker, in which |
+ // case it will only be empty if it was created through new Response(). |
falken
2016/11/30 14:57:37
nit: "This list" could plausibly mean |urlListViaS
horo
2016/12/01 07:42:13
Done.
|
+ responseData->setURLList(m_urlList); |
+ } else { |
+ DCHECK(response.wasFetchedViaServiceWorker()); |
+ responseData->setURLList(response.urlListViaServiceWorker()); |
+ } |
responseData->setMIMEType(response.mimeType()); |
responseData->setResponseTime(response.responseTime()); |