[BlackBerry] Read "data-blackberry-text-selection-handle-position" attribute from...
[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 class ViewportAccessor;
47 class WebUserMediaRequest;
48
49 namespace Graphics {
50 class Window;
51 }
52 }
53
54 namespace WebKit {
55 class WebPage;
56
57 class BLACKBERRY_EXPORT WebPageClient {
58 public:
59     virtual ~WebPageClient() { }
60     enum WindowStyleFlag {
61         FlagWindowHasMenuBar = 0x00000001,
62         FlagWindowHasToolBar = 0x00000002,
63         FlagWindowHasLocationBar = 0x00000004,
64         FlagWindowHasStatusBar = 0x00000008,
65         FlagWindowHasScrollBar = 0x00000010,
66         FlagWindowIsResizable = 0x00000020,
67         FlagWindowIsFullScreen = 0x00000040,
68         FlagWindowIsDialog = 0x00000080,
69         FlagWindowDefault = 0xFFFFFFFF,
70     };
71
72     enum AlertType {
73         MediaOK = 0,
74         MediaDecodeError,
75         MediaMetaDataError,
76         MediaMetaDataTimeoutError,
77         MediaNoMetaDataError,
78         MediaVideoReceiveError,
79         MediaAudioReceiveError,
80         MediaInvalidError,
81     };
82
83     enum SaveCredentialType {
84         SaveCredentialNeverForThisSite = 0,
85         SaveCredentialNotNow,
86         SaveCredentialYes
87     };
88
89     virtual int getInstanceId() const = 0;
90
91     virtual void notifyLoadStarted() = 0;
92     virtual void notifyLoadCommitted(const unsigned short* originalUrl, unsigned int originalUrlLength, const unsigned short* finalUrl, unsigned int finalUrlLength, const unsigned short* networkToken, unsigned int networkTokenLength) = 0;
93     virtual void notifyLoadFailedBeforeCommit(const unsigned short* originalUrl, unsigned int originalUrlLength, const unsigned short* finalUrl, unsigned int finalUrlLength, const unsigned short* networkToken, unsigned int networkTokenLength) = 0;
94     virtual void notifyLoadToAnchor(const unsigned short* url, unsigned int urlLength, const unsigned short* networkToken, unsigned int networkTokenLength) = 0;
95     virtual void notifyLoadProgress(int percentage) = 0;
96     virtual void notifyLoadReadyToRender(bool pageIsVisuallyNonEmpty) = 0;
97     virtual void notifyFirstVisuallyNonEmptyLayout() = 0;
98     virtual void notifyLoadFinished(int status) = 0;
99     virtual void notifyClientRedirect(const unsigned short* originalUrl, unsigned int originalUrlLength, const unsigned short* finalUrl, unsigned int finalUrlLength) = 0;
100
101     virtual void notifyFrameDetached(const WebFrame) = 0;
102
103     virtual void notifyRunLayoutTestsFinished() = 0;
104
105     virtual void notifyInRegionScrollableAreasChanged(const std::vector<Platform::ScrollViewBase*>&) = 0;
106
107     virtual void notifyDocumentOnLoad(bool) = 0;
108
109     virtual void notifyWindowObjectCleared() = 0;
110     virtual BlackBerry::Platform::String invokeClientJavaScriptCallback(const char* const* args, unsigned numArgs) = 0;
111
112     virtual void addMessageToConsole(const unsigned short* message, unsigned messageLength, const unsigned short* source, unsigned sourceLength, unsigned lineNumber) = 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 javascriptSourceParsed(const unsigned short* url, unsigned urlLength, const unsigned short* script, unsigned scriptLength) = 0;
126     virtual void javascriptParsingFailed(const unsigned short* url, unsigned urlLength, const unsigned short* error, unsigned errorLength, int lineNumber) = 0;
127     virtual void javascriptPaused(const unsigned short* stack, unsigned stackLength) = 0;
128     virtual void javascriptContinued() = 0;
129
130     virtual void contentsSizeChanged() = 0;
131     virtual void scrollChanged() = 0;
132     virtual void scaleChanged() = 0;
133
134     virtual void updateInteractionViews() = 0;
135
136     virtual void requestUpdateViewport(int width, int height) = 0;
137
138     virtual void setPageTitle(const unsigned short* title, unsigned titleLength) = 0;
139
140     virtual Platform::Graphics::Window* window() const = 0;
141
142     virtual void notifyPixelContentRendered(const Platform::IntRect&) = 0;
143
144     virtual void inputFocusGained(int64_t inputStyle, Platform::VirtualKeyboardType, Platform::VirtualKeyboardEnterKeyType) = 0;
145     virtual void inputFocusLost() = 0;
146     virtual void inputTextChanged() = 0;
147     virtual void inputSelectionChanged(unsigned selectionStart, unsigned selectionEnd) = 0;
148     virtual void inputLearnText(wchar_t* text, int length) = 0;
149
150     virtual void showFormControls(bool visible, bool previousActive = false, bool nextActive = false) = 0;
151     virtual void showVirtualKeyboard(bool) = 0;
152
153     virtual void requestSpellingCheckingOptions(imf_sp_text_t&, const BlackBerry::Platform::IntRect& documentCaretRect, const BlackBerry::Platform::IntSize& screenOffset, const bool shouldMoveDialog) = 0;
154     virtual int32_t checkSpellingOfStringAsync(wchar_t* text, const unsigned length) = 0;
155
156     virtual void notifySelectionDetailsChanged(const Platform::IntRect& documentStartRect, const Platform::IntRect& documentEndRect, const Platform::IntRectRegion& documentRegion, bool overrideTouchHandling = false, BlackBerry::Platform::RequestedHandlePosition = BlackBerry::Platform::SmartPlacement) = 0;
157     virtual void cancelSelectionVisuals() = 0;
158     virtual void notifySelectionHandlesReversed() = 0;
159     virtual void notifyCaretChanged(const Platform::IntRect& documentCaretRect, bool userTouchTriggered, bool isSingleLineInput = false, const Platform::IntRect& singleLineDocumentBoundingBox = Platform::IntRect(), bool textFieldIsEmpty = false) = 0;
160
161     virtual void cursorChanged(Platform::CursorType, const char* url, const Platform::IntPoint& hotSpotInImage) = 0;
162
163     virtual void requestGlobalLocalServicePermission(Platform::GeoTrackerListener*, const BlackBerry::Platform::String& origin) = 0;
164
165     virtual void requestGeolocationPermission(Platform::GeoTrackerListener*, const BlackBerry::Platform::String& origin) = 0;
166     virtual void cancelGeolocationPermission() = 0;
167     virtual Platform::NetworkStreamFactory* networkStreamFactory() = 0;
168
169     virtual void handleStringPattern(const unsigned short* pattern, unsigned length) = 0;
170     virtual void handleExternalLink(const Platform::NetworkRequest&, const unsigned short* context, unsigned contextLength, bool isClientRedirect) = 0;
171
172     virtual void resetBackForwardList(unsigned listSize, unsigned currentIndex) = 0;
173
174     virtual void openPopupList(bool multiple, int size, const ScopeArray<BlackBerry::Platform::String>& labels, const bool* enableds, const int* itemType, const bool* selecteds) = 0;
175     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;
176
177     virtual WebPage* createWindow(int x, int y, int width, int height, unsigned flags, const BlackBerry::Platform::String& url, const BlackBerry::Platform::String& windowName) = 0;
178
179     virtual void scheduleCloseWindow() = 0;
180
181     // Database interface.
182     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;
183
184     virtual void setIconForUrl(const BlackBerry::Platform::String& originalPageUrl, const BlackBerry::Platform::String& finalPageUrl, const BlackBerry::Platform::String& iconUrl) = 0;
185     virtual void setFavicon(const BlackBerry::Platform::String& dataInBase64, const BlackBerry::Platform::String& url) = 0;
186     virtual void setLargeIcon(const BlackBerry::Platform::String& iconUrl) = 0;
187     virtual void setWebAppCapable() = 0;
188     virtual void setSearchProviderDetails(const BlackBerry::Platform::String& title, const BlackBerry::Platform::String& documentUrl) = 0;
189     virtual void setAlternateFeedDetails(const BlackBerry::Platform::String& title, const BlackBerry::Platform::String& feedUrl) = 0;
190
191     virtual BlackBerry::Platform::String getErrorPage(int errorCode, const BlackBerry::Platform::String& errorMessage, const BlackBerry::Platform::String& url) = 0;
192
193     virtual void willDeferLoading() = 0;
194     virtual void didResumeLoading() = 0;
195
196     // Headers is a list of alternating key and value.
197     virtual void setMetaHeaders(const ScopeArray<BlackBerry::Platform::String>& headers, unsigned headersSize) = 0;
198
199     virtual void needMoreData() = 0;
200     virtual void handleWebInspectorMessageToFrontend(int id, const char* message, int length) = 0;
201
202     virtual BlackBerry::Platform::ViewportAccessor* userInterfaceViewportAccessor() const = 0;
203
204     virtual void animateBlockZoom(double finalScale, const Platform::FloatPoint& finalDocumentScrollPosition) = 0;
205
206     virtual void setPreventsScreenIdleDimming(bool noDimming) = 0;
207     virtual bool authenticationChallenge(const unsigned short* realm, unsigned realmLength, BlackBerry::Platform::String& username, BlackBerry::Platform::String& password) = 0;
208     virtual SaveCredentialType notifyShouldSaveCredential(bool isNew) = 0;
209     virtual void syncProxyCredential(const BlackBerry::Platform::String& username, const BlackBerry::Platform::String& password) = 0;
210     virtual void notifyPopupAutofillDialog(const std::vector<BlackBerry::Platform::String>&) = 0;
211     virtual void notifyDismissAutofillDialog() = 0;
212
213     virtual bool shouldPluginEnterFullScreen() = 0;
214     virtual void didPluginEnterFullScreen() = 0;
215     virtual void didPluginExitFullScreen() = 0;
216     virtual void onPluginStartBackgroundPlay() = 0;
217     virtual void onPluginStopBackgroundPlay() = 0;
218     virtual bool lockOrientation(bool landscape) = 0;
219     virtual void unlockOrientation() = 0;
220     virtual bool isActive() const = 0;
221     virtual bool isVisible() const = 0;
222
223     virtual void setToolTip(const BlackBerry::Platform::String&) = 0;
224     virtual void setStatus(const BlackBerry::Platform::String&) = 0;
225     virtual bool acceptNavigationRequest(const Platform::NetworkRequest&, Platform::NavigationType) = 0;
226     virtual void cursorEventModeChanged(Platform::CursorEventMode) = 0;
227     virtual void touchEventModeChanged(Platform::TouchEventMode) = 0;
228
229     virtual bool downloadAllowed(const BlackBerry::Platform::String& url) = 0;
230     virtual void downloadRequested(Platform::FilterStream*, const BlackBerry::Platform::String& suggestedFilename) = 0;
231
232     virtual int fullscreenStart() = 0;
233     virtual int fullscreenStart(const char* contextName, Platform::Graphics::Window*, const BlackBerry::Platform::IntRect& windowScreenRect) = 0;
234
235     virtual int fullscreenStop() = 0;
236
237     virtual int fullscreenSetWindowRect(const BlackBerry::Platform::IntRect& newWindowScreenRect) = 0;
238
239     virtual void drawVerticalScrollbar() = 0;
240     virtual void drawHorizontalScrollbar() = 0;
241     virtual void populateCustomHeaders(Platform::NetworkRequest&) = 0;
242
243     virtual void notifyWillUpdateApplicationCache() = 0;
244     virtual void notifyDidLoadFromApplicationCache() = 0;
245
246     virtual void clearCookies() = 0;
247     virtual void clearCache() = 0;
248
249     virtual bool hasKeyboardFocus() = 0;
250     virtual bool createPopupWebView(const Platform::IntRect&) = 0;
251     virtual void closePopupWebView() = 0;
252
253     virtual void addSearchProvider(const Platform::String&) = 0;
254     virtual int  isSearchProviderInstalled(const Platform::String&) = 0;
255
256     // Match with ChromeClient::CustomHandlersState.
257     enum ProtocolHandlersState {
258         ProtocolHandlersNew,
259         ProtocolHandlersRegistered,
260         ProtocolHandlersDeclined
261     };
262     virtual void registerProtocolHandler(const BlackBerry::Platform::String& /*scheme*/, const BlackBerry::Platform::String& /*baseURL*/, const BlackBerry::Platform::String& /*url*/, const BlackBerry::Platform::String& /*title*/) = 0;
263     virtual ProtocolHandlersState isProtocolHandlerRegistered(const BlackBerry::Platform::String& /*scheme*/, const BlackBerry::Platform::String& /*baseURL*/, const BlackBerry::Platform::String& /*url*/) = 0;
264     virtual void unregisterProtocolHandler(const BlackBerry::Platform::String& /*scheme*/, const BlackBerry::Platform::String& /*baseURL*/, const BlackBerry::Platform::String& /*url*/) = 0;
265
266     virtual void requestUserMedia(const Platform::WebUserMediaRequest&) = 0;
267     virtual void cancelUserMediaRequest(const Platform::WebUserMediaRequest&) = 0;
268     virtual void updateFindStringResult(int numMatches, int currentIndex) = 0;
269
270     // Match with NotificationClient::Permission.
271     enum Permission {
272         PermissionAllowed, // User has allowed notifications
273         PermissionNotAllowed, // User has not yet allowed
274         PermissionDenied // User has explicitly denied permission
275     };
276     virtual void requestNotificationPermission(const BlackBerry::Platform::String& /*requestId*/, const BlackBerry::Platform::String& /*origin*/) = 0;
277     virtual Permission checkNotificationPermission(const BlackBerry::Platform::String& /*origin*/) = 0;
278     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;
279     virtual void cancelNotification(const BlackBerry::Platform::String& /*id*/) = 0;
280     virtual void clearNotifications(const std::vector<BlackBerry::Platform::String>& /*notificationIds*/) = 0;
281     virtual void notificationDestroyed(const BlackBerry::Platform::String& /*notificationId*/) = 0;
282 };
283 } // namespace WebKit
284 } // namespace BlackBerry
285
286 #endif // WebPageClient_h