| 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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 cursor_ = cursor; | 254 cursor_ = cursor; |
| 256 } | 255 } |
| 257 | 256 |
| 258 void BrowserPluginGuest::DidCommitProvisionalLoadForFrame( | 257 void BrowserPluginGuest::DidCommitProvisionalLoadForFrame( |
| 259 int64 frame_id, | 258 int64 frame_id, |
| 260 bool is_main_frame, | 259 bool is_main_frame, |
| 261 const GURL& url, | 260 const GURL& url, |
| 262 PageTransition transition_type, | 261 PageTransition transition_type, |
| 263 RenderViewHost* render_view_host) { | 262 RenderViewHost* render_view_host) { |
| 264 // Inform its embedder of the updated URL. | 263 // Inform its embedder of the updated URL. |
| 265 DCHECK(embedder_render_process_host()); | |
| 266 if (is_main_frame) | 264 if (is_main_frame) |
| 267 SendMessageToEmbedder(new BrowserPluginMsg_DidNavigate(instance_id(), url)); | 265 SendMessageToEmbedder( |
| 266 new BrowserPluginMsg_DidNavigate( |
| 267 instance_id(), |
| 268 url, |
| 269 render_view_host->GetProcess()->GetID())); |
| 268 } | 270 } |
| 269 | 271 |
| 270 void BrowserPluginGuest::RenderViewGone(base::TerminationStatus status) { | 272 void BrowserPluginGuest::RenderViewGone(base::TerminationStatus status) { |
| 271 DCHECK(embedder_render_process_host()); | |
| 272 if (pending_input_event_reply_.get()) { | 273 if (pending_input_event_reply_.get()) { |
| 273 IPC::Message* reply_message = pending_input_event_reply_.release(); | 274 IPC::Message* reply_message = pending_input_event_reply_.release(); |
| 274 BrowserPluginHostMsg_HandleInputEvent::WriteReplyParams(reply_message, | 275 BrowserPluginHostMsg_HandleInputEvent::WriteReplyParams(reply_message, |
| 275 false, | 276 false, |
| 276 cursor_); | 277 cursor_); |
| 277 SendMessageToEmbedder(reply_message); | 278 SendMessageToEmbedder(reply_message); |
| 278 } | 279 } |
| 279 SendMessageToEmbedder(new BrowserPluginMsg_GuestCrashed(instance_id())); | 280 SendMessageToEmbedder(new BrowserPluginMsg_GuestCrashed(instance_id())); |
| 280 IDMap<RenderViewHost>::const_iterator iter(&pending_updates_); | 281 IDMap<RenderViewHost>::const_iterator iter(&pending_updates_); |
| 281 while (!iter.IsAtEnd()) { | 282 while (!iter.IsAtEnd()) { |
| 282 pending_updates_.Remove(iter.GetCurrentKey()); | 283 pending_updates_.Remove(iter.GetCurrentKey()); |
| 283 iter.Advance(); | 284 iter.Advance(); |
| 284 } | 285 } |
| 285 } | 286 } |
| 286 | 287 |
| 287 void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) { | 288 void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) { |
| 289 DCHECK(embedder_render_process_host()); |
| 288 embedder_render_process_host()->Send(msg); | 290 embedder_render_process_host()->Send(msg); |
| 289 } | 291 } |
| 290 | 292 |
| 291 } // namespace content | 293 } // namespace content |
| OLD | NEW |