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; |