| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/frame_host/frame_tree_node.h" | 5 #include "content/browser/frame_host/frame_tree_node.h" |
| 6 | 6 |
| 7 #include <queue> | 7 #include <queue> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 | 114 |
| 115 RecordUniqueNameLength(unique_name.size()); | 115 RecordUniqueNameLength(unique_name.size()); |
| 116 TRACE_EVENT_OBJECT_CREATED_WITH_ID( | 116 TRACE_EVENT_OBJECT_CREATED_WITH_ID( |
| 117 "navigation", "FrameTreeNode", | 117 "navigation", "FrameTreeNode", |
| 118 TRACE_ID_WITH_SCOPE("FrameTreeNode", frame_tree_node_id_)); | 118 TRACE_ID_WITH_SCOPE("FrameTreeNode", frame_tree_node_id_)); |
| 119 // Don't TraceSnapshot() until the RenderFrameHostManager is initialized and | 119 // Don't TraceSnapshot() until the RenderFrameHostManager is initialized and |
| 120 // calls SetCurrentURL(). | 120 // calls SetCurrentURL(). |
| 121 } | 121 } |
| 122 | 122 |
| 123 FrameTreeNode::~FrameTreeNode() { | 123 FrameTreeNode::~FrameTreeNode() { |
| 124 children_.clear(); | 124 std::vector<std::unique_ptr<FrameTreeNode>>().swap(children_); |
| 125 frame_tree_->FrameRemoved(this); | 125 frame_tree_->FrameRemoved(this); |
| 126 FOR_EACH_OBSERVER(Observer, observers_, OnFrameTreeNodeDestroyed(this)); | 126 FOR_EACH_OBSERVER(Observer, observers_, OnFrameTreeNodeDestroyed(this)); |
| 127 | 127 |
| 128 if (opener_) | 128 if (opener_) |
| 129 opener_->RemoveObserver(opener_observer_.get()); | 129 opener_->RemoveObserver(opener_observer_.get()); |
| 130 | 130 |
| 131 g_frame_tree_node_id_map.Get().erase(frame_tree_node_id_); | 131 g_frame_tree_node_id_map.Get().erase(frame_tree_node_id_); |
| 132 | 132 |
| 133 TRACE_EVENT_OBJECT_DELETED_WITH_ID( | 133 TRACE_EVENT_OBJECT_DELETED_WITH_ID( |
| 134 "navigation", "FrameTreeNode", | 134 "navigation", "FrameTreeNode", |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 void FrameTreeNode::TraceSnapshot() const { | 483 void FrameTreeNode::TraceSnapshot() const { |
| 484 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 484 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 485 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( | 485 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( |
| 486 "navigation", "FrameTreeNode", | 486 "navigation", "FrameTreeNode", |
| 487 TRACE_ID_WITH_SCOPE("FrameTreeNode", frame_tree_node_id_), | 487 TRACE_ID_WITH_SCOPE("FrameTreeNode", frame_tree_node_id_), |
| 488 std::unique_ptr<base::trace_event::ConvertableToTraceFormat>( | 488 std::unique_ptr<base::trace_event::ConvertableToTraceFormat>( |
| 489 new TracedFrameTreeNode(*this))); | 489 new TracedFrameTreeNode(*this))); |
| 490 } | 490 } |
| 491 | 491 |
| 492 FrameTreeNode* FrameTreeNode::GetSibling(int relative_offset) const { | 492 FrameTreeNode* FrameTreeNode::GetSibling(int relative_offset) const { |
| 493 if (!parent_) | 493 if (!parent_ || !parent_->child_count()) |
| 494 return nullptr; | 494 return nullptr; |
| 495 | 495 |
| 496 for (size_t i = 0; i < parent_->child_count(); ++i) { | 496 for (size_t i = 0; i < parent_->child_count(); ++i) { |
| 497 if (parent_->child_at(i) == this) { | 497 if (parent_->child_at(i) == this) { |
| 498 if ((relative_offset < 0 && static_cast<size_t>(-relative_offset) > i) || | 498 if ((relative_offset < 0 && static_cast<size_t>(-relative_offset) > i) || |
| 499 i + relative_offset >= parent_->child_count()) { | 499 i + relative_offset >= parent_->child_count()) { |
| 500 return nullptr; | 500 return nullptr; |
| 501 } | 501 } |
| 502 return parent_->child_at(i + relative_offset); | 502 return parent_->child_at(i + relative_offset); |
| 503 } | 503 } |
| 504 } | 504 } |
| 505 | 505 |
| 506 NOTREACHED() << "FrameTreeNode not found in its parent's children."; | 506 NOTREACHED() << "FrameTreeNode not found in its parent's children."; |
| 507 return nullptr; | 507 return nullptr; |
| 508 } | 508 } |
| 509 | 509 |
| 510 } // namespace content | 510 } // namespace content |
| OLD | NEW |