summaryrefslogtreecommitdiffstats
path: root/WebCore/loader/PluginDocument.cpp
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2010-04-27 16:31:00 +0100
committerSteve Block <steveblock@google.com>2010-05-11 14:42:12 +0100
commitdcc8cf2e65d1aa555cce12431a16547e66b469ee (patch)
tree92a8d65cd5383bca9749f5327fb5e440563926e6 /WebCore/loader/PluginDocument.cpp
parentccac38a6b48843126402088a309597e682f40fe6 (diff)
downloadexternal_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.zip
external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.gz
external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.bz2
Merge webkit.org at r58033 : Initial merge by git
Change-Id: If006c38561af287c50cd578d251629b51e4d8cd1
Diffstat (limited to 'WebCore/loader/PluginDocument.cpp')
-rw-r--r--WebCore/loader/PluginDocument.cpp38
1 files changed, 34 insertions, 4 deletions
diff --git a/WebCore/loader/PluginDocument.cpp b/WebCore/loader/PluginDocument.cpp
index 788691f..7024333 100644
--- a/WebCore/loader/PluginDocument.cpp
+++ b/WebCore/loader/PluginDocument.cpp
@@ -34,6 +34,7 @@
#include "HTMLNames.h"
#include "MainResourceLoader.h"
#include "Page.h"
+#include "RenderEmbeddedObject.h"
#include "RenderWidget.h"
#include "SegmentedString.h"
#include "Settings.h"
@@ -47,6 +48,7 @@ using namespace HTMLNames;
class PluginTokenizer : public Tokenizer {
public:
PluginTokenizer(Document* doc) : m_doc(doc), m_embedElement(0) {}
+ static Widget* pluginWidgetFromDocument(Document* doc);
private:
virtual void write(const SegmentedString&, bool appendData);
@@ -62,7 +64,21 @@ private:
Document* m_doc;
HTMLEmbedElement* m_embedElement;
};
-
+
+Widget* PluginTokenizer::pluginWidgetFromDocument(Document* doc)
+{
+ ASSERT(doc);
+ RefPtr<Element> body = doc->body();
+ if (body) {
+ RefPtr<Node> node = body->firstChild();
+ if (node && node->renderer()) {
+ ASSERT(node->renderer()->isEmbeddedObject());
+ return toRenderEmbeddedObject(node->renderer())->widget();
+ }
+ }
+ return 0;
+}
+
void PluginTokenizer::write(const SegmentedString&, bool)
{
ASSERT_NOT_REACHED();
@@ -89,7 +105,7 @@ void PluginTokenizer::createDocumentStructure()
m_embedElement->setAttribute(nameAttr, "plugin");
m_embedElement->setAttribute(srcAttr, m_doc->url().string());
- m_embedElement->setAttribute(typeAttr, m_doc->frame()->loader()->responseMIMEType());
+ m_embedElement->setAttribute(typeAttr, m_doc->frame()->loader()->writer()->mimeType());
body->appendChild(embedElement, ec);
}
@@ -104,7 +120,7 @@ bool PluginTokenizer::writeRawData(const char*, int)
if (Frame* frame = m_doc->frame()) {
Settings* settings = frame->settings();
- if (settings && settings->arePluginsEnabled()) {
+ if (settings && frame->loader()->allowPlugins(NotAboutToInstantiatePlugin)) {
m_doc->updateLayout();
if (RenderWidget* renderer = toRenderWidget(m_embedElement->renderer())) {
@@ -146,5 +162,19 @@ Tokenizer* PluginDocument::createTokenizer()
{
return new PluginTokenizer(this);
}
-
+
+Widget* PluginDocument::pluginWidget()
+{
+ return PluginTokenizer::pluginWidgetFromDocument(this);
+}
+
+Node* PluginDocument::pluginNode()
+{
+ RefPtr<Element> body_element = body();
+ if (body_element)
+ return body_element->firstChild();
+
+ return 0;
+}
+
}