Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1505)

Unified Diff: content/browser/renderer_host/render_view_host_impl.cc

Issue 30323002: [DRAFT] Create RenderFrameHostManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_view_host_impl.cc
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 0b1f7c6d9c38cfc5bed0dd6d1148eb84827c7220..438431058a45399a0c7a70290aaf5761c19a8ae5 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -173,7 +173,7 @@ RenderViewHostImpl::RenderViewHostImpl(
has_accessed_initial_document_(false),
is_swapped_out_(swapped_out),
is_subframe_(false),
- main_frame_id_(-1),
+ main_frame_routing_id_(main_frame_routing_id),
run_modal_reply_msg_(NULL),
run_modal_opener_id_(MSG_ROUTING_NONE),
is_waiting_for_beforeunload_ack_(false),
@@ -186,13 +186,6 @@ RenderViewHostImpl::RenderViewHostImpl(
DCHECK(instance_.get());
CHECK(delegate_); // http://crbug.com/82827
- if (main_frame_routing_id == MSG_ROUTING_NONE)
- main_frame_routing_id = GetProcess()->GetNextRoutingID();
-
- main_render_frame_host_.reset(
- new RenderFrameHostImpl(this, delegate_->GetFrameTree(),
- main_frame_routing_id, is_swapped_out_));
-
GetProcess()->EnableSendQueue();
if (!swapped_out)
@@ -240,6 +233,19 @@ SiteInstance* RenderViewHostImpl::GetSiteInstance() const {
return instance_.get();
}
+void RenderViewHostImpl::RegisterFrameTreeNodeID(int64 frame_id,
+ int64 frame_tree_node_id) {
+ frame_id_map_[frame_id] = frame_tree_node_id;
+}
+
+bool RenderViewHostImpl::HasFrameTreeNodeID(int64 frame_id) const {
+ return frame_id_map_.find(frame_id) != frame_id_map_.end();
+}
+
+int64 RenderViewHostImpl::GetFrameTreeNodeID(int64 frame_id) {
+ return frame_id_map_[frame_id];
+}
+
bool RenderViewHostImpl::CreateRenderView(
const string16& frame_name,
int opener_route_id,
@@ -272,7 +278,7 @@ bool RenderViewHostImpl::CreateRenderView(
delegate_->GetRendererPrefs(GetProcess()->GetBrowserContext());
params.web_preferences = delegate_->GetWebkitPrefs();
params.view_id = GetRoutingID();
- params.main_frame_routing_id = main_render_frame_host()->routing_id();
+ params.main_frame_routing_id = main_frame_routing_id_;
params.surface_id = surface_id();
params.session_storage_namespace_id =
delegate_->GetSessionStorageNamespace(instance_)->id();
@@ -655,6 +661,25 @@ void RenderViewHostImpl::FirePageBeforeUnload(bool for_cross_site_transition) {
}
}
+void RenderViewHostImpl::OnCrossSiteResponse(
+ const GlobalRequestID& global_request_id,
+ bool is_transfer,
+ const std::vector<GURL>& transfer_url_chain,
+ const Referrer& referrer,
+ PageTransition page_transition,
+ int64 frame_id) {
+ FrameTreeNode* node = delegate_->GetFrameTree()->FindByID(frame_id);
+
+ // TODO(creis): We should always be able to get the RFHM for a frame_id,
+ // but today the frame_id is -1 for the main frame.
+ RenderViewHostDelegate::RendererManagement* manager = node ?
+ node->render_manager() : delegate_->GetRenderManager();
+ CHECK(manager);
+ manager->OnCrossSiteResponse(this, global_request_id, is_transfer,
+ transfer_url_chain, referrer, page_transition,
+ frame_id);
+}
+
void RenderViewHostImpl::SwapOut() {
// This will be set back to false in OnSwapOutACK, just before we replace
// this RVH with the pending RVH.
@@ -1244,7 +1269,8 @@ bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) {
void RenderViewHostImpl::Init() {
RenderWidgetHostImpl::Init();
- main_render_frame_host()->Init();
+ // TODO(creis): The caller of this should call Init on the RFH as well.
+ //main_render_frame_host()->Init();
}
void RenderViewHostImpl::Shutdown() {
@@ -1354,7 +1380,7 @@ void RenderViewHostImpl::OnRenderProcessGone(int status, int exit_code) {
static_cast<base::TerminationStatus>(status);
// Reset state.
- main_frame_id_ = -1;
+ frame_id_map_.clear();
// Our base class RenderWidgetHost needs to reset some stuff.
RendererExited(render_view_termination_status_, exit_code);
@@ -1428,13 +1454,15 @@ void RenderViewHostImpl::OnNavigate(const IPC::Message& msg) {
// Cache the main frame id, so we can use it for creating the frame tree
// root node when needed.
if (PageTransitionIsMainFrame(validated_params.transition)) {
- if (main_frame_id_ == -1) {
- main_frame_id_ = validated_params.frame_id;
+ int frame_tree_node_id =
+ delegate_->GetFrameTree()->root()->frame_tree_node_id();
+ if (!HasFrameTreeNodeID(validated_params.frame_id)) {
+ RegisterFrameTreeNodeID(validated_params.frame_id, frame_tree_node_id);
} else {
// TODO(nasko): We plan to remove the usage of frame_id in navigation
// and move to routing ids. This is in place to ensure that a
// renderer is not misbehaving and sending us incorrect data.
- DCHECK_EQ(main_frame_id_, validated_params.frame_id);
+ DCHECK_EQ(frame_tree_node_id, validated_params.frame_id);
}
}
RenderProcessHost* process = GetProcess();
@@ -1782,7 +1810,7 @@ void RenderViewHostImpl::OnShouldCloseACK(
is_waiting_for_beforeunload_ack_ = false;
RenderViewHostDelegate::RendererManagement* management_delegate =
- delegate_->GetRendererManagementDelegate();
+ delegate_->GetRenderManager();
if (management_delegate) {
base::TimeTicks before_unload_end_time;
if (!send_should_close_start_time_.is_null() &&
@@ -2246,13 +2274,4 @@ bool RenderViewHostImpl::CanAccessFilesOfPageState(
return true;
}
-void RenderViewHostImpl::AttachToFrameTree() {
- FrameTree* frame_tree = delegate_->GetFrameTree();
-
- frame_tree->SwapMainFrame(main_render_frame_host_.get());
- if (main_frame_id() != FrameTreeNode::kInvalidFrameId) {
- frame_tree->OnFirstNavigationAfterSwap(main_frame_id());
- }
-}
-
} // namespace content
« no previous file with comments | « content/browser/renderer_host/render_view_host_impl.h ('k') | content/browser/web_contents/web_contents_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698