Reduce PassRefPtr in WebKit2 - 3
[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(NETSCAPE_PLUGIN_API)
30
31 #include "Connection.h"
32 #include "Plugin.h"
33 #include "PluginController.h"
34 #include "PluginControllerProxyMessages.h"
35 #include "ShareableBitmap.h"
36 #include "WebProcessConnectionMessages.h"
37 #include <WebCore/SecurityOrigin.h>
38 #include <WebCore/UserActivity.h>
39 #include <wtf/Noncopyable.h>
40 #include <wtf/RunLoop.h>
41
42 namespace IPC {
43     class DataReference;
44 }
45
46 namespace WebKit {
47
48 class LayerHostingContext;
49 class ShareableBitmap;
50 class WebProcessConnection;
51 struct PluginCreationParameters;
52
53 class PluginControllerProxy : PluginController {
54     WTF_MAKE_NONCOPYABLE(PluginControllerProxy);
55
56 public:
57     PluginControllerProxy(WebProcessConnection*, const PluginCreationParameters&);
58     ~PluginControllerProxy();
59
60     uint64_t pluginInstanceID() const { return m_pluginInstanceID; }
61
62     bool initialize(const PluginCreationParameters&);
63     void destroy();
64
65     void didReceivePluginControllerProxyMessage(IPC::Connection&, IPC::MessageDecoder&);
66     void didReceiveSyncPluginControllerProxyMessage(IPC::Connection&, IPC::MessageDecoder&, std::unique_ptr<IPC::MessageEncoder>&);
67
68     bool wantsWheelEvents() const;
69
70 #if PLATFORM(COCOA)
71     uint32_t remoteLayerClientID() const;
72 #endif
73
74     PluginController* asPluginController() { return this; }
75
76     bool isInitializing() const { return m_isInitializing; }
77     
78     void setInitializationReply(PassRefPtr<Messages::WebProcessConnection::CreatePlugin::DelayedReply>);
79     RefPtr<Messages::WebProcessConnection::CreatePlugin::DelayedReply> takeInitializationReply();
80
81 private:
82     void startPaintTimer();
83     void paint();
84
85     // PluginController
86     virtual void invalidate(const WebCore::IntRect&) override;
87     virtual String userAgent() override;
88     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) override;
89     virtual void cancelStreamLoad(uint64_t streamID) override;
90     virtual void cancelManualStreamLoad() override;
91     virtual NPObject* windowScriptNPObject() override;
92     virtual NPObject* pluginElementNPObject() override;
93     virtual bool evaluate(NPObject*, const String& scriptString, NPVariant* result, bool allowPopups) override;
94     virtual void setPluginIsPlayingAudio(bool) override;
95     virtual void setStatusbarText(const String&) override;
96     virtual bool isAcceleratedCompositingEnabled() override;
97     virtual void pluginProcessCrashed() override;
98     virtual void didInitializePlugin() override;
99     virtual void didFailToInitializePlugin() override;
100
101 #if PLATFORM(COCOA)
102     virtual void pluginFocusOrWindowFocusChanged(bool) override;
103     virtual void setComplexTextInputState(PluginComplexTextInputState) override;
104     virtual const WebCore::MachSendRight& compositingRenderServerPort() override;
105     virtual void openPluginPreferencePane() override;
106 #endif
107
108     virtual float contentsScaleFactor() override;
109     virtual String proxiesForURL(const String&) override;
110     virtual String cookiesForURL(const String&) override;
111     virtual void setCookiesForURL(const String& urlString, const String& cookieString) override;
112     virtual bool isPrivateBrowsingEnabled() override;
113     virtual bool isMuted() const override { return m_isMuted; }
114     virtual bool getAuthenticationInfo(const WebCore::ProtectionSpace&, String& username, String& password) override;
115     virtual void protectPluginFromDestruction() override;
116     virtual void unprotectPluginFromDestruction() override;
117 #if PLUGIN_ARCHITECTURE(X11)
118     virtual uint64_t createPluginContainer() override;
119     virtual void windowedPluginGeometryDidChange(const WebCore::IntRect& frameRect, const WebCore::IntRect& clipRect, uint64_t windowID) override;
120     virtual void windowedPluginVisibilityDidChange(bool isVisible, uint64_t windowID) override;
121 #endif
122     
123     // Message handlers.
124     void frameDidFinishLoading(uint64_t requestID);
125     void frameDidFail(uint64_t requestID, bool wasCancelled);
126     void geometryDidChange(const WebCore::IntSize& pluginSize, const WebCore::IntRect& clipRect, const WebCore::AffineTransform& pluginToRootViewTransform, float contentsScaleFactor, const ShareableBitmap::Handle& backingStoreHandle);
127     void visibilityDidChange(bool isVisible);
128     void didEvaluateJavaScript(uint64_t requestID, const String& result);
129     void streamDidReceiveResponse(uint64_t streamID, const String& responseURLString, uint32_t streamLength, uint32_t lastModifiedTime, const String& mimeType, const String& headers);
130     void streamDidReceiveData(uint64_t streamID, const IPC::DataReference& data);
131     void streamDidFinishLoading(uint64_t streamID);
132     void streamDidFail(uint64_t streamID, bool wasCancelled);
133     void manualStreamDidReceiveResponse(const String& responseURLString, uint32_t streamLength, uint32_t lastModifiedTime, const String& mimeType, const String& headers);
134     void manualStreamDidReceiveData(const IPC::DataReference& data);
135     void manualStreamDidFinishLoading();
136     void manualStreamDidFail(bool wasCancelled);
137     void handleMouseEvent(const WebMouseEvent&, PassRefPtr<Messages::PluginControllerProxy::HandleMouseEvent::DelayedReply>);
138     void handleWheelEvent(const WebWheelEvent&, bool& handled);
139     void handleMouseEnterEvent(const WebMouseEvent&, bool& handled);
140     void handleMouseLeaveEvent(const WebMouseEvent&, bool& handled);
141     void handleKeyboardEvent(const WebKeyboardEvent&, bool& handled);
142     void handleEditingCommand(const String&, const String&, bool&);
143     void isEditingCommandEnabled(const String&, bool&);
144     void handlesPageScaleFactor(bool&);
145     void paintEntirePlugin();
146     void supportsSnapshotting(bool&);
147     void snapshot(ShareableBitmap::Handle& backingStoreHandle);
148     void setFocus(bool);
149     void didUpdate();
150     void getPluginScriptableNPObject(uint64_t& pluginScriptableNPObjectID);
151
152     void windowFocusChanged(bool);
153     void windowVisibilityChanged(bool);
154     void updateVisibilityActivity();
155
156 #if PLATFORM(COCOA)
157     void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates);
158     void sendComplexTextInput(const String& textInput);
159     void setLayerHostingMode(uint32_t);
160
161     void updateLayerHostingContext(LayerHostingMode);
162 #endif
163
164     void storageBlockingStateChanged(bool);
165     void privateBrowsingStateChanged(bool);
166     void mutedStateChanged(bool);
167     void getFormValue(bool& returnValue, String& formValue);
168
169     void platformInitialize(const PluginCreationParameters&);
170     void platformDestroy();
171     void platformGeometryDidChange();
172
173     WebProcessConnection* m_connection;
174     uint64_t m_pluginInstanceID;
175
176     String m_userAgent;
177     bool m_storageBlockingEnabled;
178     bool m_isPrivateBrowsingEnabled;
179     bool m_isMuted;
180     bool m_isAcceleratedCompositingEnabled;
181     bool m_isInitializing;
182     bool m_isVisible;
183     bool m_isWindowVisible;
184
185     RefPtr<Messages::WebProcessConnection::CreatePlugin::DelayedReply> m_initializationReply;
186
187     RefPtr<Plugin> m_plugin;
188
189     WebCore::IntSize m_pluginSize;
190
191     // The dirty rect in plug-in coordinates.
192     WebCore::IntRect m_dirtyRect;
193
194     // The paint timer, used for coalescing painting.
195     RunLoop::Timer<PluginControllerProxy> m_paintTimer;
196     
197     // A counter used to prevent the plug-in from being destroyed.
198     unsigned m_pluginDestructionProtectCount;
199
200     // A timer that we use to prevent destruction of the plug-in while plug-in
201     // code is on the stack.
202     RunLoop::Timer<PluginControllerProxy> m_pluginDestroyTimer;
203
204     // Whether we're waiting for the plug-in proxy in the web process to draw the contents of its
205     // backing store into the web process backing store.
206     bool m_waitingForDidUpdate;
207
208     // Whether the plug-in has canceled the manual stream load.
209     bool m_pluginCanceledManualStreamLoad;
210
211 #if PLATFORM(COCOA)
212     // Whether complex text input is enabled for this plug-in.
213     bool m_isComplexTextInputEnabled;
214
215     // For CA plug-ins, this holds the information needed to export the layer hierarchy to the UI process.
216     std::unique_ptr<LayerHostingContext> m_layerHostingContext;
217 #endif
218
219     // The contents scale factor of this plug-in.
220     float m_contentsScaleFactor;
221     
222     // The backing store that this plug-in draws into.
223     RefPtr<ShareableBitmap> m_backingStore;
224
225     // The window NPObject.
226     NPObject* m_windowNPObject;
227
228     // The plug-in element NPObject.
229     NPObject* m_pluginElementNPObject;
230
231     // Hold an activity when the plugin is visible to prevent throttling.
232     UserActivity m_visiblityActivity;
233 };
234
235 } // namespace WebKit
236
237 #endif // ENABLE(NETSCAPE_PLUGIN_API)
238
239 #endif // PluginControllerProxy_h