summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/core/loader/ProgressTracker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/loader/ProgressTracker.cpp')
-rw-r--r--chromium/third_party/WebKit/Source/core/loader/ProgressTracker.cpp77
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;