a4af54356a259e8c6d4960af2f169196ac5f85d5
[WebKit-https.git] / Source / WebKit2 / PluginProcess / PluginControllerProxy.h
1 /*
2  * Copyright (C) 2010 Apple 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
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef PluginControllerProxy_h
27 #define PluginControllerProxy_h
28
29 #if ENABLE(PLUGIN_PROCESS)
30
31 #include "Connection.h"
32 #include "Plugin.h"
33 #include "PluginController.h"
34 #include "PluginControllerProxyMessages.h"
35 #include "ShareableBitmap.h"
36 #include <WebCore/RunLoop.h>
37 #include <wtf/Noncopyable.h>
38
39 namespace CoreIPC {
40     class DataReference;
41 }
42
43 namespace WebKit {
44
45 class LayerHostingContext;
46 class ShareableBitmap;
47 class WebProcessConnection;
48 struct PluginCreationParameters;
49
50 class PluginControllerProxy : PluginController {
51     WTF_MAKE_NONCOPYABLE(PluginControllerProxy);
52
53 public:
54     static PassOwnPtr<PluginControllerProxy> create(WebProcessConnection*, const PluginCreationParameters&);
55     ~PluginControllerProxy();
56
57     uint64_t pluginInstanceID() const { return m_pluginInstanceID; }
58
59     bool initialize(const PluginCreationParameters&);
60     void destroy();
61
62     void didReceivePluginControllerProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
63     void didReceiveSyncPluginControllerProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, OwnPtr<CoreIPC::ArgumentEncoder>&);
64
65     bool wantsWheelEvents() const;
66
67 #if PLATFORM(MAC)
68     uint32_t remoteLayerClientID() const;
69 #endif
70
71     PluginController* asPluginController() { return this; }
72
73 private:
74     PluginControllerProxy(WebProcessConnection*, const PluginCreationParameters&);
75
76     void startPaintTimer();
77     void paint();
78
79     // PluginController
80     virtual bool isPluginVisible();
81     virtual void invalidate(const WebCore::IntRect&);
82     virtual String userAgent();
83     virtual void loadURL(uint64_t requestID, const String& method, const String& urlString, const String& target, const WebCore::HTTPHeaderMap& headerFields, const Vector<uint8_t>& httpBody, bool allowPopups);
84     virtual void cancelStreamLoad(uint64_t streamID);
85     virtual void cancelManualStreamLoad();
86     virtual NPObject* windowScriptNPObject();
87     virtual NPObject* pluginElementNPObject();
88     virtual bool evaluate(NPObject*, const String& scriptString, NPVariant* result, bool allowPopups);
89     virtual void setStatusbarText(const String&);
90     virtual bool isAcceleratedCompositingEnabled();
91     virtual void pluginProcessCrashed();
92     virtual void willSendEventToPlugin();
93
94 #if PLATFORM(MAC)
95     virtual void pluginFocusOrWindowFocusChanged(bool);
96     virtual void setComplexTextInputState(PluginComplexTextInputState);
97     virtual mach_port_t compositingRenderServerPort();
98 #endif
99
100     virtual float contentsScaleFactor();
101     virtual String proxiesForURL(const String&);
102     virtual String cookiesForURL(const String&);
103     virtual void setCookiesForURL(const String& urlString, const String& cookieString);
104     virtual bool isPrivateBrowsingEnabled();
105     virtual bool getAuthenticationInfo(const WebCore::ProtectionSpace&, String& username, String& password);
106     virtual void protectPluginFromDestruction();
107     virtual void unprotectPluginFromDestruction();
108 #if PLUGIN_ARCHITECTURE(X11)
109     virtual uint64_t createPluginContainer();
110     virtual void windowedPluginGeometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect, uint64_t windowID);
111 #endif
112     
113     // Message handlers.
114     void frameDidFinishLoading(uint64_t requestID);
115     void frameDidFail(uint64_t requestID, bool wasCancelled);
116     void geometryDidChange(const WebCore::IntSize& pluginSize, const WebCore::IntRect& clipRect, const WebCore::AffineTransform& pluginToRootViewTransform, float contentsScaleFactor, const ShareableBitmap::Handle& backingStoreHandle);
117     void didEvaluateJavaScript(uint64_t requestID, const String& result);
118     void streamDidReceiveResponse(uint64_t streamID, const String& responseURLString, uint32_t streamLength, uint32_t lastModifiedTime, const String& mimeType, const String& headers);
119     void streamDidReceiveData(uint64_t streamID, const CoreIPC::DataReference& data);
120     void streamDidFinishLoading(uint64_t streamID);
121     void streamDidFail(uint64_t streamID, bool wasCancelled);
122     void manualStreamDidReceiveResponse(const String& responseURLString, uint32_t streamLength, uint32_t lastModifiedTime, const String& mimeType, const String& headers);
123     void manualStreamDidReceiveData(const CoreIPC::DataReference& data);
124     void manualStreamDidFinishLoading();
125     void manualStreamDidFail(bool wasCancelled);
126     void handleMouseEvent(const WebMouseEvent&, PassRefPtr<Messages::PluginControllerProxy::HandleMouseEvent::DelayedReply>);
127     void handleWheelEvent(const WebWheelEvent&, bool& handled);
128     void handleMouseEnterEvent(const WebMouseEvent&, bool& handled);
129     void handleMouseLeaveEvent(const WebMouseEvent&, bool& handled);
130     void handleKeyboardEvent(const WebKeyboardEvent&, bool& handled);
131     void paintEntirePlugin();
132     void snapshot(ShareableBitmap::Handle& backingStoreHandle);
133     void setFocus(bool);
134     void didUpdate();
135     void getPluginScriptableNPObject(uint64_t& pluginScriptableNPObjectID);
136
137 #if PLATFORM(MAC)
138     void windowFocusChanged(bool);
139     void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates);
140     void windowVisibilityChanged(bool);
141     void sendComplexTextInput(const String& textInput);
142     void setLayerHostingMode(uint32_t);
143
144     void updateLayerHostingContext(LayerHostingMode);
145 #endif
146
147     void privateBrowsingStateChanged(bool);
148     void getFormValue(bool& returnValue, String& formValue);
149
150     void platformInitialize(const PluginCreationParameters&);
151     void platformDestroy();
152     void platformGeometryDidChange();
153
154     WebProcessConnection* m_connection;
155     uint64_t m_pluginInstanceID;
156
157     String m_userAgent;
158     bool m_isPrivateBrowsingEnabled;
159     bool m_isAcceleratedCompositingEnabled;
160
161     RefPtr<Plugin> m_plugin;
162
163     WebCore::IntSize m_pluginSize;
164
165     // The dirty rect in plug-in coordinates.
166     WebCore::IntRect m_dirtyRect;
167
168     // The paint timer, used for coalescing painting.
169     WebCore::RunLoop::Timer<PluginControllerProxy> m_paintTimer;
170     
171     // A counter used to prevent the plug-in from being destroyed.
172     unsigned m_pluginDestructionProtectCount;
173
174     // A timer that we use to prevent destruction of the plug-in while plug-in
175     // code is on the stack.
176     WebCore::RunLoop::Timer<PluginControllerProxy> m_pluginDestroyTimer;
177
178     // Whether we're waiting for the plug-in proxy in the web process to draw the contents of its
179     // backing store into the web process backing store.
180     bool m_waitingForDidUpdate;
181
182     // Whether the plug-in has canceled the manual stream load.
183     bool m_pluginCanceledManualStreamLoad;
184
185 #if PLATFORM(MAC)
186     // Whether complex text input is enabled for this plug-in.
187     bool m_isComplexTextInputEnabled;
188
189     // For CA plug-ins, this holds the information needed to export the layer hierarchy to the UI process.
190     OwnPtr<LayerHostingContext> m_layerHostingContext;
191 #endif
192
193     // The contents scale factor of this plug-in.
194     float m_contentsScaleFactor;
195     
196     // The backing store that this plug-in draws into.
197     RefPtr<ShareableBitmap> m_backingStore;
198
199     // The window NPObject.
200     NPObject* m_windowNPObject;
201
202     // The plug-in element NPObject.
203     NPObject* m_pluginElementNPObject;
204 };
205
206 } // namespace WebKit
207
208 #endif // ENABLE(PLUGIN_PROCESS)
209
210 #endif // PluginControllerProxy_h