| OLD | NEW |
| 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_widget_helper.h" | 5 #include "content/browser/renderer_host/render_widget_helper.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/posix/eintr_wrapper.h" | 10 #include "base/posix/eintr_wrapper.h" |
| 11 #include "base/threading/thread.h" | 11 #include "base/threading/thread.h" |
| 12 #include "base/threading/thread_restrictions.h" | 12 #include "base/threading/thread_restrictions.h" |
| 13 #include "content/browser/dom_storage/session_storage_namespace_impl.h" | 13 #include "content/browser/dom_storage/session_storage_namespace_impl.h" |
| 14 #include "content/browser/gpu/gpu_process_host_ui_shim.h" | |
| 15 #include "content/browser/gpu/gpu_surface_tracker.h" | |
| 16 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 14 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| 17 #include "content/browser/renderer_host/render_process_host_impl.h" | 15 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 18 #include "content/browser/renderer_host/render_view_host_impl.h" | 16 #include "content/browser/renderer_host/render_view_host_impl.h" |
| 19 #include "content/common/view_messages.h" | 17 #include "content/common/view_messages.h" |
| 20 | 18 |
| 21 namespace content { | 19 namespace content { |
| 22 namespace { | 20 namespace { |
| 23 | 21 |
| 24 typedef std::map<int, RenderWidgetHelper*> WidgetHelperMap; | 22 typedef std::map<int, RenderWidgetHelper*> WidgetHelperMap; |
| 25 base::LazyInstance<WidgetHelperMap> g_widget_helpers = | 23 base::LazyInstance<WidgetHelperMap> g_widget_helpers = |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 const GlobalRequestID& request_id) { | 97 const GlobalRequestID& request_id) { |
| 100 resource_dispatcher_host_->ResumeDeferredNavigation(request_id); | 98 resource_dispatcher_host_->ResumeDeferredNavigation(request_id); |
| 101 } | 99 } |
| 102 | 100 |
| 103 void RenderWidgetHelper::CreateNewWindow( | 101 void RenderWidgetHelper::CreateNewWindow( |
| 104 const ViewHostMsg_CreateWindow_Params& params, | 102 const ViewHostMsg_CreateWindow_Params& params, |
| 105 bool no_javascript_access, | 103 bool no_javascript_access, |
| 106 base::ProcessHandle render_process, | 104 base::ProcessHandle render_process, |
| 107 int* route_id, | 105 int* route_id, |
| 108 int* main_frame_route_id, | 106 int* main_frame_route_id, |
| 109 int* surface_id, | |
| 110 SessionStorageNamespace* session_storage_namespace) { | 107 SessionStorageNamespace* session_storage_namespace) { |
| 111 if (params.opener_suppressed || no_javascript_access) { | 108 if (params.opener_suppressed || no_javascript_access) { |
| 112 // If the opener is supppressed or script access is disallowed, we should | 109 // If the opener is supppressed or script access is disallowed, we should |
| 113 // open the window in a new BrowsingInstance, and thus a new process. That | 110 // open the window in a new BrowsingInstance, and thus a new process. That |
| 114 // means the current renderer process will not be able to route messages to | 111 // means the current renderer process will not be able to route messages to |
| 115 // it. Because of this, we will immediately show and navigate the window | 112 // it. Because of this, we will immediately show and navigate the window |
| 116 // in OnCreateWindowOnUI, using the params provided here. | 113 // in OnCreateWindowOnUI, using the params provided here. |
| 117 *route_id = MSG_ROUTING_NONE; | 114 *route_id = MSG_ROUTING_NONE; |
| 118 *main_frame_route_id = MSG_ROUTING_NONE; | 115 *main_frame_route_id = MSG_ROUTING_NONE; |
| 119 *surface_id = 0; | |
| 120 } else { | 116 } else { |
| 121 *route_id = GetNextRoutingID(); | 117 *route_id = GetNextRoutingID(); |
| 122 *main_frame_route_id = GetNextRoutingID(); | 118 *main_frame_route_id = GetNextRoutingID(); |
| 123 *surface_id = GpuSurfaceTracker::Get()->AddSurfaceForRenderer( | |
| 124 render_process_id_, *route_id); | |
| 125 // Block resource requests until the view is created, since the HWND might | 119 // Block resource requests until the view is created, since the HWND might |
| 126 // be needed if a response ends up creating a plugin. | 120 // be needed if a response ends up creating a plugin. |
| 127 resource_dispatcher_host_->BlockRequestsForRoute( | 121 resource_dispatcher_host_->BlockRequestsForRoute( |
| 128 render_process_id_, *route_id); | 122 render_process_id_, *route_id); |
| 129 resource_dispatcher_host_->BlockRequestsForRoute( | 123 resource_dispatcher_host_->BlockRequestsForRoute( |
| 130 render_process_id_, *main_frame_route_id); | 124 render_process_id_, *main_frame_route_id); |
| 131 } | 125 } |
| 132 | 126 |
| 133 BrowserThread::PostTask( | 127 BrowserThread::PostTask( |
| 134 BrowserThread::UI, FROM_HERE, | 128 BrowserThread::UI, FROM_HERE, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 149 session_storage_namespace); | 143 session_storage_namespace); |
| 150 } | 144 } |
| 151 | 145 |
| 152 void RenderWidgetHelper::OnResumeRequestsForView(int route_id) { | 146 void RenderWidgetHelper::OnResumeRequestsForView(int route_id) { |
| 153 resource_dispatcher_host_->ResumeBlockedRequestsForRoute( | 147 resource_dispatcher_host_->ResumeBlockedRequestsForRoute( |
| 154 render_process_id_, route_id); | 148 render_process_id_, route_id); |
| 155 } | 149 } |
| 156 | 150 |
| 157 void RenderWidgetHelper::CreateNewWidget(int opener_id, | 151 void RenderWidgetHelper::CreateNewWidget(int opener_id, |
| 158 blink::WebPopupType popup_type, | 152 blink::WebPopupType popup_type, |
| 159 int* route_id, | 153 int* route_id) { |
| 160 int* surface_id) { | |
| 161 *route_id = GetNextRoutingID(); | 154 *route_id = GetNextRoutingID(); |
| 162 *surface_id = GpuSurfaceTracker::Get()->AddSurfaceForRenderer( | 155 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 163 render_process_id_, *route_id); | 156 base::Bind(&RenderWidgetHelper::OnCreateWidgetOnUI, |
| 164 BrowserThread::PostTask( | 157 this, opener_id, *route_id, popup_type)); |
| 165 BrowserThread::UI, FROM_HERE, | |
| 166 base::Bind(&RenderWidgetHelper::OnCreateWidgetOnUI, this, opener_id, | |
| 167 *route_id, *surface_id, popup_type)); | |
| 168 } | 158 } |
| 169 | 159 |
| 170 void RenderWidgetHelper::CreateNewFullscreenWidget(int opener_id, | 160 void RenderWidgetHelper::CreateNewFullscreenWidget(int opener_id, |
| 171 int* route_id, | 161 int* route_id) { |
| 172 int* surface_id) { | |
| 173 *route_id = GetNextRoutingID(); | 162 *route_id = GetNextRoutingID(); |
| 174 *surface_id = GpuSurfaceTracker::Get()->AddSurfaceForRenderer( | |
| 175 render_process_id_, *route_id); | |
| 176 BrowserThread::PostTask( | 163 BrowserThread::PostTask( |
| 177 BrowserThread::UI, FROM_HERE, | 164 BrowserThread::UI, FROM_HERE, |
| 178 base::Bind(&RenderWidgetHelper::OnCreateFullscreenWidgetOnUI, this, | 165 base::Bind(&RenderWidgetHelper::OnCreateFullscreenWidgetOnUI, this, |
| 179 opener_id, *route_id, *surface_id)); | 166 opener_id, *route_id)); |
| 180 } | 167 } |
| 181 | 168 |
| 182 void RenderWidgetHelper::OnCreateWidgetOnUI(int32 opener_id, | 169 void RenderWidgetHelper::OnCreateWidgetOnUI(int32 opener_id, |
| 183 int32 route_id, | 170 int32 route_id, |
| 184 int32 surface_id, | |
| 185 blink::WebPopupType popup_type) { | 171 blink::WebPopupType popup_type) { |
| 186 RenderViewHostImpl* host = RenderViewHostImpl::FromID( | 172 RenderViewHostImpl* host = RenderViewHostImpl::FromID( |
| 187 render_process_id_, opener_id); | 173 render_process_id_, opener_id); |
| 188 if (host) | 174 if (host) |
| 189 host->CreateNewWidget(route_id, surface_id, popup_type); | 175 host->CreateNewWidget(route_id, popup_type); |
| 190 } | 176 } |
| 191 | 177 |
| 192 void RenderWidgetHelper::OnCreateFullscreenWidgetOnUI(int32 opener_id, | 178 void RenderWidgetHelper::OnCreateFullscreenWidgetOnUI(int32 opener_id, |
| 193 int32 route_id, | 179 int32 route_id) { |
| 194 int32 surface_id) { | |
| 195 RenderViewHostImpl* host = RenderViewHostImpl::FromID( | 180 RenderViewHostImpl* host = RenderViewHostImpl::FromID( |
| 196 render_process_id_, opener_id); | 181 render_process_id_, opener_id); |
| 197 if (host) | 182 if (host) |
| 198 host->CreateNewFullscreenWidget(route_id, surface_id); | 183 host->CreateNewFullscreenWidget(route_id); |
| 199 } | 184 } |
| 200 | 185 |
| 201 } // namespace content | 186 } // namespace content |
| OLD | NEW |