Index: third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp |
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp |
index 2a8f5d8b0e7051695131fc84db5839fbbbbcaf66..51a504854bd33a2ef14a6b7137ef6352659af163 100644 |
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp |
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp |
@@ -916,6 +916,11 @@ void ResourceFetcher::didFinishLoading(Resource* resource, double finishTime, in |
if (resource->response().isHTTP() && resource->response().httpStatusCode() < 400) { |
populateResourceTiming(info.get(), resource); |
info->setLoadFinishTime(finishTime); |
+ // encodedDataLength == -1 means "not available". |
+ // FIXME: Find cases where it is not available but the |
+ // PerformanceResourceTiming spec requires it to be available and |
+ // fix them. |
+ info->addFinalTransferSize(encodedDataLength == -1 ? 0 : encodedDataLength); |
if (resource->options().requestInitiatorContext == DocumentContext) |
context().addResourceTiming(*info); |
resource->reportResourceTimingToClients(*info); |
@@ -1033,7 +1038,7 @@ static bool isManualRedirectFetchRequest(const ResourceRequest& request) |
return request.fetchRedirectMode() == WebURLRequest::FetchRedirectModeManual && request.requestContext() == WebURLRequest::RequestContextFetch; |
} |
-bool ResourceFetcher::willFollowRedirect(Resource* resource, ResourceRequest& newRequest, const ResourceResponse& redirectResponse) |
+bool ResourceFetcher::willFollowRedirect(Resource* resource, ResourceRequest& newRequest, const ResourceResponse& redirectResponse, int64_t encodedDataLength) |
{ |
if (!isManualRedirectFetchRequest(resource->resourceRequest())) { |
if (!context().canRequest(resource->getType(), newRequest, newRequest.url(), resource->options(), resource->isUnusedPreload(), FetchRequest::UseDefaultOriginRestrictionForType)) |
@@ -1056,8 +1061,11 @@ bool ResourceFetcher::willFollowRedirect(Resource* resource, ResourceRequest& ne |
} |
ResourceTimingInfoMap::iterator it = m_resourceTimingInfoMap.find(resource); |
- if (it != m_resourceTimingInfoMap.end()) |
- it->value->addRedirect(redirectResponse); |
+ if (it != m_resourceTimingInfoMap.end()) { |
+ RefPtr<SecurityOrigin> redirectedSecurityOrigin = SecurityOrigin::create(redirectResponse.url()); |
+ bool crossOrigin = !redirectedSecurityOrigin->canRequest(newRequest.url()); |
Kunihiko Sakamoto
2016/07/01 10:12:35
This is just a same-origin check rather than a per
Adam Rice
2016/07/04 02:44:18
Done.
|
+ it->value->addRedirect(redirectResponse, encodedDataLength, crossOrigin); |
+ } |
willSendRequest(resource->identifier(), newRequest, redirectResponse, resource->options()); |
return true; |
} |