bool HTMLPlugInImageElement::willRecalcStyle(StyleChange) { // FIXME: Why is this necessary? Manual re-attach is almost always wrong. if (!useFallbackContent() && needsWidgetUpdate() && renderer() && !isImageType()) reattach(); return true; }
void HTMLPlugInImageElement::recalcStyle(StyleChange ch) { // FIXME: Why is this necessary? Manual re-attach is almost always wrong. if (!useFallbackContent() && needsWidgetUpdate() && renderer() && !isImageType()) reattach(); HTMLPlugInElement::recalcStyle(ch); }
void HTMLPlugInImageElement::updateWidgetIfNecessary() { document()->updateStyleIfNeeded(); if (!needsWidgetUpdate() || useFallbackContent() || isImageType()) return; if (!renderEmbeddedObject() || renderEmbeddedObject()->pluginCrashedOrWasMissing()) return; updateWidget(CreateOnlyNonNetscapePlugins); }
void HTMLPlugInImageElement::updateWidgetIfNecessary() { document()->updateStyleIfNeeded(); if (!needsWidgetUpdate() || useFallbackContent() || isImageType()) return; if (!renderEmbeddedObject() || renderEmbeddedObject()->showsUnavailablePluginIndicator()) return; updateWidget(CreateOnlyNonNetscapePlugins); }
// FIXME: This should be unified with HTMLEmbedElement::updateWidget and // moved down into HTMLPluginImageElement.cpp void HTMLObjectElement::updateWidget(PluginCreationOption pluginCreationOption) { ASSERT(!renderEmbeddedObject()->isPluginUnavailable()); ASSERT(needsWidgetUpdate()); setNeedsWidgetUpdate(false); // FIXME: This should ASSERT isFinishedParsingChildren() instead. if (!isFinishedParsingChildren()) return; // FIXME: I'm not sure it's ever possible to get into updateWidget during a // removal, but just in case we should avoid loading the frame to prevent // security bugs. if (!SubframeLoadingDisabler::canLoadFrame(*this)) return; String url = this->url(); String serviceType = this->serviceType(); // FIXME: These should be joined into a PluginParameters class. Vector<String> paramNames; Vector<String> paramValues; parametersForPlugin(paramNames, paramValues, url, serviceType); // Note: url is modified above by parametersForPlugin. if (!allowedToLoadFrameURL(url)) return; bool fallbackContent = hasFallbackContent(); renderEmbeddedObject()->setHasFallbackContent(fallbackContent); // FIXME: It's sadness that we have this special case here. // See http://trac.webkit.org/changeset/25128 and // plugins/netscape-plugin-setwindow-size.html if (pluginCreationOption == CreateOnlyNonNetscapePlugins && wouldLoadAsNetscapePlugin(url, serviceType)) { // Ensure updateWidget() is called again during layout to create the Netscape plug-in. setNeedsWidgetUpdate(true); return; } Ref<HTMLObjectElement> protect(*this); // beforeload and plugin loading can make arbitrary DOM mutations. bool beforeLoadAllowedLoad = guardedDispatchBeforeLoadEvent(url); if (!renderer()) // Do not load the plugin if beforeload removed this element or its renderer. return; SubframeLoader& loader = document().frame()->loader().subframeLoader(); bool success = beforeLoadAllowedLoad && hasValidClassId() && loader.requestObject(this, url, getNameAttribute(), serviceType, paramNames, paramValues); if (!success && fallbackContent) renderFallbackContent(); }
void HTMLPlugInElement::attach(const AttachContext& context) { HTMLFrameOwnerElement::attach(context); if (!renderer() || useFallbackContent()) return; if (isImageType()) { if (!m_imageLoader) m_imageLoader = HTMLImageLoader::create(this); m_imageLoader->updateFromElement(); } else if (needsWidgetUpdate() && renderEmbeddedObject() && !renderEmbeddedObject()->showsUnavailablePluginIndicator() && !wouldLoadAsNetscapePlugin(m_url, m_serviceType) && !m_isDelayingLoadEvent) { m_isDelayingLoadEvent = true; document().incrementLoadEventDelayCount(); document().loadPluginsSoon(); } }