[chromium] Add touch-event support for WebPluginContainerImpl
[WebKit-https.git] / Source / WebKit / chromium / src / WebPluginContainerImpl.h
1 /*
2  * Copyright (C) 2009 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #ifndef WebPluginContainerImpl_h
32 #define WebPluginContainerImpl_h
33
34 #include "PluginViewBase.h"
35 #include "WebPluginContainer.h"
36 #include "Widget.h"
37
38 #include <public/WebExternalTextureLayer.h>
39 #include <public/WebIOSurfaceLayer.h>
40 #include <wtf/OwnPtr.h>
41 #include <wtf/PassRefPtr.h>
42 #include <wtf/Vector.h>
43 #include <wtf/text/WTFString.h>
44
45 struct NPObject;
46
47 namespace WebCore {
48 class HTMLPlugInElement;
49 class IntRect;
50 class KeyboardEvent;
51 class LayerChromium;
52 class MouseEvent;
53 class ResourceError;
54 class ResourceResponse;
55 class TouchEvent;
56 class WheelEvent;
57
58 #if ENABLE(GESTURE_EVENTS)
59 class PlatformGestureEvent;
60 #endif
61 }
62
63 namespace WebKit {
64
65 struct WebPrintParams;
66
67 class ScrollbarGroup;
68 class WebPlugin;
69 class WebPluginLoadObserver;
70
71 class WebPluginContainerImpl : public WebCore::PluginViewBase, public WebPluginContainer {
72 public:
73     static PassRefPtr<WebPluginContainerImpl> create(WebCore::HTMLPlugInElement* element, WebPlugin* webPlugin)
74     {
75         return adoptRef(new WebPluginContainerImpl(element, webPlugin));
76     }
77
78     // PluginViewBase methods
79     virtual bool getFormValue(String&);
80
81     // Widget methods
82     virtual void setFrameRect(const WebCore::IntRect&);
83     virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect&);
84     virtual void invalidateRect(const WebCore::IntRect&);
85     virtual void setFocus(bool);
86     virtual void show();
87     virtual void hide();
88     virtual void handleEvent(WebCore::Event*);
89     virtual void frameRectsChanged();
90     virtual void setParentVisible(bool);
91     virtual void setParent(WebCore::ScrollView*);
92     virtual void widgetPositionsUpdated();
93     virtual bool isPluginContainer() const { return true; }
94
95     // WebPluginContainer methods
96     virtual WebElement element();
97     virtual void invalidate();
98     virtual void invalidateRect(const WebRect&);
99     virtual void scrollRect(int dx, int dy, const WebRect&);
100     virtual void reportGeometry();
101     virtual void setBackingTextureId(unsigned);
102     virtual void setBackingIOSurfaceId(int width,
103                                        int height,
104                                        uint32_t ioSurfaceId);
105     virtual void commitBackingTexture();
106     virtual void clearScriptObjects();
107     virtual NPObject* scriptableObjectForElement();
108     virtual WebString executeScriptURL(const WebURL&, bool popupsAllowed);
109     virtual void loadFrameRequest(const WebURLRequest&, const WebString& target, bool notifyNeeded, void* notifyData);
110     virtual void zoomLevelChanged(double zoomLevel);    
111     virtual void setOpaque(bool);
112     virtual bool isRectTopmost(const WebRect&);
113
114     // This cannot be null.
115     WebPlugin* plugin() { return m_webPlugin; }
116     void setPlugin(WebPlugin*);
117
118     // Printing interface. The plugin can support custom printing
119     // (which means it controls the layout, number of pages etc).
120     // Whether the plugin supports its own paginated print. The other print
121     // interface methods are called only if this method returns true.
122     bool supportsPaginatedPrint() const;
123     // If the plugin content should not be scaled to the printable area of
124     // the page, then this method should return true.
125     bool isPrintScalingDisabled() const;
126     // Sets up printing at the specified WebPrintParams. Returns the number of pages to be printed at these settings.
127     int printBegin(const WebPrintParams&) const;
128     // Prints the page specified by pageNumber (0-based index) into the supplied canvas.
129     bool printPage(int pageNumber, WebCore::GraphicsContext* gc);
130     // Ends the print operation.
131     void printEnd();
132
133     // Copy the selected text.
134     void copy();
135
136     // Resource load events for the plugin's source data:
137     void didReceiveResponse(const WebCore::ResourceResponse&);
138     void didReceiveData(const char *data, int dataLength);
139     void didFinishLoading();
140     void didFailLoading(const WebCore::ResourceError&);
141
142     NPObject* scriptableObject();
143
144     void willDestroyPluginLoadObserver(WebPluginLoadObserver*);
145
146 #if USE(ACCELERATED_COMPOSITING)
147     virtual WebCore::LayerChromium* platformLayer() const;
148 #endif
149
150     ScrollbarGroup* scrollbarGroup();
151
152     void willStartLiveResize();
153     void willEndLiveResize();
154
155     bool paintCustomOverhangArea(WebCore::GraphicsContext*, const WebCore::IntRect&, const WebCore::IntRect&, const WebCore::IntRect&);
156
157 private:
158     WebPluginContainerImpl(WebCore::HTMLPlugInElement* element, WebPlugin* webPlugin);
159     ~WebPluginContainerImpl();
160
161     void handleMouseEvent(WebCore::MouseEvent*);
162     void handleWheelEvent(WebCore::WheelEvent*);
163     void handleKeyboardEvent(WebCore::KeyboardEvent*);
164     void handleTouchEvent(WebCore::TouchEvent*);
165
166     void calculateGeometry(const WebCore::IntRect& frameRect,
167                            WebCore::IntRect& windowRect,
168                            WebCore::IntRect& clipRect,
169                            Vector<WebCore::IntRect>& cutOutRects);
170     WebCore::IntRect windowClipRect() const;
171     void windowCutOutRects(const WebCore::IntRect& frameRect,
172                            Vector<WebCore::IntRect>& cutOutRects);
173
174     WebCore::HTMLPlugInElement* m_element;
175     WebPlugin* m_webPlugin;
176     Vector<WebPluginLoadObserver*> m_pluginLoadObservers;
177
178 #if USE(ACCELERATED_COMPOSITING)
179     // A composited plugin will either have no composited layer, a texture layer, or an IOSurface layer.
180     // It will never have both a texture and IOSurface output.
181     unsigned m_textureId;
182     WebExternalTextureLayer m_textureLayer;
183
184     unsigned m_ioSurfaceId;
185     WebIOSurfaceLayer m_ioSurfaceLayer;
186 #endif
187
188     // The associated scrollbar group object, created lazily. Used for Pepper
189     // scrollbars.
190     OwnPtr<ScrollbarGroup> m_scrollbarGroup;
191 };
192
193 } // namespace WebKit
194
195 #endif