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); |