#include "config.h"
#include "core/html/PluginDocument.h"
-#include "HTMLNames.h"
-#include "bindings/v8/ExceptionStatePlaceholder.h"
+#include "bindings/core/v8/ExceptionStatePlaceholder.h"
+#include "core/HTMLNames.h"
#include "core/dom/RawDataDocumentParser.h"
+#include "core/frame/FrameView.h"
+#include "core/frame/LocalFrame.h"
#include "core/html/HTMLBodyElement.h"
#include "core/html/HTMLEmbedElement.h"
#include "core/html/HTMLHtmlElement.h"
#include "core/loader/DocumentLoader.h"
#include "core/loader/FrameLoader.h"
#include "core/loader/FrameLoaderClient.h"
-#include "core/frame/Frame.h"
-#include "core/frame/FrameView.h"
#include "core/plugins/PluginView.h"
#include "core/rendering/RenderEmbeddedObject.h"
-namespace WebCore {
+namespace blink {
using namespace HTMLNames;
// FIXME: Share more code with MediaDocumentParser.
class PluginDocumentParser : public RawDataDocumentParser {
public:
- static PassRefPtr<PluginDocumentParser> create(PluginDocument* document)
+ static PassRefPtrWillBeRawPtr<PluginDocumentParser> create(PluginDocument* document)
+ {
+ return adoptRefWillBeNoop(new PluginDocumentParser(document));
+ }
+
+ virtual void trace(Visitor* visitor) override
{
- return adoptRef(new PluginDocumentParser(document));
+ visitor->trace(m_embedElement);
+ RawDataDocumentParser::trace(visitor);
}
private:
PluginDocumentParser(Document* document)
: RawDataDocumentParser(document)
- , m_embedElement(0)
+ , m_embedElement(nullptr)
{
}
- virtual size_t appendBytes(const char*, size_t) OVERRIDE;
+ virtual void appendBytes(const char*, size_t) override;
- virtual void finish() OVERRIDE;
+ virtual void finish() override;
void createDocumentStructure();
PluginView* pluginView() const;
- RefPtr<HTMLEmbedElement> m_embedElement;
+ RefPtrWillBeMember<HTMLEmbedElement> m_embedElement;
};
void PluginDocumentParser::createDocumentStructure()
ASSERT(document());
RELEASE_ASSERT(document()->loader());
- Frame* frame = document()->frame();
+ LocalFrame* frame = document()->frame();
if (!frame)
return;
if (!frame->settings() || !frame->loader().allowPlugins(NotAboutToInstantiatePlugin))
return;
- RefPtr<HTMLHtmlElement> rootElement = HTMLHtmlElement::create(*document());
+ RefPtrWillBeRawPtr<HTMLHtmlElement> rootElement = HTMLHtmlElement::create(*document());
rootElement->insertedByParser();
document()->appendChild(rootElement);
frame->loader().dispatchDocumentElementAvailable();
- RefPtr<HTMLBodyElement> body = HTMLBodyElement::create(*document());
+ RefPtrWillBeRawPtr<HTMLBodyElement> body = HTMLBodyElement::create(*document());
body->setAttribute(marginwidthAttr, "0");
body->setAttribute(marginheightAttr, "0");
body->setAttribute(styleAttr, "background-color: rgb(38,38,38)");
m_embedElement->setAttribute(widthAttr, "100%");
m_embedElement->setAttribute(heightAttr, "100%");
m_embedElement->setAttribute(nameAttr, "plugin");
- m_embedElement->setAttribute(srcAttr, document()->url().string());
+ m_embedElement->setAttribute(srcAttr, AtomicString(document()->url().string()));
m_embedElement->setAttribute(typeAttr, document()->loader()->mimeType());
body->appendChild(m_embedElement);
view->didReceiveResponse(document()->loader()->response());
}
-size_t PluginDocumentParser::appendBytes(const char* data, size_t length)
+void PluginDocumentParser::appendBytes(const char* data, size_t length)
{
if (!m_embedElement)
createDocumentStructure();
if (!length)
- return 0;
+ return;
if (PluginView* view = pluginView())
view->didReceiveData(data, length);
-
- return 0;
}
void PluginDocumentParser::finish()
view->didFinishLoading();
else
view->didFailLoading(error);
- m_embedElement = 0;
+ m_embedElement = nullptr;
}
RawDataDocumentParser::finish();
}
PluginDocument::PluginDocument(const DocumentInit& initializer)
: HTMLDocument(initializer, PluginDocumentClass)
- , m_shouldLoadPluginManually(true)
{
setCompatibilityMode(QuirksMode);
lockCompatibilityMode();
}
-PassRefPtr<DocumentParser> PluginDocument::createParser()
+PassRefPtrWillBeRawPtr<DocumentParser> PluginDocument::createParser()
{
return PluginDocumentParser::create(this);
}
void PluginDocument::detach(const AttachContext& context)
{
// Release the plugin node so that we don't have a circular reference.
- m_pluginNode = 0;
+ m_pluginNode = nullptr;
HTMLDocument::detach(context);
}
-void PluginDocument::cancelManualPluginLoad()
+void PluginDocument::trace(Visitor* visitor)
{
- // PluginDocument::cancelManualPluginLoad should only be called once, but there are issues
- // with how many times we call beforeload on object elements. <rdar://problem/8441094>.
- if (!shouldLoadPluginManually())
- return;
-
- DocumentLoader* documentLoader = frame()->loader().activeDocumentLoader();
- documentLoader->cancelMainResourceLoad(ResourceError::cancelledError(documentLoader->request().url()));
- setShouldLoadPluginManually(false);
+ visitor->trace(m_pluginNode);
+ HTMLDocument::trace(visitor);
}
}