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

Side by Side Diff: Source/core/html/HTMLPlugInElement.cpp

Issue 603193005: Move the Widget hierarchy to the Oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Switch LocalFrame::m_pluginElements rep to HashSet<HTMLPlugInElement*> Created 6 years, 2 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 /** 1 /**
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2000 Stefan Schimanski (1Stein@gmx.de) 4 * (C) 2000 Stefan Schimanski (1Stein@gmx.de)
5 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. 5 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 if (m_NPObject) { 80 if (m_NPObject) {
81 _NPN_ReleaseObject(m_NPObject); 81 _NPN_ReleaseObject(m_NPObject);
82 m_NPObject = 0; 82 m_NPObject = 0;
83 } 83 }
84 } 84 }
85 85
86 void HTMLPlugInElement::trace(Visitor* visitor) 86 void HTMLPlugInElement::trace(Visitor* visitor)
87 { 87 {
88 visitor->trace(m_imageLoader); 88 visitor->trace(m_imageLoader);
89 visitor->trace(m_placeholder); 89 visitor->trace(m_placeholder);
90 visitor->trace(m_persistedPluginWidget);
90 HTMLFrameOwnerElement::trace(visitor); 91 HTMLFrameOwnerElement::trace(visitor);
91 } 92 }
92 93
94 #if ENABLE(OILPAN)
95 void HTMLPlugInElement::disconnectContentFrame()
96 {
97 if (m_persistedPluginWidget) {
98 m_persistedPluginWidget->dispose();
99 m_persistedPluginWidget = nullptr;
100 }
101 HTMLFrameOwnerElement::disconnectContentFrame();
102 }
103
104 void HTMLPlugInElement::shouldDisposePlugin()
105 {
106 if (m_persistedPluginWidget && m_persistedPluginWidget->isPluginView())
107 toPluginView(m_persistedPluginWidget.get())->shouldDisposePlugin();
108 }
109 #endif
110
111 void HTMLPlugInElement::setPersistedPluginWidget(Widget* widget)
112 {
113 if (m_persistedPluginWidget == widget)
114 return;
115 #if ENABLE(OILPAN)
116 if (m_persistedPluginWidget && m_persistedPluginWidget->isPluginView()) {
117 LocalFrame* frame = toPluginView(m_persistedPluginWidget.get())->pluginF rame();
118 ASSERT(frame);
119 frame->unregisterPluginElement(this);
120 }
121 if (widget && widget->isPluginView()) {
122 LocalFrame* frame = toPluginView(widget)->pluginFrame();
123 ASSERT(frame);
124 frame->registerPluginElement(this);
125 }
126 #endif
127 m_persistedPluginWidget = widget;
128 }
129
93 bool HTMLPlugInElement::canProcessDrag() const 130 bool HTMLPlugInElement::canProcessDrag() const
94 { 131 {
95 return pluginWidget() && pluginWidget()->isPluginView() && toPluginView(plug inWidget())->canProcessDrag(); 132 return pluginWidget() && pluginWidget()->isPluginView() && toPluginView(plug inWidget())->canProcessDrag();
96 } 133 }
97 134
98 bool HTMLPlugInElement::willRespondToMouseClickEvents() 135 bool HTMLPlugInElement::willRespondToMouseClickEvents()
99 { 136 {
100 if (isDisabledFormControl()) 137 if (isDisabledFormControl())
101 return false; 138 return false;
102 RenderObject* r = renderer(); 139 RenderObject* r = renderer();
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 if (renderer() && !useFallbackContent()) 232 if (renderer() && !useFallbackContent())
196 setNeedsWidgetUpdate(true); 233 setNeedsWidgetUpdate(true);
197 if (m_isDelayingLoadEvent) { 234 if (m_isDelayingLoadEvent) {
198 m_isDelayingLoadEvent = false; 235 m_isDelayingLoadEvent = false;
199 document().decrementLoadEventDelayCount(); 236 document().decrementLoadEventDelayCount();
200 } 237 }
201 238
202 // Only try to persist a plugin widget we actually own. 239 // Only try to persist a plugin widget we actually own.
203 Widget* plugin = ownedWidget(); 240 Widget* plugin = ownedWidget();
204 if (plugin && plugin->pluginShouldPersist()) 241 if (plugin && plugin->pluginShouldPersist())
205 m_persistedPluginWidget = plugin; 242 setPersistedPluginWidget(plugin);
206 #if ENABLE(OILPAN) 243
207 else if (plugin)
208 plugin->detach();
209 #endif
210 resetInstance(); 244 resetInstance();
211 // FIXME - is this next line necessary? 245 // Clear the widget; will trigger disposal of it with Oilpan.
212 setWidget(nullptr); 246 setWidget(nullptr);
213 247
214 if (m_isCapturingMouseEvents) { 248 if (m_isCapturingMouseEvents) {
215 if (LocalFrame* frame = document().frame()) 249 if (LocalFrame* frame = document().frame())
216 frame->eventHandler().setCapturingMouseEventsNode(nullptr); 250 frame->eventHandler().setCapturingMouseEventsNode(nullptr);
217 m_isCapturingMouseEvents = false; 251 m_isCapturingMouseEvents = false;
218 } 252 }
219 253
220 if (m_NPObject) { 254 if (m_NPObject) {
221 _NPN_ReleaseObject(m_NPObject); 255 _NPN_ReleaseObject(m_NPObject);
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 // FIXME: Mouse down and scroll events are passed down to plug-in via custom 363 // FIXME: Mouse down and scroll events are passed down to plug-in via custom
330 // code in EventHandler; these code paths should be united. 364 // code in EventHandler; these code paths should be united.
331 365
332 RenderObject* r = renderer(); 366 RenderObject* r = renderer();
333 if (!r || !r->isRenderPart()) 367 if (!r || !r->isRenderPart())
334 return; 368 return;
335 if (r->isEmbeddedObject()) { 369 if (r->isEmbeddedObject()) {
336 if (toRenderEmbeddedObject(r)->showsUnavailablePluginIndicator()) 370 if (toRenderEmbeddedObject(r)->showsUnavailablePluginIndicator())
337 return; 371 return;
338 } 372 }
339 RefPtr<Widget> widget = toRenderPart(r)->widget(); 373 RefPtrWillBeRawPtr<Widget> widget = toRenderPart(r)->widget();
340 if (!widget) 374 if (!widget)
341 return; 375 return;
342 widget->handleEvent(event); 376 widget->handleEvent(event);
343 if (event->defaultHandled()) 377 if (event->defaultHandled())
344 return; 378 return;
345 HTMLFrameOwnerElement::defaultEventHandler(event); 379 HTMLFrameOwnerElement::defaultEventHandler(event);
346 } 380 }
347 381
348 RenderPart* HTMLPlugInElement::renderPartForJSBindings() const 382 RenderPart* HTMLPlugInElement::renderPartForJSBindings() const
349 { 383 {
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 506
473 RenderEmbeddedObject* renderer = renderEmbeddedObject(); 507 RenderEmbeddedObject* renderer = renderEmbeddedObject();
474 // FIXME: This code should not depend on renderer! 508 // FIXME: This code should not depend on renderer!
475 if ((!renderer && requireRenderer) || useFallback) 509 if ((!renderer && requireRenderer) || useFallback)
476 return false; 510 return false;
477 511
478 WTF_LOG(Plugins, "%p Plug-in URL: %s", this, m_url.utf8().data()); 512 WTF_LOG(Plugins, "%p Plug-in URL: %s", this, m_url.utf8().data());
479 WTF_LOG(Plugins, " Loaded URL: %s", url.string().utf8().data()); 513 WTF_LOG(Plugins, " Loaded URL: %s", url.string().utf8().data());
480 m_loadedUrl = url; 514 m_loadedUrl = url;
481 515
482 OwnPtrWillBeRawPtr<PluginPlaceholder> placeholder; 516 OwnPtrWillBeRawPtr<PluginPlaceholder> placeholder = nullptr;
483 RefPtr<Widget> widget = m_persistedPluginWidget; 517 RefPtrWillBeRawPtr<Widget> widget = m_persistedPluginWidget;
484 if (!widget) { 518 if (!widget) {
485 bool loadManually = document().isPluginDocument() && !document().contain sPlugins(); 519 bool loadManually = document().isPluginDocument() && !document().contain sPlugins();
486 placeholder = frame->loader().client()->createPluginPlaceholder(document (), url, paramNames, paramValues, mimeType, loadManually); 520 placeholder = frame->loader().client()->createPluginPlaceholder(document (), url, paramNames, paramValues, mimeType, loadManually);
487 if (!placeholder) { 521 if (!placeholder) {
488 FrameLoaderClient::DetachedPluginPolicy policy = requireRenderer ? F rameLoaderClient::FailOnDetachedPlugin : FrameLoaderClient::AllowDetachedPlugin; 522 FrameLoaderClient::DetachedPluginPolicy policy = requireRenderer ? F rameLoaderClient::FailOnDetachedPlugin : FrameLoaderClient::AllowDetachedPlugin;
489 widget = frame->loader().client()->createPlugin(this, url, paramName s, paramValues, mimeType, loadManually, policy); 523 widget = frame->loader().client()->createPlugin(this, url, paramName s, paramValues, mimeType, loadManually, policy);
490 } 524 }
491 } 525 }
492 526
493 if (!placeholder && !widget) { 527 if (!placeholder && !widget) {
494 if (renderer && !renderer->showsUnavailablePluginIndicator()) 528 if (renderer && !renderer->showsUnavailablePluginIndicator())
495 renderer->setPluginUnavailabilityReason(RenderEmbeddedObject::Plugin Missing); 529 renderer->setPluginUnavailabilityReason(RenderEmbeddedObject::Plugin Missing);
496 setPlaceholder(nullptr); 530 setPlaceholder(nullptr);
497 return false; 531 return false;
498 } 532 }
499 533
500 if (placeholder) { 534 if (placeholder) {
501 setPlaceholder(placeholder.release()); 535 setPlaceholder(placeholder.release());
502 return true; 536 return true;
503 } 537 }
504 538
505 if (renderer) { 539 if (renderer) {
506 setWidget(widget); 540 setWidget(widget);
507 m_persistedPluginWidget = nullptr; 541 setPersistedPluginWidget(nullptr);
508 } else if (widget != m_persistedPluginWidget) { 542 } else {
509 m_persistedPluginWidget = widget; 543 setPersistedPluginWidget(widget.get());
510 } 544 }
511 setPlaceholder(nullptr); 545 setPlaceholder(nullptr);
512 document().setContainsPlugins(); 546 document().setContainsPlugins();
513 scheduleSVGFilterLayerUpdateHack(); 547 scheduleSVGFilterLayerUpdateHack();
514 // Make sure any input event handlers introduced by the plugin are taken int o account. 548 // Make sure any input event handlers introduced by the plugin are taken int o account.
515 if (Page* page = document().frame()->page()) { 549 if (Page* page = document().frame()->page()) {
516 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordina tor()) 550 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordina tor())
517 scrollingCoordinator->notifyLayoutUpdated(); 551 scrollingCoordinator->notifyLayoutUpdated();
518 } 552 }
519 return true; 553 return true;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 return hasAuthorShadowRoot(); 646 return hasAuthorShadowRoot();
613 } 647 }
614 648
615 void HTMLPlugInElement::lazyReattachIfNeeded() 649 void HTMLPlugInElement::lazyReattachIfNeeded()
616 { 650 {
617 if (!useFallbackContent() && !usePlaceholderContent() && needsWidgetUpdate() && renderer() && !isImageType()) 651 if (!useFallbackContent() && !usePlaceholderContent() && needsWidgetUpdate() && renderer() && !isImageType())
618 lazyReattachIfAttached(); 652 lazyReattachIfAttached();
619 } 653 }
620 654
621 } 655 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698