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 6b4549c0f17b88f333c8f331616bcea357620c66..bd4fdc9ea7ce6af551bc02585e57cf5dbc2a0123 100644 |
--- a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp |
+++ b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp |
@@ -39,7 +39,6 @@ |
#include "core/loader/DocumentLoadTiming.h" |
#include "core/loader/DocumentLoader.h" |
#include "core/timing/PerformanceLongTaskTiming.h" |
-#include "core/timing/PerformanceNavigationTiming.h" |
#include "core/timing/PerformanceObserver.h" |
#include "core/timing/PerformanceResourceTiming.h" |
#include "core/timing/PerformanceUserTiming.h" |
@@ -68,6 +67,27 @@ PerformanceBase::PerformanceBase(double timeOrigin) |
PerformanceBase::~PerformanceBase() {} |
+PerformanceNavigationTiming::NavigationType PerformanceBase::getNavigationType( |
+ NavigationType type, |
+ const Document* document) { |
+ if (document && |
+ document->pageVisibilityState() == PageVisibilityStatePrerender) { |
+ return PerformanceNavigationTiming::NavigationType::Prerender; |
+ } |
+ switch (type) { |
+ case NavigationTypeReload: |
+ return PerformanceNavigationTiming::NavigationType::Reload; |
+ case NavigationTypeBackForward: |
+ return PerformanceNavigationTiming::NavigationType::BackForward; |
+ case NavigationTypeLinkClicked: |
+ case NavigationTypeFormSubmitted: |
+ case NavigationTypeFormResubmitted: |
+ case NavigationTypeOther: |
+ return PerformanceNavigationTiming::NavigationType::Navigate; |
+ } |
+ NOTREACHED(); |
+} |
+ |
const AtomicString& PerformanceBase::interfaceName() const { |
return EventTargetNames::Performance; |
} |
@@ -336,6 +356,8 @@ void PerformanceBase::addNavigationTiming(LocalFrame* frame) { |
unsigned long long encodedBodyLength = finalResponse.encodedBodyLength(); |
unsigned long long decodedBodyLength = finalResponse.decodedBodyLength(); |
bool didReuseConnection = finalResponse.connectionReused(); |
+ PerformanceNavigationTiming::NavigationType type = |
+ getNavigationType(documentLoader->getNavigationType(), frame->document()); |
m_navigationTiming = new PerformanceNavigationTiming( |
timeOrigin(), documentLoadTiming.unloadEventStart(), |
@@ -344,10 +366,9 @@ void PerformanceBase::addNavigationTiming(LocalFrame* frame) { |
documentTiming ? documentTiming->domInteractive() : 0, |
documentTiming ? documentTiming->domContentLoadedEventStart() : 0, |
documentTiming ? documentTiming->domContentLoadedEventEnd() : 0, |
- documentTiming ? documentTiming->domComplete() : 0, |
- documentLoader->getNavigationType(), documentLoadTiming.redirectStart(), |
- documentLoadTiming.redirectEnd(), documentLoadTiming.fetchStart(), |
- documentLoadTiming.responseEnd(), |
+ documentTiming ? documentTiming->domComplete() : 0, type, |
+ documentLoadTiming.redirectStart(), documentLoadTiming.redirectEnd(), |
+ documentLoadTiming.fetchStart(), documentLoadTiming.responseEnd(), |
documentLoadTiming.hasCrossOriginRedirect(), |
documentLoadTiming.hasSameOriginAsPreviousDocument(), resourceLoadTiming, |
lastRedirectEndTime, finishTime, transferSize, encodedBodyLength, |