bool HTMLPlugInElement::requestObject(const String& url, const String& mimeType, const Vector<String>& paramNames, const Vector<String>& paramValues) { if (url.isEmpty() && mimeType.isEmpty()) return false; // FIXME: None of this code should use renderers! RenderEmbeddedObject* renderer = renderEmbeddedObject(); ASSERT(renderer); if (!renderer) return false; KURL completedURL = document().completeURL(url); if (!pluginIsLoadable(completedURL, mimeType)) return false; bool useFallback; if (shouldUsePlugin(completedURL, mimeType, renderer->hasFallbackContent(), useFallback)) return loadPlugin(completedURL, mimeType, paramNames, paramValues, useFallback); // If the plug-in element already contains a subframe, // loadOrRedirectSubframe will re-use it. Otherwise, it will create a new // frame and set it as the RenderPart's widget, causing what was previously // in the widget to be torn down. return loadOrRedirectSubframe(completedURL, getNameAttribute(), true); }
bool SubframeLoader::requestObject(HTMLPlugInImageElement* ownerElement, const String& url, const AtomicString& frameName, const String& mimeType, const Vector<String>& paramNames, const Vector<String>& paramValues) { if (url.isEmpty() && mimeType.isEmpty()) return false; if (!m_frame->script()->xssAuditor()->canLoadObject(url)) { // It is unsafe to honor the request for this object. return false; } // FIXME: None of this code should use renderers! RenderEmbeddedObject* renderer = ownerElement->renderEmbeddedObject(); ASSERT(renderer); if (!renderer) return false; KURL completedURL; if (!url.isEmpty()) completedURL = completeURL(url); bool useFallback; if (shouldUsePlugin(completedURL, mimeType, renderer->hasFallbackContent(), useFallback)) { Settings* settings = m_frame->settings(); if ((!allowPlugins(AboutToInstantiatePlugin) // Application plugins are plugins implemented by the user agent, for example Qt plugins, // as opposed to third-party code such as flash. The user agent decides whether or not they are // permitted, rather than WebKit. && !MIMETypeRegistry::isApplicationPluginMIMEType(mimeType)) || (!settings->isJavaEnabled() && MIMETypeRegistry::isJavaAppletMIMEType(mimeType))) return false; if (m_frame->document() && m_frame->document()->securityOrigin()->isSandboxed(SandboxPlugins)) return false; ASSERT(ownerElement->hasTagName(objectTag) || ownerElement->hasTagName(embedTag)); HTMLPlugInImageElement* pluginElement = static_cast<HTMLPlugInImageElement*>(ownerElement); return loadPlugin(pluginElement, completedURL, mimeType, paramNames, paramValues, useFallback); } // If the plug-in element already contains a subframe, loadOrRedirectSubframe will re-use it. Otherwise, // it will create a new frame and set it as the RenderPart's widget, causing what was previously // in the widget to be torn down. return loadOrRedirectSubframe(ownerElement, completedURL, frameName, true, true); }
bool SubframeLoader::requestObject(HTMLPlugInImageElement* ownerElement, const String& url, const AtomicString& frameName, const String& mimeType, const Vector<String>& paramNames, const Vector<String>& paramValues) { if (url.isEmpty() && mimeType.isEmpty()) return false; // FIXME: None of this code should use renderers! RenderEmbeddedObject* renderer = ownerElement->renderEmbeddedObject(); ASSERT(renderer); if (!renderer) return false; KURL completedURL; if (!url.isEmpty()) completedURL = completeURL(url); bool useFallback; if (shouldUsePlugin(completedURL, mimeType, ownerElement->shouldPreferPlugInsForImages(), renderer->hasFallbackContent(), useFallback)) { bool success = requestPlugin(ownerElement, completedURL, mimeType, paramNames, paramValues, useFallback); logPluginRequest(document()->page(), mimeType, completedURL, success); return success; } // If the plug-in element already contains a subframe, loadOrRedirectSubframe will re-use it. Otherwise, // it will create a new frame and set it as the RenderPart's widget, causing what was previously // in the widget to be torn down. return loadOrRedirectSubframe(ownerElement, completedURL, frameName, true, true); }