Chromium Code Reviews| 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 73ef0c3d9d084f6d63db8fff506099ec1fc61bac..cf16da9f09492772f1b4c9fec969f24a09e9c318 100644 |
| --- a/content/browser/frame_host/frame_tree_node.cc |
| +++ b/content/browser/frame_host/frame_tree_node.cc |
| @@ -277,16 +277,11 @@ bool FrameTreeNode::IsDescendantOf(FrameTreeNode* other) const { |
| } |
| FrameTreeNode* FrameTreeNode::PreviousSibling() const { |
| - if (!parent_) |
| - return nullptr; |
| - |
| - for (size_t i = 0; i < parent_->child_count(); ++i) { |
| - if (parent_->child_at(i) == this) |
| - return (i == 0) ? nullptr : parent_->child_at(i - 1); |
| - } |
| + return GetSibling(-1); |
| +} |
| - NOTREACHED() << "FrameTreeNode not found in its parent's children."; |
| - return nullptr; |
| +FrameTreeNode* FrameTreeNode::NextSibling() const { |
| + return GetSibling(1); |
| } |
| bool FrameTreeNode::IsLoading() const { |
| @@ -494,4 +489,23 @@ void FrameTreeNode::TraceSnapshot() const { |
| new TracedFrameTreeNode(*this))); |
| } |
| +FrameTreeNode* FrameTreeNode::GetSibling(int relative_offset) const { |
| + if (!parent_ || !parent_->child_count()) |
| + return nullptr; |
| + |
| + for (size_t i = 0; i < parent_->child_count(); ++i) { |
| + if (parent_->child_at(i) == this) { |
| + size_t offset = i + relative_offset; |
|
Charlie Reis
2016/05/13 23:18:38
You're still doing the rollover (or rather, rollun
paulmeyer
2016/05/16 15:12:21
Done.
|
| + if (offset >= parent_->child_count() || |
| + (relative_offset < 0 && static_cast<size_t>(-relative_offset) > i)) { |
| + return nullptr; |
| + } |
| + return parent_->child_at(offset); |
| + } |
| + } |
| + |
| + NOTREACHED() << "FrameTreeNode not found in its parent's children."; |
| + return nullptr; |
| +} |
| + |
| } // namespace content |