Index: content/browser/frame_host/frame_tree.cc |
diff --git a/content/browser/frame_host/frame_tree.cc b/content/browser/frame_host/frame_tree.cc |
index b33f9d0bcbcf7301b0a55399ead0c154855cd275..3c3c0f8978156af82455125155746703b63c9173 100644 |
--- a/content/browser/frame_host/frame_tree.cc |
+++ b/content/browser/frame_host/frame_tree.cc |
@@ -79,6 +79,44 @@ FrameTree::NodeIterator FrameTree::NodeRange::end() { |
FrameTree::NodeRange::NodeRange(FrameTree* tree, FrameTreeNode* node_to_skip) |
: tree_(tree), node_to_skip_(node_to_skip) {} |
+FrameTree::ConstNodeIterator::~ConstNodeIterator() {} |
+ |
+FrameTree::ConstNodeIterator& FrameTree::ConstNodeIterator::operator++() { |
+ for (size_t i = 0; i < current_node_->child_count(); ++i) { |
+ const FrameTreeNode* child = current_node_->child_at(i); |
+ queue_.push(child); |
+ } |
+ |
+ if (!queue_.empty()) { |
+ current_node_ = queue_.front(); |
+ queue_.pop(); |
+ } else { |
+ current_node_ = nullptr; |
+ } |
+ |
+ return *this; |
+} |
+ |
+bool FrameTree::ConstNodeIterator::operator==( |
+ const ConstNodeIterator& rhs) const { |
+ return current_node_ == rhs.current_node_; |
+} |
+ |
+FrameTree::ConstNodeIterator::ConstNodeIterator( |
+ const FrameTreeNode* starting_node) |
+ : current_node_(starting_node) {} |
+ |
+FrameTree::ConstNodeIterator FrameTree::ConstNodeRange::begin() { |
+ return ConstNodeIterator(tree_->root()); |
+} |
+ |
+FrameTree::ConstNodeIterator FrameTree::ConstNodeRange::end() { |
+ return ConstNodeIterator(nullptr); |
+} |
+ |
+FrameTree::ConstNodeRange::ConstNodeRange(const FrameTree* tree) |
+ : tree_(tree) {} |
+ |
FrameTree::FrameTree(Navigator* navigator, |
RenderFrameHostDelegate* render_frame_delegate, |
RenderViewHostDelegate* render_view_delegate, |
@@ -155,6 +193,10 @@ FrameTree::NodeRange FrameTree::NodesExcept(FrameTreeNode* node_to_skip) { |
return NodeRange(this, node_to_skip); |
} |
+FrameTree::ConstNodeRange FrameTree::ConstNodes() const { |
+ return ConstNodeRange(this); |
+} |
+ |
bool FrameTree::AddFrame( |
FrameTreeNode* parent, |
int process_id, |
@@ -424,8 +466,8 @@ void FrameTree::ResetLoadProgress() { |
load_progress_ = 0.0; |
} |
-bool FrameTree::IsLoading() { |
- for (FrameTreeNode* node : Nodes()) { |
+bool FrameTree::IsLoading() const { |
+ for (const FrameTreeNode* node : ConstNodes()) { |
if (node->IsLoading()) |
return true; |
} |