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