Index: content/browser/frame_host/frame_tree.h |
diff --git a/content/browser/frame_host/frame_tree.h b/content/browser/frame_host/frame_tree.h |
index b2c2681b466d789693193c3d9f45f626f2a6878b..78f9822d9d2bb0b7724176d12294fcd34f8257c9 100644 |
--- a/content/browser/frame_host/frame_tree.h |
+++ b/content/browser/frame_host/frame_tree.h |
@@ -41,6 +41,7 @@ class RenderWidgetHostDelegate; |
class CONTENT_EXPORT FrameTree { |
public: |
class NodeRange; |
+ class ConstNodeRange; |
class CONTENT_EXPORT NodeIterator { |
public: |
@@ -77,6 +78,41 @@ class CONTENT_EXPORT FrameTree { |
FrameTreeNode* const node_to_skip_; |
}; |
+ class CONTENT_EXPORT ConstNodeIterator { |
+ public: |
+ ~ConstNodeIterator(); |
+ |
+ ConstNodeIterator& operator++(); |
+ |
+ bool operator==(const ConstNodeIterator& rhs) const; |
+ bool operator!=(const ConstNodeIterator& rhs) const { |
+ return !(*this == rhs); |
+ } |
+ |
+ const FrameTreeNode* operator*() { return current_node_; } |
+ |
+ private: |
+ friend class ConstNodeRange; |
+ |
+ ConstNodeIterator(const FrameTreeNode* starting_node); |
+ |
+ const FrameTreeNode* current_node_; |
+ std::queue<const FrameTreeNode*> queue_; |
+ }; |
+ |
+ class CONTENT_EXPORT ConstNodeRange { |
+ public: |
+ ConstNodeIterator begin(); |
+ ConstNodeIterator end(); |
+ |
+ private: |
+ friend class FrameTree; |
+ |
+ ConstNodeRange(const FrameTree* tree); |
+ |
+ const FrameTree* const tree_; |
+ }; |
+ |
// Each FrameTreeNode will default to using the given |navigator| for |
// navigation tasks in the frame. |
// A set of delegates are remembered here so that we can create |
@@ -109,6 +145,10 @@ class CONTENT_EXPORT FrameTree { |
// breadth-first traversal order. |
NodeRange Nodes(); |
+ // Returns a range to iterate over all FrameTreeNodes in the frame tree in |
+ // breadth-first traversal order. All FrameTreeNodes returned will be const. |
+ ConstNodeRange ConstNodes() const; |
+ |
// Adds a new child frame to the frame tree. |process_id| is required to |
// disambiguate |new_routing_id|, and it must match the process of the |
// |parent| node. Otherwise no child is added and this method returns false. |
@@ -187,7 +227,7 @@ class CONTENT_EXPORT FrameTree { |
void ResetLoadProgress(); |
// Returns true if at least one of the nodes in this FrameTree is loading. |
- bool IsLoading(); |
+ bool IsLoading() const; |
// Set page-level focus in all SiteInstances involved in rendering |
// this FrameTree, not including the current main frame's |