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 04e8fc0b0b398e32535bdb89324120857e360e88..c1f2434bb9e86a63d274715ace8a2394a4482a28 100644 |
| --- a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp |
| +++ b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp |
| @@ -51,16 +51,6 @@ |
| 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; |
| @@ -80,40 +70,28 @@ PerformanceBase::PerformanceBase(double timeOrigin, |
| PerformanceBase::~PerformanceBase() {} |
| -PerformanceNavigationTiming::NavigationType PerformanceBase::getNavigationType( |
| - NavigationType type, |
|
panicker
2017/02/03 23:53:52
could you move this to a separate CL?
sunjian
2017/02/10 18:32:46
It's actually easier to keep this change. getNavig
|
| - 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(); |
| - return PerformanceNavigationTiming::NavigationType::Navigate; |
| -} |
| - |
| const AtomicString& PerformanceBase::interfaceName() const { |
| return EventTargetNames::Performance; |
| } |
| +SecurityOrigin* PerformanceBase::getSecurityOrigin(ExecutionContext* context) { |
| + if (context) |
| + return context->getSecurityOrigin(); |
| + return nullptr; |
| +} |
| + |
| PerformanceTiming* PerformanceBase::timing() const { |
| return nullptr; |
| } |
| -PerformanceEntryVector PerformanceBase::getEntries() const { |
| +PerformanceEntryVector PerformanceBase::getEntries() { |
| PerformanceEntryVector entries; |
| entries.appendVector(m_resourceTimingBuffer); |
| + if (!m_navigationTiming) |
| + m_navigationTiming = getNavigationTimingInstance(); |
| + // This extra checking is needed when WorkerPerformance |
| + // calls this method. |
| if (m_navigationTiming) |
| entries.push_back(m_navigationTiming); |
| entries.appendVector(m_frameTimingBuffer); |
| @@ -140,6 +118,8 @@ PerformanceEntryVector PerformanceBase::getEntriesByType( |
| entries.push_back(resource); |
| break; |
| case PerformanceEntry::Navigation: |
| + if (!m_navigationTiming) |
| + m_navigationTiming = getNavigationTimingInstance(); |
| if (m_navigationTiming) |
| entries.push_back(m_navigationTiming); |
| break; |
| @@ -195,6 +175,8 @@ PerformanceEntryVector PerformanceBase::getEntriesByName( |
| } |
| if (entryType.isNull() || type == PerformanceEntry::Navigation) { |
| + if (!m_navigationTiming) |
| + m_navigationTiming = getNavigationTimingInstance(); |
| if (m_navigationTiming && m_navigationTiming->name() == name) |
| entries.push_back(m_navigationTiming); |
| } |
| @@ -344,65 +326,12 @@ void PerformanceBase::addResourceTiming(const ResourceTimingInfo& info) { |
| addResourceTimingBuffer(*entry); |
| } |
| -void PerformanceBase::addNavigationTiming(LocalFrame* frame) { |
| - if (!RuntimeEnabledFeatures::performanceNavigationTiming2Enabled()) |
| - return; |
| - DCHECK(frame); |
| - const DocumentLoader* documentLoader = frame->loader().documentLoader(); |
| - DCHECK(documentLoader); |
| - |
| - const DocumentLoadTiming& documentLoadTiming = documentLoader->timing(); |
| - |
| - const DocumentTiming* documentTiming = |
| - frame->document() ? &(frame->document()->timing()) : nullptr; |
| - |
| - ResourceTimingInfo* navigationTimingInfo = |
| - documentLoader->getNavigationTimingInfo(); |
| - if (!navigationTimingInfo) |
| - return; |
| - |
| - const ResourceResponse& finalResponse = navigationTimingInfo->finalResponse(); |
| - |
| - ResourceLoadTiming* resourceLoadTiming = finalResponse.resourceLoadTiming(); |
| - // Don't create a navigation timing instance when |
| - // resourceLoadTiming is null, which could happen when visiting non-http sites |
| - // such as about:blank or in some error cases. |
| - if (!resourceLoadTiming) |
| - return; |
| - 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(); |
| - bool didReuseConnection = finalResponse.connectionReused(); |
| - PerformanceNavigationTiming::NavigationType type = |
| - getNavigationType(documentLoader->getNavigationType(), frame->document()); |
| - |
| - m_navigationTiming = new PerformanceNavigationTiming( |
| - timeOrigin(), documentLoadTiming.unloadEventStart(), |
| - documentLoadTiming.unloadEventEnd(), documentLoadTiming.loadEventStart(), |
| - documentLoadTiming.loadEventEnd(), documentLoadTiming.redirectCount(), |
| - documentTiming ? documentTiming->domInteractive() : 0, |
| - documentTiming ? documentTiming->domContentLoadedEventStart() : 0, |
| - documentTiming ? documentTiming->domContentLoadedEventEnd() : 0, |
| - documentTiming ? documentTiming->domComplete() : 0, type, |
| - documentLoadTiming.redirectStart(), documentLoadTiming.redirectEnd(), |
| - documentLoadTiming.fetchStart(), documentLoadTiming.responseEnd(), |
| - allowRedirectDetails, |
| - documentLoadTiming.hasSameOriginAsPreviousDocument(), resourceLoadTiming, |
| - lastRedirectEndTime, finishTime, transferSize, encodedBodyLength, |
| - decodedBodyLength, didReuseConnection); |
| - notifyObserversOfEntry(*m_navigationTiming); |
| +// Called after loadEventEnd happens. |
| +void PerformanceBase::notifyNavigationTimingToObserver() { |
|
panicker
2017/02/03 23:53:52
s/ToObserver/ToObservers/
sunjian
2017/02/10 18:32:46
Done.
|
| + if (!m_navigationTiming) |
| + m_navigationTiming = getNavigationTimingInstance(); |
| + if (m_navigationTiming) |
| + notifyObserversOfEntry(*m_navigationTiming); |
| } |
| void PerformanceBase::addFirstPaintTiming(double startTime) { |