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