diff options
author | Steve Block <steveblock@google.com> | 2010-04-27 16:31:00 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-05-11 14:42:12 +0100 |
commit | dcc8cf2e65d1aa555cce12431a16547e66b469ee (patch) | |
tree | 92a8d65cd5383bca9749f5327fb5e440563926e6 /WebCore/loader/PluginDocument.cpp | |
parent | ccac38a6b48843126402088a309597e682f40fe6 (diff) | |
download | external_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.cpp | 38 |
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; +} + } |