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 daf4a71255d6b8a9c6f30493364f25644dd18620..9a8d4cab6a2fbc9b4b605936d7b5c28e64ed0c9b 100644 |
--- a/content/browser/frame_host/frame_tree_node.cc |
+++ b/content/browser/frame_host/frame_tree_node.cc |
@@ -26,11 +26,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. |
+static const double kLoadingProgressNotStarted = 0.0; |
+static const double kLoadingProgressMinimum = 0.1; |
+static 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; |
@@ -174,4 +177,49 @@ bool FrameTreeNode::CommitPendingSandboxFlags() { |
return did_change_flags; |
} |
+bool FrameTreeNode::HasStartedLoading() const { |
+ return loading_progress_ != kLoadingProgressNotStarted; |
+} |
+ |
+void FrameTreeNode::ResetLoadingProgress() { |
+ 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. |
+ if (to_different_document && IsMainFrame()) |
+ frame_tree_->ResetLoadProgress(); |
Fabrice (no longer in Chrome)
2015/04/14 16:54:11
This part was problematic.
We have "FrameTree:Rese
nasko
2015/04/14 19:54:41
If it isn't obvious, then it is a good candidate f
Fabrice (no longer in Chrome)
2015/04/15 15:15:02
I clarified the comments to ensure there is no con
|
+ |
+ // Notify the Navigator. |
nasko
2015/04/14 19:54:40
Navigator doesn't really need to know about this.
Fabrice (no longer in Chrome)
2015/04/15 15:15:02
The issue is that Navigator does not have a delega
|
+ if (!frame_tree_->IsLoading()) |
+ navigator()->DidStartLoading(this, to_different_document); |
+ |
+ // Notify the RenderFrameHostManager of the event. |
+ render_manager()->OnDidStartLoading(); |
+ |
+ // Set initial load progress and update overall progress. |
+ loading_progress_ = kLoadingProgressMinimum; |
+ frame_tree_->UpdateLoadProgress(); |
+ |
nasko
2015/04/14 19:54:41
nit: no need for empty line.
Fabrice (no longer in Chrome)
2015/04/15 15:15:02
Done.
|
+} |
+ |
+void FrameTreeNode::DidStopLoading() { |
+ // Notify the RenderFrameHostManager of the event. |
+ render_manager()->OnDidStopLoading(); |
+ |
+ // Set final load progress and update overall progress. |
+ loading_progress_ = kLoadingProgressDone; |
+ frame_tree_->UpdateLoadProgress(); |
+ |
+ // Notify the Navigator. |
+ if (!frame_tree_->IsLoading()) |
+ navigator()->DidStopLoading(); |
+} |
+ |
+void FrameTreeNode::DidChangeLoadProgress(double load_progress) { |
+ loading_progress_ = load_progress; |
+ frame_tree_->UpdateLoadProgress(); |
+} |
+ |
} // namespace content |