3e52db5c1aaaac500009ecb6a602277a753d66b4
[WebKit.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 "APIObject.h"
30 #include "DrawingAreaProxy.h"
31 #include "GenericCallback.h"
32 #include "WKBase.h"
33 #include "WebEvent.h"
34 #include "WebFormClient.h"
35 #include "WebFrameProxy.h"
36 #include "WebHistoryClient.h"
37 #include "WebLoaderClient.h"
38 #include "WebPolicyClient.h"
39 #include "WebUIClient.h"
40 #include <WebCore/EditAction.h>
41 #include <WebCore/FrameLoaderTypes.h>
42 #include <wtf/HashMap.h>
43 #include <wtf/HashSet.h>
44 #include <wtf/OwnPtr.h>
45 #include <wtf/PassOwnPtr.h>
46 #include <wtf/PassRefPtr.h>
47 #include <wtf/RefPtr.h>
48 #include <wtf/text/WTFString.h>
49
50 namespace CoreIPC {
51     class ArgumentDecoder;
52     class Connection;
53     class MessageID;
54 }
55
56 namespace WebCore {
57     class IntSize;
58     class Cursor;
59 }
60
61 struct WKContextStatistics;
62
63 namespace WebKit {
64
65 class DrawingAreaProxy;
66 class PageClient;
67 class WebBackForwardList;
68 class WebBackForwardListItem;
69 class WebData;
70 class WebEditCommandProxy;
71 class WebKeyboardEvent;
72 class WebMouseEvent;
73 class WebPageNamespace;
74 class WebProcessProxy;
75 class WebURLRequest;
76 class WebWheelEvent;
77 struct WebNavigationDataStore;
78
79 typedef GenericCallback<WKStringRef, WTF::StringImpl*> FrameSourceCallback;
80 typedef GenericCallback<WKStringRef, WTF::StringImpl*> RenderTreeExternalRepresentationCallback;
81 typedef GenericCallback<WKStringRef, WTF::StringImpl*> ScriptReturnValueCallback;
82
83 class WebPageProxy : public APIObject {
84 public:
85     static const Type APIType = TypePage;
86
87     static PassRefPtr<WebPageProxy> create(WebPageNamespace*, uint64_t pageID);
88     ~WebPageProxy();
89
90     uint64_t pageID() const { return m_pageID; }
91
92     WebFrameProxy* mainFrame() const { return m_mainFrame.get(); }
93
94     DrawingAreaProxy* drawingArea() { return m_drawingArea.get(); }
95     void setDrawingArea(PassOwnPtr<DrawingAreaProxy>);
96
97     WebBackForwardList* backForwardList() { return m_backForwardList.get(); }
98
99     void setPageClient(PageClient*);
100     void initializeLoaderClient(const WKPageLoaderClient*);
101     void initializePolicyClient(const WKPagePolicyClient*);
102     void initializeFormClient(const WKPageFormClient*);
103     void initializeUIClient(const WKPageUIClient*);
104
105     void revive();
106
107     void initializeWebPage(const WebCore::IntSize&, PassOwnPtr<DrawingAreaProxy>);
108     void reinitializeWebPage(const WebCore::IntSize&);
109
110     void close();
111     bool tryClose();
112     bool isClosed() const { return m_closed; }
113
114     void loadURL(const WTF::String&);
115     void loadURLRequest(WebURLRequest*);
116
117     void stopLoading();
118     void reload(bool reloadFromOrigin);
119
120     void goForward();
121     bool canGoForward() const;
122     void goBack();
123     bool canGoBack() const;
124
125     void goToBackForwardItem(WebBackForwardListItem*);
126     void didChangeBackForwardList();
127
128     void setFocused(bool isFocused);
129     void setActive(bool active);
130     void setIsInWindow(bool isInWindow);
131
132     void mouseEvent(const WebMouseEvent&);
133     void wheelEvent(const WebWheelEvent&);
134     void keyEvent(const WebKeyboardEvent&);
135 #if ENABLE(TOUCH_EVENTS)
136     void touchEvent(const WebTouchEvent&);
137 #endif
138
139     const WTF::String& pageTitle() const { return m_pageTitle; }
140     const WTF::String& toolTip() const { return m_toolTip; }
141
142     double estimatedProgress() const { return m_estimatedProgress; }
143
144     void setCustomUserAgent(const String&);
145
146     void terminateProcess();
147     
148     PassRefPtr<WebData> sessionState() const;
149     void restoreFromSessionState(WebData*);
150
151     double textZoomFactor() const { return m_textZoomFactor; }
152     void setTextZoomFactor(double);
153     double pageZoomFactor() const { return m_pageZoomFactor; }
154     void setPageZoomFactor(double);
155     void setPageAndTextZoomFactors(double pageZoomFactor, double textZoomFactor);
156
157     void runJavaScriptInMainFrame(const WTF::String&, PassRefPtr<ScriptReturnValueCallback>);
158     void getRenderTreeExternalRepresentation(PassRefPtr<RenderTreeExternalRepresentationCallback>);
159     void getSourceForFrame(WebFrameProxy*, PassRefPtr<FrameSourceCallback>);
160
161     void receivedPolicyDecision(WebCore::PolicyAction, WebFrameProxy*, uint64_t listenerID);
162
163     void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
164     void didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
165
166     void processDidBecomeUnresponsive();
167     void processDidBecomeResponsive();
168     void processDidExit();
169     void processDidRevive();
170
171 #if USE(ACCELERATED_COMPOSITING)
172     void didEnterAcceleratedCompositing();
173     void didLeaveAcceleratedCompositing();
174 #endif
175
176     void addEditCommand(WebEditCommandProxy*);
177     void removeEditCommand(WebEditCommandProxy*);
178     void registerEditCommandForUndo(PassRefPtr<WebEditCommandProxy>);
179     void registerEditCommandForRedo(PassRefPtr<WebEditCommandProxy>);
180
181     WebProcessProxy* process() const;
182     WebPageNamespace* pageNamespace() const { return m_pageNamespace.get(); }
183
184     bool isValid();
185
186     // REMOVE: For demo purposes only.
187     const WTF::String& urlAtProcessExit() const { return m_urlAtProcessExit; }
188
189     void preferencesDidChange();
190
191     void getStatistics(WKContextStatistics*);
192
193 private:
194     WebPageProxy(WebPageNamespace*, uint64_t pageID);
195
196     virtual Type type() const { return APIType; }
197
198     void didCreateMainFrame(uint64_t frameID);
199     void didCreateSubFrame(uint64_t frameID);
200
201     void didStartProvisionalLoadForFrame(WebFrameProxy*, const WTF::String&);
202     void didReceiveServerRedirectForProvisionalLoadForFrame(WebFrameProxy*);
203     void didFailProvisionalLoadForFrame(WebFrameProxy*);
204     void didCommitLoadForFrame(WebFrameProxy*);
205     void didFinishDocumentLoadForFrame(WebFrameProxy*);
206     void didFinishLoadForFrame(WebFrameProxy*);
207     void didFailLoadForFrame(WebFrameProxy*);
208     void didReceiveTitleForFrame(WebFrameProxy*, const WTF::String&);
209     void didFirstLayoutForFrame(WebFrameProxy*);
210     void didFirstVisuallyNonEmptyLayoutForFrame(WebFrameProxy*);
211     void didStartProgress();
212     void didChangeProgress(double);
213     void didFinishProgress();
214     
215     void decidePolicyForNavigationAction(WebFrameProxy*, WebCore::NavigationType navigationType, WebEvent::Modifiers modifiers, const WTF::String& url, uint64_t listenerID);
216     void decidePolicyForNewWindowAction(WebFrameProxy*, WebCore::NavigationType navigationType, WebEvent::Modifiers modifiers, const WTF::String& url, uint64_t listenerID);
217     void decidePolicyForMIMEType(WebFrameProxy*, const WTF::String& MIMEType, const WTF::String& url, uint64_t listenerID);
218
219     void willSubmitForm(WebFrameProxy* frame, WebFrameProxy* frameSource, Vector<std::pair<WTF::String, WTF::String> >& textFieldValues, APIObject* userData, uint64_t listenerID);
220
221     PassRefPtr<WebPageProxy> createNewPage();
222     void showPage();
223     void closePage();
224     void runJavaScriptAlert(WebFrameProxy*, const WTF::String&);
225     bool runJavaScriptConfirm(WebFrameProxy* frame, const WTF::String&);
226     WTF::String runJavaScriptPrompt(WebFrameProxy* frame, const WTF::String&, const WTF::String&);
227     void contentsSizeChanged(WebFrameProxy*, const WebCore::IntSize&);
228
229     // Back/Forward list management
230     void addItemToBackForwardList(WebBackForwardListItem*);
231     void goToItemInBackForwardList(WebBackForwardListItem*);
232
233     // Undo management
234     void registerEditCommandForUndo(uint64_t commandID, WebCore::EditAction);
235     void clearAllEditCommands();
236
237     void takeFocus(bool direction);
238     void setToolTip(const WTF::String&);
239     void setCursor(const WebCore::Cursor&);
240
241     void didReceiveEvent(WebEvent::Type);
242
243     void didRunJavaScriptInMainFrame(const WTF::String&, uint64_t);
244     void didGetRenderTreeExternalRepresentation(const WTF::String&, uint64_t);
245     void didGetSourceForFrame(const String&, uint64_t);
246
247 #if USE(ACCELERATED_COMPOSITING)
248     void didChangeAcceleratedCompositing(bool compositing);
249 #endif    
250
251     PageClient* m_pageClient;
252     WebLoaderClient m_loaderClient;
253     WebPolicyClient m_policyClient;
254     WebFormClient m_formClient;
255     WebUIClient m_uiClient;
256
257     OwnPtr<DrawingAreaProxy> m_drawingArea;
258     RefPtr<WebPageNamespace> m_pageNamespace;
259     RefPtr<WebFrameProxy> m_mainFrame;
260     WTF::String m_pageTitle;
261
262     HashMap<uint64_t, RefPtr<ScriptReturnValueCallback> > m_scriptReturnValueCallbacks;
263     HashMap<uint64_t, RefPtr<RenderTreeExternalRepresentationCallback> > m_renderTreeExternalRepresentationCallbacks;
264     HashMap<uint64_t, RefPtr<FrameSourceCallback> > m_frameSourceCallbacks;
265
266     HashSet<WebEditCommandProxy*> m_editCommandSet;
267
268     double m_estimatedProgress;
269
270     // Whether the web page is contained in a top-level window.
271     bool m_isInWindow;
272
273     bool m_canGoBack;
274     bool m_canGoForward;
275     RefPtr<WebBackForwardList> m_backForwardList;
276
277     WTF::String m_toolTip;
278
279     // REMOVE: For demo purposes only.
280     WTF::String m_urlAtProcessExit;
281
282     double m_textZoomFactor;
283     double m_pageZoomFactor;
284     
285     bool m_valid;
286     bool m_closed;
287
288     uint64_t m_pageID;
289 };
290
291 } // namespace WebKit
292
293 #endif // WebPageProxy_h