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..453ff4cfb7aef2ebcfb24e7b1dd13a963aba43fb 100644 |
| --- a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp |
| +++ b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp |
| @@ -225,7 +225,7 @@ void PerformanceBase::setFrameTimingBufferSize(unsigned size) { |
| dispatchEvent(Event::create(EventTypeNames::frametimingbufferfull)); |
| } |
| -static bool passesTimingAllowCheck( |
| +bool PerformanceBase::passesTimingAllowCheck( |
| const ResourceResponse& response, |
| const SecurityOrigin& initiatorSecurityOrigin, |
| const AtomicString& originalTimingAllowOrigin, |
| @@ -263,10 +263,11 @@ static bool passesTimingAllowCheck( |
| return false; |
| } |
| -static bool allowsTimingRedirect(const Vector<ResourceResponse>& redirectChain, |
| - const ResourceResponse& finalResponse, |
| - const SecurityOrigin& initiatorSecurityOrigin, |
| - ExecutionContext* context) { |
| +bool PerformanceBase::allowsTimingRedirect( |
| + const Vector<ResourceResponse>& redirectChain, |
| + const ResourceResponse& finalResponse, |
| + const SecurityOrigin& initiatorSecurityOrigin, |
| + ExecutionContext* context) { |
| if (!passesTimingAllowCheck(finalResponse, initiatorSecurityOrigin, |
| AtomicString(), context)) |
| return false; |
| @@ -280,14 +281,19 @@ static bool allowsTimingRedirect(const Vector<ResourceResponse>& redirectChain, |
| return true; |
| } |
| +SecurityOrigin* PerformanceBase::getSecurityOrigin() const { |
|
panicker
2016/12/07 00:40:52
Nit: prefer moving to anonymous namespace here as
sunjian
2016/12/07 20:10:32
Done.
|
| + ExecutionContext* context = getExecutionContext(); |
| + if (context) |
| + return context->getSecurityOrigin(); |
| + return nullptr; |
| +} |
| + |
| void PerformanceBase::addResourceTiming(const ResourceTimingInfo& info) { |
| if (isResourceTimingBufferFull() && |
| !hasObserverFor(PerformanceEntry::Resource)) |
| return; |
| - SecurityOrigin* securityOrigin = nullptr; |
| ExecutionContext* context = getExecutionContext(); |
| - if (context) |
| - securityOrigin = context->getSecurityOrigin(); |
| + SecurityOrigin* securityOrigin = getSecurityOrigin(); |
| if (!securityOrigin) |
| return; |
| @@ -345,6 +351,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 +368,14 @@ void PerformanceBase::addNavigationTiming(LocalFrame* frame) { |
| double lastRedirectEndTime = documentLoadTiming.redirectEnd(); |
| double finishTime = documentLoadTiming.loadEventEnd(); |
| + SecurityOrigin* securityOrigin = getSecurityOrigin(); |
| + if (!securityOrigin) |
| + return; |
| + |
| + bool allowRedirectDetails = |
| + allowsTimingRedirect(resourceTimingInfo->redirectChain(), finalResponse, |
| + *securityOrigin, getExecutionContext()); |
| + |
| unsigned long long transferSize = resourceTimingInfo->transferSize(); |
| unsigned long long encodedBodyLength = finalResponse.encodedBodyLength(); |
| unsigned long long decodedBodyLength = finalResponse.decodedBodyLength(); |
| @@ -378,7 +393,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); |