Chromium Code Reviews| Index: third_party/WebKit/Source/core/timing/PerformanceBase.cpp |
| diff --git a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp |
| index fdf6d454012e2353ad6299b342697162202dac5b..8d5ec6964bf1df7db807ed68f5360f1072f763e2 100644 |
| --- a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp |
| +++ b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp |
| @@ -345,6 +345,7 @@ void PerformanceBase::addNavigationTiming(LocalFrame* frame) { |
| const ResourceResponse& finalResponse = documentLoader->response(); |
| ResourceTimingInfo* resourceTimingInfo = |
| documentLoader->getMainResourceTimingInfo(); |
| + |
| // Don't create navigation timing instance when resourceTimingInfo |
| // is null, which could happen when it is an iframe navigation restored |
| // from history, since its location may have been changed after initial |
| @@ -361,6 +362,18 @@ void PerformanceBase::addNavigationTiming(LocalFrame* frame) { |
| double lastRedirectEndTime = documentLoadTiming.redirectEnd(); |
| double finishTime = documentLoadTiming.loadEventEnd(); |
| + SecurityOrigin* securityOrigin = nullptr; |
| + ExecutionContext* context = getExecutionContext(); |
| + if (context) |
| + securityOrigin = context->getSecurityOrigin(); |
| + if (!securityOrigin) |
| + return; |
|
panicker
2016/12/05 19:11:52
Factor code above into a helper method getSecurity
sunjian
2016/12/06 19:46:44
Done.
|
| + |
| + const Vector<ResourceResponse>& redirectChain = |
|
panicker
2016/12/05 19:11:52
no need for temp variable?
sunjian
2016/12/06 19:46:44
Done.
|
| + resourceTimingInfo->redirectChain(); |
| + bool allowRedirectDetails = allowsTimingRedirect(redirectChain, finalResponse, |
|
panicker
2016/12/05 19:11:52
let's add a unittest for allowTimingRedirect(..)
sunjian
2016/12/06 19:46:44
Done.
|
| + *securityOrigin, context); |
| + |
| unsigned long long transferSize = resourceTimingInfo->transferSize(); |
| unsigned long long encodedBodyLength = finalResponse.encodedBodyLength(); |
| unsigned long long decodedBodyLength = finalResponse.decodedBodyLength(); |
| @@ -378,7 +391,7 @@ void PerformanceBase::addNavigationTiming(LocalFrame* frame) { |
| documentTiming ? documentTiming->domComplete() : 0, type, |
| documentLoadTiming.redirectStart(), documentLoadTiming.redirectEnd(), |
| documentLoadTiming.fetchStart(), documentLoadTiming.responseEnd(), |
| - documentLoadTiming.hasCrossOriginRedirect(), |
| + allowRedirectDetails, |
| documentLoadTiming.hasSameOriginAsPreviousDocument(), resourceLoadTiming, |
| lastRedirectEndTime, finishTime, transferSize, encodedBodyLength, |
| decodedBodyLength, didReuseConnection); |