Fix for https://bugs.webkit.org/show_bug.cgi?id=38471
[WebKit-https.git] / WebKit2 / UIProcess / WebPageProxy.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 WebPageProxy_h
27 #define WebPageProxy_h
28
29 #include "DrawingAreaProxy.h"
30 #include "GenericCallback.h"
31 #include "WKBase.h"
32 #include "WebEvent.h"
33 #include "WebFrameProxy.h"
34 #include "WebHistoryClient.h"
35 #include "WebLoaderClient.h"
36 #include "WebPolicyClient.h"
37 #include "WebUIClient.h"
38 #include <WebCore/FrameLoaderTypes.h>
39 #include <WebCore/PlatformString.h>
40 #include <wtf/HashMap.h>
41 #include <wtf/OwnPtr.h>
42 #include <wtf/PassOwnPtr.h>
43 #include <wtf/PassRefPtr.h>
44 #include <wtf/RefCounted.h>
45 #include <wtf/RefPtr.h>
46
47 namespace CoreIPC {
48     class ArgumentDecoder;
49     class Connection;
50     class MessageID;
51 }
52
53 namespace WebCore {
54     class IntSize;
55 }
56
57 struct WKContextStatistics;
58
59 namespace WebKit {
60
61 class DrawingAreaProxy;
62 class PageClient;
63 class WebKeyboardEvent;
64 class WebMouseEvent;
65 class WebPageNamespace;
66 class WebProcessProxy;
67 class WebWheelEvent;
68 class WebNavigationDataStore;
69
70 typedef GenericCallback<WKStringRef> RenderTreeExternalRepresentationCallback;
71 typedef GenericCallback<WKStringRef> ScriptReturnValueCallback;
72
73 class WebPageProxy : public RefCounted<WebPageProxy> {
74 public:
75     static PassRefPtr<WebPageProxy> create(WebPageNamespace*, uint64_t pageID);
76     ~WebPageProxy();
77
78     uint64_t pageID() const { return m_pageID; }
79
80     WebFrameProxy* webFrame(uint64_t) const;
81     WebFrameProxy* mainFrame() const { return m_mainFrame.get(); }
82
83     DrawingAreaProxy* drawingArea() { return m_drawingArea.get(); }
84
85     void setPageClient(PageClient*);
86     void initializeLoaderClient(WKPageLoaderClient*);
87     void initializePolicyClient(WKPagePolicyClient*);
88     void initializeUIClient(WKPageUIClient*);
89     void initializeHistoryClient(WKPageHistoryClient*);
90
91     void revive();
92
93     void initializeWebPage(const WebCore::IntSize&, PassOwnPtr<DrawingAreaProxy>);
94     void reinitializeWebPage(const WebCore::IntSize&);
95
96     void close();
97     bool tryClose();
98     bool isClosed() const { return m_closed; }
99
100     void loadURL(const WebCore::String&);
101     void stopLoading();
102     void reload();
103
104     void goForward();
105     bool canGoForward() const { return m_canGoForward; }
106     void goBack();
107     bool canGoBack() const { return m_canGoBack; }
108
109     void setFocused(bool isFocused);
110     void setActive(bool active);
111
112     void mouseEvent(const WebMouseEvent&);
113     void wheelEvent(const WebWheelEvent&);
114     void keyEvent(const WebKeyboardEvent&);
115
116     const WebCore::String& pageTitle() const { return m_pageTitle; }
117     const WebCore::String& toolTip() const { return m_toolTip; }
118
119     void terminateProcess();
120
121     void runJavaScriptInMainFrame(const WebCore::String&, PassRefPtr<ScriptReturnValueCallback>);
122     void getRenderTreeExternalRepresentation(PassRefPtr<RenderTreeExternalRepresentationCallback>);
123
124     void receivedPolicyDecision(WebCore::PolicyAction, WebFrameProxy*, uint64_t listenerID);
125
126     void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder&);
127     void didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder&, CoreIPC::ArgumentEncoder&);
128
129     void processDidBecomeUnresponsive();
130     void processDidBecomeResponsive();
131     void processDidExit();
132     void processDidRevive();
133
134     WebProcessProxy* process() const;
135     WebPageNamespace* pageNamespace() const { return m_pageNamespace.get(); }
136
137     bool isValid();
138
139     // REMOVE: For demo purposes only.
140     const WebCore::String& urlAtProcessExit() const { return m_urlAtProcessExit; }
141
142     void preferencesDidChange();
143
144     void getStatistics(WKContextStatistics*);
145
146 private:
147     WebPageProxy(WebPageNamespace*, uint64_t pageID);
148
149     void didCreateMainFrame(uint64_t frameID);
150     void didCreateSubFrame(uint64_t frameID);
151
152     void didStartProvisionalLoadForFrame(WebFrameProxy*, const WebCore::String&);
153     void didReceiveServerRedirectForProvisionalLoadForFrame(WebFrameProxy*);
154     void didFailProvisionalLoadForFrame(WebFrameProxy*);
155     void didCommitLoadForFrame(WebFrameProxy*);
156     void didFinishLoadForFrame(WebFrameProxy*);
157     void didFailLoadForFrame(WebFrameProxy*);
158     void didReceiveTitleForFrame(WebFrameProxy*, const WebCore::String&);
159     void didFirstLayoutForFrame(WebFrameProxy*);
160     void didFirstVisuallyNonEmptyLayoutForFrame(WebFrameProxy*);
161     void didStartProgress();
162     void didChangeProgress(double);
163     void didFinishProgress();
164     
165     void decidePolicyForNavigationAction(WebFrameProxy*, uint32_t navigationType, const WebCore::String& url, uint64_t listenerID);
166     void decidePolicyForNewWindowAction(WebFrameProxy*, uint32_t navigationType, const WebCore::String& url, uint64_t listenerID);
167     void decidePolicyForMIMEType(WebFrameProxy*, const WebCore::String& MIMEType, const WebCore::String& url, uint64_t listenerID);
168
169     WebPageProxy* createNewPage();
170     void showPage();
171     void closePage();
172     void runJavaScriptAlert(WebFrameProxy*, const WebCore::String&);
173
174     void didNavigateWithNavigationData(WebFrameProxy*, const WebNavigationDataStore&); 
175     void didPerformClientRedirect(WebFrameProxy*, const WebCore::String& sourceURLString, const WebCore::String& destinationURLString);
176     void didPerformServerRedirect(WebFrameProxy*, const WebCore::String& sourceURLString, const WebCore::String& destinationURLString);
177     void didUpdateHistoryTitle(WebFrameProxy*, const WebCore::String& title, const WebCore::String& url);
178
179     void takeFocus(bool direction);
180     void setToolTip(const WebCore::String&);
181
182     void didReceiveEvent(WebEvent::Type);
183     void didRunJavaScriptInMainFrame(const WebCore::String&, uint64_t);
184     void didGetRenderTreeExternalRepresentation(const WebCore::String&, uint64_t);
185
186     OwnPtr<PageClient> m_pageClient;
187     WebLoaderClient m_loaderClient;
188     WebPolicyClient m_policyClient;
189     WebUIClient m_uiClient;
190     WebHistoryClient m_historyClient;
191
192     OwnPtr<DrawingAreaProxy> m_drawingArea;
193
194     RefPtr<WebPageNamespace> m_pageNamespace;
195     RefPtr<WebFrameProxy> m_mainFrame;
196     HashMap<uint64_t, RefPtr<WebFrameProxy> > m_frameMap;
197     WebCore::String m_pageTitle;
198
199     HashMap<uint64_t, RefPtr<ScriptReturnValueCallback> > m_scriptReturnValueCallbacks;
200     HashMap<uint64_t, RefPtr<RenderTreeExternalRepresentationCallback> > m_renderTreeExternalRepresentationCallbacks;
201
202     bool m_canGoBack;
203     bool m_canGoForward;
204
205     WebCore::String m_toolTip;
206
207     // REMOVE: For demo purposes only.
208     WebCore::String m_urlAtProcessExit;
209     
210     bool m_valid;
211     bool m_closed;
212
213     uint64_t m_pageID;
214 };
215
216 } // namespace WebKit
217
218 #endif // WebPageProxy_h