diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/loader/ProgressTracker.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/core/loader/ProgressTracker.cpp | 77 |
1 files changed, 26 insertions, 51 deletions
diff --git a/chromium/third_party/WebKit/Source/core/loader/ProgressTracker.cpp b/chromium/third_party/WebKit/Source/core/loader/ProgressTracker.cpp index df7477cb71f..f11a89f4211 100644 --- a/chromium/third_party/WebKit/Source/core/loader/ProgressTracker.cpp +++ b/chromium/third_party/WebKit/Source/core/loader/ProgressTracker.cpp @@ -26,8 +26,9 @@ #include "config.h" #include "core/loader/ProgressTracker.h" -#include "core/frame/Frame.h" +#include "core/fetch/ResourceFetcher.h" #include "core/frame/FrameView.h" +#include "core/frame/LocalFrame.h" #include "core/inspector/InspectorInstrumentation.h" #include "core/loader/FrameLoader.h" #include "core/loader/FrameLoaderClient.h" @@ -61,8 +62,10 @@ public: 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 @@ ProgressTracker::ProgressTracker() , m_progressNotificationTimeInterval(0.1) , m_finalProgressChangedSent(false) , m_progressValue(0) - , m_numProgressTrackedFrames(0) { } ProgressTracker::~ProgressTracker() { + if (m_inProgress) + progressCompleted(); } -PassOwnPtr<ProgressTracker> ProgressTracker::create() +PassOwnPtr<ProgressTracker> ProgressTracker::create(LocalFrame* frame) { - return adoptPtr(new ProgressTracker); + return adoptPtr(new ProgressTracker(frame)); } double ProgressTracker::estimatedProgress() const @@ -98,59 +102,35 @@ void ProgressTracker::reset() m_lastNotifiedProgressValue = 0; m_lastNotifiedProgressTime = 0; m_finalProgressChangedSent = false; - m_numProgressTrackedFrames = 0; - m_originatingProgressFrame = 0; } -void ProgressTracker::progressStarted(Frame* frame) +void ProgressTracker::progressStarted() { - WTF_LOG(Progress, "Progress started (%p) - frame %p(\"%s\"), value %f, tracked frames %d, originating frame %p", this, frame, frame->tree().uniqueName().string().utf8().data(), m_progressValue, m_numProgressTrackedFrames, m_originatingProgressFrame.get()); - - if (m_numProgressTrackedFrames == 0 || m_originatingProgressFrame == frame) { + if (!m_inProgress) { reset(); m_progressValue = initialProgressValue; - m_originatingProgressFrame = frame; - - m_originatingProgressFrame->loader().client()->postProgressStartedNotification(); + m_frame->loader().client()->didStartLoading(NavigationToDifferentDocument); } - m_numProgressTrackedFrames++; - InspectorInstrumentation::frameStartedLoading(frame); -} - -void ProgressTracker::progressCompleted(Frame* frame) -{ - WTF_LOG(Progress, "Progress completed (%p) - frame %p(\"%s\"), value %f, tracked frames %d, originating frame %p", this, frame, frame->tree().uniqueName().string().utf8().data(), m_progressValue, m_numProgressTrackedFrames, m_originatingProgressFrame.get()); - - if (m_numProgressTrackedFrames <= 0) - return; - m_numProgressTrackedFrames--; - if (!m_numProgressTrackedFrames || m_originatingProgressFrame == frame) - finalProgressComplete(); + m_inProgress = true; + InspectorInstrumentation::frameStartedLoading(m_frame); } -void ProgressTracker::finalProgressComplete() +void ProgressTracker::progressCompleted() { - WTF_LOG(Progress, "Final progress complete (%p)", this); - - RefPtr<Frame> frame = m_originatingProgressFrame.release(); - - // Before resetting progress value be sure to send client a least one notification - // with final progress value. + 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 @@ void ProgressTracker::incrementProgress(unsigned long identifier, const char*, i if (!item) return; - RefPtr<Frame> frame = m_originatingProgressFrame; - unsigned bytesReceived = length; double increment, percentOfRemainingBytes; long long remainingBytes, estimatedBytesForPendingRequests; @@ -186,7 +164,7 @@ void ProgressTracker::incrementProgress(unsigned long identifier, const char*, i 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 @@ void ProgressTracker::incrementProgress(unsigned long identifier, const char*, i 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 @@ void ProgressTracker::incrementProgress(unsigned long identifier, const char*, i 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; |