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

Side by Side Diff: content/renderer/browser_plugin/browser_plugin.cc

Issue 1162053003: Move BrowserPluginDelegate's lifetime mgmt out of content/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync @tott Created 5 years, 6 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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/renderer/browser_plugin/browser_plugin.h" 5 #include "content/renderer/browser_plugin/browser_plugin.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/single_thread_task_runner.h" 9 #include "base/single_thread_task_runner.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 blink::WebPluginContainer* container = node.pluginContainer(); 54 blink::WebPluginContainer* container = node.pluginContainer();
55 if (!container) 55 if (!container)
56 return nullptr; 56 return nullptr;
57 57
58 PluginContainerMap* browser_plugins = g_plugin_container_map.Pointer(); 58 PluginContainerMap* browser_plugins = g_plugin_container_map.Pointer();
59 PluginContainerMap::iterator it = browser_plugins->find(container); 59 PluginContainerMap::iterator it = browser_plugins->find(container);
60 return it == browser_plugins->end() ? nullptr : it->second; 60 return it == browser_plugins->end() ? nullptr : it->second;
61 } 61 }
62 62
63 BrowserPlugin::BrowserPlugin(RenderFrame* render_frame, 63 BrowserPlugin::BrowserPlugin(RenderFrame* render_frame,
64 scoped_ptr<BrowserPluginDelegate> delegate) 64 BrowserPluginDelegate* delegate)
65 : attached_(false), 65 : attached_(false),
66 render_frame_routing_id_(render_frame->GetRoutingID()), 66 render_frame_routing_id_(render_frame->GetRoutingID()),
67 container_(nullptr), 67 container_(nullptr),
68 sad_guest_(nullptr), 68 sad_guest_(nullptr),
69 guest_crashed_(false), 69 guest_crashed_(false),
70 plugin_focused_(false), 70 plugin_focused_(false),
71 visible_(true), 71 visible_(true),
72 mouse_locked_(false), 72 mouse_locked_(false),
73 ready_(false), 73 ready_(false),
74 browser_plugin_instance_id_(browser_plugin::kInstanceIDNone), 74 browser_plugin_instance_id_(browser_plugin::kInstanceIDNone),
75 contents_opaque_(true), 75 contents_opaque_(true),
76 delegate_(delegate.Pass()), 76 delegate_(delegate),
77 weak_ptr_factory_(this) { 77 weak_ptr_factory_(this) {
78 browser_plugin_instance_id_ = 78 browser_plugin_instance_id_ =
79 BrowserPluginManager::Get()->GetNextInstanceID(); 79 BrowserPluginManager::Get()->GetNextInstanceID();
80 80
81 if (delegate_) 81 if (delegate_)
82 delegate_->SetElementInstanceID(browser_plugin_instance_id_); 82 delegate_->SetElementInstanceID(browser_plugin_instance_id_);
83 } 83 }
84 84
85 BrowserPlugin::~BrowserPlugin() { 85 BrowserPlugin::~BrowserPlugin() {
86 if (compositing_helper_.get()) 86 if (compositing_helper_.get())
87 compositing_helper_->OnContainerDestroy(); 87 compositing_helper_->OnContainerDestroy();
88 88
89 if (delegate_)
90 delegate_->DidDestroyElement();
91 delegate_ = nullptr;
92
89 BrowserPluginManager::Get()->RemoveBrowserPlugin(browser_plugin_instance_id_); 93 BrowserPluginManager::Get()->RemoveBrowserPlugin(browser_plugin_instance_id_);
90 } 94 }
91 95
92 bool BrowserPlugin::OnMessageReceived(const IPC::Message& message) { 96 bool BrowserPlugin::OnMessageReceived(const IPC::Message& message) {
93 bool handled = true; 97 bool handled = true;
94 IPC_BEGIN_MESSAGE_MAP(BrowserPlugin, message) 98 IPC_BEGIN_MESSAGE_MAP(BrowserPlugin, message)
95 IPC_MESSAGE_HANDLER(BrowserPluginMsg_AdvanceFocus, OnAdvanceFocus) 99 IPC_MESSAGE_HANDLER(BrowserPluginMsg_AdvanceFocus, OnAdvanceFocus)
96 IPC_MESSAGE_HANDLER_GENERIC(BrowserPluginMsg_CompositorFrameSwapped, 100 IPC_MESSAGE_HANDLER_GENERIC(BrowserPluginMsg_CompositorFrameSwapped,
97 OnCompositorFrameSwapped(message)) 101 OnCompositorFrameSwapped(message))
98 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestGone, OnGuestGone) 102 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestGone, OnGuestGone)
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 } 260 }
257 } 261 }
258 262
259 void BrowserPlugin::ShowSadGraphic() { 263 void BrowserPlugin::ShowSadGraphic() {
260 // If the BrowserPlugin is scheduled to be deleted, then container_ will be 264 // If the BrowserPlugin is scheduled to be deleted, then container_ will be
261 // nullptr so we shouldn't attempt to access it. 265 // nullptr so we shouldn't attempt to access it.
262 if (container_) 266 if (container_)
263 container_->invalidate(); 267 container_->invalidate();
264 } 268 }
265 269
270 void BrowserPlugin::UpdateInternalInstanceId() {
271 // This is a way to notify observers of our attributes that this plugin is
272 // available in render tree.
273 // TODO(lazyboy): This should be done through the delegate instead. Perhaps
274 // by firing an event from there.
275 UpdateDOMAttribute(
276 "internalinstanceid",
277 base::UTF8ToUTF16(base::IntToString(browser_plugin_instance_id_)));
278 }
279
266 void BrowserPlugin::UpdateGuestFocusState(blink::WebFocusType focus_type) { 280 void BrowserPlugin::UpdateGuestFocusState(blink::WebFocusType focus_type) {
267 if (!attached()) 281 if (!attached())
268 return; 282 return;
269 bool should_be_focused = ShouldGuestBeFocused(); 283 bool should_be_focused = ShouldGuestBeFocused();
270 BrowserPluginManager::Get()->Send(new BrowserPluginHostMsg_SetFocus( 284 BrowserPluginManager::Get()->Send(new BrowserPluginHostMsg_SetFocus(
271 browser_plugin_instance_id_, 285 browser_plugin_instance_id_,
272 should_be_focused, 286 should_be_focused,
273 focus_type)); 287 focus_type));
274 } 288 }
275 289
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 compositing_helper_->EnableCompositing(enable); 336 compositing_helper_->EnableCompositing(enable);
323 compositing_helper_->SetContentsOpaque(contents_opaque_); 337 compositing_helper_->SetContentsOpaque(contents_opaque_);
324 338
325 if (!enable) { 339 if (!enable) {
326 DCHECK(compositing_helper_.get()); 340 DCHECK(compositing_helper_.get());
327 compositing_helper_->OnContainerDestroy(); 341 compositing_helper_->OnContainerDestroy();
328 compositing_helper_ = nullptr; 342 compositing_helper_ = nullptr;
329 } 343 }
330 } 344 }
331 345
332 void BrowserPlugin::UpdateInternalInstanceId() {
333 // This is a way to notify observers of our attributes that this plugin is
334 // available in render tree.
335 // TODO(lazyboy): This should be done through the delegate instead. Perhaps
336 // by firing an event from there.
337 UpdateDOMAttribute(
338 "internalinstanceid",
339 base::UTF8ToUTF16(base::IntToString(browser_plugin_instance_id_)));
340 }
341
342 void BrowserPlugin::destroy() { 346 void BrowserPlugin::destroy() {
343 if (container_) { 347 if (container_) {
344 // The BrowserPlugin's WebPluginContainer is deleted immediately after this 348 // The BrowserPlugin's WebPluginContainer is deleted immediately after this
345 // call returns, so let's not keep a reference to it around. 349 // call returns, so let's not keep a reference to it around.
346 g_plugin_container_map.Get().erase(container_); 350 g_plugin_container_map.Get().erase(container_);
347 } 351 }
348 352
349 container_ = nullptr; 353 container_ = nullptr;
350 // Will be a no-op if the mouse is not currently locked. 354 // Will be a no-op if the mouse is not currently locked.
351 auto render_frame = RenderFrameImpl::FromRoutingID(render_frame_routing_id()); 355 auto render_frame = RenderFrameImpl::FromRoutingID(render_frame_routing_id());
(...skipping 20 matching lines...) Expand all
372 return true; 376 return true;
373 } 377 }
374 378
375 bool BrowserPlugin::canProcessDrag() const { 379 bool BrowserPlugin::canProcessDrag() const {
376 return true; 380 return true;
377 } 381 }
378 382
379 void BrowserPlugin::paint(WebCanvas* canvas, const WebRect& rect) { 383 void BrowserPlugin::paint(WebCanvas* canvas, const WebRect& rect) {
380 if (guest_crashed_) { 384 if (guest_crashed_) {
381 if (!sad_guest_) // Lazily initialize bitmap. 385 if (!sad_guest_) // Lazily initialize bitmap.
382 sad_guest_ = content::GetContentClient()->renderer()-> 386 sad_guest_ = GetContentClient()->renderer()->GetSadWebViewBitmap();
383 GetSadWebViewBitmap();
384 // content_shell does not have the sad plugin bitmap, so we'll paint black 387 // content_shell does not have the sad plugin bitmap, so we'll paint black
385 // instead to make it clear that something went wrong. 388 // instead to make it clear that something went wrong.
386 if (sad_guest_) { 389 if (sad_guest_) {
387 PaintSadPlugin(canvas, view_rect_, *sad_guest_); 390 PaintSadPlugin(canvas, view_rect_, *sad_guest_);
388 return; 391 return;
389 } 392 }
390 } 393 }
391 SkAutoCanvasRestore auto_restore(canvas, true); 394 SkAutoCanvasRestore auto_restore(canvas, true);
392 canvas->translate(view_rect_.x(), view_rect_.y()); 395 canvas->translate(view_rect_.x(), view_rect_.y());
393 SkRect image_data_rect = SkRect::MakeXYWH( 396 SkRect image_data_rect = SkRect::MakeXYWH(
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 bool BrowserPlugin::HandleMouseLockedInputEvent( 613 bool BrowserPlugin::HandleMouseLockedInputEvent(
611 const blink::WebMouseEvent& event) { 614 const blink::WebMouseEvent& event) {
612 BrowserPluginManager::Get()->Send( 615 BrowserPluginManager::Get()->Send(
613 new BrowserPluginHostMsg_HandleInputEvent(browser_plugin_instance_id_, 616 new BrowserPluginHostMsg_HandleInputEvent(browser_plugin_instance_id_,
614 view_rect_, 617 view_rect_,
615 &event)); 618 &event));
616 return true; 619 return true;
617 } 620 }
618 621
619 } // namespace content 622 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/browser_plugin/browser_plugin.h ('k') | content/renderer/browser_plugin/browser_plugin_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698