summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/PluginDocument.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/html/PluginDocument.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/html/PluginDocument.cpp')
-rw-r--r--Source/WebCore/html/PluginDocument.cpp99
1 files changed, 48 insertions, 51 deletions
diff --git a/Source/WebCore/html/PluginDocument.cpp b/Source/WebCore/html/PluginDocument.cpp
index 51ea4674d..7497b3c68 100644
--- a/Source/WebCore/html/PluginDocument.cpp
+++ b/Source/WebCore/html/PluginDocument.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2008, 2013 Apple Inc. All rights reserved.
+ * Copyright (C) 2006-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -10,10 +10,10 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -26,18 +26,16 @@
#include "PluginDocument.h"
#include "DocumentLoader.h"
-#include "ExceptionCodePlaceholder.h"
#include "Frame.h"
#include "FrameLoader.h"
#include "FrameLoaderClient.h"
#include "FrameView.h"
+#include "HTMLBodyElement.h"
#include "HTMLEmbedElement.h"
#include "HTMLHtmlElement.h"
#include "HTMLNames.h"
-#include "Page.h"
#include "RawDataDocumentParser.h"
#include "RenderEmbeddedObject.h"
-#include "Settings.h"
namespace WebCore {
@@ -46,67 +44,66 @@ using namespace HTMLNames;
// FIXME: Share more code with MediaDocumentParser.
class PluginDocumentParser final : public RawDataDocumentParser {
public:
- static PassRefPtr<PluginDocumentParser> create(PluginDocument& document)
+ static Ref<PluginDocumentParser> create(PluginDocument& document)
{
- return adoptRef(new PluginDocumentParser(document));
+ return adoptRef(*new PluginDocumentParser(document));
}
private:
PluginDocumentParser(Document& document)
: RawDataDocumentParser(document)
- , m_embedElement(0)
{
}
- virtual void appendBytes(DocumentWriter&, const char*, size_t) override;
-
+ void appendBytes(DocumentWriter&, const char*, size_t) final;
void createDocumentStructure();
- HTMLEmbedElement* m_embedElement;
+ HTMLEmbedElement* m_embedElement { nullptr };
};
void PluginDocumentParser::createDocumentStructure()
{
- RefPtr<Element> rootElement = document()->createElement(htmlTag, false);
- document()->appendChild(rootElement, IGNORE_EXCEPTION);
- toHTMLHtmlElement(rootElement.get())->insertedByParser();
+ auto& document = downcast<PluginDocument>(*this->document());
+
+ auto rootElement = HTMLHtmlElement::create(document);
+ document.appendChild(rootElement);
+ rootElement->insertedByParser();
- if (document()->frame())
- document()->frame()->injectUserScripts(InjectAtDocumentStart);
+ if (document.frame())
+ document.frame()->injectUserScripts(InjectAtDocumentStart);
#if PLATFORM(IOS)
// Should not be able to zoom into standalone plug-in documents.
- document()->processViewport(ASCIILiteral("user-scalable=no"), ViewportArguments::PluginDocument);
+ document.processViewport(ASCIILiteral("user-scalable=no"), ViewportArguments::PluginDocument);
#endif
- RefPtr<Element> body = document()->createElement(bodyTag, false);
- body->setAttribute(marginwidthAttr, AtomicString("0", AtomicString::ConstructFromLiteral));
- body->setAttribute(marginheightAttr, AtomicString("0", AtomicString::ConstructFromLiteral));
+ auto body = HTMLBodyElement::create(document);
+ body->setAttributeWithoutSynchronization(marginwidthAttr, AtomicString("0", AtomicString::ConstructFromLiteral));
+ body->setAttributeWithoutSynchronization(marginheightAttr, AtomicString("0", AtomicString::ConstructFromLiteral));
#if PLATFORM(IOS)
body->setAttribute(styleAttr, AtomicString("background-color: rgb(217,224,233)", AtomicString::ConstructFromLiteral));
#else
body->setAttribute(styleAttr, AtomicString("background-color: rgb(38,38,38)", AtomicString::ConstructFromLiteral));
#endif
- rootElement->appendChild(body, IGNORE_EXCEPTION);
+ rootElement->appendChild(body);
- RefPtr<Element> embedElement = document()->createElement(embedTag, false);
+ auto embedElement = HTMLEmbedElement::create(document);
- m_embedElement = toHTMLEmbedElement(embedElement.get());
- m_embedElement->setAttribute(widthAttr, "100%");
- m_embedElement->setAttribute(heightAttr, "100%");
+ m_embedElement = embedElement.ptr();
+ embedElement->setAttributeWithoutSynchronization(widthAttr, AtomicString("100%", AtomicString::ConstructFromLiteral));
+ embedElement->setAttributeWithoutSynchronization(heightAttr, AtomicString("100%", AtomicString::ConstructFromLiteral));
- m_embedElement->setAttribute(nameAttr, "plugin");
- m_embedElement->setAttribute(srcAttr, document()->url().string());
+ embedElement->setAttributeWithoutSynchronization(nameAttr, AtomicString("plugin", AtomicString::ConstructFromLiteral));
+ embedElement->setAttributeWithoutSynchronization(srcAttr, document.url().string());
- DocumentLoader* loader = document()->loader();
- ASSERT(loader);
- if (loader)
- m_embedElement->setAttribute(typeAttr, loader->writer().mimeType());
+ ASSERT(document.loader());
+ if (auto* loader = document.loader())
+ m_embedElement->setAttributeWithoutSynchronization(typeAttr, loader->writer().mimeType());
- toPluginDocument(document())->setPluginElement(m_embedElement);
+ document.setPluginElement(*m_embedElement);
- body->appendChild(embedElement, IGNORE_EXCEPTION);
+ body->appendChild(embedElement);
}
void PluginDocumentParser::appendBytes(DocumentWriter&, const char*, size_t)
@@ -116,7 +113,7 @@ void PluginDocumentParser::appendBytes(DocumentWriter&, const char*, size_t)
createDocumentStructure();
- Frame* frame = document()->frame();
+ auto* frame = document()->frame();
if (!frame)
return;
@@ -131,7 +128,7 @@ void PluginDocumentParser::appendBytes(DocumentWriter&, const char*, size_t)
if (RenderWidget* renderer = m_embedElement->renderWidget()) {
if (Widget* widget = renderer->widget()) {
- frame->loader().client().redirectDataToPlugin(widget);
+ frame->loader().client().redirectDataToPlugin(*widget);
// In a plugin document, the main resource is the plugin. If we have a null widget, that means
// the loading of the plugin was cancelled, which gives us a null mainResourceLoader(), so we
// need to have this call in a null check of the widget or of mainResourceLoader().
@@ -142,36 +139,35 @@ void PluginDocumentParser::appendBytes(DocumentWriter&, const char*, size_t)
PluginDocument::PluginDocument(Frame* frame, const URL& url)
: HTMLDocument(frame, url, PluginDocumentClass)
- , m_shouldLoadPluginManually(true)
{
- setCompatibilityMode(QuirksMode);
+ setCompatibilityMode(DocumentCompatibilityMode::QuirksMode);
lockCompatibilityMode();
}
-PassRefPtr<DocumentParser> PluginDocument::createParser()
+Ref<DocumentParser> PluginDocument::createParser()
{
return PluginDocumentParser::create(*this);
}
Widget* PluginDocument::pluginWidget()
{
- if (m_pluginElement && m_pluginElement->renderer()) {
- ASSERT(m_pluginElement->renderer()->isEmbeddedObject());
- return toRenderEmbeddedObject(m_pluginElement->renderer())->widget();
- }
- return 0;
+ if (!m_pluginElement)
+ return nullptr;
+ auto* renderer = m_pluginElement->renderer();
+ if (!renderer)
+ return nullptr;
+ return downcast<RenderEmbeddedObject>(*m_pluginElement->renderer()).widget();
}
-void PluginDocument::setPluginElement(PassRefPtr<HTMLPlugInElement> element)
+void PluginDocument::setPluginElement(HTMLPlugInElement& element)
{
- m_pluginElement = element;
+ m_pluginElement = &element;
}
void PluginDocument::detachFromPluginElement()
{
// Release the plugin Element so that we don't have a circular reference.
- m_pluginElement = 0;
- frame()->loader().client().redirectDataToPlugin(0);
+ m_pluginElement = nullptr;
}
void PluginDocument::cancelManualPluginLoad()
@@ -181,9 +177,10 @@ void PluginDocument::cancelManualPluginLoad()
if (!shouldLoadPluginManually())
return;
- DocumentLoader* documentLoader = frame()->loader().activeDocumentLoader();
- documentLoader->cancelMainResourceLoad(frame()->loader().cancelledError(documentLoader->request()));
- setShouldLoadPluginManually(false);
+ auto& frameLoader = frame()->loader();
+ auto& documentLoader = *frameLoader.activeDocumentLoader();
+ documentLoader.cancelMainResourceLoad(frameLoader.cancelledError(documentLoader.request()));
+ m_shouldLoadPluginManually = false;
}
}