OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (C) 2009 Google Inc. All rights reserved. | |
3 * | |
4 * Redistribution and use in source and binary forms, with or without | |
5 * modification, are permitted provided that the following conditions are | |
6 * met: | |
7 * | |
8 * * Redistributions of source code must retain the above copyright | |
9 * notice, this list of conditions and the following disclaimer. | |
10 * * Redistributions in binary form must reproduce the above | |
11 * copyright notice, this list of conditions and the following disclaimer | |
12 * in the documentation and/or other materials provided with the | |
13 * distribution. | |
14 * * Neither the name of Google Inc. nor the names of its | |
15 * contributors may be used to endorse or promote products derived from | |
16 * this software without specific prior written permission. | |
17 * | |
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
29 */ | |
30 | |
31 #ifndef WebViewClient_h | |
32 #define WebViewClient_h | |
33 | |
34 #include "../platform/WebColor.h" | |
35 #include "../platform/WebGraphicsContext3D.h" | |
36 #include "../platform/WebString.h" | |
37 #include "WebAccessibilityNotification.h" | |
38 #include "WebContentDetectionResult.h" | |
39 #include "WebDragOperation.h" | |
40 #include "WebEditingAction.h" | |
41 #include "WebFileChooserCompletion.h" | |
42 #include "WebFileChooserParams.h" | |
43 #include "WebPageVisibilityState.h" | |
44 #include "WebPopupType.h" | |
45 #include "WebTextAffinity.h" | |
46 #include "WebTextDirection.h" | |
47 #include "WebWidgetClient.h" | |
48 | |
49 namespace WebKit { | |
50 | |
51 class WebAccessibilityObject; | |
52 class WebColorChooser; | |
53 class WebColorChooserClient; | |
54 class WebCompositorOutputSurface; | |
55 class WebDateTimeChooserCompletion; | |
56 class WebDeviceOrientationClient; | |
57 class WebDragData; | |
58 class WebElement; | |
59 class WebExternalPopupMenu; | |
60 class WebExternalPopupMenuClient; | |
61 class WebFileChooserCompletion; | |
62 class WebFrame; | |
63 class WebGeolocationClient; | |
64 class WebGeolocationService; | |
65 class WebGestureEvent; | |
66 class WebHelperPlugin; | |
67 class WebHitTestResult; | |
68 class WebIconLoadingCompletion; | |
69 class WebImage; | |
70 class WebInputElement; | |
71 class WebKeyboardEvent; | |
72 class WebNode; | |
73 class WebNotificationPresenter; | |
74 class WebRange; | |
75 class WebSpeechInputController; | |
76 class WebSpeechInputListener; | |
77 class WebSpeechRecognizer; | |
78 class WebStorageNamespace; | |
79 class WebURL; | |
80 class WebURLRequest; | |
81 class WebUserMediaClient; | |
82 class WebView; | |
83 class WebWidget; | |
84 struct WebConsoleMessage; | |
85 struct WebContextMenuData; | |
86 struct WebDateTimeChooserParams; | |
87 struct WebPoint; | |
88 struct WebPopupMenuInfo; | |
89 struct WebRect; | |
90 struct WebSize; | |
91 struct WebWindowFeatures; | |
92 | |
93 // Since a WebView is a WebWidget, a WebViewClient is a WebWidgetClient. | |
94 // Virtual inheritance allows an implementation of WebWidgetClient to be | |
95 // easily reused as part of an implementation of WebViewClient. | |
96 class WebViewClient : virtual public WebWidgetClient { | |
97 public: | |
98 // Factory methods ----------------------------------------------------- | |
99 | |
100 // Create a new related WebView. This method must clone its session storage | |
101 // so any subsequent calls to createSessionStorageNamespace conform to the | |
102 // WebStorage specification. | |
103 // The request parameter is only for the client to check if the request | |
104 // could be fulfilled. The client should not load the request. | |
105 // The policy parameter indicates how the new view will be displayed in | |
106 // WebWidgetClient::show. | |
107 virtual WebView* createView(WebFrame* creator, | |
108 const WebURLRequest& request, | |
109 const WebWindowFeatures& features, | |
110 const WebString& name, | |
111 WebNavigationPolicy policy) { | |
112 return 0; | |
113 } | |
114 | |
115 // Create a new WebPopupMenu. In the second form, the client is | |
116 // responsible for rendering the contents of the popup menu. | |
117 virtual WebWidget* createPopupMenu(WebPopupType) { return 0; } | |
118 virtual WebWidget* createPopupMenu(const WebPopupMenuInfo&) { return 0; } | |
119 virtual WebExternalPopupMenu* createExternalPopupMenu( | |
120 const WebPopupMenuInfo&, WebExternalPopupMenuClient*) { return 0; } | |
121 | |
122 // Create a session storage namespace object associated with this WebView. | |
123 virtual WebStorageNamespace* createSessionStorageNamespace(unsigned quota) {
return 0; } | |
124 | |
125 | |
126 // Misc ---------------------------------------------------------------- | |
127 | |
128 // A new message was added to the console. | |
129 virtual void didAddMessageToConsole( | |
130 const WebConsoleMessage&, const WebString& sourceName, unsigned sourceLi
ne) { } | |
131 | |
132 // Called when script in the page calls window.print(). If frame is | |
133 // non-null, then it selects a particular frame, including its | |
134 // children, to print. Otherwise, the main frame and its children | |
135 // should be printed. | |
136 virtual void printPage(WebFrame*) { } | |
137 | |
138 // Called to retrieve the provider of desktop notifications. | |
139 virtual WebNotificationPresenter* notificationPresenter() { return 0; } | |
140 | |
141 // Called to request an icon for the specified filenames. | |
142 // The icon is shown in a file upload control. | |
143 virtual bool queryIconForFiles(const WebVector<WebString>& filenames, WebIco
nLoadingCompletion*) { return false; } | |
144 | |
145 // This method enumerates all the files in the path. It returns immediately | |
146 // and asynchronously invokes the WebFileChooserCompletion with all the | |
147 // files in the directory. Returns false if the WebFileChooserCompletion | |
148 // will never be called. | |
149 virtual bool enumerateChosenDirectory(const WebString& path, WebFileChooserC
ompletion*) { return false; } | |
150 | |
151 // Creates the main WebFrame for the specified WebHelperPlugin. | |
152 // Called by WebHelperPlugin to provide the WebFrameClient interface for the
WebFrame. | |
153 virtual void initializeHelperPluginWebFrame(WebHelperPlugin*) { } | |
154 | |
155 | |
156 // Navigational -------------------------------------------------------- | |
157 | |
158 // These notifications bracket any loading that occurs in the WebView. | |
159 virtual void didStartLoading() { } | |
160 virtual void didStopLoading() { } | |
161 | |
162 // Notification that some progress was made loading the current page. | |
163 // loadProgress is a value between 0 (nothing loaded) and 1.0 (frame fully | |
164 // loaded). | |
165 virtual void didChangeLoadProgress(WebFrame*, double loadProgress) { } | |
166 | |
167 // Editing ------------------------------------------------------------- | |
168 | |
169 // These methods allow the client to intercept and overrule editing | |
170 // operations. | |
171 virtual bool shouldBeginEditing(const WebRange&) { return true; } | |
172 virtual bool shouldEndEditing(const WebRange&) { return true; } | |
173 virtual bool shouldInsertNode( | |
174 const WebNode&, const WebRange&, WebEditingAction) { return true; } | |
175 virtual bool shouldInsertText( | |
176 const WebString&, const WebRange&, WebEditingAction) { return true; } | |
177 virtual bool shouldChangeSelectedRange( | |
178 const WebRange& from, const WebRange& to, WebTextAffinity, | |
179 bool stillSelecting) { return true; } | |
180 virtual bool shouldDeleteRange(const WebRange&) { return true; } | |
181 virtual bool shouldApplyStyle(const WebString& style, const WebRange&) { ret
urn true; } | |
182 | |
183 virtual void didBeginEditing() { } | |
184 virtual void didCancelCompositionOnSelectionChange() { } | |
185 virtual void didChangeSelection(bool isSelectionEmpty) { } | |
186 virtual void didChangeContents() { } | |
187 virtual void didExecuteCommand(const WebString& commandName) { } | |
188 virtual void didEndEditing() { } | |
189 virtual void didChangeFormState(const WebNode&) { } | |
190 | |
191 // This method is called in response to WebView's handleInputEvent() | |
192 // when the default action for the current keyboard event is not | |
193 // suppressed by the page, to give the embedder a chance to handle | |
194 // the keyboard event specially. | |
195 // | |
196 // Returns true if the keyboard event was handled by the embedder, | |
197 // indicating that the default action should be suppressed. | |
198 virtual bool handleCurrentKeyboardEvent() { return false; } | |
199 | |
200 // Dialogs ------------------------------------------------------------- | |
201 | |
202 // This method opens the color chooser and returns a new WebColorChooser | |
203 // instance. If there is a WebColorChooser already from the last time this | |
204 // was called, it ends the color chooser by calling endChooser, and replaces | |
205 // it with the new one. | |
206 virtual WebColorChooser* createColorChooser(WebColorChooserClient*, | |
207 const WebColor&) { return 0; } | |
208 | |
209 // This method returns immediately after showing the dialog. When the | |
210 // dialog is closed, it should call the WebFileChooserCompletion to | |
211 // pass the results of the dialog. Returns false if | |
212 // WebFileChooseCompletion will never be called. | |
213 virtual bool runFileChooser(const WebFileChooserParams&, | |
214 WebFileChooserCompletion*) { return false; } | |
215 | |
216 // Ask users to choose date/time for the specified parameters. When a user | |
217 // chooses a value, an implementation of this function should call | |
218 // WebDateTimeChooserCompletion::didChooseValue or didCancelChooser. If the | |
219 // implementation opened date/time chooser UI successfully, it should return | |
220 // true. This function is used only if ExternalDateTimeChooser is used. | |
221 virtual bool openDateTimeChooser(const WebDateTimeChooserParams&, WebDateTim
eChooserCompletion*) { return false; } | |
222 | |
223 // Displays a modal alert dialog containing the given message. Returns | |
224 // once the user dismisses the dialog. | |
225 virtual void runModalAlertDialog( | |
226 WebFrame*, const WebString& message) { } | |
227 | |
228 // Displays a modal confirmation dialog with the given message as | |
229 // description and OK/Cancel choices. Returns true if the user selects | |
230 // 'OK' or false otherwise. | |
231 virtual bool runModalConfirmDialog( | |
232 WebFrame*, const WebString& message) { return false; } | |
233 | |
234 // Displays a modal input dialog with the given message as description | |
235 // and OK/Cancel choices. The input field is pre-filled with | |
236 // defaultValue. Returns true if the user selects 'OK' or false | |
237 // otherwise. Upon returning true, actualValue contains the value of | |
238 // the input field. | |
239 virtual bool runModalPromptDialog( | |
240 WebFrame*, const WebString& message, const WebString& defaultValue, | |
241 WebString* actualValue) { return false; } | |
242 | |
243 // Displays a modal confirmation dialog containing the given message as | |
244 // description and OK/Cancel choices, where 'OK' means that it is okay | |
245 // to proceed with closing the view. Returns true if the user selects | |
246 // 'OK' or false otherwise. | |
247 virtual bool runModalBeforeUnloadDialog( | |
248 WebFrame*, const WebString& message) { return true; } | |
249 | |
250 | |
251 // UI ------------------------------------------------------------------ | |
252 | |
253 // Called when script modifies window.status | |
254 virtual void setStatusText(const WebString&) { } | |
255 | |
256 // Called when hovering over an anchor with the given URL. | |
257 virtual void setMouseOverURL(const WebURL&) { } | |
258 | |
259 // Called when keyboard focus switches to an anchor with the given URL. | |
260 virtual void setKeyboardFocusURL(const WebURL&) { } | |
261 | |
262 // Shows a context menu with commands relevant to a specific element on | |
263 // the given frame. Additional context data is supplied. | |
264 virtual void showContextMenu(WebFrame*, const WebContextMenuData&) { } | |
265 | |
266 // Called when a drag-n-drop operation should begin. | |
267 virtual void startDragging(WebFrame*, const WebDragData&, WebDragOperationsM
ask, const WebImage&, const WebPoint& dragImageOffset) { } | |
268 | |
269 // Called to determine if drag-n-drop operations may initiate a page | |
270 // navigation. | |
271 virtual bool acceptsLoadDrops() { return true; } | |
272 | |
273 // Take focus away from the WebView by focusing an adjacent UI element | |
274 // in the containing window. | |
275 virtual void focusNext() { } | |
276 virtual void focusPrevious() { } | |
277 | |
278 // Called when a new node gets focused. | |
279 virtual void focusedNodeChanged(const WebNode&) { } | |
280 | |
281 virtual void numberOfWheelEventHandlersChanged(unsigned) { } | |
282 | |
283 // Indicates two things: | |
284 // 1) This view may have a new layout now. | |
285 // 2) Calling layout() is a no-op. | |
286 // After calling WebWidget::layout(), expect to get this notification | |
287 // unless the view did not need a layout. | |
288 virtual void didUpdateLayout() { } | |
289 | |
290 // Return true to swallow the input event if the embedder will start a disam
biguation popup | |
291 virtual bool didTapMultipleTargets(const WebGestureEvent&, const WebVector<W
ebRect>& targetRects) { return false; } | |
292 | |
293 // Returns comma separated list of accept languages. | |
294 virtual WebString acceptLanguages() { return WebString(); } | |
295 | |
296 // Session history ----------------------------------------------------- | |
297 | |
298 // Tells the embedder to navigate back or forward in session history by | |
299 // the given offset (relative to the current position in session | |
300 // history). | |
301 virtual void navigateBackForwardSoon(int offset) { } | |
302 | |
303 // Returns the number of history items before/after the current | |
304 // history item. | |
305 virtual int historyBackListCount() { return 0; } | |
306 virtual int historyForwardListCount() { return 0; } | |
307 | |
308 // Called to notify the embedder when a new history item is added. | |
309 virtual void didAddHistoryItem() { } | |
310 | |
311 | |
312 // Accessibility ------------------------------------------------------- | |
313 | |
314 // Notifies embedder about an accessibility notification. | |
315 virtual void postAccessibilityNotification(const WebAccessibilityObject&, We
bAccessibilityNotification) { } | |
316 | |
317 | |
318 // Developer tools ----------------------------------------------------- | |
319 | |
320 // Called to notify the client that the inspector's settings were | |
321 // changed and should be saved. See WebView::inspectorSettings. | |
322 virtual void didUpdateInspectorSettings() { } | |
323 | |
324 virtual void didUpdateInspectorSetting(const WebString& key, const WebString
& value) { } | |
325 | |
326 // Geolocation --------------------------------------------------------- | |
327 | |
328 // Access the embedder API for (client-based) geolocation client . | |
329 virtual WebGeolocationClient* geolocationClient() { return 0; } | |
330 // Access the embedder API for (non-client-based) geolocation services. | |
331 virtual WebGeolocationService* geolocationService() { return 0; } | |
332 | |
333 // Speech -------------------------------------------------------------- | |
334 | |
335 // Access the embedder API for speech input services. | |
336 virtual WebSpeechInputController* speechInputController( | |
337 WebSpeechInputListener*) { return 0; } | |
338 | |
339 // Access the embedder API for speech recognition services. | |
340 virtual WebSpeechRecognizer* speechRecognizer() { return 0; } | |
341 | |
342 // Device Orientation -------------------------------------------------- | |
343 | |
344 // Access the embedder API for device orientation services. | |
345 virtual WebDeviceOrientationClient* deviceOrientationClient() { return 0; } | |
346 | |
347 // Zoom ---------------------------------------------------------------- | |
348 | |
349 // Informs the browser that the zoom levels for this frame have changed from | |
350 // the default values. | |
351 virtual void zoomLimitsChanged(double minimumLevel, double maximumLevel) { } | |
352 | |
353 // Informs the browser that the zoom level has changed as a result of an | |
354 // action that wasn't initiated by the client. | |
355 virtual void zoomLevelChanged() { } | |
356 | |
357 // Registers a new URL handler for the given protocol. | |
358 virtual void registerProtocolHandler(const WebString& scheme, | |
359 const WebString& baseUrl, | |
360 const WebString& url, | |
361 const WebString& title) { } | |
362 | |
363 // Visibility ----------------------------------------------------------- | |
364 | |
365 // Returns the current visibility of the WebView. | |
366 virtual WebPageVisibilityState visibilityState() const | |
367 { | |
368 return WebPageVisibilityStateVisible; | |
369 } | |
370 | |
371 // Media Streams ------------------------------------------------------- | |
372 | |
373 virtual WebUserMediaClient* userMediaClient() { return 0; } | |
374 | |
375 | |
376 // Content detection ---------------------------------------------------- | |
377 | |
378 // Retrieves detectable content (e.g., email addresses, phone numbers) | |
379 // around a hit test result. The embedder should use platform-specific | |
380 // content detectors to analyze the region around the hit test result. | |
381 virtual WebContentDetectionResult detectContentAround(const WebHitTestResult
&) { return WebContentDetectionResult(); } | |
382 | |
383 // Schedules a new content intent with the provided url. | |
384 virtual void scheduleContentIntent(const WebURL&) { } | |
385 | |
386 // Cancels any previously scheduled content intents that have not yet launch
ed. | |
387 virtual void cancelScheduledContentIntents() { } | |
388 | |
389 // Draggable regions ---------------------------------------------------- | |
390 | |
391 // Informs the browser that the draggable regions have been updated. | |
392 virtual void draggableRegionsChanged() { } | |
393 | |
394 protected: | |
395 ~WebViewClient() { } | |
396 }; | |
397 | |
398 } // namespace WebKit | |
399 | |
400 #endif | |
OLD | NEW |