void HTMLPlugInElement::defaultEventHandler(Event* event) { // Firefox seems to use a fake event listener to dispatch events to plug-in // (tested with mouse events only). This is observable via different order // of events - in Firefox, event listeners specified in HTML attributes // fires first, then an event gets dispatched to plug-in, and only then // other event listeners fire. Hopefully, this difference does not matter in // practice. // FIXME: Mouse down and scroll events are passed down to plug-in via custom // code in EventHandler; these code paths should be united. RenderObject* r = renderer(); if (!r || !r->isWidget()) return; if (r->isEmbeddedObject()) { if (toRenderEmbeddedObject(r)->showsUnavailablePluginIndicator()) return; if (displayState() < Playing) return; } RefPtr<Widget> widget = toRenderWidget(r)->widget(); if (!widget) return; widget->handleEvent(event); if (event->defaultHandled()) return; HTMLFrameOwnerElement::defaultEventHandler(event); }
RenderEmbeddedObject* HTMLPlugInImageElement::renderEmbeddedObject() const { // HTMLObjectElement and HTMLEmbedElement may return arbitrary renderers // when using fallback content. if (!renderer() || !renderer()->isEmbeddedObject()) return 0; return toRenderEmbeddedObject(renderer()); }
bool HTMLPlugInElement::supportsFocus() const { if (HTMLFrameOwnerElement::supportsFocus()) return true; if (useFallbackContent() || !renderer() || !renderer()->isEmbeddedObject()) return false; return !toRenderEmbeddedObject(renderer())->isPluginUnavailable(); }
void PluginView::pluginProcessCrashed() { if (!m_pluginElement->renderer()) return; // FIXME: The renderer could also be a RenderApplet, we should handle that. if (!m_pluginElement->renderer()->isEmbeddedObject()) return; RenderEmbeddedObject* renderer = toRenderEmbeddedObject(m_pluginElement->renderer()); renderer->setPluginUnavailabilityReason(RenderEmbeddedObject::PluginCrashed); Widget::invalidate(); }
void HTMLPlugInElement::defaultEventHandler(Event* event) { // Firefox seems to use a fake event listener to dispatch events to plug-in (tested with mouse events only). // This is observable via different order of events - in Firefox, event listeners specified in HTML attributes fires first, then an event // gets dispatched to plug-in, and only then other event listeners fire. Hopefully, this difference does not matter in practice. // FIXME: Mouse down and scroll events are passed down to plug-in via custom code in EventHandler; these code paths should be united. auto renderer = this->renderer(); if (!renderer || !renderer->isWidget()) return; if (renderer->isEmbeddedObject()) { if (toRenderEmbeddedObject(renderer)->isPluginUnavailable()) { toRenderEmbeddedObject(renderer)->handleUnavailablePluginIndicatorEvent(event); return; } if (toRenderEmbeddedObject(renderer)->isSnapshottedPlugIn() && displayState() < Restarting) { toRenderSnapshottedPlugIn(renderer)->handleEvent(event); HTMLFrameOwnerElement::defaultEventHandler(event); return; } if (displayState() < Playing) return; } RefPtr<Widget> widget = toRenderWidget(renderer)->widget(); if (!widget) return; widget->handleEvent(event); if (event->defaultHandled()) return; HTMLFrameOwnerElement::defaultEventHandler(event); }
bool RenderLayerCompositor::requiresCompositingForPlugin(RenderObject* renderer) const { return renderer->isEmbeddedObject() && toRenderEmbeddedObject(renderer)->allowsAcceleratedCompositing(); }