Clean up ChunkedUpdateDrawingAreaProxy
[WebKit-https.git] / Tools / DumpRenderTree / chromium / WebViewHost.h
1 /*
2  * Copyright (C) 2010 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 WebViewHost_h
32 #define WebViewHost_h
33
34 #include "MockSpellCheck.h"
35 #include "TestNavigationController.h"
36 #include "WebAccessibilityNotification.h"
37 #include "WebCursorInfo.h"
38 #include "WebFrameClient.h"
39 #include "WebViewClient.h"
40 #include <wtf/HashMap.h>
41 #include <wtf/HashSet.h>
42 #include <wtf/Vector.h>
43 #include <wtf/text/WTFString.h>
44
45 class LayoutTestController;
46 class TestShell;
47 namespace WebKit {
48 class WebFrame;
49 class WebDeviceOrientationClient;
50 class WebDeviceOrientationClientMock;
51 class WebGeolocationClient;
52 class WebGeolocationClientMock;
53 class WebGeolocationServiceMock;
54 class WebSpeechInputController;
55 class WebSpeechInputControllerMock;
56 class WebSpeechInputListener;
57 class WebURL;
58 struct WebRect;
59 struct WebURLError;
60 struct WebWindowFeatures;
61 }
62 namespace skia {
63 class PlatformCanvas;
64 }
65
66 class WebViewHost : public WebKit::WebViewClient, public WebKit::WebFrameClient, public NavigationHost {
67  public:
68     WebViewHost(TestShell* shell);
69     ~WebViewHost();
70     void setWebWidget(WebKit::WebWidget* widget) { m_webWidget = widget; }
71     WebKit::WebView* webView() const;
72     WebKit::WebWidget* webWidget() const;
73     void reset();
74     void setSelectTrailingWhitespaceEnabled(bool);
75     void setSmartInsertDeleteEnabled(bool);
76     void waitForPolicyDelegate();
77     void setCustomPolicyDelegate(bool, bool);
78     WebKit::WebFrame* topLoadingFrame() { return m_topLoadingFrame; }
79     void setBlockRedirects(bool block) { m_blocksRedirects = block; }
80     void setRequestReturnNull(bool returnNull) { m_requestReturnNull = returnNull; }
81     void setEditCommand(const std::string& name, const std::string& value);
82     void clearEditCommand();
83     void setPendingExtraData(TestShellExtraData*);
84
85     void paintRect(const WebKit::WebRect&);
86     void updatePaintRect(const WebKit::WebRect&);
87     void paintInvalidatedRegion();
88     skia::PlatformCanvas* canvas();
89     void displayRepaintMask();
90
91     void loadURLForFrame(const WebKit::WebURL&, const WebKit::WebString& frameName);
92     TestNavigationController* navigationController() { return m_navigationController.get(); }
93
94     void addClearHeader(const WTF::String& header) { m_clearHeaders.add(header); }
95     const HashSet<WTF::String>& clearHeaders() const { return m_clearHeaders; }
96     void closeWidget();
97
98     WebKit::WebContextMenuData* lastContextMenuData() const;
99     void clearContextMenuData();
100
101     WebKit::WebSpeechInputControllerMock* speechInputControllerMock() { return m_speechInputControllerMock.get(); }
102
103     // NavigationHost
104     virtual bool navigate(const TestNavigationEntry&, bool reload);
105
106     // WebKit::WebViewClient
107     virtual WebKit::WebView* createView(WebKit::WebFrame*, const WebKit::WebWindowFeatures&, const WebKit::WebString&);
108     virtual WebKit::WebWidget* createPopupMenu(WebKit::WebPopupType);
109     virtual WebKit::WebWidget* createPopupMenu(const WebKit::WebPopupMenuInfo&);
110     virtual WebKit::WebStorageNamespace* createSessionStorageNamespace(unsigned quota);
111     virtual void didAddMessageToConsole(const WebKit::WebConsoleMessage&, const WebKit::WebString& sourceName, unsigned sourceLine);
112     virtual void didStartLoading();
113     virtual void didStopLoading();
114     virtual bool shouldBeginEditing(const WebKit::WebRange&);
115     virtual bool shouldEndEditing(const WebKit::WebRange&);
116     virtual bool shouldInsertNode(const WebKit::WebNode&, const WebKit::WebRange&, WebKit::WebEditingAction);
117     virtual bool shouldInsertText(const WebKit::WebString&, const WebKit::WebRange&, WebKit::WebEditingAction);
118     virtual bool shouldChangeSelectedRange(const WebKit::WebRange& from, const WebKit::WebRange& to, WebKit::WebTextAffinity, bool stillSelecting);
119     virtual bool shouldDeleteRange(const WebKit::WebRange&);
120     virtual bool shouldApplyStyle(const WebKit::WebString& style, const WebKit::WebRange&);
121     virtual bool isSmartInsertDeleteEnabled();
122     virtual bool isSelectTrailingWhitespaceEnabled();
123     virtual void didBeginEditing();
124     virtual void didChangeSelection(bool isSelectionEmpty);
125     virtual void didChangeContents();
126     virtual void didEndEditing();
127     virtual bool handleCurrentKeyboardEvent();
128     virtual void spellCheck(const WebKit::WebString&, int& offset, int& length);
129     virtual WebKit::WebString autoCorrectWord(const WebKit::WebString&);
130     virtual void runModalAlertDialog(WebKit::WebFrame*, const WebKit::WebString&);
131     virtual bool runModalConfirmDialog(WebKit::WebFrame*, const WebKit::WebString&);
132     virtual bool runModalPromptDialog(WebKit::WebFrame*, const WebKit::WebString& message, const WebKit::WebString& defaultValue, WebKit::WebString* actualValue);
133     virtual bool runModalBeforeUnloadDialog(WebKit::WebFrame*, const WebKit::WebString&);
134     virtual void showContextMenu(WebKit::WebFrame*, const WebKit::WebContextMenuData&);
135     virtual void setStatusText(const WebKit::WebString&);
136     virtual void startDragging(const WebKit::WebDragData&, WebKit::WebDragOperationsMask, const WebKit::WebImage&, const WebKit::WebPoint&);
137     virtual void navigateBackForwardSoon(int offset);
138     virtual int historyBackListCount();
139     virtual int historyForwardListCount();
140     virtual void postAccessibilityNotification(const WebKit::WebAccessibilityObject&, WebKit::WebAccessibilityNotification);
141     virtual WebKit::WebNotificationPresenter* notificationPresenter();
142 #if ENABLE(CLIENT_BASED_GEOLOCATION)
143     virtual WebKit::WebGeolocationClient* geolocationClient();
144 #else
145     virtual WebKit::WebGeolocationService* geolocationService();
146 #endif
147     virtual WebKit::WebSpeechInputController* speechInputController(WebKit::WebSpeechInputListener*);
148     virtual WebKit::WebDeviceOrientationClient* deviceOrientationClient();
149
150     // WebKit::WebWidgetClient
151     virtual void didInvalidateRect(const WebKit::WebRect&);
152     virtual void didScrollRect(int dx, int dy, const WebKit::WebRect&);
153     virtual void scheduleComposite();
154     virtual void didFocus();
155     virtual void didBlur();
156     virtual void didChangeCursor(const WebKit::WebCursorInfo&);
157     virtual void closeWidgetSoon();
158     virtual void show(WebKit::WebNavigationPolicy);
159     virtual void runModal();
160     virtual WebKit::WebRect windowRect();
161     virtual void setWindowRect(const WebKit::WebRect&);
162     virtual WebKit::WebRect rootWindowRect();
163     virtual WebKit::WebRect windowResizerRect();
164     virtual WebKit::WebScreenInfo screenInfo();
165
166     // WebKit::WebFrameClient
167     virtual WebKit::WebPlugin* createPlugin(WebKit::WebFrame*, const WebKit::WebPluginParams&);
168     virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebWorkerClient*);
169     virtual WebKit::WebMediaPlayer* createMediaPlayer(WebKit::WebFrame*, WebKit::WebMediaPlayerClient*);
170     virtual WebKit::WebApplicationCacheHost* createApplicationCacheHost(WebKit::WebFrame*, WebKit::WebApplicationCacheHostClient*);
171      virtual bool allowPlugins(WebKit::WebFrame*, bool enabledPerSettings);
172     virtual bool allowImages(WebKit::WebFrame*, bool enabledPerSettings);
173     virtual void loadURLExternally(WebKit::WebFrame*, const WebKit::WebURLRequest&, WebKit::WebNavigationPolicy);
174     virtual WebKit::WebNavigationPolicy decidePolicyForNavigation(
175         WebKit::WebFrame*, const WebKit::WebURLRequest&,
176         WebKit::WebNavigationType, const WebKit::WebNode&,
177         WebKit::WebNavigationPolicy, bool isRedirect);
178     virtual bool canHandleRequest(WebKit::WebFrame*, const WebKit::WebURLRequest&);
179     virtual WebKit::WebURLError cannotHandleRequestError(WebKit::WebFrame*, const WebKit::WebURLRequest&);
180     virtual WebKit::WebURLError cancelledError(WebKit::WebFrame*, const WebKit::WebURLRequest&);
181     virtual void unableToImplementPolicyWithError(WebKit::WebFrame*, const WebKit::WebURLError&);
182     virtual void willPerformClientRedirect(
183         WebKit::WebFrame*, const WebKit::WebURL& from, const WebKit::WebURL& to,
184         double interval, double fireTime);
185     virtual void didCancelClientRedirect(WebKit::WebFrame*);
186     virtual void didCreateDataSource(WebKit::WebFrame*, WebKit::WebDataSource*);
187     virtual void didStartProvisionalLoad(WebKit::WebFrame*);
188     virtual void didReceiveServerRedirectForProvisionalLoad(WebKit::WebFrame*);
189     virtual void didFailProvisionalLoad(WebKit::WebFrame*, const WebKit::WebURLError&);
190     virtual void didCommitProvisionalLoad(WebKit::WebFrame*, bool isNewNavigation);
191     virtual void didClearWindowObject(WebKit::WebFrame*);
192     virtual void didReceiveTitle(WebKit::WebFrame*, const WebKit::WebString&);
193     virtual void didFinishDocumentLoad(WebKit::WebFrame*);
194     virtual void didHandleOnloadEvents(WebKit::WebFrame*);
195     virtual void didFailLoad(WebKit::WebFrame*, const WebKit::WebURLError&);
196     virtual void didFinishLoad(WebKit::WebFrame*);
197     virtual void didNavigateWithinPage(WebKit::WebFrame*, bool isNewNavigation);
198     virtual void didChangeLocationWithinPage(WebKit::WebFrame*);
199     virtual void assignIdentifierToRequest(WebKit::WebFrame*, unsigned identifier, const WebKit::WebURLRequest&);
200     virtual void removeIdentifierForRequest(unsigned identifier);
201     virtual void willSendRequest(WebKit::WebFrame*, unsigned identifier, WebKit::WebURLRequest&, const WebKit::WebURLResponse&);
202     virtual void didReceiveResponse(WebKit::WebFrame*, unsigned identifier, const WebKit::WebURLResponse&);
203     virtual void didFinishResourceLoad(WebKit::WebFrame*, unsigned identifier);
204     virtual void didFailResourceLoad(WebKit::WebFrame*, unsigned identifier, const WebKit::WebURLError&);
205     virtual void didDisplayInsecureContent(WebKit::WebFrame*);
206     virtual void didRunInsecureContent(WebKit::WebFrame*, const WebKit::WebSecurityOrigin&);
207     virtual bool allowScript(WebKit::WebFrame*, bool enabledPerSettings);
208     virtual void openFileSystem(WebKit::WebFrame*, WebKit::WebFileSystem::Type, long long size, bool create, WebKit::WebFileSystemCallbacks*);
209
210     WebKit::WebDeviceOrientationClientMock* deviceOrientationClientMock();
211     MockSpellCheck* mockSpellCheck();
212
213 #if ENABLE(CLIENT_BASED_GEOLOCATION)
214     // Geolocation client mocks for LayoutTestController
215     WebKit::WebGeolocationClientMock* geolocationClientMock();
216 #endif
217
218 private:
219     LayoutTestController* layoutTestController() const;
220
221     // Called the title of the page changes.
222     // Can be used to update the title of the window.
223     void setPageTitle(const WebKit::WebString&);
224
225     // Called when the URL of the page changes.
226     // Extracts the URL and forwards on to SetAddressBarURL().
227     void updateAddressBar(WebKit::WebView*);
228
229     // Called when the URL of the page changes.
230     // Should be used to update the text of the URL bar.
231     void setAddressBarURL(const WebKit::WebURL&);
232
233     // In the Mac code, this is called to trigger the end of a test after the
234     // page has finished loading.  From here, we can generate the dump for the
235     // test.
236     void locationChangeDone(WebKit::WebFrame*);
237
238     void updateForCommittedLoad(WebKit::WebFrame*, bool isNewNavigation);
239     void updateURL(WebKit::WebFrame*);
240     void updateSessionHistory(WebKit::WebFrame*);
241
242     // Dumping a frame to the console.
243     void printFrameDescription(WebKit::WebFrame*);
244
245     // Dumping the user gesture status to the console.
246     void printFrameUserGestureStatus(WebKit::WebFrame*, const char*);
247
248     bool hasWindow() const { return m_hasWindow; }
249     void resetScrollRect();
250     void discardBackingStore();
251
252     // Causes navigation actions just printout the intended navigation instead
253     // of taking you to the page. This is used for cases like mailto, where you
254     // don't actually want to open the mail program.
255     bool m_policyDelegateEnabled;
256
257     // Toggles the behavior of the policy delegate.  If true, then navigations
258     // will be allowed.  Otherwise, they will be ignored (dropped).
259     bool m_policyDelegateIsPermissive;
260
261     // If true, the policy delegate will signal layout test completion.
262     bool m_policyDelegateShouldNotifyDone;
263
264     // Non-owning pointer. The WebViewHost instance is owned by this TestShell instance.
265     TestShell* m_shell;
266
267     // This delegate works for the following widget.
268     WebKit::WebWidget* m_webWidget;
269
270     // This is non-0 IFF a load is in progress.
271     WebKit::WebFrame* m_topLoadingFrame;
272
273     // For tracking session history.  See RenderView.
274     int m_pageId;
275     int m_lastPageIdUpdated;
276
277     OwnPtr<TestShellExtraData> m_pendingExtraData;
278
279     // Maps resource identifiers to a descriptive string.
280     typedef HashMap<unsigned, std::string> ResourceMap;
281     ResourceMap m_resourceIdentifierMap;
282     void printResourceDescription(unsigned identifier);
283
284     WebKit::WebCursorInfo m_currentCursor;
285
286     bool m_hasWindow;
287     bool m_inModalLoop;
288     WebKit::WebRect m_windowRect;
289
290     // true if we want to enable smart insert/delete.
291     bool m_smartInsertDeleteEnabled;
292
293     // true if we want to enable selection of trailing whitespaces
294     bool m_selectTrailingWhitespaceEnabled;
295
296     // Set of headers to clear in willSendRequest.
297     HashSet<WTF::String> m_clearHeaders;
298
299     // true if we should block any redirects
300     bool m_blocksRedirects;
301
302     // true if we should block (set an empty request for) any requests
303     bool m_requestReturnNull;
304
305     // Edit command associated to the current keyboard event.
306     std::string m_editCommandName;
307     std::string m_editCommandValue;
308
309     // The mock spellchecker used in spellCheck().
310     MockSpellCheck m_spellcheck;
311
312     // Painting.
313     OwnPtr<skia::PlatformCanvas> m_canvas;
314     WebKit::WebRect m_paintRect;
315     bool m_isPainting;
316
317     OwnPtr<WebKit::WebContextMenuData> m_lastContextMenuData;
318
319     // Geolocation
320 #if ENABLE(CLIENT_BASED_GEOLOCATION)
321     OwnPtr<WebKit::WebGeolocationClientMock> m_geolocationClientMock;
322 #else
323     OwnPtr<WebKit::WebGeolocationServiceMock> m_geolocationServiceMock;
324 #endif
325
326     OwnPtr<WebKit::WebDeviceOrientationClientMock> m_deviceOrientationClientMock;
327     OwnPtr<WebKit::WebSpeechInputControllerMock> m_speechInputControllerMock;
328
329     OwnPtr<TestNavigationController*> m_navigationController;
330 };
331
332 #endif // WebViewHost_h