summaryrefslogtreecommitdiffstats
path: root/WebCore/loader/SubframeLoader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/loader/SubframeLoader.cpp')
-rw-r--r--WebCore/loader/SubframeLoader.cpp89
1 files changed, 46 insertions, 43 deletions
diff --git a/WebCore/loader/SubframeLoader.cpp b/WebCore/loader/SubframeLoader.cpp
index f56ebf1..ceafb88 100644
--- a/WebCore/loader/SubframeLoader.cpp
+++ b/WebCore/loader/SubframeLoader.cpp
@@ -38,9 +38,8 @@
#include "HTMLAppletElement.h"
#include "HTMLFrameElementBase.h"
#include "HTMLNames.h"
-#include "HTMLPlugInElement.h"
+#include "HTMLPlugInImageElement.h"
#include "MIMETypeRegistry.h"
-#include "Node.h"
#include "Page.h"
#include "PluginData.h"
#include "RenderEmbeddedObject.h"
@@ -63,16 +62,6 @@ SubframeLoader::SubframeLoader(Frame* frame)
{
}
-static HTMLPlugInElement* toPlugInElement(Node* node)
-{
- if (!node)
- return 0;
-
- ASSERT(node->hasTagName(objectTag) || node->hasTagName(embedTag) || node->hasTagName(appletTag));
-
- return static_cast<HTMLPlugInElement*>(node);
-}
-
void SubframeLoader::clear()
{
m_containsPlugins = false;
@@ -99,7 +88,7 @@ bool SubframeLoader::requestFrame(HTMLFrameOwnerElement* ownerElement, const Str
return true;
}
-bool SubframeLoader::requestObject(RenderEmbeddedObject* renderer, const String& url, const AtomicString& frameName,
+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())
@@ -110,6 +99,12 @@ bool SubframeLoader::requestObject(RenderEmbeddedObject* renderer, const String&
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);
@@ -126,19 +121,19 @@ bool SubframeLoader::requestObject(RenderEmbeddedObject* renderer, const String&
return false;
if (m_frame->document() && m_frame->document()->securityOrigin()->isSandboxed(SandboxPlugins))
return false;
- return loadPlugin(renderer, completedURL, mimeType, paramNames, paramValues, useFallback);
- }
- ASSERT(renderer->node()->hasTagName(objectTag) || renderer->node()->hasTagName(embedTag));
- HTMLPlugInElement* element = static_cast<HTMLPlugInElement*>(renderer->node());
+ 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(element, completedURL, frameName, true, true);
+ return loadOrRedirectSubframe(ownerElement, completedURL, frameName, true, true);
}
-
#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
PassRefPtr<Widget> SubframeLoader::loadMediaPlayerProxyPlugin(Node* node, const KURL& url,
const Vector<String>& paramNames, const Vector<String>& paramValues)
@@ -252,7 +247,7 @@ Frame* SubframeLoader::loadSubframe(HTMLFrameOwnerElement* ownerElement, const K
marginHeight = o->getMarginHeight();
}
- if (!SecurityOrigin::canLoad(url, referrer, 0)) {
+ if (!SecurityOrigin::canLoad(url, String(), ownerElement->document())) {
FrameLoader::reportLocalLoadFailed(m_frame, url.string());
return 0;
}
@@ -304,7 +299,6 @@ bool SubframeLoader::allowPlugins(ReasonForCallingAllowPlugins reason)
return allowed;
}
-
bool SubframeLoader::shouldUsePlugin(const KURL& url, const String& mimeType, bool hasFallback, bool& useFallback)
{
if (m_frame->loader()->client()->shouldUsePluginDocument(mimeType)) {
@@ -327,37 +321,46 @@ bool SubframeLoader::shouldUsePlugin(const KURL& url, const String& mimeType, bo
useFallback = objectType == ObjectContentNone && hasFallback;
return objectType == ObjectContentNone || objectType == ObjectContentNetscapePlugin || objectType == ObjectContentOtherPlugin;
}
-
-bool SubframeLoader::loadPlugin(RenderEmbeddedObject* renderer, const KURL& url, const String& mimeType,
+
+Document* SubframeLoader::document() const
+{
+ return m_frame->document();
+}
+
+bool SubframeLoader::loadPlugin(HTMLPlugInImageElement* pluginElement, const KURL& url, const String& mimeType,
const Vector<String>& paramNames, const Vector<String>& paramValues, bool useFallback)
{
- RefPtr<Widget> widget;
+ RenderEmbeddedObject* renderer = pluginElement->renderEmbeddedObject();
- if (renderer && !useFallback) {
- HTMLPlugInElement* element = toPlugInElement(renderer->node());
+ // FIXME: This code should not depend on renderer!
+ if (!renderer || useFallback)
+ return false;
- if (!SecurityOrigin::canLoad(url, String(), m_frame->document())) {
- FrameLoader::reportLocalLoadFailed(m_frame, url.string());
- return false;
- }
+ if (!SecurityOrigin::canLoad(url, String(), document())) {
+ FrameLoader::reportLocalLoadFailed(m_frame, url.string());
+ return false;
+ }
- m_frame->loader()->checkIfRunInsecureContent(m_frame->document()->securityOrigin(), url);
+ FrameLoader* frameLoader = m_frame->loader();
+ frameLoader->checkIfRunInsecureContent(document()->securityOrigin(), url);
- widget = m_frame->loader()->client()->createPlugin(IntSize(renderer->contentWidth(), renderer->contentHeight()),
- element, url, paramNames, paramValues, mimeType,
- m_frame->document()->isPluginDocument() && !m_containsPlugins);
- if (widget) {
- renderer->setWidget(widget);
- m_containsPlugins = true;
+ 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 ENABLE(PLUGIN_PROXY_FOR_VIDEO)
- renderer->node()->setNeedsStyleRecalc(SyntheticStyleChange);
-#endif
- } else
- renderer->setShowsMissingPluginIndicator();
+ if (!widget) {
+ renderer->setShowsMissingPluginIndicator();
+ return false;
}
- return widget;
+ renderer->setWidget(widget);
+ m_containsPlugins = true;
+
+#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
+ pluginElement->setNeedsStyleRecalc(SyntheticStyleChange);
+#endif
+ return true;
}
KURL SubframeLoader::completeURL(const String& url) const