Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(261)

Side by Side Diff: content/browser/browser_plugin/browser_plugin_guest.cc

Issue 444813002: Remove BrowserPlugin's -internal-attach method (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: All tests pass Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 virtual void WasHidden() OVERRIDE { 58 virtual void WasHidden() OVERRIDE {
59 browser_plugin_guest_->EmbedderVisibilityChanged(false); 59 browser_plugin_guest_->EmbedderVisibilityChanged(false);
60 } 60 }
61 61
62 private: 62 private:
63 BrowserPluginGuest* browser_plugin_guest_; 63 BrowserPluginGuest* browser_plugin_guest_;
64 64
65 DISALLOW_COPY_AND_ASSIGN(EmbedderWebContentsObserver); 65 DISALLOW_COPY_AND_ASSIGN(EmbedderWebContentsObserver);
66 }; 66 };
67 67
68 BrowserPluginGuest::BrowserPluginGuest( 68 BrowserPluginGuest::BrowserPluginGuest(int guest_instance_id,
69 int instance_id, 69 bool has_render_view,
70 bool has_render_view, 70 WebContentsImpl* web_contents,
71 WebContentsImpl* web_contents, 71 BrowserPluginGuestDelegate* delegate)
72 BrowserPluginGuestDelegate* delegate)
73 : WebContentsObserver(web_contents), 72 : WebContentsObserver(web_contents),
74 embedder_web_contents_(NULL), 73 embedder_web_contents_(NULL),
75 instance_id_(instance_id), 74 guest_instance_id_(guest_instance_id),
76 guest_device_scale_factor_(1.0f), 75 guest_device_scale_factor_(1.0f),
77 focused_(false), 76 focused_(false),
78 mouse_locked_(false), 77 mouse_locked_(false),
79 pending_lock_request_(false), 78 pending_lock_request_(false),
80 guest_visible_(false), 79 guest_visible_(false),
81 guest_opaque_(true), 80 guest_opaque_(true),
82 embedder_visible_(true), 81 embedder_visible_(true),
83 copy_request_id_(0), 82 copy_request_id_(0),
84 has_render_view_(has_render_view), 83 has_render_view_(has_render_view),
85 is_in_destruction_(false), 84 is_in_destruction_(false),
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 OnSetContentsOpaque) 155 OnSetContentsOpaque)
157 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_SetVisibility, OnSetVisibility) 156 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_SetVisibility, OnSetVisibility)
158 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_UnlockMouse_ACK, OnUnlockMouseAck) 157 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_UnlockMouse_ACK, OnUnlockMouseAck)
159 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_UpdateGeometry, OnUpdateGeometry) 158 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_UpdateGeometry, OnUpdateGeometry)
160 IPC_MESSAGE_UNHANDLED(handled = false) 159 IPC_MESSAGE_UNHANDLED(handled = false)
161 IPC_END_MESSAGE_MAP() 160 IPC_END_MESSAGE_MAP()
162 return handled; 161 return handled;
163 } 162 }
164 163
165 void BrowserPluginGuest::Initialize( 164 void BrowserPluginGuest::Initialize(
165 int browser_plugin_instance_id,
166 const BrowserPluginHostMsg_Attach_Params& params, 166 const BrowserPluginHostMsg_Attach_Params& params,
167 WebContentsImpl* embedder_web_contents, 167 WebContentsImpl* embedder_web_contents) {
168 const base::DictionaryValue& extra_params) {
169 focused_ = params.focused; 168 focused_ = params.focused;
170 guest_visible_ = params.visible; 169 guest_visible_ = params.visible;
171 guest_opaque_ = params.opaque; 170 guest_opaque_ = params.opaque;
172 guest_window_rect_ = gfx::Rect(params.origin, 171 guest_window_rect_ = gfx::Rect(params.origin,
173 params.resize_guest_params.view_size); 172 params.resize_guest_params.view_size);
174 173
175 // Once a BrowserPluginGuest has an embedder WebContents, it's considered to 174 // Once a BrowserPluginGuest has an embedder WebContents, it's considered to
176 // be attached. 175 // be attached.
177 embedder_web_contents_ = embedder_web_contents; 176 embedder_web_contents_ = embedder_web_contents;
178 177
(...skipping 18 matching lines...) Expand all
197 // TODO(fsamuel): Remove this once http://crbug.com/169110 is addressed. 196 // TODO(fsamuel): Remove this once http://crbug.com/169110 is addressed.
198 renderer_prefs->report_frame_name_changes = true; 197 renderer_prefs->report_frame_name_changes = true;
199 // Navigation is disabled in Chrome Apps. We want to make sure guest-initiated 198 // Navigation is disabled in Chrome Apps. We want to make sure guest-initiated
200 // navigations still continue to function inside the app. 199 // navigations still continue to function inside the app.
201 renderer_prefs->browser_handles_all_top_level_requests = false; 200 renderer_prefs->browser_handles_all_top_level_requests = false;
202 // Disable "client blocked" error page for browser plugin. 201 // Disable "client blocked" error page for browser plugin.
203 renderer_prefs->disable_client_blocked_error_page = true; 202 renderer_prefs->disable_client_blocked_error_page = true;
204 203
205 embedder_web_contents_observer_.reset(new EmbedderWebContentsObserver(this)); 204 embedder_web_contents_observer_.reset(new EmbedderWebContentsObserver(this));
206 205
207 OnResizeGuest(instance_id_, params.resize_guest_params); 206 OnResizeGuest(guest_instance_id_, params.resize_guest_params);
208 207
209 // Create a swapped out RenderView for the guest in the embedder render 208 // Create a swapped out RenderView for the guest in the embedder render
210 // process, so that the embedder can access the guest's window object. 209 // process, so that the embedder can access the guest's window object.
211 int guest_routing_id = 210 int guest_routing_id =
212 GetWebContents()->CreateSwappedOutRenderView( 211 GetWebContents()->CreateSwappedOutRenderView(
213 embedder_web_contents_->GetSiteInstance()); 212 embedder_web_contents_->GetSiteInstance());
214 SendMessageToEmbedder(
215 new BrowserPluginMsg_GuestContentWindowReady(instance_id_,
216 guest_routing_id));
217 213
218 WebPreferences prefs = GetWebContents()->GetWebkitPrefs(); 214 WebPreferences prefs = GetWebContents()->GetWebkitPrefs();
219 prefs.navigate_on_drag_drop = false; 215 prefs.navigate_on_drag_drop = false;
220 GetWebContents()->GetRenderViewHost()->UpdateWebkitPreferences(prefs); 216 GetWebContents()->GetRenderViewHost()->UpdateWebkitPreferences(prefs);
221 217
222 // Enable input method for guest if it's enabled for the embedder. 218 // Enable input method for guest if it's enabled for the embedder.
223 if (static_cast<RenderViewHostImpl*>( 219 if (static_cast<RenderViewHostImpl*>(
224 embedder_web_contents_->GetRenderViewHost())->input_method_active()) { 220 embedder_web_contents_->GetRenderViewHost())->input_method_active()) {
225 RenderViewHostImpl* guest_rvh = static_cast<RenderViewHostImpl*>( 221 RenderViewHostImpl* guest_rvh = static_cast<RenderViewHostImpl*>(
226 GetWebContents()->GetRenderViewHost()); 222 GetWebContents()->GetRenderViewHost());
227 guest_rvh->SetInputMethodActive(true); 223 guest_rvh->SetInputMethodActive(true);
228 } 224 }
229 225
230 // Inform the embedder of the guest's attachment. 226 // Inform the embedder of the guest's attachment.
231 SendMessageToEmbedder(new BrowserPluginMsg_Attach_ACK(instance_id_)); 227 SendMessageToEmbedder(new BrowserPluginMsg_Attach_ACK(guest_instance_id_));
228
229 SendMessageToEmbedder(new BrowserPluginMsg_GuestContentWindowReady(
230 guest_instance_id_, guest_routing_id));
232 } 231 }
233 232
234 BrowserPluginGuest::~BrowserPluginGuest() { 233 BrowserPluginGuest::~BrowserPluginGuest() {
235 } 234 }
236 235
237 // static 236 // static
238 BrowserPluginGuest* BrowserPluginGuest::Create( 237 BrowserPluginGuest* BrowserPluginGuest::Create(
239 int instance_id, 238 int instance_id,
240 WebContentsImpl* web_contents, 239 WebContentsImpl* web_contents,
241 BrowserPluginGuestDelegate* delegate) { 240 BrowserPluginGuestDelegate* delegate) {
(...skipping 13 matching lines...) Expand all
255 render_view_host))); 254 render_view_host)));
256 } 255 }
257 256
258 RenderWidgetHostView* BrowserPluginGuest::GetEmbedderRenderWidgetHostView() { 257 RenderWidgetHostView* BrowserPluginGuest::GetEmbedderRenderWidgetHostView() {
259 if (!attached()) 258 if (!attached())
260 return NULL; 259 return NULL;
261 return embedder_web_contents_->GetRenderWidgetHostView(); 260 return embedder_web_contents_->GetRenderWidgetHostView();
262 } 261 }
263 262
264 void BrowserPluginGuest::UpdateVisibility() { 263 void BrowserPluginGuest::UpdateVisibility() {
265 OnSetVisibility(instance_id_, visible()); 264 OnSetVisibility(guest_instance_id_, visible());
266 } 265 }
267 266
268 void BrowserPluginGuest::CopyFromCompositingSurface( 267 void BrowserPluginGuest::CopyFromCompositingSurface(
269 gfx::Rect src_subrect, 268 gfx::Rect src_subrect,
270 gfx::Size dst_size, 269 gfx::Size dst_size,
271 const base::Callback<void(bool, const SkBitmap&)>& callback) { 270 const base::Callback<void(bool, const SkBitmap&)>& callback) {
272 copy_request_callbacks_.insert(std::make_pair(++copy_request_id_, callback)); 271 copy_request_callbacks_.insert(std::make_pair(++copy_request_id_, callback));
273 SendMessageToEmbedder( 272 SendMessageToEmbedder(
274 new BrowserPluginMsg_CopyFromCompositingSurface(instance_id(), 273 new BrowserPluginMsg_CopyFromCompositingSurface(instance_id(),
275 copy_request_id_, src_subrect, dst_size)); 274 copy_request_id_, src_subrect, dst_size));
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 RecordAction(base::UserMetricsAction("BrowserPlugin.Guest.DidNavigate")); 364 RecordAction(base::UserMetricsAction("BrowserPlugin.Guest.DidNavigate"));
366 } 365 }
367 366
368 void BrowserPluginGuest::RenderViewReady() { 367 void BrowserPluginGuest::RenderViewReady() {
369 RenderViewHost* rvh = GetWebContents()->GetRenderViewHost(); 368 RenderViewHost* rvh = GetWebContents()->GetRenderViewHost();
370 // TODO(fsamuel): Investigate whether it's possible to update state earlier 369 // TODO(fsamuel): Investigate whether it's possible to update state earlier
371 // here (see http://crbug.com/158151). 370 // here (see http://crbug.com/158151).
372 Send(new InputMsg_SetFocus(routing_id(), focused_)); 371 Send(new InputMsg_SetFocus(routing_id(), focused_));
373 UpdateVisibility(); 372 UpdateVisibility();
374 373
375 OnSetContentsOpaque(instance_id_, guest_opaque_); 374 OnSetContentsOpaque(guest_instance_id_, guest_opaque_);
376 375
377 RenderWidgetHostImpl::From(rvh)->set_hung_renderer_delay_ms( 376 RenderWidgetHostImpl::From(rvh)->set_hung_renderer_delay_ms(
378 base::TimeDelta::FromMilliseconds(kHungRendererDelayMs)); 377 base::TimeDelta::FromMilliseconds(kHungRendererDelayMs));
379 } 378 }
380 379
381 void BrowserPluginGuest::RenderProcessGone(base::TerminationStatus status) { 380 void BrowserPluginGuest::RenderProcessGone(base::TerminationStatus status) {
382 SendMessageToEmbedder(new BrowserPluginMsg_GuestGone(instance_id())); 381 SendMessageToEmbedder(new BrowserPluginMsg_GuestGone(instance_id()));
383 switch (status) { 382 switch (status) {
384 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED: 383 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED:
385 RecordAction(base::UserMetricsAction("BrowserPlugin.Guest.Killed")); 384 RecordAction(base::UserMetricsAction("BrowserPlugin.Guest.Killed"));
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 IPC_MESSAGE_HANDLER(ViewHostMsg_TextInputStateChanged, 447 IPC_MESSAGE_HANDLER(ViewHostMsg_TextInputStateChanged,
449 OnTextInputStateChanged) 448 OnTextInputStateChanged)
450 IPC_MESSAGE_HANDLER(ViewHostMsg_UnlockMouse, OnUnlockMouse) 449 IPC_MESSAGE_HANDLER(ViewHostMsg_UnlockMouse, OnUnlockMouse)
451 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateRect, OnUpdateRect) 450 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateRect, OnUpdateRect)
452 IPC_MESSAGE_UNHANDLED(handled = false) 451 IPC_MESSAGE_UNHANDLED(handled = false)
453 IPC_END_MESSAGE_MAP() 452 IPC_END_MESSAGE_MAP()
454 return handled; 453 return handled;
455 } 454 }
456 455
457 void BrowserPluginGuest::Attach( 456 void BrowserPluginGuest::Attach(
457 int browser_plugin_instance_id,
458 WebContentsImpl* embedder_web_contents, 458 WebContentsImpl* embedder_web_contents,
459 const BrowserPluginHostMsg_Attach_Params& params, 459 const BrowserPluginHostMsg_Attach_Params& params) {
460 const base::DictionaryValue& extra_params) {
461 if (attached()) 460 if (attached())
462 return; 461 return;
463 462
464 if (delegate_) 463 if (delegate_)
465 delegate_->WillAttach(embedder_web_contents, extra_params); 464 delegate_->WillAttach(embedder_web_contents);
466 465
467 // If a RenderView has already been created for this new window, then we need 466 // If a RenderView has already been created for this new window, then we need
468 // to initialize the browser-side state now so that the RenderFrameHostManager 467 // to initialize the browser-side state now so that the RenderFrameHostManager
469 // does not create a new RenderView on navigation. 468 // does not create a new RenderView on navigation.
470 if (has_render_view_) { 469 if (has_render_view_) {
471 static_cast<RenderViewHostImpl*>( 470 static_cast<RenderViewHostImpl*>(
472 GetWebContents()->GetRenderViewHost())->Init(); 471 GetWebContents()->GetRenderViewHost())->Init();
473 WebContentsViewGuest* new_view = 472 WebContentsViewGuest* new_view =
474 static_cast<WebContentsViewGuest*>(GetWebContents()->GetView()); 473 static_cast<WebContentsViewGuest*>(GetWebContents()->GetView());
475 new_view->CreateViewForWidget(web_contents()->GetRenderViewHost()); 474 new_view->CreateViewForWidget(web_contents()->GetRenderViewHost());
476 } 475 }
477 476
478 Initialize(params, embedder_web_contents, extra_params); 477 Initialize(browser_plugin_instance_id, params, embedder_web_contents);
479 478
480 SendQueuedMessages(); 479 SendQueuedMessages();
481 480
482 if (delegate_) 481 if (delegate_)
483 delegate_->DidAttach(); 482 delegate_->DidAttach();
484 483
485 RecordAction(base::UserMetricsAction("BrowserPlugin.Guest.Attached")); 484 RecordAction(base::UserMetricsAction("BrowserPlugin.Guest.Attached"));
486 } 485 }
487 486
488 void BrowserPluginGuest::OnCompositorFrameSwappedACK( 487 void BrowserPluginGuest::OnCompositorFrameSwappedACK(
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 void BrowserPluginGuest::OnImeCompositionRangeChanged( 833 void BrowserPluginGuest::OnImeCompositionRangeChanged(
835 const gfx::Range& range, 834 const gfx::Range& range,
836 const std::vector<gfx::Rect>& character_bounds) { 835 const std::vector<gfx::Rect>& character_bounds) {
837 static_cast<RenderWidgetHostViewBase*>( 836 static_cast<RenderWidgetHostViewBase*>(
838 web_contents()->GetRenderWidgetHostView())->ImeCompositionRangeChanged( 837 web_contents()->GetRenderWidgetHostView())->ImeCompositionRangeChanged(
839 range, character_bounds); 838 range, character_bounds);
840 } 839 }
841 #endif 840 #endif
842 841
843 } // namespace content 842 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698