Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / loader / ProgressTracker.cpp
index b96844a..f11a89f 100644 (file)
@@ -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().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(NavigationToDifferentDocument);
+        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().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;