[BlackBerry] Tie up the scrolling machinery to the graphics tree when applicable...
[WebKit-https.git] / Source / WebKit / blackberry / Api / WebPage.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 WebPage_h
20 #define WebPage_h
21
22 #include "BlackBerryGlobal.h"
23 #include "WebString.h"
24
25 #include <BlackBerryPlatformGuardedPointer.h>
26 #include <BlackBerryPlatformInputEvents.h>
27 #include <BlackBerryPlatformWebContext.h>
28 #include <imf/input_data.h>
29 #include <network/NetworkRequest.h>
30 #include <string>
31 #include <vector>
32
33 struct OpaqueJSContext;
34 typedef const struct OpaqueJSContext* JSContextRef;
35
36 struct OpaqueJSValue;
37 typedef const struct OpaqueJSValue* JSValueRef;
38
39 namespace WebCore {
40 class ChromeClientBlackBerry;
41 class Frame;
42 class FrameLoaderClientBlackBerry;
43 class PagePopupBlackBerry;
44 }
45
46 class WebDOMDocument;
47 class WebDOMNode;
48 template<typename T> class SharedArray;
49
50 namespace BlackBerry {
51 namespace Platform {
52 class IntPoint;
53 class IntRect;
54 class IntSize;
55 class KeyboardEvent;
56 class MouseEvent;
57 class TouchEvent;
58 class TouchPoint;
59 }
60
61 namespace WebKit {
62
63 class BackingStore;
64 class BackingStoreClient;
65 class BackingStorePrivate;
66 class InRegionScroller;
67 class RenderQueue;
68 class WebOverlay;
69 class WebPageClient;
70 class WebPageCompositor;
71 class WebPageGroupLoadDeferrer;
72 class WebPagePrivate;
73 class WebSelectionOverlay;
74 class WebSettings;
75 class WebTapHighlight;
76 class WebViewportArguments;
77
78 enum JavaScriptDataType { JSUndefined = 0, JSNull, JSBoolean, JSNumber, JSString, JSObject, JSException, JSDataTypeMax };
79
80 enum ActivationStateType { ActivationActive, ActivationInactive, ActivationStandby };
81
82 enum TargetDetectionStrategy {PointBased, RectBased};
83
84 class BLACKBERRY_EXPORT WebPage : public Platform::GuardedPointerBase {
85 public:
86     WebPage(WebPageClient*, const WebString& pageGroupName, const Platform::IntRect&);
87     void destroy();
88
89     WebPageClient* client() const;
90
91     void load(const char* url, const char* networkToken, bool isInitial = false);
92
93     void loadExtended(const char* url, const char* networkToken, const char* method, Platform::NetworkRequest::CachePolicy = Platform::NetworkRequest::UseProtocolCachePolicy, const char* data = 0, size_t dataLength = 0, const char* const* headers = 0, size_t headersLength = 0, bool mustHandleInternally = false);
94
95     void loadFile(const char* path, const char* overrideContentType = "");
96
97     void loadString(const char* string, const char* baseURL, const char* contentType = "text/html", const char* failingURL = 0);
98
99     void download(const Platform::NetworkRequest&);
100
101     bool executeJavaScript(const char* script, JavaScriptDataType& returnType, WebString& returnValue);
102
103     // This will execute the script even if in-page JavaScript is disabled.
104     bool executeJavaScriptInIsolatedWorld(const char* script, JavaScriptDataType& returnType, WebString& returnValue);
105
106     // Takes a UTF16 encoded script that is used explicitly by the pattern matching code
107     bool executeJavaScriptInIsolatedWorld(const std::wstring& script, JavaScriptDataType& returnType, WebString& returnValue);
108
109     bool executeJavaScriptFunction(const std::vector<std::string> &script, const std::vector<std::string> &args, JavaScriptDataType& returnType, WebString& returnValue);
110
111     void initializeIconDataBase();
112
113     void stopLoading();
114
115     bool dispatchBeforeUnloadEvent();
116
117     // This will force any unload handlers to run.
118     void prepareToDestroy();
119
120     void enableCrossSiteXHR();
121     void addOriginAccessWhitelistEntry(const char* sourceOrigin, const char* destinationOrigin, bool allowDestinationSubdomains);
122     void removeOriginAccessWhitelistEntry(const char* sourceOrigin, const char* destinationOrigin, bool allowDestinationSubdomains);
123
124     void reload();
125     void reloadFromCache();
126
127     WebSettings* settings() const;
128
129     void setVisible(bool);
130     bool isVisible() const;
131
132     void setScreenOrientation(int);
133     void setHasPendingSurfaceSizeChange();
134     void applyPendingOrientationIfNeeded();
135
136     Platform::IntSize viewportSize() const;
137     void setViewportSize(const Platform::IntSize& viewportSize, bool ensureFocusElementVisible = true);
138
139     void resetVirtualViewportOnCommitted(bool reset);
140     void setVirtualViewportSize(int width, int height);
141
142     // Used for default layout size unless overridden by web content or by other APIs.
143     void setDefaultLayoutSize(int width, int height);
144
145     bool mouseEvent(const Platform::MouseEvent&, bool* wheelDeltaAccepted = 0);
146
147     // Handles native javascript touch events.
148     bool touchEvent(const Platform::TouchEvent&);
149
150     // For conversion to mouse events.
151     void touchEventCancel();
152     bool touchPointAsMouseEvent(const Platform::TouchPoint&, bool useFatFingers = true);
153
154     // Returns true if the key stroke was handled by WebKit.
155     bool keyEvent(const Platform::KeyboardEvent&);
156
157     WebString title() const;
158     WebString selectedText() const;
159     WebString cutSelectedText();
160     void insertText(const WebString&);
161     void clearCurrentInputField();
162
163     void cut();
164     void copy();
165     void paste();
166     void selectAll();
167
168     // Text encoding.
169     WebString textEncoding();
170     WebString forcedTextEncoding();
171     void setForcedTextEncoding(const char*);
172
173     // Scroll position returned is in transformed coordinates.
174     Platform::IntPoint scrollPosition() const;
175     // Scroll position provided should be in transformed coordinates.
176     void setScrollPosition(const Platform::IntPoint&);
177     bool scrollBy(const Platform::IntSize&, bool scrollMainFrame = true);
178     void notifyInRegionScrollStatusChanged(bool status);
179     void setScrollOriginPoint(const Platform::IntPoint&);
180
181     BackingStore* backingStore() const;
182
183     InRegionScroller* inRegionScroller() const;
184
185     bool zoomToFit();
186     bool zoomToOneOne();
187     void zoomToInitialScale();
188     bool blockZoom(int x, int y);
189     void blockZoomAnimationFinished();
190     bool isAtInitialZoom() const;
191     bool isMaxZoomed() const;
192     bool isMinZoomed() const;
193     bool pinchZoomAboutPoint(double scale, int x, int y);
194
195     bool isUserScalable() const;
196     void setUserScalable(bool);
197     double currentScale() const;
198     double initialScale() const;
199     double zoomToFitScale() const;
200     void setInitialScale(double);
201     double minimumScale() const;
202     void setMinimumScale(double);
203     double maximumScale() const;
204     void setMaximumScale(double);
205
206     void assignFocus(Platform::FocusDirection);
207
208     void setFocused(bool);
209
210     void clearBrowsingData();
211     void clearHistory();
212     void clearCookies();
213     void clearCache();
214     void clearLocalStorage();
215     void clearCredentials();
216     void clearAutofillData();
217     void clearNeverRememberSites();
218
219     void runLayoutTests();
220
221     // Find the next utf8 string in the given direction.
222     // Case sensitivity, wrapping, and highlighting all matches are also toggleable.
223     bool findNextString(const char*, bool forward, bool caseSensitive, bool wrap, bool highlightAllMatches);
224
225     // JavaScriptDebugger interface.
226     bool enableScriptDebugger();
227     bool disableScriptDebugger();
228
229     JSContextRef scriptContext() const;
230     JSValueRef windowObject() const;
231
232     void addBreakpoint(const unsigned short* url, unsigned urlLength, int lineNumber, const unsigned short* condition, unsigned conditionLength);
233     void updateBreakpoint(const unsigned short* url, unsigned urlLength, int lineNumber, const unsigned short* condition, unsigned conditionLength);
234     void removeBreakpoint(const unsigned short* url, unsigned urlLength, int lineNumber);
235
236     bool pauseOnExceptions();
237     void setPauseOnExceptions(bool);
238
239     void pauseInDebugger();
240     void resumeDebugger();
241
242     void stepOverStatementInDebugger();
243     void stepIntoStatementInDebugger();
244     void stepOutOfFunctionInDebugger();
245
246     unsigned timeoutForJavaScriptExecution() const;
247     void setTimeoutForJavaScriptExecution(unsigned ms);
248
249     void setCaretHighlightStyle(Platform::CaretHighlightStyle);
250
251     // IMF functions.
252     bool setBatchEditingActive(bool);
253     bool setInputSelection(unsigned start, unsigned end);
254     int inputCaretPosition() const;
255     bool deleteTextRelativeToCursor(unsigned leftOffset, unsigned rightOffset);
256     spannable_string_t* selectedText(int32_t flags);
257     spannable_string_t* textBeforeCursor(int32_t length, int32_t flags);
258     spannable_string_t* textAfterCursor(int32_t length, int32_t flags);
259     extracted_text_t* extractedTextRequest(extracted_text_request_t*, int32_t flags);
260     int32_t setComposingRegion(int32_t start, int32_t end);
261     int32_t finishComposition();
262     int32_t setComposingText(spannable_string_t*, int32_t relativeCursorPosition);
263     int32_t commitText(spannable_string_t*, int32_t relativeCursorPosition);
264
265     void setSpellCheckingEnabled(bool);
266     void spellCheckingRequestProcessed(int32_t transactionId, spannable_string_t*);
267     void spellCheckingRequestCancelled(int32_t transactionId);
268
269     void setSelection(const Platform::IntPoint& startPoint, const Platform::IntPoint& endPoint);
270     void setCaretPosition(const Platform::IntPoint&);
271     void selectAtPoint(const Platform::IntPoint&);
272     void selectionCancelled();
273     bool selectionContains(const Platform::IntPoint&);
274
275     void popupListClosed(int size, const bool* selecteds);
276     void popupListClosed(int index);
277     void setDateTimeInput(const WebString& value);
278     void setColorInput(const WebString& value);
279
280     void onInputLocaleChanged(bool isRTL);
281     static void onNetworkAvailabilityChanged(bool available);
282     static void onCertificateStoreLocationSet(const WebString& caPath);
283
284     WebString textHasAttribute(const WebString& query) const;
285
286     void setAllowNotification(const WebString& domain, bool allow);
287
288     Platform::WebContext webContext(TargetDetectionStrategy) const;
289
290     typedef intptr_t BackForwardId;
291     struct BackForwardEntry {
292         WebString url;
293         WebString originalUrl;
294         WebString title;
295         WebString networkToken;
296         BackForwardId id;
297         bool lastVisitWasHTTPNonGet;
298     };
299
300     bool canGoBackOrForward(int delta) const;
301     // Returns false if there is no page for the given delta (eg.
302     // attempt to go back with -1 when on the first page).
303     bool goBackOrForward(int delta);
304     void goToBackForwardEntry(BackForwardId);
305
306     int backForwardListLength() const;
307     void getBackForwardList(SharedArray<BackForwardEntry>& result) const;
308     void releaseBackForwardEntry(BackForwardId) const;
309     void clearBackForwardList(bool keepCurrentPage) const;
310
311     void addVisitedLink(const unsigned short* url, unsigned length);
312
313 #if defined(ENABLE_WEBDOM) && ENABLE_WEBDOM
314     WebDOMDocument document() const;
315     WebDOMNode nodeAtPoint(int x, int y);
316     bool getNodeRect(const WebDOMNode&, Platform::IntRect& result);
317     bool setNodeFocus(const WebDOMNode&, bool on);
318     bool setNodeHovered(const WebDOMNode&, bool on);
319     bool nodeHasHover(const WebDOMNode&);
320 #endif
321
322     bool defersLoading() const;
323
324     bool willFireTimer();
325
326     bool isEnableLocalAccessToAllCookies() const;
327     void setEnableLocalAccessToAllCookies(bool);
328
329     void enableWebInspector();
330     void disableWebInspector();
331     bool isWebInspectorEnabled();
332     void enablePasswordEcho();
333     void disablePasswordEcho();
334     void dispatchInspectorMessage(const std::string& message);
335     void inspectCurrentContextElement();
336
337     // FIXME: Needs API review on this header. See PR #120402.
338     void notifyPagePause();
339     void notifyPageResume();
340     void notifyPageBackground();
341     void notifyPageForeground();
342     void notifyPageFullScreenAllowed();
343     void notifyPageFullScreenExit();
344     void notifyDeviceIdleStateChange(bool enterIdle);
345     void notifyAppActivationStateChange(ActivationStateType);
346     void notifySwipeEvent();
347     void notifyScreenPowerStateChanged(bool powered);
348     void notifyFullScreenVideoExited(bool done);
349     void clearPluginSiteData();
350     void setJavaScriptCanAccessClipboard(bool);
351     bool isWebGLEnabled() const;
352     void setWebGLEnabled(bool);
353
354     void destroyWebPageCompositor();
355
356     void setUserViewportArguments(const WebViewportArguments&);
357     void resetUserViewportArguments();
358
359     WebTapHighlight* tapHighlight() const;
360     void setTapHighlight(WebTapHighlight*);
361
362     WebSelectionOverlay* selectionOverlay() const;
363
364     // Adds an overlay that can be modified on the WebKit thread, and
365     // whose attributes can be overridden on the compositing thread.
366     void addOverlay(WebOverlay*);
367     void removeOverlay(WebOverlay*);
368
369     // Adds an overlay that can only be modified on the compositing thread.
370     void addCompositingThreadOverlay(WebOverlay*);
371     void removeCompositingThreadOverlay(WebOverlay*);
372
373     // Popup client
374     void initPopupWebView(BlackBerry::WebKit::WebPage*);
375     void popupOpened(WebCore::PagePopupBlackBerry* webPopup);
376     void popupClosed();
377     bool hasOpenedPopup() const;
378     WebCore::PagePopupBlackBerry* popup();
379
380     void autofillTextField(const std::string&);
381
382 private:
383     virtual ~WebPage();
384
385     friend class WebKit::BackingStore;
386     friend class WebKit::BackingStoreClient;
387     friend class WebKit::BackingStorePrivate;
388     friend class WebKit::RenderQueue;
389     friend class WebKit::WebPageCompositor;
390     friend class WebKit::WebPageGroupLoadDeferrer;
391     friend class WebKit::WebPagePrivate;
392     friend class WebCore::ChromeClientBlackBerry;
393     friend class WebCore::FrameLoaderClientBlackBerry;
394     friend class WebCore::PagePopupBlackBerry;
395     WebPagePrivate* d;
396 };
397 }
398 }
399
400 #endif // WebPage_h