frame_tree_node.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright 2013 The Chromium Authors. All rights reserved.
27faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez// Use of this source code is governed by a BSD-style license that can be
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// found in the LICENSE file.
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "content/browser/frame_host/frame_tree_node.h"
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <queue>
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "base/stl_util.h"
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "content/browser/frame_host/navigator.h"
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "content/browser/frame_host/render_frame_host_impl.h"
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace content {
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst int64 FrameTreeNode::kInvalidFrameId = -1;
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint64 FrameTreeNode::next_frame_tree_node_id_ = 1;
17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathFrameTreeNode::FrameTreeNode(Navigator* navigator,
19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                             RenderFrameHostDelegate* render_frame_delegate,
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                             RenderViewHostDelegate* render_view_delegate,
21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                             RenderWidgetHostDelegate* render_widget_delegate,
22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                             RenderFrameHostManager::Delegate* manager_delegate,
23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                             int64 frame_id,
24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                             const std::string& name)
25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  : navigator_(navigator),
26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    render_manager_(render_frame_delegate,
27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                    render_view_delegate,
28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                    render_widget_delegate,
29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                    manager_delegate),
30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    frame_tree_node_id_(next_frame_tree_node_id_++),
31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    frame_id_(frame_id),
32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    frame_name_(name),
33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    owns_render_frame_host_(true),
34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    render_frame_host_(NULL) {
35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathFrameTreeNode::~FrameTreeNode() {
38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  if (owns_render_frame_host_)
39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    delete render_frame_host_;
40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid FrameTreeNode::AddChild(scoped_ptr<FrameTreeNode> child) {
43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  children_.push_back(child.release());
44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid FrameTreeNode::RemoveChild(FrameTreeNode* child) {
47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  std::vector<FrameTreeNode*>::iterator iter;
48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  for (iter = children_.begin(); iter != children_.end(); ++iter) {
50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    if ((*iter) == child)
51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      break;
52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  }
53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  if (iter != children_.end())
55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    children_.erase(iter);
56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid FrameTreeNode::ResetForMainFrame(
59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    RenderFrameHostImpl* new_render_frame_host) {
60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  owns_render_frame_host_ = false;
61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  frame_id_ = kInvalidFrameId;
62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  current_url_ = GURL();
63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // The children may not have been cleared if a cross-process navigation
65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // commits before the old process cleans everything up.  Make sure the child
66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // nodes get deleted.
67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  children_.clear();
68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  render_frame_host_ = new_render_frame_host;
70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}  // namespace content
73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath