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/browser_plugin/browser_plugin_guest.h" | 5 #include "content/browser/browser_plugin/browser_plugin_guest.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "content/browser/browser_plugin/browser_plugin_guest_helper.h" | 9 #include "content/browser/browser_plugin/browser_plugin_guest_helper.h" |
10 #include "content/browser/browser_plugin/browser_plugin_host_factory.h" | 10 #include "content/browser/browser_plugin/browser_plugin_host_factory.h" |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
122 size_t guest_damage_buffer_size = dib->size(); | 122 size_t guest_damage_buffer_size = dib->size(); |
123 size_t embedder_damage_buffer_size = damage_buffer_->size(); | 123 size_t embedder_damage_buffer_size = damage_buffer_->size(); |
124 #endif | 124 #endif |
125 void* guest_memory = dib->memory(); | 125 void* guest_memory = dib->memory(); |
126 void* embedder_memory = damage_buffer_->memory(); | 126 void* embedder_memory = damage_buffer_->memory(); |
127 size_t size = std::min(guest_damage_buffer_size, | 127 size_t size = std::min(guest_damage_buffer_size, |
128 embedder_damage_buffer_size); | 128 embedder_damage_buffer_size); |
129 memcpy(embedder_memory, guest_memory, size); | 129 memcpy(embedder_memory, guest_memory, size); |
130 } | 130 } |
131 } | 131 } |
132 DCHECK(embedder_render_process_host()); | |
133 BrowserPluginMsg_UpdateRect_Params relay_params; | 132 BrowserPluginMsg_UpdateRect_Params relay_params; |
134 relay_params.bitmap_rect = params.bitmap_rect; | 133 relay_params.bitmap_rect = params.bitmap_rect; |
135 relay_params.dx = params.dx; | 134 relay_params.dx = params.dx; |
136 relay_params.dy = params.dy; | 135 relay_params.dy = params.dy; |
137 relay_params.scroll_rect = params.scroll_rect; | 136 relay_params.scroll_rect = params.scroll_rect; |
138 relay_params.copy_rects = params.copy_rects; | 137 relay_params.copy_rects = params.copy_rects; |
139 relay_params.view_size = params.view_size; | 138 relay_params.view_size = params.view_size; |
140 relay_params.scale_factor = params.scale_factor; | 139 relay_params.scale_factor = params.scale_factor; |
141 relay_params.is_resize_ack = ViewHostMsg_UpdateRect_Flags::is_resize_ack( | 140 relay_params.is_resize_ack = ViewHostMsg_UpdateRect_Flags::is_resize_ack( |
142 params.flags); | 141 params.flags); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
191 // TODO(fsamuel): What do we need to do here? This is for keyboard shortcuts. | 190 // TODO(fsamuel): What do we need to do here? This is for keyboard shortcuts. |
192 if (input_event->type == WebKit::WebInputEvent::RawKeyDown) | 191 if (input_event->type == WebKit::WebInputEvent::RawKeyDown) |
193 message->WriteBool(false); | 192 message->WriteBool(false); |
194 bool sent = guest_rvh->Send(message); | 193 bool sent = guest_rvh->Send(message); |
195 if (!sent) { | 194 if (!sent) { |
196 // If the embedder is waiting for a previous input ack, a new input message | 195 // If the embedder is waiting for a previous input ack, a new input message |
197 // won't get sent to the guest. Reply immediately with handled = false so | 196 // won't get sent to the guest. Reply immediately with handled = false so |
198 // embedder doesn't hang. | 197 // embedder doesn't hang. |
199 BrowserPluginHostMsg_HandleInputEvent::WriteReplyParams( | 198 BrowserPluginHostMsg_HandleInputEvent::WriteReplyParams( |
200 reply_message, false /* handled */, cursor_); | 199 reply_message, false /* handled */, cursor_); |
201 embedder_render_process_host()->Send(reply_message); | 200 SendMessageToEmbedder(reply_message); |
202 return; | 201 return; |
203 } | 202 } |
204 | 203 |
205 pending_input_event_reply_.reset(reply_message); | 204 pending_input_event_reply_.reset(reply_message); |
206 // Input events are handled synchronously, meaning it blocks the embedder. We | 205 // Input events are handled synchronously, meaning it blocks the embedder. We |
207 // set a hang monitor here that will kill the guest process (5s timeout) if we | 206 // set a hang monitor here that will kill the guest process (5s timeout) if we |
208 // don't receive an ack. This will kill all the guests that are running in the | 207 // don't receive an ack. This will kill all the guests that are running in the |
209 // same process (undesired behavior). | 208 // same process (undesired behavior). |
210 // TODO(fsamuel,lazyboy): Find a way to get rid of guest process kill | 209 // TODO(fsamuel,lazyboy): Find a way to get rid of guest process kill |
211 // behavior. http://crbug.com/147272. | 210 // behavior. http://crbug.com/147272. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
244 cursor_ = cursor; | 243 cursor_ = cursor; |
245 } | 244 } |
246 | 245 |
247 void BrowserPluginGuest::DidCommitProvisionalLoadForFrame( | 246 void BrowserPluginGuest::DidCommitProvisionalLoadForFrame( |
248 int64 frame_id, | 247 int64 frame_id, |
249 bool is_main_frame, | 248 bool is_main_frame, |
250 const GURL& url, | 249 const GURL& url, |
251 PageTransition transition_type, | 250 PageTransition transition_type, |
252 RenderViewHost* render_view_host) { | 251 RenderViewHost* render_view_host) { |
253 // Inform its embedder of the updated URL. | 252 // Inform its embedder of the updated URL. |
254 DCHECK(embedder_render_process_host()); | |
255 if (is_main_frame) | 253 if (is_main_frame) |
256 SendMessageToEmbedder(new BrowserPluginMsg_DidNavigate(instance_id(), url)); | 254 SendMessageToEmbedder( |
255 new BrowserPluginMsg_DidNavigate( | |
256 instance_id(), | |
257 url, | |
258 render_view_host->GetProcess()->GetID())); | |
Charlie Reis
2012/09/21 00:24:06
Interesting that we're piggy-backing on navigation
Fady Samuel
2012/09/21 14:48:46
Each navigation has the potential to be to a new p
| |
257 } | 259 } |
258 | 260 |
259 void BrowserPluginGuest::RenderViewGone(base::TerminationStatus status) { | 261 void BrowserPluginGuest::RenderViewGone(base::TerminationStatus status) { |
260 DCHECK(embedder_render_process_host()); | |
261 if (pending_input_event_reply_.get()) { | 262 if (pending_input_event_reply_.get()) { |
262 IPC::Message* reply_message = pending_input_event_reply_.release(); | 263 IPC::Message* reply_message = pending_input_event_reply_.release(); |
263 BrowserPluginHostMsg_HandleInputEvent::WriteReplyParams(reply_message, | 264 BrowserPluginHostMsg_HandleInputEvent::WriteReplyParams(reply_message, |
264 false, | 265 false, |
265 cursor_); | 266 cursor_); |
266 SendMessageToEmbedder(reply_message); | 267 SendMessageToEmbedder(reply_message); |
267 } | 268 } |
268 SendMessageToEmbedder(new BrowserPluginMsg_GuestCrashed(instance_id())); | 269 SendMessageToEmbedder(new BrowserPluginMsg_GuestCrashed(instance_id())); |
269 IDMap<RenderViewHost>::const_iterator iter(&pending_updates_); | 270 IDMap<RenderViewHost>::const_iterator iter(&pending_updates_); |
270 while (!iter.IsAtEnd()) { | 271 while (!iter.IsAtEnd()) { |
271 pending_updates_.Remove(iter.GetCurrentKey()); | 272 pending_updates_.Remove(iter.GetCurrentKey()); |
272 iter.Advance(); | 273 iter.Advance(); |
273 } | 274 } |
274 } | 275 } |
275 | 276 |
276 void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) { | 277 void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) { |
278 DCHECK(embedder_render_process_host()); | |
277 embedder_render_process_host()->Send(msg); | 279 embedder_render_process_host()->Send(msg); |
278 } | 280 } |
279 | 281 |
280 } // namespace content | 282 } // namespace content |
OLD | NEW |