| 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 f4f2607af01ce25251ea6010c011eae78acd4232..2b8ea03f51329215022d97cac1c29240c8a2927a 100644
|
| --- a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp
|
| +++ b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp
|
| @@ -50,6 +50,16 @@
|
|
|
| namespace blink {
|
|
|
| +namespace {
|
| +
|
| +SecurityOrigin* getSecurityOrigin(ExecutionContext* context) {
|
| + if (context)
|
| + return context->getSecurityOrigin();
|
| + return nullptr;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| using PerformanceObserverVector = HeapVector<Member<PerformanceObserver>>;
|
|
|
| static const size_t defaultResourceTimingBufferSize = 150;
|
| @@ -225,7 +235,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 +273,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;
|
| @@ -284,10 +295,8 @@ 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(context);
|
| if (!securityOrigin)
|
| return;
|
|
|
| @@ -357,6 +366,15 @@ void PerformanceBase::addNavigationTiming(LocalFrame* frame) {
|
| double lastRedirectEndTime = documentLoadTiming.redirectEnd();
|
| double finishTime = documentLoadTiming.loadEventEnd();
|
|
|
| + ExecutionContext* context = getExecutionContext();
|
| + SecurityOrigin* securityOrigin = getSecurityOrigin(context);
|
| + if (!securityOrigin)
|
| + return;
|
| +
|
| + bool allowRedirectDetails =
|
| + allowsTimingRedirect(navigationTimingInfo->redirectChain(), finalResponse,
|
| + *securityOrigin, context);
|
| +
|
| unsigned long long transferSize = navigationTimingInfo->transferSize();
|
| unsigned long long encodedBodyLength = finalResponse.encodedBodyLength();
|
| unsigned long long decodedBodyLength = finalResponse.decodedBodyLength();
|
| @@ -374,7 +392,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);
|
|
|