| Index: content/browser/renderer_host/render_widget_helper.cc
|
| diff --git a/content/browser/renderer_host/render_widget_helper.cc b/content/browser/renderer_host/render_widget_helper.cc
|
| index 7bf4ee311058dd4fb8235a8fc2aad79e7cbf20ff..16e53890a167e5575c63afb7fd0bde7996027e01 100644
|
| --- a/content/browser/renderer_host/render_widget_helper.cc
|
| +++ b/content/browser/renderer_host/render_widget_helper.cc
|
| @@ -215,13 +215,23 @@ void RenderWidgetHelper::CreateNewWindow(
|
| base::ProcessHandle render_process,
|
| int* route_id,
|
| int* surface_id) {
|
| - *route_id = GetNextRoutingID();
|
| - *surface_id = GpuSurfaceTracker::Get()->AddSurfaceForRenderer(
|
| - render_process_id_, *route_id);
|
| - // Block resource requests until the view is created, since the HWND might be
|
| - // needed if a response ends up creating a plugin.
|
| - resource_dispatcher_host_->BlockRequestsForRoute(
|
| - render_process_id_, *route_id);
|
| + if (params.opener_suppressed) {
|
| + // If the opener is supppressed, we should open the window in a new
|
| + // BrowsingInstance, and thus a new process. That means the current
|
| + // renderer process will not be able to route messages to it. Because of
|
| + // this, we will immediately show and navigate the window in
|
| + // OnCreateWindowOnUI, using the params provided here.
|
| + *route_id = MSG_ROUTING_NONE;
|
| + *surface_id = 0;
|
| + } else {
|
| + *route_id = GetNextRoutingID();
|
| + *surface_id = GpuSurfaceTracker::Get()->AddSurfaceForRenderer(
|
| + render_process_id_, *route_id);
|
| + // Block resource requests until the view is created, since the HWND might
|
| + // be needed if a response ends up creating a plugin.
|
| + resource_dispatcher_host_->BlockRequestsForRoute(
|
| + render_process_id_, *route_id);
|
| + }
|
|
|
| BrowserThread::PostTask(
|
| BrowserThread::UI, FROM_HERE,
|
| @@ -237,9 +247,13 @@ void RenderWidgetHelper::OnCreateWindowOnUI(
|
| if (host)
|
| host->CreateNewWindow(route_id, params);
|
|
|
| - BrowserThread::PostTask(
|
| - BrowserThread::IO, FROM_HERE,
|
| - base::Bind(&RenderWidgetHelper::OnCreateWindowOnIO, this, route_id));
|
| + // We only need to resume blocked requests if we used a valid route_id.
|
| + // See CreateNewWindow.
|
| + if (route_id != MSG_ROUTING_NONE) {
|
| + BrowserThread::PostTask(
|
| + BrowserThread::IO, FROM_HERE,
|
| + base::Bind(&RenderWidgetHelper::OnCreateWindowOnIO, this, route_id));
|
| + }
|
| }
|
|
|
| void RenderWidgetHelper::OnCreateWindowOnIO(int route_id) {
|
|
|