1 /*
2  * Copyright (C) 2008, 2009, 2011 Apple Inc. All rights reserved.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  *
19  */
20 
21 #ifndef HTMLPlugInImageElement_h
22 #define HTMLPlugInImageElement_h
23 
24 #include "HTMLPlugInElement.h"
25 #include <wtf/OwnPtr.h>
26 
27 namespace WebCore {
28 
29 class HTMLImageLoader;
30 class FrameLoader;
31 
32 enum PluginCreationOption {
33     CreateAnyWidgetType,
34     CreateOnlyNonNetscapePlugins,
35 };
36 
37 enum PreferPlugInsForImagesOption {
38     ShouldPreferPlugInsForImages,
39     ShouldNotPreferPlugInsForImages
40 };
41 
42 // Base class for HTMLObjectElement and HTMLEmbedElement
43 class HTMLPlugInImageElement : public HTMLPlugInElement {
44 public:
45     RenderEmbeddedObject* renderEmbeddedObject() const;
46 
47     virtual void updateWidget(PluginCreationOption) = 0;
48 
serviceType()49     const String& serviceType() const { return m_serviceType; }
url()50     const String& url() const { return m_url; }
shouldPreferPlugInsForImages()51     bool shouldPreferPlugInsForImages() const { return m_shouldPreferPlugInsForImages; }
52 
53 protected:
54     HTMLPlugInImageElement(const QualifiedName& tagName, Document*, bool createdByParser, PreferPlugInsForImagesOption);
55 
56     bool isImageType();
57 
58     OwnPtr<HTMLImageLoader> m_imageLoader;
59     String m_serviceType;
60     String m_url;
61 
62     static void updateWidgetCallback(Node*);
63     virtual void attach();
64     virtual void detach();
65 
needsWidgetUpdate()66     bool needsWidgetUpdate() const { return m_needsWidgetUpdate; }
setNeedsWidgetUpdate(bool needsWidgetUpdate)67     void setNeedsWidgetUpdate(bool needsWidgetUpdate) { m_needsWidgetUpdate = needsWidgetUpdate; }
68 
69     bool allowedToLoadFrameURL(const String& url);
70     bool wouldLoadAsNetscapePlugin(const String& url, const String& serviceType);
71 
72     virtual void willMoveToNewOwnerDocument();
73 
74 private:
75     virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
76     virtual void recalcStyle(StyleChange);
77 
78     virtual void finishParsingChildren();
79 
80     void updateWidgetIfNecessary();
useFallbackContent()81     virtual bool useFallbackContent() const { return false; }
82 
83     bool m_needsWidgetUpdate;
84     bool m_shouldPreferPlugInsForImages;
85 };
86 
87 } // namespace WebCore
88 
89 #endif // HTMLPlugInImageElement_h
90