Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 79 | 79 |
| 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_persistedPluginWidget); | |
| 89 HTMLFrameOwnerElement::trace(visitor); | 90 HTMLFrameOwnerElement::trace(visitor); |
| 90 } | 91 } |
| 91 | 92 |
| 93 #if ENABLE(OILPAN) | |
| 94 void HTMLPlugInElement::disconnectContentFrame() | |
| 95 { | |
| 96 if (m_persistedPluginWidget) { | |
| 97 m_persistedPluginWidget->dispose(); | |
| 98 m_persistedPluginWidget = nullptr; | |
| 99 } | |
| 100 HTMLFrameOwnerElement::disconnectContentFrame(); | |
| 101 } | |
| 102 #endif | |
| 103 | |
| 104 void HTMLPlugInElement::setPersistedPluginWidget(Widget* widget) | |
|
sof
2014/10/08 11:52:25
This scheme is not complete and doesn't solve the
| |
| 105 { | |
| 106 #if ENABLE(OILPAN) | |
| 107 if (widget->isPluginView()) { | |
| 108 PluginView* plugin = toPluginView(widget); | |
| 109 if (LocalFrame* frame = plugin->pluginFrame()) { | |
| 110 frame->registerPluginElement(this); | |
| 111 } | |
| 112 } | |
| 113 #endif | |
| 114 m_persistedPluginWidget = widget; | |
| 115 } | |
| 116 | |
| 92 bool HTMLPlugInElement::canProcessDrag() const | 117 bool HTMLPlugInElement::canProcessDrag() const |
| 93 { | 118 { |
| 94 return pluginWidget() && pluginWidget()->isPluginView() && toPluginView(plug inWidget())->canProcessDrag(); | 119 return pluginWidget() && pluginWidget()->isPluginView() && toPluginView(plug inWidget())->canProcessDrag(); |
| 95 } | 120 } |
| 96 | 121 |
| 97 bool HTMLPlugInElement::willRespondToMouseClickEvents() | 122 bool HTMLPlugInElement::willRespondToMouseClickEvents() |
| 98 { | 123 { |
| 99 if (isDisabledFormControl()) | 124 if (isDisabledFormControl()) |
| 100 return false; | 125 return false; |
| 101 RenderObject* r = renderer(); | 126 RenderObject* r = renderer(); |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 194 if (renderer() && !useFallbackContent()) | 219 if (renderer() && !useFallbackContent()) |
| 195 setNeedsWidgetUpdate(true); | 220 setNeedsWidgetUpdate(true); |
| 196 if (m_isDelayingLoadEvent) { | 221 if (m_isDelayingLoadEvent) { |
| 197 m_isDelayingLoadEvent = false; | 222 m_isDelayingLoadEvent = false; |
| 198 document().decrementLoadEventDelayCount(); | 223 document().decrementLoadEventDelayCount(); |
| 199 } | 224 } |
| 200 | 225 |
| 201 // Only try to persist a plugin widget we actually own. | 226 // Only try to persist a plugin widget we actually own. |
| 202 Widget* plugin = ownedWidget(); | 227 Widget* plugin = ownedWidget(); |
| 203 if (plugin && plugin->pluginShouldPersist()) | 228 if (plugin && plugin->pluginShouldPersist()) |
| 204 m_persistedPluginWidget = plugin; | 229 setPersistedPluginWidget(plugin); |
| 205 #if ENABLE(OILPAN) | 230 |
| 206 else if (plugin) | |
| 207 plugin->detach(); | |
| 208 #endif | |
| 209 resetInstance(); | 231 resetInstance(); |
| 210 // FIXME - is this next line necessary? | 232 // Clear the widget; will trigger disposal of it with Oilpan. |
| 211 setWidget(nullptr); | 233 setWidget(nullptr); |
| 212 | 234 |
| 213 if (m_isCapturingMouseEvents) { | 235 if (m_isCapturingMouseEvents) { |
| 214 if (LocalFrame* frame = document().frame()) | 236 if (LocalFrame* frame = document().frame()) |
| 215 frame->eventHandler().setCapturingMouseEventsNode(nullptr); | 237 frame->eventHandler().setCapturingMouseEventsNode(nullptr); |
| 216 m_isCapturingMouseEvents = false; | 238 m_isCapturingMouseEvents = false; |
| 217 } | 239 } |
| 218 | 240 |
| 219 if (m_NPObject) { | 241 if (m_NPObject) { |
| 220 _NPN_ReleaseObject(m_NPObject); | 242 _NPN_ReleaseObject(m_NPObject); |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 328 // FIXME: Mouse down and scroll events are passed down to plug-in via custom | 350 // FIXME: Mouse down and scroll events are passed down to plug-in via custom |
| 329 // code in EventHandler; these code paths should be united. | 351 // code in EventHandler; these code paths should be united. |
| 330 | 352 |
| 331 RenderObject* r = renderer(); | 353 RenderObject* r = renderer(); |
| 332 if (!r || !r->isWidget()) | 354 if (!r || !r->isWidget()) |
| 333 return; | 355 return; |
| 334 if (r->isEmbeddedObject()) { | 356 if (r->isEmbeddedObject()) { |
| 335 if (toRenderEmbeddedObject(r)->showsUnavailablePluginIndicator()) | 357 if (toRenderEmbeddedObject(r)->showsUnavailablePluginIndicator()) |
| 336 return; | 358 return; |
| 337 } | 359 } |
| 338 RefPtr<Widget> widget = toRenderWidget(r)->widget(); | 360 RefPtrWillBeRawPtr<Widget> widget = toRenderWidget(r)->widget(); |
| 339 if (!widget) | 361 if (!widget) |
| 340 return; | 362 return; |
| 341 widget->handleEvent(event); | 363 widget->handleEvent(event); |
| 342 if (event->defaultHandled()) | 364 if (event->defaultHandled()) |
| 343 return; | 365 return; |
| 344 HTMLFrameOwnerElement::defaultEventHandler(event); | 366 HTMLFrameOwnerElement::defaultEventHandler(event); |
| 345 } | 367 } |
| 346 | 368 |
| 347 RenderWidget* HTMLPlugInElement::renderWidgetForJSBindings() const | 369 RenderWidget* HTMLPlugInElement::renderWidgetForJSBindings() const |
| 348 { | 370 { |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 471 | 493 |
| 472 RenderEmbeddedObject* renderer = renderEmbeddedObject(); | 494 RenderEmbeddedObject* renderer = renderEmbeddedObject(); |
| 473 // FIXME: This code should not depend on renderer! | 495 // FIXME: This code should not depend on renderer! |
| 474 if ((!renderer && requireRenderer) || useFallback) | 496 if ((!renderer && requireRenderer) || useFallback) |
| 475 return false; | 497 return false; |
| 476 | 498 |
| 477 WTF_LOG(Plugins, "%p Plug-in URL: %s", this, m_url.utf8().data()); | 499 WTF_LOG(Plugins, "%p Plug-in URL: %s", this, m_url.utf8().data()); |
| 478 WTF_LOG(Plugins, " Loaded URL: %s", url.string().utf8().data()); | 500 WTF_LOG(Plugins, " Loaded URL: %s", url.string().utf8().data()); |
| 479 m_loadedUrl = url; | 501 m_loadedUrl = url; |
| 480 | 502 |
| 481 RefPtr<Widget> widget = m_persistedPluginWidget; | 503 RefPtrWillBeRawPtr<Widget> widget = m_persistedPluginWidget; |
| 482 if (!widget) { | 504 if (!widget) { |
| 483 bool loadManually = document().isPluginDocument() && !document().contain sPlugins(); | 505 bool loadManually = document().isPluginDocument() && !document().contain sPlugins(); |
| 484 FrameLoaderClient::DetachedPluginPolicy policy = requireRenderer ? Frame LoaderClient::FailOnDetachedPlugin : FrameLoaderClient::AllowDetachedPlugin; | 506 FrameLoaderClient::DetachedPluginPolicy policy = requireRenderer ? Frame LoaderClient::FailOnDetachedPlugin : FrameLoaderClient::AllowDetachedPlugin; |
| 485 widget = frame->loader().client()->createPlugin(this, url, paramNames, p aramValues, mimeType, loadManually, policy); | 507 widget = frame->loader().client()->createPlugin(this, url, paramNames, p aramValues, mimeType, loadManually, policy); |
| 486 } | 508 } |
| 487 | 509 |
| 488 if (!widget) { | 510 if (!widget) { |
| 489 if (renderer && !renderer->showsUnavailablePluginIndicator()) | 511 if (renderer && !renderer->showsUnavailablePluginIndicator()) |
| 490 renderer->setPluginUnavailabilityReason(RenderEmbeddedObject::Plugin Missing); | 512 renderer->setPluginUnavailabilityReason(RenderEmbeddedObject::Plugin Missing); |
| 491 return false; | 513 return false; |
| 492 } | 514 } |
| 493 | 515 |
| 494 if (renderer) { | 516 if (renderer) { |
| 495 setWidget(widget); | 517 setWidget(widget); |
| 496 m_persistedPluginWidget = nullptr; | 518 m_persistedPluginWidget = nullptr; |
| 497 } else if (widget != m_persistedPluginWidget) { | 519 } else if (widget != m_persistedPluginWidget) { |
| 498 m_persistedPluginWidget = widget; | 520 setPersistedPluginWidget(widget.get()); |
| 499 } | 521 } |
| 500 document().setContainsPlugins(); | 522 document().setContainsPlugins(); |
| 501 scheduleSVGFilterLayerUpdateHack(); | 523 scheduleSVGFilterLayerUpdateHack(); |
| 502 // Make sure any input event handlers introduced by the plugin are taken int o account. | 524 // Make sure any input event handlers introduced by the plugin are taken int o account. |
| 503 if (Page* page = document().frame()->page()) { | 525 if (Page* page = document().frame()->page()) { |
| 504 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordina tor()) | 526 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordina tor()) |
| 505 scrollingCoordinator->notifyLayoutUpdated(); | 527 scrollingCoordinator->notifyLayoutUpdated(); |
| 506 } | 528 } |
| 507 return true; | 529 return true; |
| 508 } | 530 } |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 593 } | 615 } |
| 594 } | 616 } |
| 595 | 617 |
| 596 void HTMLPlugInElement::lazyReattachIfNeeded() | 618 void HTMLPlugInElement::lazyReattachIfNeeded() |
| 597 { | 619 { |
| 598 if (!useFallbackContent() && !usePlaceholderContent() && needsWidgetUpdate() && renderer() && !isImageType()) | 620 if (!useFallbackContent() && !usePlaceholderContent() && needsWidgetUpdate() && renderer() && !isImageType()) |
| 599 lazyReattachIfAttached(); | 621 lazyReattachIfAttached(); |
| 600 } | 622 } |
| 601 | 623 |
| 602 } | 624 } |
| OLD | NEW |