| Index: Source/core/loader/ProgressTracker.cpp
|
| diff --git a/Source/core/loader/ProgressTracker.cpp b/Source/core/loader/ProgressTracker.cpp
|
| index be2b29abe4f1b4b93e6d5951452749f064df525e..f11a89f4211dff844e57891f3383464673775dc1 100644
|
| --- a/Source/core/loader/ProgressTracker.cpp
|
| +++ b/Source/core/loader/ProgressTracker.cpp
|
| @@ -26,6 +26,7 @@
|
| #include "config.h"
|
| #include "core/loader/ProgressTracker.h"
|
|
|
| +#include "core/fetch/ResourceFetcher.h"
|
| #include "core/frame/FrameView.h"
|
| #include "core/frame/LocalFrame.h"
|
| #include "core/inspector/InspectorInstrumentation.h"
|
| @@ -61,8 +62,10 @@
|
| long long estimatedLength;
|
| };
|
|
|
| -ProgressTracker::ProgressTracker()
|
| - : m_totalPageAndResourceBytesToLoad(0)
|
| +ProgressTracker::ProgressTracker(LocalFrame* frame)
|
| + : m_frame(frame)
|
| + , m_inProgress(false)
|
| + , m_totalPageAndResourceBytesToLoad(0)
|
| , m_totalBytesReceived(0)
|
| , m_lastNotifiedProgressValue(0)
|
| , m_lastNotifiedProgressTime(0)
|
| @@ -70,17 +73,18 @@
|
| , m_progressNotificationTimeInterval(0.1)
|
| , m_finalProgressChangedSent(false)
|
| , m_progressValue(0)
|
| - , m_numProgressTrackedFrames(0)
|
| {
|
| }
|
|
|
| ProgressTracker::~ProgressTracker()
|
| {
|
| -}
|
| -
|
| -PassOwnPtr<ProgressTracker> ProgressTracker::create()
|
| -{
|
| - return adoptPtr(new ProgressTracker);
|
| + if (m_inProgress)
|
| + progressCompleted();
|
| +}
|
| +
|
| +PassOwnPtr<ProgressTracker> ProgressTracker::create(LocalFrame* frame)
|
| +{
|
| + return adoptPtr(new ProgressTracker(frame));
|
| }
|
|
|
| double ProgressTracker::estimatedProgress() const
|
| @@ -98,59 +102,35 @@
|
| m_lastNotifiedProgressValue = 0;
|
| m_lastNotifiedProgressTime = 0;
|
| m_finalProgressChangedSent = false;
|
| - m_numProgressTrackedFrames = 0;
|
| - m_originatingProgressFrame = nullptr;
|
| -}
|
| -
|
| -void ProgressTracker::progressStarted(LocalFrame* frame)
|
| -{
|
| - WTF_LOG(Progress, "Progress started (%p) - frame %p(\"%s\"), value %f, tracked frames %d, originating frame %p", this, frame, frame->tree().uniqueName().utf8().data(), m_progressValue, m_numProgressTrackedFrames, m_originatingProgressFrame.get());
|
| -
|
| - if (m_numProgressTrackedFrames == 0 || m_originatingProgressFrame == frame) {
|
| +}
|
| +
|
| +void ProgressTracker::progressStarted()
|
| +{
|
| + if (!m_inProgress) {
|
| reset();
|
| m_progressValue = initialProgressValue;
|
| - m_originatingProgressFrame = frame;
|
| -
|
| - m_originatingProgressFrame->loader().client()->postProgressStartedNotification(NavigationToDifferentDocument);
|
| - }
|
| - m_numProgressTrackedFrames++;
|
| - InspectorInstrumentation::frameStartedLoading(frame);
|
| -}
|
| -
|
| -void ProgressTracker::progressCompleted(LocalFrame* frame)
|
| -{
|
| - WTF_LOG(Progress, "Progress completed (%p) - frame %p(\"%s\"), value %f, tracked frames %d, originating frame %p", this, frame, frame->tree().uniqueName().utf8().data(), m_progressValue, m_numProgressTrackedFrames, m_originatingProgressFrame.get());
|
| -
|
| - if (m_numProgressTrackedFrames <= 0)
|
| - return;
|
| - m_numProgressTrackedFrames--;
|
| - if (!m_numProgressTrackedFrames || m_originatingProgressFrame == frame)
|
| - finalProgressComplete();
|
| -}
|
| -
|
| -void ProgressTracker::finalProgressComplete()
|
| -{
|
| - WTF_LOG(Progress, "Final progress complete (%p)", this);
|
| -
|
| - RefPtr<LocalFrame> frame = m_originatingProgressFrame.release();
|
| -
|
| - // Before resetting progress value be sure to send client a least one notification
|
| - // with final progress value.
|
| + m_frame->loader().client()->didStartLoading(NavigationToDifferentDocument);
|
| + }
|
| + m_inProgress = true;
|
| + InspectorInstrumentation::frameStartedLoading(m_frame);
|
| +}
|
| +
|
| +void ProgressTracker::progressCompleted()
|
| +{
|
| + ASSERT(m_inProgress);
|
| + m_inProgress = false;
|
| if (!m_finalProgressChangedSent) {
|
| m_progressValue = 1;
|
| - frame->loader().client()->postProgressEstimateChangedNotification();
|
| - }
|
| -
|
| + m_frame->loader().client()->progressEstimateChanged(m_progressValue);
|
| + }
|
| reset();
|
| - frame->loader().client()->postProgressFinishedNotification();
|
| - InspectorInstrumentation::frameStoppedLoading(frame.get());
|
| + m_frame->loader().client()->didStopLoading();
|
| + InspectorInstrumentation::frameStoppedLoading(m_frame);
|
| }
|
|
|
| void ProgressTracker::incrementProgress(unsigned long identifier, const ResourceResponse& response)
|
| {
|
| - WTF_LOG(Progress, "Progress incremented (%p) - value %f, tracked frames %d, originating frame %p", this, m_progressValue, m_numProgressTrackedFrames, m_originatingProgressFrame.get());
|
| -
|
| - if (m_numProgressTrackedFrames <= 0)
|
| + if (!m_inProgress)
|
| return;
|
|
|
| long long estimatedLength = response.expectedContentLength();
|
| @@ -174,8 +154,6 @@
|
| if (!item)
|
| return;
|
|
|
| - RefPtr<LocalFrame> frame = m_originatingProgressFrame;
|
| -
|
| unsigned bytesReceived = length;
|
| double increment, percentOfRemainingBytes;
|
| long long remainingBytes, estimatedBytesForPendingRequests;
|
| @@ -186,7 +164,7 @@
|
| item->estimatedLength = item->bytesReceived * 2;
|
| }
|
|
|
| - int numPendingOrLoadingRequests = frame->loader().numPendingOrLoadingRequests(true);
|
| + int numPendingOrLoadingRequests = m_frame->document()->fetcher()->requestCount();
|
| estimatedBytesForPendingRequests = progressItemDefaultEstimatedLength * numPendingOrLoadingRequests;
|
| remainingBytes = ((m_totalPageAndResourceBytesToLoad + estimatedBytesForPendingRequests) - m_totalBytesReceived);
|
| if (remainingBytes > 0) // Prevent divide by 0.
|
| @@ -195,7 +173,7 @@
|
| percentOfRemainingBytes = 1.0;
|
|
|
| // For documents that use WebCore's layout system, treat first layout as the half-way point.
|
| - bool useClampedMaxProgress = !frame->view()->didFirstLayout();
|
| + bool useClampedMaxProgress = !m_frame->view()->didFirstLayout();
|
| double maxProgressValue = useClampedMaxProgress ? 0.5 : finalProgressValue;
|
| increment = (maxProgressValue - m_progressValue) * percentOfRemainingBytes;
|
| m_progressValue += increment;
|
| @@ -207,16 +185,13 @@
|
| double now = currentTime();
|
| double notifiedProgressTimeDelta = now - m_lastNotifiedProgressTime;
|
|
|
| - WTF_LOG(Progress, "Progress incremented (%p) - value %f, tracked frames %d", this, m_progressValue, m_numProgressTrackedFrames);
|
| double notificationProgressDelta = m_progressValue - m_lastNotifiedProgressValue;
|
| - if ((notificationProgressDelta >= m_progressNotificationInterval ||
|
| - notifiedProgressTimeDelta >= m_progressNotificationTimeInterval) &&
|
| - m_numProgressTrackedFrames > 0) {
|
| + if (notificationProgressDelta >= m_progressNotificationInterval || notifiedProgressTimeDelta >= m_progressNotificationTimeInterval) {
|
| if (!m_finalProgressChangedSent) {
|
| if (m_progressValue == 1)
|
| m_finalProgressChangedSent = true;
|
|
|
| - frame->loader().client()->postProgressEstimateChangedNotification();
|
| + m_frame->loader().client()->progressEstimateChanged(m_progressValue);
|
|
|
| m_lastNotifiedProgressValue = m_progressValue;
|
| m_lastNotifiedProgressTime = now;
|
|
|