5a68473eabb0c1714bf235b37d2519a24d4289aa
[WebKit-https.git] / Source / WebKit / blackberry / Api / WebPageClient.h
1 /*
2  * Copyright (C) 2009, 2010, 2011, 2012 Research In Motion Limited. All rights reserved.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18
19 #ifndef WebPageClient_h
20 #define WebPageClient_h
21
22 #include "BlackBerryGlobal.h"
23
24 #include <BlackBerryPlatformCursor.h>
25 #include <BlackBerryPlatformInputEvents.h>
26 #include <BlackBerryPlatformNavigationType.h>
27 #include <BlackBerryPlatformPrimitives.h>
28 #include <BlackBerryPlatformString.h>
29 #include <imf/events.h>
30 #include <interaction/ScrollViewBase.h>
31 #include <vector>
32
33 template<typename T> class ScopeArray;
34 template<typename T> class SharedArray;
35
36 typedef void* WebFrame;
37
38 namespace BlackBerry {
39
40 namespace Platform {
41 class FilterStream;
42 class GeoTrackerListener;
43 class IntRectRegion;
44 class NetworkRequest;
45 class NetworkStreamFactory;
46 struct SelectionDetails;
47 class ViewportAccessor;
48 class WebUserMediaRequest;
49
50 namespace Graphics {
51 class Window;
52 }
53 }
54
55 namespace WebKit {
56 class WebPage;
57
58 class BLACKBERRY_EXPORT WebPageClient {
59 public:
60     virtual ~WebPageClient() { }
61     enum WindowStyleFlag {
62         FlagWindowHasMenuBar = 0x00000001,
63         FlagWindowHasToolBar = 0x00000002,
64         FlagWindowHasLocationBar = 0x00000004,
65         FlagWindowHasStatusBar = 0x00000008,
66         FlagWindowHasScrollBar = 0x00000010,
67         FlagWindowIsResizable = 0x00000020,
68         FlagWindowIsFullScreen = 0x00000040,
69         FlagWindowIsDialog = 0x00000080,
70         FlagWindowDefault = 0xFFFFFFFF,
71     };
72
73     enum AlertType {
74         MediaOK = 0,
75         MediaDecodeError,
76         MediaMetaDataError,
77         MediaMetaDataTimeoutError,
78         MediaNoMetaDataError,
79         MediaVideoReceiveError,
80         MediaAudioReceiveError,
81         MediaInvalidError,
82     };
83
84     enum SaveCredentialType {
85         SaveCredentialNeverForThisSite = 0,
86         SaveCredentialNotNow,
87         SaveCredentialYes
88     };
89
90     virtual int getInstanceId() const = 0;
91
92     virtual void notifyLoadStarted() = 0;
93     virtual void notifyLoadCommitted(const unsigned short* originalUrl, unsigned originalUrlLength, const unsigned short* finalUrl, unsigned finalUrlLength, const unsigned short* networkToken, unsigned networkTokenLength) = 0;
94     virtual void notifyLoadFailedBeforeCommit(const unsigned short* originalUrl, unsigned originalUrlLength, const unsigned short* finalUrl, unsigned finalUrlLength, const unsigned short* networkToken, unsigned networkTokenLength) = 0;
95     virtual void notifyLoadToAnchor(const unsigned short* url, unsigned urlLength, const unsigned short* networkToken, unsigned networkTokenLength) = 0;
96     virtual void notifyLoadProgress(int percentage) = 0;
97     virtual void notifyLoadReadyToRender(bool pageIsVisuallyNonEmpty) = 0;
98     virtual void notifyFirstVisuallyNonEmptyLayout() = 0;
99     virtual void notifyLoadFinished(int status) = 0;
100     virtual void notifyClientRedirect(const unsigned short* originalUrl, unsigned originalUrlLength, const unsigned short* finalUrl, unsigned finalUrlLength) = 0;
101
102     virtual void notifyFrameDetached(const WebFrame) = 0;
103
104     virtual void notifyRunLayoutTestsFinished() = 0;
105
106     virtual void notifyInRegionScrollableAreasChanged(const std::vector<Platform::ScrollViewBase*>&) = 0;
107
108     virtual void notifyDocumentOnLoad(bool) = 0;
109
110     virtual void notifyWindowObjectCleared() = 0;
111
112     virtual void addMessageToConsole(const unsigned short* message, unsigned messageLength, const unsigned short* source, unsigned sourceLength, unsigned lineNumber, unsigned columnNumber) = 0;
113     virtual int showAlertDialog(AlertType) = 0;
114
115     virtual BlackBerry::Platform::String serializePageCacheState() const = 0;
116     virtual void deserializePageCacheState(const BlackBerry::Platform::String& state) = 0;
117
118     virtual void runJavaScriptAlert(const unsigned short* message, unsigned messageLength, const char* origin, unsigned originLength) = 0;
119     virtual bool runJavaScriptConfirm(const unsigned short* message, unsigned messageLength, const char* origin, unsigned originLength) = 0;
120     virtual bool runJavaScriptPrompt(const unsigned short* message, unsigned messageLength, const unsigned short* defaultValue, unsigned defaultValueLength, const char* origin, unsigned originLength, BlackBerry::Platform::String& result) = 0;
121     virtual bool runBeforeUnloadConfirmPanel(const unsigned short* message, unsigned messageLength, const char* origin, unsigned originLength) = 0;
122
123     virtual bool shouldInterruptJavaScript() = 0;
124
125     virtual void contentsSizeChanged() = 0;
126     virtual void scrollChanged() = 0;
127     virtual void scaleChanged() = 0;
128
129     virtual void updateInteractionViews() = 0;
130
131     virtual void requestUpdateViewport(int width, int height) = 0;
132
133     virtual void setPageTitle(const unsigned short* title, unsigned titleLength) = 0;
134
135     virtual Platform::Graphics::Window* window() const = 0;
136     virtual void postToSurface(const Platform::IntRect&) = 0;
137
138     virtual void notifyPixelContentRendered(const Platform::IntRect&) = 0;
139
140     virtual void inputFocusGained(int64_t inputStyle, Platform::VirtualKeyboardType, Platform::VirtualKeyboardEnterKeyType) = 0;
141     virtual void inputFocusLost() = 0;
142     virtual void inputTextChanged() = 0;
143     virtual void inputSelectionChanged(unsigned selectionStart, unsigned selectionEnd) = 0;
144     virtual void inputLearnText(wchar_t* text, int length) = 0;
145
146     virtual void showFormControls(bool visible, bool previousActive = false, bool nextActive = false) = 0;
147     virtual void showVirtualKeyboard(bool) = 0;
148
149     virtual void requestSpellingCheckingOptions(imf_sp_text_t&, const BlackBerry::Platform::IntRect& documentCaretRect, const BlackBerry::Platform::IntSize& screenOffset, const bool shouldMoveDialog) = 0;
150     virtual int32_t checkSpellingOfStringAsync(wchar_t* text, const unsigned length) = 0;
151
152     virtual void notifySelectionDetailsChanged(const BlackBerry::Platform::SelectionDetails&) = 0;
153     virtual void cancelSelectionVisuals() = 0;
154     virtual void notifySelectionHandlesReversed() = 0;
155     virtual void notifyCaretChanged(const Platform::IntRect& documentCaretRect, bool userTouchTriggered, bool isSingleLineInput = false, const Platform::IntRect& singleLineDocumentBoundingBox = Platform::IntRect(), bool textFieldIsEmpty = false) = 0;
156     virtual void notifySelectionScrollView(Platform::ScrollViewBase*) = 0;
157
158     virtual void cursorChanged(Platform::CursorType, const char* url, const Platform::IntPoint& hotSpotInImage) = 0;
159
160     virtual void requestGlobalLocalServicePermission(Platform::GeoTrackerListener*, const BlackBerry::Platform::String& origin) = 0;
161
162     virtual void requestGeolocationPermission(Platform::GeoTrackerListener*, const BlackBerry::Platform::String& origin) = 0;
163     virtual void cancelGeolocationPermission() = 0;
164     virtual Platform::NetworkStreamFactory* networkStreamFactory() = 0;
165
166     virtual void handleStringPattern(const unsigned short* pattern, unsigned length) = 0;
167     virtual void handleExternalLink(const Platform::NetworkRequest&, const unsigned short* context, unsigned contextLength, bool isClientRedirect) = 0;
168
169     virtual void resetBackForwardList(unsigned listSize, unsigned currentIndex) = 0;
170
171     virtual void openPopupList(bool multiple, int size, const ScopeArray<BlackBerry::Platform::String>& labels, const bool* enableds, const int* itemType, const bool* selecteds) = 0;
172     virtual bool chooseFilenames(bool allowMultiple, const SharedArray<BlackBerry::Platform::String>& acceptTypes, const SharedArray<BlackBerry::Platform::String>& initialFiles, const BlackBerry::Platform::String& capture, SharedArray<BlackBerry::Platform::String>& chosenFiles) = 0;
173
174     virtual WebPage* createWindow(int x, int y, int width, int height, unsigned flags, const BlackBerry::Platform::String& url, const BlackBerry::Platform::String& windowName, const BlackBerry::Platform::String& openerFrameUrl, bool userGesture) = 0;
175
176     virtual void scheduleCloseWindow() = 0;
177
178     // Database interface.
179     virtual unsigned long long databaseQuota(const BlackBerry::Platform::String& origin, const BlackBerry::Platform::String& databaseName, unsigned long long originUsage, unsigned long long currentQuota, unsigned long long estimatedSize) = 0;
180
181     virtual void setIconForUrl(const BlackBerry::Platform::String& originalPageUrl, const BlackBerry::Platform::String& finalPageUrl, const BlackBerry::Platform::String& iconUrl) = 0;
182     virtual void setFavicon(const BlackBerry::Platform::String& dataInBase64, const BlackBerry::Platform::String& url) = 0;
183     virtual void setLargeIcon(const BlackBerry::Platform::String& iconUrl) = 0;
184     virtual void setWebAppCapable() = 0;
185     virtual void setSearchProviderDetails(const BlackBerry::Platform::String& title, const BlackBerry::Platform::String& documentUrl) = 0;
186     virtual void setAlternateFeedDetails(const BlackBerry::Platform::String& title, const BlackBerry::Platform::String& feedUrl) = 0;
187
188     virtual BlackBerry::Platform::String getErrorPage(int errorCode, const BlackBerry::Platform::String& errorMessage, const BlackBerry::Platform::String& url) = 0;
189
190     virtual void willDeferLoading() = 0;
191     virtual void didResumeLoading() = 0;
192
193     // Headers is a list of alternating key and value.
194     virtual void setMetaHeaders(const ScopeArray<BlackBerry::Platform::String>& headers, unsigned headersSize) = 0;
195
196     virtual void needMoreData() = 0;
197     virtual void handleWebInspectorMessageToFrontend(int id, const char* message, int length) = 0;
198
199     virtual BlackBerry::Platform::ViewportAccessor* userInterfaceViewportAccessor() const = 0;
200
201     virtual void animateToScaleAndDocumentScrollPosition(double finalScale, const Platform::FloatPoint& finalDocumentScrollPosition, bool shouldConstrainScrollingToContentEdge) = 0;
202
203     virtual void setPreventsScreenIdleDimming(bool noDimming) = 0;
204     virtual bool authenticationChallenge(const unsigned short* realm, unsigned realmLength, BlackBerry::Platform::String& username, BlackBerry::Platform::String& password, BlackBerry::Platform::String& requestURL, bool isProxy) = 0;
205     virtual SaveCredentialType notifyShouldSaveCredential(bool isNew) = 0;
206     virtual void syncProxyCredential(const BlackBerry::Platform::String& username, const BlackBerry::Platform::String& password) = 0;
207     virtual void notifyPopupAutofillDialog(const std::vector<BlackBerry::Platform::String>&) = 0;
208     virtual void notifyDismissAutofillDialog() = 0;
209
210     virtual bool shouldPluginEnterFullScreen() = 0;
211     virtual void didPluginEnterFullScreen() = 0;
212     virtual void didPluginExitFullScreen() = 0;
213     virtual void onPluginStartBackgroundPlay() = 0;
214     virtual void onPluginStopBackgroundPlay() = 0;
215     virtual bool lockOrientation(bool landscape) = 0;
216     virtual void unlockOrientation() = 0;
217     virtual bool isActive() const = 0;
218     virtual bool isVisible() const = 0;
219
220     virtual void setToolTip(const BlackBerry::Platform::String&) = 0;
221     virtual void setStatus(const BlackBerry::Platform::String&) = 0;
222     virtual bool acceptNavigationRequest(const Platform::NetworkRequest&, Platform::NavigationType) = 0;
223     virtual void cursorEventModeChanged(Platform::CursorEventMode) = 0;
224     virtual void touchEventModeChanged(Platform::TouchEventMode) = 0;
225
226     virtual bool downloadAllowed(const BlackBerry::Platform::String& url) = 0;
227     virtual void downloadRequested(Platform::FilterStream*, const BlackBerry::Platform::String& suggestedFilename) = 0;
228
229     virtual int fullscreenStart() = 0;
230     virtual int fullscreenStart(const char* contextName, Platform::Graphics::Window*, const BlackBerry::Platform::IntRect& windowScreenRect) = 0;
231
232     virtual int fullscreenStop() = 0;
233
234     virtual int fullscreenSetWindowRect(const BlackBerry::Platform::IntRect& newWindowScreenRect) = 0;
235
236     virtual void populateCustomHeaders(Platform::NetworkRequest&) = 0;
237
238     virtual void notifyWillUpdateApplicationCache() = 0;
239     virtual void notifyDidLoadFromApplicationCache() = 0;
240
241     virtual void clearCookies() = 0;
242     virtual void clearCache() = 0;
243
244     virtual bool hasKeyboardFocus() = 0;
245     virtual bool createPopupWebView(const Platform::IntRect&) = 0;
246     virtual void closePopupWebView() = 0;
247
248     virtual void addSearchProvider(const Platform::String&) = 0;
249     virtual int  isSearchProviderInstalled(const Platform::String&) = 0;
250
251     // Match with ChromeClient::CustomHandlersState.
252     enum ProtocolHandlersState {
253         ProtocolHandlersNew,
254         ProtocolHandlersRegistered,
255         ProtocolHandlersDeclined
256     };
257     virtual void registerProtocolHandler(const BlackBerry::Platform::String& /*scheme*/, const BlackBerry::Platform::String& /*baseURL*/, const BlackBerry::Platform::String& /*url*/, const BlackBerry::Platform::String& /*title*/) = 0;
258     virtual ProtocolHandlersState isProtocolHandlerRegistered(const BlackBerry::Platform::String& /*scheme*/, const BlackBerry::Platform::String& /*baseURL*/, const BlackBerry::Platform::String& /*url*/) = 0;
259     virtual void unregisterProtocolHandler(const BlackBerry::Platform::String& /*scheme*/, const BlackBerry::Platform::String& /*baseURL*/, const BlackBerry::Platform::String& /*url*/) = 0;
260
261     virtual void requestUserMedia(const Platform::WebUserMediaRequest&) = 0;
262     virtual void cancelUserMediaRequest(const Platform::WebUserMediaRequest&) = 0;
263     virtual void updateFindStringResult(int numMatches, int currentIndex) = 0;
264
265     // Match with NotificationClient::Permission.
266     enum Permission {
267         PermissionAllowed, // User has allowed notifications
268         PermissionNotAllowed, // User has not yet allowed
269         PermissionDenied // User has explicitly denied permission
270     };
271     virtual void requestNotificationPermission(const BlackBerry::Platform::String& /*requestId*/, const BlackBerry::Platform::String& /*origin*/) = 0;
272     virtual Permission checkNotificationPermission(const BlackBerry::Platform::String& /*origin*/) = 0;
273     virtual void showNotification(const BlackBerry::Platform::String& /*notificationId*/, const BlackBerry::Platform::String& /*title*/, const BlackBerry::Platform::String& /*body*/, const BlackBerry::Platform::String& /*iconUrl*/, const BlackBerry::Platform::String& /*tag*/, const BlackBerry::Platform::String& /*origin*/) = 0;
274     virtual void cancelNotification(const BlackBerry::Platform::String& /*id*/) = 0;
275     virtual void clearNotifications(const std::vector<BlackBerry::Platform::String>& /*notificationIds*/) = 0;
276     virtual void notificationDestroyed(const BlackBerry::Platform::String& /*notificationId*/) = 0;
277     virtual void startSelectionScroll() = 0;
278     virtual void stopExpandingSelection() = 0;
279 };
280 } // namespace WebKit
281 } // namespace BlackBerry
282
283 #endif // WebPageClient_h