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