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