1/* 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 4 * Copyright (C) 2004, 2006, 2007, 2008, 2009, 2012 Apple Inc. All rights reserved. 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Library General Public 8 * License as published by the Free Software Foundation; either 9 * version 2 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Library General Public License for more details. 15 * 16 * You should have received a copy of the GNU Library General Public License 17 * along with this library; see the file COPYING.LIB. If not, write to 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 * Boston, MA 02110-1301, USA. 20 * 21 */ 22 23#ifndef HTMLPlugInElement_h 24#define HTMLPlugInElement_h 25 26#include "bindings/v8/SharedPersistent.h" 27#include "core/html/HTMLFrameOwnerElement.h" 28 29struct NPObject; 30 31namespace WebCore { 32 33class HTMLImageLoader; 34class RenderEmbeddedObject; 35class RenderWidget; 36class Widget; 37 38enum PreferPlugInsForImagesOption { 39 ShouldPreferPlugInsForImages, 40 ShouldNotPreferPlugInsForImages 41}; 42 43class HTMLPlugInElement : public HTMLFrameOwnerElement { 44public: 45 virtual ~HTMLPlugInElement(); 46 47 void resetInstance(); 48 SharedPersistent<v8::Object>* pluginWrapper(); 49 Widget* pluginWidget() const; 50 NPObject* getNPObject(); 51 bool canProcessDrag() const; 52 const String& url() const { return m_url; } 53 54 // Public for FrameView::addWidgetToUpdate() 55 bool needsWidgetUpdate() const { return m_needsWidgetUpdate; } 56 void setNeedsWidgetUpdate(bool needsWidgetUpdate) { m_needsWidgetUpdate = needsWidgetUpdate; } 57 void updateWidget(); 58 59protected: 60 HTMLPlugInElement(const QualifiedName& tagName, Document&, bool createdByParser, PreferPlugInsForImagesOption); 61 62 // Node functions: 63 virtual void didMoveToNewDocument(Document& oldDocument) OVERRIDE; 64 virtual bool dispatchBeforeLoadEvent(const String& sourceURL) OVERRIDE; 65 66 // Element functions: 67 virtual bool isPresentationAttribute(const QualifiedName&) const OVERRIDE; 68 virtual void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStylePropertySet*) OVERRIDE; 69 70 virtual bool useFallbackContent() const; 71 // Create or update the RenderWidget and return it, triggering layout if 72 // necessary. 73 virtual RenderWidget* renderWidgetForJSBindings() const; 74 75 bool isImageType(); 76 bool shouldPreferPlugInsForImages() const { return m_shouldPreferPlugInsForImages; } 77 RenderEmbeddedObject* renderEmbeddedObject() const; 78 bool allowedToLoadFrameURL(const String& url); 79 bool requestObject(const String& url, const String& mimeType, const Vector<String>& paramNames, const Vector<String>& paramValues); 80 bool shouldUsePlugin(const KURL&, const String& mimeType, bool hasFallback, bool& useFallback); 81 82 String m_serviceType; 83 String m_url; 84 KURL m_loadedUrl; 85 OwnPtr<HTMLImageLoader> m_imageLoader; 86 bool m_isDelayingLoadEvent; 87 88private: 89 // EventTarget functions: 90 virtual void removeAllEventListeners() OVERRIDE FINAL; 91 92 // Node functions: 93 virtual bool canContainRangeEndPoint() const OVERRIDE { return false; } 94 virtual bool willRespondToMouseClickEvents() OVERRIDE; 95 virtual void defaultEventHandler(Event*) OVERRIDE; 96 virtual void attach(const AttachContext& = AttachContext()) OVERRIDE; 97 virtual void detach(const AttachContext& = AttachContext()) OVERRIDE; 98 virtual void finishParsingChildren() OVERRIDE; 99 virtual bool isPluginElement() const OVERRIDE; 100 101 // Element functions: 102 virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE; 103 virtual void willRecalcStyle(StyleRecalcChange) OVERRIDE FINAL; 104 virtual bool supportsFocus() const OVERRIDE { return true; }; 105 virtual bool rendererIsFocusable() const OVERRIDE; 106 virtual bool isKeyboardFocusable() const OVERRIDE; 107 virtual void didAddUserAgentShadowRoot(ShadowRoot&) OVERRIDE; 108 virtual void didAddShadowRoot(ShadowRoot&) OVERRIDE; 109 110 // HTMLElement function: 111 virtual bool hasCustomFocusLogic() const OVERRIDE; 112 113 // Return any existing RenderWidget without triggering relayout, or 0 if it 114 // doesn't yet exist. 115 virtual RenderWidget* existingRenderWidget() const = 0; 116 virtual void updateWidgetInternal() = 0; 117 118 enum DisplayState { 119 Restarting, 120 RestartingWithPendingMouseClick, 121 Playing 122 }; 123 DisplayState displayState() const { return m_displayState; } 124 void setDisplayState(DisplayState state) { m_displayState = state; } 125 const String loadedMimeType() const; 126 bool loadPlugin(const KURL&, const String& mimeType, const Vector<String>& paramNames, const Vector<String>& paramValues, bool useFallback); 127 bool pluginIsLoadable(const KURL&, const String& mimeType); 128 bool wouldLoadAsNetscapePlugin(const String& url, const String& serviceType); 129 130 mutable RefPtr<SharedPersistent<v8::Object> > m_pluginWrapper; 131 NPObject* m_NPObject; 132 bool m_isCapturingMouseEvents; 133 bool m_inBeforeLoadEventHandler; 134 bool m_needsWidgetUpdate; 135 bool m_shouldPreferPlugInsForImages; 136 DisplayState m_displayState; 137}; 138 139DEFINE_NODE_TYPE_CASTS(HTMLPlugInElement, isPluginElement()); 140 141} // namespace WebCore 142 143#endif // HTMLPlugInElement_h 144