bool HTMLPlugInElement::loadPlugin(const KURL& url, const String& mimeType, const Vector<String>& paramNames, const Vector<String>& paramValues, bool useFallback) { Frame* frame = document().frame(); if (!frame->loader().allowPlugins(AboutToInstantiatePlugin)) return false; RenderEmbeddedObject* renderer = renderEmbeddedObject(); // FIXME: This code should not depend on renderer! if (!renderer || useFallback) return false; WTF_LOG(Plugins, "%p Plug-in URL: %s", this, m_url.utf8().data()); WTF_LOG(Plugins, " Loaded URL: %s", url.string().utf8().data()); m_loadedUrl = url; IntSize contentSize = roundedIntSize(LayoutSize(renderer->contentWidth(), renderer->contentHeight())); bool loadManually = document().isPluginDocument() && !document().containsPlugins() && toPluginDocument(document()).shouldLoadPluginManually(); RefPtr<Widget> widget = frame->loader().client()->createPlugin(contentSize, this, url, paramNames, paramValues, mimeType, loadManually); if (!widget) { if (!renderer->showsUnavailablePluginIndicator()) renderer->setPluginUnavailabilityReason(RenderEmbeddedObject::PluginMissing); return false; } renderer->setWidget(widget); document().setContainsPlugins(); setNeedsStyleRecalc(LocalStyleChange, StyleChangeFromRenderer); return true; }
bool SubframeLoader::loadPlugin(HTMLPlugInImageElement* pluginElement, const URL& url, const String& mimeType, const Vector<String>& paramNames, const Vector<String>& paramValues, bool useFallback) { RenderEmbeddedObject* renderer = pluginElement->renderEmbeddedObject(); // FIXME: This code should not depend on renderer! if (!renderer || useFallback) return false; pluginElement->subframeLoaderWillCreatePlugIn(url); IntSize contentSize = roundedIntSize(LayoutSize(renderer->contentWidth(), renderer->contentHeight())); bool loadManually = document()->isPluginDocument() && !m_containsPlugins && toPluginDocument(document())->shouldLoadPluginManually(); RefPtr<Widget> widget = m_frame.loader().client().createPlugin(contentSize, pluginElement, url, paramNames, paramValues, mimeType, loadManually); if (!widget) { if (!renderer->isPluginUnavailable()) renderer->setPluginUnavailabilityReason(RenderEmbeddedObject::PluginMissing); return false; } pluginElement->subframeLoaderDidCreatePlugIn(widget.get()); renderer->setWidget(widget); m_containsPlugins = true; #if ENABLE(PLUGIN_PROXY_FOR_VIDEO) pluginElement->setNeedsStyleRecalc(SyntheticStyleChange); #endif return true; }
bool SubframeLoader::loadPlugin(HTMLPlugInImageElement* pluginElement, const KURL& url, const String& mimeType, const Vector<String>& paramNames, const Vector<String>& paramValues, bool useFallback) { RenderEmbeddedObject* renderer = pluginElement->renderEmbeddedObject(); // FIXME: This code should not depend on renderer! if (!renderer || useFallback) return false; if (!document()->securityOrigin()->canDisplay(url)) { FrameLoader::reportLocalLoadFailed(m_frame, url.string()); return false; } FrameLoader* frameLoader = m_frame->loader(); frameLoader->checkIfRunInsecureContent(document()->securityOrigin(), url); IntSize contentSize(renderer->contentWidth(), renderer->contentHeight()); bool loadManually = document()->isPluginDocument() && !m_containsPlugins; RefPtr<Widget> widget = frameLoader->client()->createPlugin(contentSize, pluginElement, url, paramNames, paramValues, mimeType, loadManually); if (!widget) { renderer->setShowsMissingPluginIndicator(); return false; } renderer->setWidget(widget); m_containsPlugins = true; #if ENABLE(PLUGIN_PROXY_FOR_VIDEO) pluginElement->setNeedsStyleRecalc(SyntheticStyleChange); #endif return true; }
bool SubframeLoader::loadPlugin(HTMLPlugInImageElement& pluginElement, const URL& url, const String& mimeType, const Vector<String>& paramNames, const Vector<String>& paramValues, bool useFallback) { RenderEmbeddedObject* renderer = pluginElement.renderEmbeddedObject(); // FIXME: This code should not depend on renderer! if (!renderer || useFallback) return false; pluginElement.subframeLoaderWillCreatePlugIn(url); IntSize contentSize = roundedIntSize(LayoutSize(renderer->contentWidth(), renderer->contentHeight())); bool loadManually = is<PluginDocument>(*document()) && !m_containsPlugins && downcast<PluginDocument>(*document()).shouldLoadPluginManually(); #if PLATFORM(IOS) // On iOS, we only tell the plugin to be in full page mode if the containing plugin document is the top level document. if (document()->ownerElement()) loadManually = false; #endif RefPtr<Widget> widget = m_frame.loader().client().createPlugin(contentSize, &pluginElement, url, paramNames, paramValues, mimeType, loadManually); if (!widget) { if (!renderer->isPluginUnavailable()) renderer->setPluginUnavailabilityReason(RenderEmbeddedObject::PluginMissing); return false; } pluginElement.subframeLoaderDidCreatePlugIn(*widget); renderer->setWidget(widget); m_containsPlugins = true; return true; }