summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content/browser/web_contents/render_view_host_manager.cc14
-rw-r--r--content/renderer/render_widget.cc3
2 files changed, 10 insertions, 7 deletions
diff --git a/content/browser/web_contents/render_view_host_manager.cc b/content/browser/web_contents/render_view_host_manager.cc
index 31cb7ed..06c15e2 100644
--- a/content/browser/web_contents/render_view_host_manager.cc
+++ b/content/browser/web_contents/render_view_host_manager.cc
@@ -562,7 +562,8 @@ int RenderViewHostManager::CreateRenderView(
GetSwappedOutRenderViewHost(instance));
if (new_render_view_host) {
// Prevent the process from exiting while we're trying to use it.
- new_render_view_host->GetProcess()->AddPendingView();
+ if (!swapped_out)
+ new_render_view_host->GetProcess()->AddPendingView();
} else {
// Create a new RenderViewHost if we don't find an existing one.
new_render_view_host = static_cast<RenderViewHostImpl*>(
@@ -570,12 +571,13 @@ int RenderViewHostManager::CreateRenderView(
render_view_delegate_, MSG_ROUTING_NONE, swapped_out, delegate_->
GetControllerForRenderManager().GetSessionStorageNamespace()));
- // Prevent the process from exiting while we're trying to use it.
- new_render_view_host->GetProcess()->AddPendingView();
-
- // Store the new RVH as swapped out if necessary.
- if (swapped_out)
+ // If the new RVH is swapped out already, store it. Otherwise prevent the
+ // process from exiting while we're trying to navigate in it.
+ if (swapped_out) {
swapped_out_hosts_[instance->GetId()] = new_render_view_host;
+ } else {
+ new_render_view_host->GetProcess()->AddPendingView();
+ }
bool success = InitRenderView(new_render_view_host, opener_route_id);
if (success) {
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index eb78d81..3ec1865 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -126,7 +126,8 @@ RenderWidget::RenderWidget(WebKit::WebPopupType popup_type,
invalidation_task_posted_(false),
screen_info_(screen_info),
invert_(false) {
- RenderProcess::current()->AddRefProcess();
+ if (!swapped_out)
+ RenderProcess::current()->AddRefProcess();
DCHECK(RenderThread::Get());
has_disable_gpu_vsync_switch_ = CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableGpuVsync);