| 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 125574198187efcb950f2f282e08add791c2c5f6..c39c3a30b98f2c1422267fb7005687abc458d6cd 100644
|
| --- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
|
| +++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
|
| @@ -917,6 +917,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".
|
| + // TODO(ricea): 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);
|
| @@ -1034,7 +1039,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))
|
| @@ -1057,8 +1062,12 @@ 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> originalSecurityOrigin = SecurityOrigin::create(redirectResponse.url());
|
| + RefPtr<SecurityOrigin> redirectedSecurityOrigin = SecurityOrigin::create(newRequest.url());
|
| + bool crossOrigin = !redirectedSecurityOrigin->isSameSchemeHostPort(originalSecurityOrigin.get());
|
| + it->value->addRedirect(redirectResponse, encodedDataLength, crossOrigin);
|
| + }
|
| willSendRequest(resource->identifier(), newRequest, redirectResponse, resource->options());
|
| return true;
|
| }
|
|
|