Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Unified Diff: third_party/WebKit/Source/core/timing/PerformanceBase.cpp

Issue 2550883003: nav timing 2 redirect allow opt-in (Closed)
Patch Set: addressed comments and added unit tests Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698