diff options
Diffstat (limited to 'Source/WebCore/html/PluginDocument.cpp')
-rw-r--r-- | Source/WebCore/html/PluginDocument.cpp | 99 |
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; } } |