1/*
2 * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com>
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 AND ITS CONTRIBUTORS "AS IS" AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
20 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 */
24
25#ifndef ChromeClientWinCE_h
26#define ChromeClientWinCE_h
27
28#include "ChromeClient.h"
29
30class WebView;
31
32namespace WebKit {
33
34class ChromeClientWinCE : public WebCore::ChromeClient {
35public:
36    ChromeClientWinCE(WebView* webView);
37
38    virtual void chromeDestroyed();
39
40    virtual void setWindowRect(const WebCore::FloatRect&);
41    virtual WebCore::FloatRect windowRect();
42
43    virtual WebCore::FloatRect pageRect();
44
45    virtual float scaleFactor();
46
47    virtual void focus();
48    virtual void unfocus();
49
50    virtual bool canTakeFocus(WebCore::FocusDirection);
51    virtual void takeFocus(WebCore::FocusDirection);
52
53    virtual void focusedNodeChanged(WebCore::Node*);
54    virtual void focusedFrameChanged(WebCore::Frame*);
55
56    // The Frame pointer provides the ChromeClient with context about which
57    // Frame wants to create the new Page.  Also, the newly created window
58    // should not be shown to the user until the ChromeClient of the newly
59    // created Page has its show method called.
60    virtual WebCore::Page* createWindow(WebCore::Frame*, const WebCore::FrameLoadRequest&, const WebCore::WindowFeatures&, const WebCore::NavigationAction&);
61    virtual void show();
62
63    virtual bool canRunModal();
64    virtual void runModal();
65
66    virtual void setToolbarsVisible(bool);
67    virtual bool toolbarsVisible();
68
69    virtual void setStatusbarVisible(bool);
70    virtual bool statusbarVisible();
71
72    virtual void setScrollbarsVisible(bool);
73    virtual bool scrollbarsVisible();
74
75    virtual void setMenubarVisible(bool);
76    virtual bool menubarVisible();
77
78    virtual void setResizable(bool);
79
80    virtual void addMessageToConsole(WebCore::MessageSource, WebCore::MessageType, WebCore::MessageLevel, const WTF::String& message, unsigned int lineNumber, const WTF::String& sourceID);
81
82    virtual bool canRunBeforeUnloadConfirmPanel();
83    virtual bool runBeforeUnloadConfirmPanel(const WTF::String& message, WebCore::Frame* frame);
84
85    virtual void closeWindowSoon();
86
87    virtual void runJavaScriptAlert(WebCore::Frame*, const WTF::String&);
88    virtual bool runJavaScriptConfirm(WebCore::Frame*, const WTF::String&);
89    virtual bool runJavaScriptPrompt(WebCore::Frame*, const WTF::String& message, const WTF::String& defaultValue, WTF::String& result);
90    virtual void setStatusbarText(const WTF::String&);
91    virtual bool shouldInterruptJavaScript();
92    virtual WebCore::KeyboardUIMode keyboardUIMode();
93
94    virtual WebCore::IntRect windowResizerRect() const;
95
96    // Methods used by HostWindow.
97    virtual void invalidateWindow(const WebCore::IntRect&, bool);
98    virtual void invalidateContentsAndWindow(const WebCore::IntRect&, bool);
99    virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&, bool);
100    virtual void scroll(const WebCore::IntSize&, const WebCore::IntRect&, const WebCore::IntRect&);
101    virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&) const;
102    virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) const;
103    virtual PlatformPageClient platformPageClient() const;
104    virtual void contentsSizeChanged(WebCore::Frame*, const WebCore::IntSize&) const;
105    virtual void scrollRectIntoView(const WebCore::IntRect&, const WebCore::ScrollView*) const; // Currently only Mac has a non empty implementation.
106    virtual void scrollbarsModeDidChange() const;
107    virtual void setCursor(const WebCore::Cursor&);
108    // End methods used by HostWindow.
109
110    virtual void mouseDidMoveOverElement(const WebCore::HitTestResult&, unsigned modifierFlags);
111
112    virtual void setToolTip(const WTF::String&, WebCore::TextDirection);
113
114    virtual void print(WebCore::Frame*);
115
116#if ENABLE(DATABASE)
117    virtual void exceededDatabaseQuota(WebCore::Frame*, const WTF::String& databaseName);
118#endif
119
120#if ENABLE(OFFLINE_WEB_APPLICATIONS)
121    // Callback invoked when the application cache fails to save a cache object
122    // because storing it would grow the database file past its defined maximum
123    // size or past the amount of free space on the device.
124    // The chrome client would need to take some action such as evicting some
125    // old caches.
126    virtual void reachedMaxAppCacheSize(int64_t spaceNeeded);
127
128    // Callback invoked when the application cache origin quota is reached. This
129    // means that the resources attempting to be cached via the manifest are
130    // more than allowed on this origin. This callback allows the chrome client
131    // to take action, such as prompting the user to ask to increase the quota
132    // for this origin.
133    virtual void reachedApplicationCacheOriginQuota(WebCore::SecurityOrigin*);
134#endif
135
136#if ENABLE(CONTEXT_MENUS)
137    virtual void showContextMenu() { }
138#endif
139
140#if ENABLE(NOTIFICATIONS)
141    virtual WebCore::NotificationPresenter* notificationPresenter() const;
142#endif
143
144    // This can be either a synchronous or asynchronous call. The ChromeClient can display UI asking the user for permission
145    // to use Geolocation.
146    virtual void requestGeolocationPermissionForFrame(WebCore::Frame*, WebCore::Geolocation*);
147    virtual void cancelGeolocationPermissionRequestForFrame(WebCore::Frame*, WebCore::Geolocation*);
148
149    virtual void runOpenPanel(WebCore::Frame*, PassRefPtr<WebCore::FileChooser>);
150    // Asynchronous request to load an icon for specified filenames.
151    virtual void chooseIconForFiles(const Vector<WTF::String>&, WebCore::FileChooser*);
152
153    // Notification that the given form element has changed. This function
154    // will be called frequently, so handling should be very fast.
155    virtual void formStateDidChange(const WebCore::Node*);
156
157#if USE(ACCELERATED_COMPOSITING)
158    // Pass 0 as the GraphicsLayer to detatch the root layer.
159    virtual void attachRootGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*);
160    // Sets a flag to specify that the next time content is drawn to the window,
161    // the changes appear on the screen in synchrony with updates to GraphicsLayers.
162    virtual void setNeedsOneShotDrawingSynchronization();
163    // Sets a flag to specify that the view needs to be updated, so we need
164    // to do an eager layout before the drawing.
165    virtual void scheduleCompositingLayerSync();
166#endif
167
168    virtual void setLastSetCursorToCurrentCursor();
169
170#if ENABLE(TOUCH_EVENTS)
171    virtual void needTouchEvents(bool);
172#endif
173
174    virtual bool selectItemWritingDirectionIsNatural();
175    virtual bool selectItemAlignmentFollowsMenuWritingDirection();
176    virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
177    virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
178
179private:
180    WebView* m_webView;
181};
182
183} // namespace WebKit
184
185#endif // ChromeClientWinCE_h
186