Index: content/browser/frame_host/frame_tree_node.cc |
diff --git a/content/browser/frame_host/frame_tree_node.cc b/content/browser/frame_host/frame_tree_node.cc |
index 4a0db77650e2671ddbad1a3bd49d12d14e9fa7cd..15679805e80deb41c13d12ad670af4db0ea014df 100644 |
--- a/content/browser/frame_host/frame_tree_node.cc |
+++ b/content/browser/frame_host/frame_tree_node.cc |
@@ -7,6 +7,7 @@ |
#include <queue> |
#include "base/command_line.h" |
+#include "base/profiler/scoped_tracker.h" |
#include "base/stl_util.h" |
#include "content/browser/frame_host/frame_tree.h" |
#include "content/browser/frame_host/navigation_request.h" |
@@ -27,11 +28,14 @@ typedef base::hash_map<int64, FrameTreeNode*> FrameTreeNodeIDMap; |
base::LazyInstance<FrameTreeNodeIDMap> g_frame_tree_node_id_map = |
LAZY_INSTANCE_INITIALIZER; |
-} // namespace |
+// These values indicate the loading progress status. The minimum progress |
+// value matches what Blink's ProgressTracker has traditionally used for a |
+// minimum progress value. |
+const double kLoadingProgressNotStarted = 0.0; |
+const double kLoadingProgressMinimum = 0.1; |
+const double kLoadingProgressDone = 1.0; |
-const double FrameTreeNode::kLoadingProgressNotStarted = 0.0; |
-const double FrameTreeNode::kLoadingProgressMinimum = 0.1; |
-const double FrameTreeNode::kLoadingProgressDone = 1.0; |
+} // namespace |
int64 FrameTreeNode::next_frame_tree_node_id_ = 1; |
@@ -194,4 +198,69 @@ void FrameTreeNode::ResetNavigationRequest(bool is_commit) { |
navigation_request_.reset(); |
} |
+bool FrameTreeNode::has_started_loading() const { |
+ return loading_progress_ != kLoadingProgressNotStarted; |
+} |
+ |
+void FrameTreeNode::reset_loading_progress() { |
+ loading_progress_ = kLoadingProgressNotStarted; |
+} |
+ |
+void FrameTreeNode::DidStartLoading(bool to_different_document) { |
+ // Any main frame load to a new document should reset the load progress since |
+ // it will replace the current page and any frames. The WebContents will |
+ // be notified when DidChangeLoadProgress is called. |
+ if (to_different_document && IsMainFrame()) |
+ frame_tree_->ResetLoadProgress(); |
+ |
+ // Notify the WebContents. |
+ if (!frame_tree_->IsLoading()) |
+ navigator()->GetDelegate()->DidStartLoading(this, to_different_document); |
+ |
+ // Set initial load progress and update overall progress. This will notify |
+ // the WebContents of the load progress change. |
+ DidChangeLoadProgress(kLoadingProgressMinimum); |
+ |
+ // Notify the RenderFrameHostManager of the event. |
+ render_manager()->OnDidStartLoading(); |
+} |
+ |
+void FrameTreeNode::DidStopLoading() { |
+ // TODO(erikchen): Remove ScopedTracker below once crbug.com/465796 is fixed. |
+ tracked_objects::ScopedTracker tracking_profile1( |
+ FROM_HERE_WITH_EXPLICIT_FUNCTION( |
+ "465796 FrameTreeNode::DidStopLoading::Start")); |
+ |
+ // Set final load progress and update overall progress. This will notify |
+ // the WebContents of the load progress change. |
+ DidChangeLoadProgress(kLoadingProgressDone); |
+ |
+ // TODO(erikchen): Remove ScopedTracker below once crbug.com/465796 is fixed. |
+ tracked_objects::ScopedTracker tracking_profile2( |
+ FROM_HERE_WITH_EXPLICIT_FUNCTION( |
+ "465796 FrameTreeNode::DidStopLoading::WCIDidStopLoading")); |
+ |
+ // Notify the WebContents. |
+ if (!frame_tree_->IsLoading()) |
+ navigator()->GetDelegate()->DidStopLoading(); |
+ |
+ // TODO(erikchen): Remove ScopedTracker below once crbug.com/465796 is fixed. |
+ tracked_objects::ScopedTracker tracking_profile3( |
+ FROM_HERE_WITH_EXPLICIT_FUNCTION( |
+ "465796 FrameTreeNode::DidStopLoading::RFHMDidStopLoading")); |
+ |
+ // Notify the RenderFrameHostManager of the event. |
+ render_manager()->OnDidStopLoading(); |
+ |
+ // TODO(erikchen): Remove ScopedTracker below once crbug.com/465796 is fixed. |
+ tracked_objects::ScopedTracker tracking_profile4( |
+ FROM_HERE_WITH_EXPLICIT_FUNCTION( |
+ "465796 FrameTreeNode::DidStopLoading::End")); |
+} |
+ |
+void FrameTreeNode::DidChangeLoadProgress(double load_progress) { |
+ loading_progress_ = load_progress; |
+ frame_tree_->UpdateLoadProgress(); |
+} |
+ |
} // namespace content |