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

Side by Side Diff: trunk/src/content/browser/renderer_host/render_view_host_impl.cc

Issue 105523006: Revert 241151 "Make RenderFrameHostManager swap RenderFrameHosts..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/renderer_host/render_view_host_impl.h" 5 #include "content/browser/renderer_host/render_view_host_impl.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/callback.h" 12 #include "base/callback.h"
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/debug/trace_event.h" 14 #include "base/debug/trace_event.h"
15 #include "base/i18n/rtl.h" 15 #include "base/i18n/rtl.h"
16 #include "base/json/json_reader.h" 16 #include "base/json/json_reader.h"
17 #include "base/message_loop/message_loop.h" 17 #include "base/message_loop/message_loop.h"
18 #include "base/metrics/histogram.h" 18 #include "base/metrics/histogram.h"
19 #include "base/stl_util.h" 19 #include "base/stl_util.h"
20 #include "base/strings/string_util.h" 20 #include "base/strings/string_util.h"
21 #include "base/strings/utf_string_conversions.h" 21 #include "base/strings/utf_string_conversions.h"
22 #include "base/sys_info.h" 22 #include "base/sys_info.h"
23 #include "base/time/time.h" 23 #include "base/time/time.h"
24 #include "base/values.h" 24 #include "base/values.h"
25 #include "cc/base/switches.h" 25 #include "cc/base/switches.h"
26 #include "content/browser/child_process_security_policy_impl.h" 26 #include "content/browser/child_process_security_policy_impl.h"
27 #include "content/browser/cross_site_request_manager.h" 27 #include "content/browser/cross_site_request_manager.h"
28 #include "content/browser/dom_storage/session_storage_namespace_impl.h" 28 #include "content/browser/dom_storage/session_storage_namespace_impl.h"
29 #include "content/browser/frame_host/frame_tree.h" 29 #include "content/browser/frame_host/frame_tree.h"
30 #include "content/browser/frame_host/render_frame_host_factory.h"
30 #include "content/browser/gpu/compositor_util.h" 31 #include "content/browser/gpu/compositor_util.h"
31 #include "content/browser/gpu/gpu_data_manager_impl.h" 32 #include "content/browser/gpu/gpu_data_manager_impl.h"
32 #include "content/browser/gpu/gpu_process_host.h" 33 #include "content/browser/gpu/gpu_process_host.h"
33 #include "content/browser/gpu/gpu_surface_tracker.h" 34 #include "content/browser/gpu/gpu_surface_tracker.h"
34 #include "content/browser/host_zoom_map_impl.h" 35 #include "content/browser/host_zoom_map_impl.h"
35 #include "content/browser/loader/resource_dispatcher_host_impl.h" 36 #include "content/browser/loader/resource_dispatcher_host_impl.h"
36 #include "content/browser/renderer_host/dip_util.h" 37 #include "content/browser/renderer_host/dip_util.h"
37 #include "content/browser/renderer_host/media/audio_renderer_host.h" 38 #include "content/browser/renderer_host/media/audio_renderer_host.h"
38 #include "content/browser/renderer_host/render_process_host_impl.h" 39 #include "content/browser/renderer_host/render_process_host_impl.h"
39 #include "content/browser/renderer_host/render_view_host_delegate.h" 40 #include "content/browser/renderer_host/render_view_host_delegate.h"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 RenderWidgetHost* widget = 152 RenderWidgetHost* widget =
152 RenderWidgetHost::FromID(render_process_id, render_view_id); 153 RenderWidgetHost::FromID(render_process_id, render_view_id);
153 if (!widget || !widget->IsRenderView()) 154 if (!widget || !widget->IsRenderView())
154 return NULL; 155 return NULL;
155 return static_cast<RenderViewHostImpl*>(RenderWidgetHostImpl::From(widget)); 156 return static_cast<RenderViewHostImpl*>(RenderWidgetHostImpl::From(widget));
156 } 157 }
157 158
158 RenderViewHostImpl::RenderViewHostImpl( 159 RenderViewHostImpl::RenderViewHostImpl(
159 SiteInstance* instance, 160 SiteInstance* instance,
160 RenderViewHostDelegate* delegate, 161 RenderViewHostDelegate* delegate,
162 RenderFrameHostDelegate* frame_delegate,
161 RenderWidgetHostDelegate* widget_delegate, 163 RenderWidgetHostDelegate* widget_delegate,
162 int routing_id, 164 int routing_id,
163 int main_frame_routing_id, 165 int main_frame_routing_id,
164 bool swapped_out, 166 bool swapped_out,
165 bool hidden) 167 bool hidden)
166 : RenderWidgetHostImpl(widget_delegate, 168 : RenderWidgetHostImpl(widget_delegate,
167 instance->GetProcess(), 169 instance->GetProcess(),
168 routing_id, 170 routing_id,
169 hidden), 171 hidden),
170 delegate_(delegate), 172 delegate_(delegate),
171 instance_(static_cast<SiteInstanceImpl*>(instance)), 173 instance_(static_cast<SiteInstanceImpl*>(instance)),
172 waiting_for_drag_context_response_(false), 174 waiting_for_drag_context_response_(false),
173 enabled_bindings_(0), 175 enabled_bindings_(0),
174 navigations_suspended_(false), 176 navigations_suspended_(false),
175 has_accessed_initial_document_(false), 177 has_accessed_initial_document_(false),
176 is_swapped_out_(swapped_out), 178 is_swapped_out_(swapped_out),
177 is_subframe_(false), 179 is_subframe_(false),
178 main_frame_id_(-1), 180 main_frame_id_(-1),
179 main_frame_routing_id_(main_frame_routing_id),
180 run_modal_reply_msg_(NULL), 181 run_modal_reply_msg_(NULL),
181 run_modal_opener_id_(MSG_ROUTING_NONE), 182 run_modal_opener_id_(MSG_ROUTING_NONE),
182 is_waiting_for_beforeunload_ack_(false), 183 is_waiting_for_beforeunload_ack_(false),
183 is_waiting_for_unload_ack_(false), 184 is_waiting_for_unload_ack_(false),
184 has_timed_out_on_unload_(false), 185 has_timed_out_on_unload_(false),
185 unload_ack_is_for_cross_site_transition_(false), 186 unload_ack_is_for_cross_site_transition_(false),
186 are_javascript_messages_suppressed_(false), 187 are_javascript_messages_suppressed_(false),
187 sudden_termination_allowed_(false), 188 sudden_termination_allowed_(false),
188 render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING) { 189 render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING) {
189 DCHECK(instance_.get()); 190 DCHECK(instance_.get());
190 CHECK(delegate_); // http://crbug.com/82827 191 CHECK(delegate_); // http://crbug.com/82827
191 192
193 if (main_frame_routing_id == MSG_ROUTING_NONE)
194 main_frame_routing_id = GetProcess()->GetNextRoutingID();
195
196 main_render_frame_host_ = RenderFrameHostFactory::Create(
197 this, frame_delegate, delegate_->GetFrameTree(),
198 delegate_->GetFrameTree()->root(),
199 main_frame_routing_id, is_swapped_out_);
200 delegate_->GetFrameTree()->root()->set_render_frame_host(
201 main_render_frame_host_.get(), false);
202
192 GetProcess()->EnableSendQueue(); 203 GetProcess()->EnableSendQueue();
193 204
194 if (!swapped_out) 205 if (!swapped_out)
195 instance_->increment_active_view_count(); 206 instance_->increment_active_view_count();
196 207
197 if (ResourceDispatcherHostImpl::Get()) { 208 if (ResourceDispatcherHostImpl::Get()) {
198 BrowserThread::PostTask( 209 BrowserThread::PostTask(
199 BrowserThread::IO, FROM_HERE, 210 BrowserThread::IO, FROM_HERE,
200 base::Bind(&ResourceDispatcherHostImpl::OnRenderViewHostCreated, 211 base::Bind(&ResourceDispatcherHostImpl::OnRenderViewHostCreated,
201 base::Unretained(ResourceDispatcherHostImpl::Get()), 212 base::Unretained(ResourceDispatcherHostImpl::Get()),
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 // page ID it might be asked to render. 272 // page ID it might be asked to render.
262 int32 next_page_id = 1; 273 int32 next_page_id = 1;
263 if (max_page_id > -1) 274 if (max_page_id > -1)
264 next_page_id = max_page_id + 1; 275 next_page_id = max_page_id + 1;
265 276
266 ViewMsg_New_Params params; 277 ViewMsg_New_Params params;
267 params.renderer_preferences = 278 params.renderer_preferences =
268 delegate_->GetRendererPrefs(GetProcess()->GetBrowserContext()); 279 delegate_->GetRendererPrefs(GetProcess()->GetBrowserContext());
269 params.web_preferences = delegate_->GetWebkitPrefs(); 280 params.web_preferences = delegate_->GetWebkitPrefs();
270 params.view_id = GetRoutingID(); 281 params.view_id = GetRoutingID();
271 params.main_frame_routing_id = main_frame_routing_id_; 282 params.main_frame_routing_id = main_render_frame_host()->routing_id();
272 params.surface_id = surface_id(); 283 params.surface_id = surface_id();
273 params.session_storage_namespace_id = 284 params.session_storage_namespace_id =
274 delegate_->GetSessionStorageNamespace(instance_)->id(); 285 delegate_->GetSessionStorageNamespace(instance_)->id();
275 params.frame_name = frame_name; 286 params.frame_name = frame_name;
276 // Ensure the RenderView sets its opener correctly. 287 // Ensure the RenderView sets its opener correctly.
277 params.opener_route_id = opener_route_id; 288 params.opener_route_id = opener_route_id;
278 params.swapped_out = is_swapped_out_; 289 params.swapped_out = is_swapped_out_;
279 params.hidden = is_hidden(); 290 params.hidden = is_hidden();
280 params.next_page_id = next_page_id; 291 params.next_page_id = next_page_id;
281 GetWebScreenInfo(&params.screen_info); 292 GetWebScreenInfo(&params.screen_info);
(...skipping 990 matching lines...) Expand 10 before | Expand all | Expand 10 after
1272 // Kill the renderer. 1283 // Kill the renderer.
1273 RecordAction(UserMetricsAction("BadMessageTerminate_RVH")); 1284 RecordAction(UserMetricsAction("BadMessageTerminate_RVH"));
1274 GetProcess()->ReceivedBadMessage(); 1285 GetProcess()->ReceivedBadMessage();
1275 } 1286 }
1276 1287
1277 return handled; 1288 return handled;
1278 } 1289 }
1279 1290
1280 void RenderViewHostImpl::Init() { 1291 void RenderViewHostImpl::Init() {
1281 RenderWidgetHostImpl::Init(); 1292 RenderWidgetHostImpl::Init();
1293 main_render_frame_host()->Init();
1282 } 1294 }
1283 1295
1284 void RenderViewHostImpl::Shutdown() { 1296 void RenderViewHostImpl::Shutdown() {
1285 // If we are being run modally (see RunModal), then we need to cleanup. 1297 // If we are being run modally (see RunModal), then we need to cleanup.
1286 if (run_modal_reply_msg_) { 1298 if (run_modal_reply_msg_) {
1287 Send(run_modal_reply_msg_); 1299 Send(run_modal_reply_msg_);
1288 run_modal_reply_msg_ = NULL; 1300 run_modal_reply_msg_ = NULL;
1289 RenderViewHostImpl* opener = 1301 RenderViewHostImpl* opener =
1290 RenderViewHostImpl::FromID(GetProcess()->GetID(), run_modal_opener_id_); 1302 RenderViewHostImpl::FromID(GetProcess()->GetID(), run_modal_opener_id_);
1291 if (opener) { 1303 if (opener) {
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1385 void RenderViewHostImpl::OnRenderProcessGone(int status, int exit_code) { 1397 void RenderViewHostImpl::OnRenderProcessGone(int status, int exit_code) {
1386 // Keep the termination status so we can get at it later when we 1398 // Keep the termination status so we can get at it later when we
1387 // need to know why it died. 1399 // need to know why it died.
1388 render_view_termination_status_ = 1400 render_view_termination_status_ =
1389 static_cast<base::TerminationStatus>(status); 1401 static_cast<base::TerminationStatus>(status);
1390 1402
1391 // Reset frame tree state. 1403 // Reset frame tree state.
1392 // TODO(creis): Once subframes can be in different processes, we'll need to 1404 // TODO(creis): Once subframes can be in different processes, we'll need to
1393 // clear just the FrameTreeNodes affected by the crash (and their subtrees). 1405 // clear just the FrameTreeNodes affected by the crash (and their subtrees).
1394 main_frame_id_ = -1; 1406 main_frame_id_ = -1;
1395 delegate_->GetFrameTree()->ResetForMainFrameSwap(); 1407 delegate_->GetFrameTree()->SwapMainFrame(main_render_frame_host_.get());
1396 1408
1397 // Our base class RenderWidgetHost needs to reset some stuff. 1409 // Our base class RenderWidgetHost needs to reset some stuff.
1398 RendererExited(render_view_termination_status_, exit_code); 1410 RendererExited(render_view_termination_status_, exit_code);
1399 1411
1400 delegate_->RenderViewTerminated(this, 1412 delegate_->RenderViewTerminated(this,
1401 static_cast<base::TerminationStatus>(status), 1413 static_cast<base::TerminationStatus>(status),
1402 exit_code); 1414 exit_code);
1403 } 1415 }
1404 1416
1405 void RenderViewHostImpl::OnDidStartProvisionalLoadForFrame( 1417 void RenderViewHostImpl::OnDidStartProvisionalLoadForFrame(
(...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after
2280 file != file_paths.end(); ++file) { 2292 file != file_paths.end(); ++file) {
2281 if (!policy->CanReadFile(GetProcess()->GetID(), *file)) 2293 if (!policy->CanReadFile(GetProcess()->GetID(), *file))
2282 return false; 2294 return false;
2283 } 2295 }
2284 return true; 2296 return true;
2285 } 2297 }
2286 2298
2287 void RenderViewHostImpl::AttachToFrameTree() { 2299 void RenderViewHostImpl::AttachToFrameTree() {
2288 FrameTree* frame_tree = delegate_->GetFrameTree(); 2300 FrameTree* frame_tree = delegate_->GetFrameTree();
2289 2301
2290 frame_tree->ResetForMainFrameSwap(); 2302 frame_tree->SwapMainFrame(main_render_frame_host_.get());
2291 if (main_frame_id() != FrameTreeNode::kInvalidFrameId) { 2303 if (main_frame_id() != FrameTreeNode::kInvalidFrameId) {
2292 frame_tree->OnFirstNavigationAfterSwap(main_frame_id()); 2304 frame_tree->OnFirstNavigationAfterSwap(main_frame_id());
2293 } 2305 }
2294 } 2306 }
2295 2307
2296 } // namespace content 2308 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698