OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "chrome/browser/renderer_host/render_widget_helper.h" | 5 #include "chrome/browser/renderer_host/render_widget_helper.h" |
6 | 6 |
7 #include "base/thread.h" | 7 #include "base/thread.h" |
8 #include "chrome/browser/browser_process.h" | 8 #include "chrome/browser/browser_process.h" |
9 #include "chrome/browser/renderer_host/render_process_host.h" | 9 #include "chrome/browser/renderer_host/render_process_host.h" |
10 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" | 10 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 void RenderWidgetHelper::OnCrossSiteClosePageACK( | 182 void RenderWidgetHelper::OnCrossSiteClosePageACK( |
183 ResourceDispatcherHost* dispatcher, | 183 ResourceDispatcherHost* dispatcher, |
184 int new_render_process_host_id, | 184 int new_render_process_host_id, |
185 int new_request_id) { | 185 int new_request_id) { |
186 dispatcher->OnClosePageACK(new_render_process_host_id, new_request_id); | 186 dispatcher->OnClosePageACK(new_render_process_host_id, new_request_id); |
187 } | 187 } |
188 | 188 |
189 void RenderWidgetHelper::CreateNewWindow(int opener_id, | 189 void RenderWidgetHelper::CreateNewWindow(int opener_id, |
190 bool user_gesture, | 190 bool user_gesture, |
191 base::ProcessHandle render_process, | 191 base::ProcessHandle render_process, |
192 int* route_id | 192 int* route_id, |
193 #if defined(OS_WIN) | 193 ModalDialogEvent* modal_dialog_event) { |
194 , HANDLE* modal_dialog_event) { | |
195 #else | |
196 ) { | |
197 #endif | |
198 if (!user_gesture && block_popups_) { | 194 if (!user_gesture && block_popups_) { |
199 *route_id = MSG_ROUTING_NONE; | 195 *route_id = MSG_ROUTING_NONE; |
200 *modal_dialog_event = NULL; | 196 #if defined(OS_WIN) |
| 197 modal_dialog_event->event = NULL; |
| 198 #endif |
201 return; | 199 return; |
202 } | 200 } |
203 | 201 |
204 *route_id = GetNextRoutingID(); | 202 *route_id = GetNextRoutingID(); |
205 | 203 |
| 204 ModalDialogEvent modal_dialog_event_internal; |
206 #if defined(OS_WIN) | 205 #if defined(OS_WIN) |
207 HANDLE event = CreateEvent(NULL, TRUE, FALSE, NULL); | 206 HANDLE event = CreateEvent(NULL, TRUE, FALSE, NULL); |
| 207 modal_dialog_event_internal.event = event; |
| 208 |
208 BOOL result = DuplicateHandle(GetCurrentProcess(), | 209 BOOL result = DuplicateHandle(GetCurrentProcess(), |
209 event, | 210 event, |
210 render_process, | 211 render_process, |
211 modal_dialog_event, | 212 &modal_dialog_event->event, |
212 SYNCHRONIZE, | 213 SYNCHRONIZE, |
213 FALSE, | 214 FALSE, |
214 0); | 215 0); |
215 DCHECK(result) << "Couldn't duplicate modal dialog event for the renderer."; | 216 DCHECK(result) << "Couldn't duplicate modal dialog event for the renderer."; |
| 217 #endif |
216 | 218 |
217 // The easiest way to reach RenderViewHost is just to send a routed message. | 219 // The easiest way to reach RenderViewHost is just to send a routed message. |
218 ViewHostMsg_CreateWindowWithRoute msg(opener_id, *route_id, event); | 220 ViewHostMsg_CreateWindowWithRoute msg(opener_id, *route_id, |
219 #else | 221 modal_dialog_event_internal); |
220 // TODO(port) figure out how the modal dialog event should work. | |
221 ViewHostMsg_CreateWindowWithRoute msg(opener_id, *route_id); | |
222 #endif | |
223 | 222 |
224 ui_loop_->PostTask(FROM_HERE, NewRunnableMethod( | 223 ui_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
225 this, &RenderWidgetHelper::OnSimulateReceivedMessage, msg)); | 224 this, &RenderWidgetHelper::OnSimulateReceivedMessage, msg)); |
226 } | 225 } |
227 | 226 |
228 void RenderWidgetHelper::CreateNewWidget(int opener_id, | 227 void RenderWidgetHelper::CreateNewWidget(int opener_id, |
229 bool activatable, | 228 bool activatable, |
230 int* route_id) { | 229 int* route_id) { |
231 *route_id = GetNextRoutingID(); | 230 *route_id = GetNextRoutingID(); |
232 ViewHostMsg_CreateWidgetWithRoute msg(opener_id, *route_id, activatable); | 231 ViewHostMsg_CreateWidgetWithRoute msg(opener_id, *route_id, activatable); |
233 ui_loop_->PostTask(FROM_HERE, NewRunnableMethod( | 232 ui_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
234 this, &RenderWidgetHelper::OnSimulateReceivedMessage, msg)); | 233 this, &RenderWidgetHelper::OnSimulateReceivedMessage, msg)); |
235 } | 234 } |
236 | 235 |
237 void RenderWidgetHelper::OnSimulateReceivedMessage( | 236 void RenderWidgetHelper::OnSimulateReceivedMessage( |
238 const IPC::Message& message) { | 237 const IPC::Message& message) { |
239 RenderProcessHost* host = RenderProcessHost::FromID(render_process_id_); | 238 RenderProcessHost* host = RenderProcessHost::FromID(render_process_id_); |
240 if (host) | 239 if (host) |
241 host->OnMessageReceived(message); | 240 host->OnMessageReceived(message); |
242 } | 241 } |
OLD | NEW |