PassRefPtr<Widget> SubframeLoader::loadMediaPlayerProxyPlugin(Node* node, const KURL& url, const Vector<String>& paramNames, const Vector<String>& paramValues) { ASSERT(node->hasTagName(videoTag) || isHTMLAudioElement(node)); KURL completedURL; if (!url.isEmpty()) completedURL = completeURL(url); if (!m_frame->document()->securityOrigin()->canDisplay(completedURL)) { FrameLoader::reportLocalLoadFailed(m_frame, completedURL.string()); return 0; } if (!m_frame->document()->contentSecurityPolicy()->allowMediaFromSource(completedURL)) return 0; HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(node); RenderPart* renderer = toRenderPart(node->renderer()); IntSize size; if (renderer) size = roundedIntSize(LayoutSize(renderer->contentWidth(), renderer->contentHeight())); else if (mediaElement->isVideo()) size = RenderVideo::defaultSize(); if (!m_frame->loader()->mixedContentChecker()->canRunInsecureContent(m_frame->document()->securityOrigin(), completedURL)) return 0; RefPtr<Widget> widget = m_frame->loader()->client()->createMediaPlayerProxyPlugin(size, mediaElement, completedURL, paramNames, paramValues, "application/x-media-element-proxy-plugin"); if (widget && renderer) { renderer->setWidget(widget); renderer->node()->setNeedsStyleRecalc(SyntheticStyleChange); } m_containsPlugins = true; return widget ? widget.release() : 0; }
PassRefPtr<Widget> FrameLoader::loadMediaPlayerProxyPlugin(Node* node, const KURL& url, const Vector<String>& paramNames, const Vector<String>& paramValues) { ASSERT(node->hasTagName(videoTag) || node->hasTagName(audioTag)); if (!m_frame->script()->xssAuditor()->canLoadObject(url.string())) return 0; KURL completedURL; if (!url.isEmpty()) completedURL = completeURL(url); if (!SecurityOrigin::canLoad(completedURL, String(), frame()->document())) { FrameLoader::reportLocalLoadFailed(m_frame, completedURL.string()); return 0; } HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(node); RenderPart* renderer = toRenderPart(node->renderer()); IntSize size; if (renderer) size = IntSize(renderer->contentWidth(), renderer->contentHeight()); else if (mediaElement->isVideo()) size = RenderVideo::defaultSize(); m_frame->loader()->checkIfRunInsecureContent(m_frame->document()->securityOrigin(), completedURL); RefPtr<Widget> widget = m_frame->loader()->client()->createMediaPlayerProxyPlugin(size, mediaElement, completedURL, paramNames, paramValues, "application/x-media-element-proxy-plugin"); if (widget && renderer) { renderer->setWidget(widget); m_containsPlugIns = true; renderer->node()->setNeedsStyleRecalc(SyntheticStyleChange); } return widget ? widget.release() : 0; }