OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // WebCore provides hooks for several kinds of functionality, allowing separate | 5 #ifndef CHROME_COMMON_NAVIGATION_GESTURE_H_ |
6 // classes termed "delegates" to receive notifications (in the form of direct | 6 #define CHROME_COMMON_NAVIGATION_GESTURE_H_ |
7 // function calls) when certain events are about to occur or have just occurred. | |
8 // In some cases, the delegate implements the needed functionality; in others, | |
9 // the delegate has some control over the behavior but doesn't actually | |
10 // implement it. For example, the UI delegate is responsible for showing a | |
11 // dialog box or otherwise handling a JavaScript window.alert() call, via the | |
12 // RunJavaScriptAlert() method. On the other hand, the editor delegate doesn't | |
13 // actually handle editing functionality, although it could (for example) | |
14 // override whether a content-editable node accepts editing focus by returning | |
15 // false from ShouldBeginEditing(). (It would also possible for a more | |
16 // special-purpose editing delegate to act on the edited node in some way, e.g. | |
17 // to highlight modified text in the DidChangeContents() method.) | |
18 | |
19 // WebKit divides the delegated tasks into several different classes, but we | |
20 // combine them into a single WebViewDelegate. This single delegate encompasses | |
21 // the needed functionality of the WebKit UIDelegate, ContextMenuDelegate, | |
22 // PolicyDelegate, FrameLoadDelegate, and EditorDelegate; additional portions | |
23 // of ChromeClient and FrameLoaderClient not delegated in the WebKit | |
24 // implementation; and some WebView additions. | |
25 | |
26 #ifndef WEBKIT_GLUE_WEBVIEW_DELEGATE_H_ | |
27 #define WEBKIT_GLUE_WEBVIEW_DELEGATE_H_ | |
28 | |
29 #include <vector> | |
30 | |
31 #include "webkit/api/public/WebFrame.h" | |
32 #include "webkit/api/public/WebNavigationPolicy.h" | |
33 #include "webkit/api/public/WebNavigationType.h" | |
34 #include "webkit/api/public/WebTextDirection.h" | |
35 #include "webkit/api/public/WebWidgetClient.h" | |
36 #include "webkit/glue/context_menu.h" | |
37 | |
38 namespace webkit_glue { | |
39 class WebMediaPlayerDelegate; | |
40 struct WebPluginGeometry; | |
41 } | |
42 | |
43 namespace WebCore { | |
44 class AccessibilityObject; | |
45 } | |
46 | |
47 namespace WebKit { | |
48 class WebDataSource; | |
49 class WebDragData; | |
50 class WebForm; | |
51 class WebWorker; | |
52 class WebWorkerClient; | |
53 class WebMediaPlayer; | |
54 class WebMediaPlayerClient; | |
55 class WebNode; | |
56 class WebNotificationPresenter; | |
57 class WebPlugin; | |
58 class WebURLRequest; | |
59 class WebURLResponse; | |
60 class WebWidget; | |
61 struct WebPluginParams; | |
62 struct WebPoint; | |
63 struct WebPopupMenuInfo; | |
64 struct WebRect; | |
65 struct WebURLError; | |
66 } | |
67 | |
68 class FilePath; | |
69 class SkBitmap; | |
70 class WebDevToolsAgentDelegate; | |
71 class WebMediaPlayerDelegate; | |
72 class WebView; | |
73 struct ContextMenuMediaParams; | |
74 struct WebPreferences; | |
75 | 7 |
76 enum NavigationGesture { | 8 enum NavigationGesture { |
77 NavigationGestureUser, // User initiated navigation/load. This is not | 9 NavigationGestureUser, // User initiated navigation/load. This is not |
78 // currently used due to the untrustworthy nature | 10 // currently used due to the untrustworthy nature |
79 // of userGestureHint (wasRunByUserGesture). See | 11 // of userGestureHint (wasRunByUserGesture). See |
80 // bug 1051891. | 12 // bug 1051891. |
81 NavigationGestureAuto, // Non-user initiated navigation / load. For example | 13 NavigationGestureAuto, // Non-user initiated navigation / load. For example |
82 // onload or setTimeout triggered document.location | 14 // onload or setTimeout triggered document.location |
83 // changes, and form.submits. See bug 1046841 for | 15 // changes, and form.submits. See bug 1046841 for |
84 // some cases that should be treated this way but | 16 // some cases that should be treated this way but |
85 // aren't yet. | 17 // aren't yet. |
86 NavigationGestureUnknown, // What we assign when userGestureHint returns true | 18 NavigationGestureUnknown, // What we assign when userGestureHint returns true |
87 // because we can't trust it. | 19 // because we can't trust it. |
88 }; | 20 }; |
89 | 21 |
90 | 22 #endif // CHROME_COMMON_NAVIGATION_GESTURE_H_ |
91 // Interface passed in to the WebViewDelegate to receive notification of the | |
92 // result of an open file dialog. | |
93 class WebFileChooserCallback { | |
94 public: | |
95 WebFileChooserCallback() {} | |
96 virtual ~WebFileChooserCallback() {} | |
97 virtual void OnFileChoose(const std::vector<FilePath>& file_names) { } | |
98 | |
99 private: | |
100 DISALLOW_COPY_AND_ASSIGN(WebFileChooserCallback); | |
101 }; | |
102 | |
103 | |
104 // Inheritance here is somewhat weird, but since a WebView is a WebWidget, | |
105 // it makes sense that a WebViewDelegate is a WebWidgetClient. | |
106 class WebViewDelegate : virtual public WebKit::WebWidgetClient { | |
107 public: | |
108 // WebView additions ------------------------------------------------------- | |
109 | |
110 // This method is called to create a new WebView. The WebView should not be | |
111 // made visible until the new WebView's Delegate has its Show method called. | |
112 // The returned WebView pointer is assumed to be owned by the host window, | |
113 // and the caller of CreateWebView should not release the given WebView. | |
114 // |user_gesture| is true if a user action initiated this call. | |
115 // |creator_url|, if nonempty, holds the security origin of the page creating | |
116 // this WebView. | |
117 virtual WebView* CreateWebView(WebView* webview, | |
118 bool user_gesture, | |
119 const GURL& creator_url) { | |
120 return NULL; | |
121 } | |
122 | |
123 // This method is called to create a new WebWidget to act as a popup | |
124 // (like a drop-down menu). | |
125 virtual WebKit::WebWidget* CreatePopupWidget( | |
126 WebView* webview, | |
127 bool activatable) { | |
128 return NULL; | |
129 } | |
130 | |
131 // Like CreatePopupWidget, except the actual widget is rendered by the | |
132 // embedder using the supplied info. | |
133 virtual WebKit::WebWidget* CreatePopupWidgetWithInfo( | |
134 WebView* webview, | |
135 const WebKit::WebPopupMenuInfo& info) { | |
136 return NULL; | |
137 } | |
138 | |
139 virtual WebKit::WebPlugin* CreatePlugin( | |
140 WebKit::WebFrame* parent_frame, | |
141 const WebKit::WebPluginParams& params) { | |
142 return NULL; | |
143 } | |
144 | |
145 // This method is called when the renderer creates a worker object. | |
146 virtual WebKit::WebWorker* CreateWebWorker(WebKit::WebWorkerClient* client) { | |
147 return NULL; | |
148 } | |
149 | |
150 // Called when a WebMediaPlayer is needed. | |
151 virtual WebKit::WebMediaPlayer* CreateWebMediaPlayer( | |
152 WebKit::WebMediaPlayerClient* client) { | |
153 return NULL; | |
154 } | |
155 | |
156 // This method is called to open a URL in the specified manner. | |
157 virtual void OpenURL(WebView* webview, const GURL& url, | |
158 const GURL& referrer, | |
159 WebKit::WebNavigationPolicy policy) { | |
160 } | |
161 | |
162 // Notifies how many matches have been found so far, for a given request_id. | |
163 // |final_update| specifies whether this is the last update (all frames have | |
164 // completed scoping). | |
165 virtual void ReportFindInPageMatchCount(int count, int request_id, | |
166 bool final_update) { | |
167 } | |
168 | |
169 // Notifies the browser what tick-mark rect is currently selected. Parameter | |
170 // |request_id| lets the recipient know which request this message belongs to, | |
171 // so that it can choose to ignore the message if it has moved on to other | |
172 // things. |selection_rect| is expected to have coordinates relative to the | |
173 // top left corner of the web page area and represent where on the screen the | |
174 // selection rect is currently located. | |
175 virtual void ReportFindInPageSelection(int request_id, | |
176 int active_match_ordinal, | |
177 const WebKit::WebRect& selection) { | |
178 } | |
179 | |
180 // Returns whether this WebView was opened by a user gesture. | |
181 virtual bool WasOpenedByUserGesture() const { | |
182 return true; | |
183 } | |
184 | |
185 // Called by ChromeClientImpl::focus() if accessibility on the renderer side | |
186 // is enabled, and a focus change has occurred. Will retrieve the id of the | |
187 // input AccessibilityObject and send it through IPC for handling on the | |
188 // browser side. | |
189 virtual void FocusAccessibilityObject(WebCore::AccessibilityObject* acc_obj) { | |
190 } | |
191 | |
192 // FrameLoaderClient ------------------------------------------------------- | |
193 | |
194 virtual bool CanAcceptLoadDrops() const { | |
195 // Always return true here so layout tests (which use the default WebView | |
196 // delegate) continue to pass. | |
197 return true; | |
198 } | |
199 | |
200 // Notifies the delegate that a load has begun. | |
201 virtual void DidStartLoading(WebView* webview) { | |
202 } | |
203 | |
204 // Notifies the delegate that all loads are finished. | |
205 virtual void DidStopLoading(WebView* webview) { | |
206 } | |
207 | |
208 // The original version of this is WindowScriptObjectAvailable, below. This | |
209 // is a Chrome-specific version that serves the same purpose, but has been | |
210 // renamed since we haven't implemented WebScriptObject. Our embedding | |
211 // implementation binds native objects to the window via the webframe instead. | |
212 // TODO(pamg): If we do implement WebScriptObject, we may wish to switch to | |
213 // using the original version of this function. | |
214 virtual void WindowObjectCleared(WebKit::WebFrame* webframe) { | |
215 } | |
216 | |
217 // Notifies that the documentElement for the document in a webframe has been | |
218 // created. This is called before anything else is parsed or executed for the | |
219 // document. | |
220 virtual void DocumentElementAvailable(WebKit::WebFrame* webframe) { | |
221 } | |
222 | |
223 // Notifies that a new script context has been created for this frame. | |
224 // This is similar to WindowObjectCleared but only called once per frame | |
225 // context. | |
226 virtual void DidCreateScriptContextForFrame(WebKit::WebFrame* webframe) { | |
227 } | |
228 | |
229 // Notifies that this frame's script context has been destroyed. | |
230 virtual void DidDestroyScriptContextForFrame(WebKit::WebFrame* webframe) { | |
231 } | |
232 | |
233 // Notifies that a garbage-collected context was created - content scripts. | |
234 virtual void DidCreateIsolatedScriptContext(WebKit::WebFrame* webframe) { | |
235 } | |
236 | |
237 // PolicyDelegate ---------------------------------------------------------- | |
238 | |
239 // This method is called to notify the delegate, and let it modify a | |
240 // proposed navigation. It will be called before loading starts, and | |
241 // on every redirect. | |
242 // | |
243 // default_policy specifies what should normally happen for this | |
244 // navigation (open in current tab, start a new tab, start a new | |
245 // window, etc). This method can return an altered policy, and | |
246 // take any additional separate action it wants to. | |
247 // | |
248 // is_redirect is true if this is a redirect rather than user action. | |
249 virtual WebKit::WebNavigationPolicy PolicyForNavigationAction( | |
250 WebView* webview, | |
251 WebKit::WebFrame* frame, | |
252 const WebKit::WebURLRequest& request, | |
253 WebKit::WebNavigationType type, | |
254 WebKit::WebNavigationPolicy default_policy, | |
255 bool is_redirect) { | |
256 return default_policy; | |
257 } | |
258 | |
259 // FrameLoadDelegate ------------------------------------------------------- | |
260 | |
261 // A datasource has been created for a new navigation. The given datasource | |
262 // will become the provisional datasource for the frame. | |
263 virtual void DidCreateDataSource(WebKit::WebFrame* frame, | |
264 WebKit::WebDataSource* ds) { | |
265 } | |
266 | |
267 // Notifies the delegate that the provisional load of a specified frame in a | |
268 // given WebView has started. By the time the provisional load for a frame has | |
269 // started, we know whether or not the current load is due to a client | |
270 // redirect or not, so we pass this information through to allow us to set | |
271 // the referrer properly in those cases. The consumed_client_redirect_src is | |
272 // an empty invalid GURL in other cases. | |
273 virtual void DidStartProvisionalLoadForFrame( | |
274 WebView* webview, | |
275 WebKit::WebFrame* frame, | |
276 NavigationGesture gesture) { | |
277 } | |
278 | |
279 // Called when a provisional load is redirected (see GetProvisionalDataSource | |
280 // for more info on provisional loads). This happens when the server sends | |
281 // back any type of redirect HTTP response. | |
282 // | |
283 // The redirect information can be retrieved from the provisional data | |
284 // source's redirect chain, which will be updated prior to this callback. | |
285 // The last element in that vector will be the new URL (which will be the | |
286 // same as the provisional data source's current URL), and the next-to-last | |
287 // element will be the referring URL. | |
288 virtual void DidReceiveProvisionalLoadServerRedirect(WebView* webview, | |
289 WebKit::WebFrame* frame)
{ | |
290 } | |
291 | |
292 // @method webView:didFailProvisionalLoadWithError:forFrame: | |
293 // @abstract Notifies the delegate that the provisional load has failed | |
294 // @param webView The WebView sending the message | |
295 // @param error The error that occurred | |
296 // @param frame The frame for which the error occurred | |
297 // @discussion This method is called after the provisional data source has | |
298 // failed to load. The frame will continue to display the contents of the | |
299 // committed data source if there is one. | |
300 // This notification is only received for errors like network errors. | |
301 virtual void DidFailProvisionalLoadWithError(WebView* webview, | |
302 const WebKit::WebURLError& error, | |
303 WebKit::WebFrame* frame) { | |
304 } | |
305 | |
306 // Notifies the delegate to commit data for the given frame. The delegate | |
307 // may optionally convert the data before calling CommitDocumentData or | |
308 // suppress a call to CommitDocumentData. For example, if CommitDocumentData | |
309 // is never called, then an empty document will be created. | |
310 virtual void DidReceiveDocumentData(WebKit::WebFrame* frame, | |
311 const char* data, | |
312 size_t data_len) { | |
313 frame->commitDocumentData(data, data_len); | |
314 } | |
315 | |
316 // Notifies the delegate that the load has changed from provisional to | |
317 // committed. This method is called after the provisional data source has | |
318 // become the committed data source. | |
319 // | |
320 // In some cases, a single load may be committed more than once. This | |
321 // happens in the case of multipart/x-mixed-replace, also known as "server | |
322 // push". In this case, a single location change leads to multiple documents | |
323 // that are loaded in sequence. When this happens, a new commit will be sent | |
324 // for each document. | |
325 // | |
326 // The "is_new_navigation" flag will be true when a new session history entry | |
327 // was created for the load. The frame's GetHistoryState method can be used | |
328 // to get the corresponding session history state. | |
329 virtual void DidCommitLoadForFrame(WebView* webview, WebKit::WebFrame* frame, | |
330 bool is_new_navigation) { | |
331 } | |
332 | |
333 // | |
334 // @method webView:didReceiveTitle:forFrame: | |
335 // @abstract Notifies the delegate that the page title for a frame has been r
eceived | |
336 // @param webView The WebView sending the message | |
337 // @param title The new page title | |
338 // @param frame The frame for which the title has been received | |
339 // @discussion The title may update during loading; clients should be prepare
d for this. | |
340 // - (void)webView:(WebView *)sender didReceiveTitle:(NSString *)title forFra
me:(WebFrame *)frame; | |
341 virtual void DidReceiveTitle(WebView* webview, | |
342 const std::wstring& title, | |
343 WebKit::WebFrame* frame) { | |
344 } | |
345 | |
346 // | |
347 // @method webView:didFinishLoadForFrame: | |
348 // @abstract Notifies the delegate that the committed load of a frame has com
pleted | |
349 // @param webView The WebView sending the message | |
350 // @param frame The frame that finished loading | |
351 // @discussion This method is called after the committed data source of a fra
me has successfully loaded | |
352 // and will only be called when all subresources such as images and styleshee
ts are done loading. | |
353 // Plug-In content and JavaScript-requested loads may occur after this method
is called. | |
354 // - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame; | |
355 virtual void DidFinishLoadForFrame(WebView* webview, | |
356 WebKit::WebFrame* frame) { | |
357 } | |
358 | |
359 // | |
360 // @method webView:didFailLoadWithError:forFrame: | |
361 // @abstract Notifies the delegate that the committed load of a frame has fai
led | |
362 // @param webView The WebView sending the message | |
363 // @param error The error that occurred | |
364 // @param frame The frame that failed to load | |
365 // @discussion This method is called after a data source has committed but fa
iled to completely load. | |
366 // - (void)webView:(WebView *)sender didFailLoadWithError:(NSError *)error fo
rFrame:(WebFrame *)frame; | |
367 virtual void DidFailLoadWithError(WebView* webview, | |
368 const WebKit::WebURLError& error, | |
369 WebKit::WebFrame* forFrame) { | |
370 } | |
371 | |
372 // Notifies the delegate of a DOMContentLoaded event. | |
373 // This is called when the html resource has been loaded, but | |
374 // not necessarily all subresources (images, stylesheets). So, this is called | |
375 // before DidFinishLoadForFrame. | |
376 virtual void DidFinishDocumentLoadForFrame(WebView* webview, WebKit::WebFrame*
frame) { | |
377 } | |
378 | |
379 // This method is called when we load a resource from an in-memory cache. | |
380 // A return value of |false| indicates the load should proceed, but WebCore | |
381 // appears to largely ignore the return value. | |
382 virtual bool DidLoadResourceFromMemoryCache( | |
383 WebView* webview, | |
384 const WebKit::WebURLRequest& request, | |
385 const WebKit::WebURLResponse& response, | |
386 WebKit::WebFrame* frame) { | |
387 return false; | |
388 } | |
389 | |
390 // This is called after javascript onload handlers have been fired. | |
391 virtual void DidHandleOnloadEventsForFrame(WebView* webview, WebKit::WebFrame*
frame) { | |
392 } | |
393 | |
394 // This method is called when anchors within a page have been clicked. | |
395 // It is very similar to DidCommitLoadForFrame. | |
396 virtual void DidChangeLocationWithinPageForFrame(WebView* webview, | |
397 WebKit::WebFrame* frame, | |
398 bool is_new_navigation) { | |
399 } | |
400 | |
401 // This is called when the favicon for a frame has been received. | |
402 virtual void DidReceiveIconForFrame(WebView* webview, WebKit::WebFrame* frame)
{ | |
403 } | |
404 | |
405 // Notifies the delegate that a frame will start a client-side redirect. When | |
406 // this function is called, the redirect has not yet been started (it may | |
407 // not even be scheduled to happen until some point in the future). When the | |
408 // redirect has been cancelled or has succeeded, DidStopClientRedirect will | |
409 // be called. | |
410 // | |
411 // WebKit considers meta refreshes, and setting document.location (regardless | |
412 // of when called) as client redirects (possibly among others). | |
413 // | |
414 // This function is intended to continue progress feedback while a | |
415 // client-side redirect is pending. Watch out: WebKit seems to call us twice | |
416 // for client redirects, resulting in two calls of this function. | |
417 virtual void WillPerformClientRedirect(WebView* webview, | |
418 WebKit::WebFrame* frame, | |
419 const GURL& src_url, | |
420 const GURL& dest_url, | |
421 unsigned int delay_seconds, | |
422 unsigned int fire_date) { | |
423 } | |
424 | |
425 // Notifies the delegate that a pending client-side redirect has been | |
426 // cancelled (for example, if the frame changes before the timeout) or has | |
427 // completed successfully. A client-side redirect is the result of setting | |
428 // document.location, for example, as opposed to a server side redirect | |
429 // which is the result of HTTP headers (see DidReceiveServerRedirect). | |
430 // | |
431 // On success, this will be called when the provisional load that the client | |
432 // side redirect initiated is committed. | |
433 // | |
434 // See the implementation of FrameLoader::clientRedirectCancelledOrFinished. | |
435 virtual void DidCancelClientRedirect(WebView* webview, | |
436 WebKit::WebFrame* frame) { | |
437 } | |
438 | |
439 // Notifies the delegate that the load about to be committed for the specified | |
440 // webview and frame was due to a client redirect originating from source URL. | |
441 // The information/notification obtained from this method is relevant until | |
442 // the next provisional load is started, at which point it becomes obsolete. | |
443 virtual void DidCompleteClientRedirect(WebView* webview, | |
444 WebKit::WebFrame* frame, | |
445 const GURL& source) { | |
446 } | |
447 | |
448 // Notifies the delegate that a form is about to be submitted. | |
449 virtual void WillSubmitForm(WebView* webview, WebKit::WebFrame* frame, | |
450 const WebKit::WebForm& form) { | |
451 } | |
452 | |
453 // | |
454 // @method webView:willCloseFrame: | |
455 // @abstract Notifies the delegate that a frame will be closed | |
456 // @param webView The WebView sending the message | |
457 // @param frame The frame that will be closed | |
458 // @discussion This method is called right before WebKit is done with the fra
me | |
459 // and the objects that it contains. | |
460 // - (void)webView:(WebView *)sender willCloseFrame:(WebFrame *)frame; | |
461 virtual void WillCloseFrame(WebView* webview, WebKit::WebFrame* frame) { | |
462 } | |
463 | |
464 // ResourceLoadDelegate ---------------------------------------------------- | |
465 | |
466 // Associates the given identifier with the initial resource request. | |
467 // Resource load callbacks will use the identifier throughout the life of the | |
468 // request. | |
469 virtual void AssignIdentifierToRequest( | |
470 WebKit::WebFrame* webframe, | |
471 uint32 identifier, | |
472 const WebKit::WebURLRequest& request) { | |
473 } | |
474 | |
475 // Notifies the delegate that a request is about to be sent out, giving the | |
476 // delegate the opportunity to modify the request. Note that request is | |
477 // writable here, and changes to the URL, for example, will change the request | |
478 // made. If this request is the result of a redirect, then redirect_response | |
479 // will be non-null and contain the response that triggered the redirect. | |
480 virtual void WillSendRequest( | |
481 WebKit::WebFrame* webframe, | |
482 uint32 identifier, | |
483 WebKit::WebURLRequest* request, | |
484 const WebKit::WebURLResponse& redirect_response) { | |
485 } | |
486 | |
487 virtual void DidReceiveResponse(WebKit::WebFrame* webframe, | |
488 uint32 identifier, | |
489 const WebKit::WebURLResponse& response) { | |
490 } | |
491 | |
492 // Notifies the delegate that a subresource load has succeeded. | |
493 virtual void DidFinishLoading(WebKit::WebFrame* webframe, uint32 identifier) { | |
494 } | |
495 | |
496 // Notifies the delegate that a subresource load has failed, and why. | |
497 virtual void DidFailLoadingWithError(WebKit::WebFrame* webframe, | |
498 uint32 identifier, | |
499 const WebKit::WebURLError& error) { | |
500 } | |
501 | |
502 // ChromeClient ------------------------------------------------------------ | |
503 | |
504 // Appends a line to the application's error console. The message contains | |
505 // an error description or other information, the line_no provides a line | |
506 // number (e.g. for a JavaScript error report), and the source_id contains | |
507 // a URL or other description of the source of the message. | |
508 virtual void AddMessageToConsole(WebView* webview, | |
509 const std::wstring& message, | |
510 unsigned int line_no, | |
511 const std::wstring& source_id) { | |
512 } | |
513 | |
514 // Queries the browser for suggestions to be shown for the form text field | |
515 // named |field_name|. |text| is the text entered by the user so far and | |
516 // |node_id| is the id of the node of the input field. | |
517 virtual void QueryFormFieldAutofill(const std::wstring& field_name, | |
518 const std::wstring& text, | |
519 int64 node_id) { | |
520 } | |
521 | |
522 // Instructs the browser to remove the autofill entry specified from it DB. | |
523 virtual void RemoveStoredAutofillEntry(const std::wstring& name, | |
524 const std::wstring& value) { | |
525 } | |
526 | |
527 virtual void DidContentsSizeChange(WebKit::WebWidget* webwidget, | |
528 int new_width, int new_height) { | |
529 } | |
530 | |
531 // Called to retrieve the provider of desktop notifications. Pointer | |
532 // is owned by the implementation of WebViewDelegate. | |
533 virtual WebKit::WebNotificationPresenter* GetNotificationPresenter() { | |
534 return NULL; | |
535 } | |
536 | |
537 // UIDelegate -------------------------------------------------------------- | |
538 | |
539 // Displays a JavaScript alert panel associated with the given view. Clients | |
540 // should visually indicate that this panel comes from JavaScript and some | |
541 // information about the originating frame (at least the domain). The panel | |
542 // should have a single OK button. | |
543 virtual void RunJavaScriptAlert(WebKit::WebFrame* webframe, | |
544 const std::wstring& message) { | |
545 } | |
546 | |
547 // Displays a JavaScript confirm panel associated with the given view. | |
548 // Clients should visually indicate that this panel comes | |
549 // from JavaScript. The panel should have two buttons, e.g. "OK" and | |
550 // "Cancel". Returns true if the user hit OK, or false if the user hit Cancel. | |
551 virtual bool RunJavaScriptConfirm(WebKit::WebFrame* webframe, | |
552 const std::wstring& message) { | |
553 return false; | |
554 } | |
555 | |
556 // Displays a JavaScript text input panel associated with the given view. | |
557 // Clients should visually indicate that this panel comes from JavaScript. | |
558 // The panel should have two buttons, e.g. "OK" and "Cancel", and an area to | |
559 // type text. The default_value should appear as the initial text in the | |
560 // panel when it is shown. If the user hit OK, returns true and fills result | |
561 // with the text in the box. The value of result is undefined if the user | |
562 // hit Cancel. | |
563 virtual bool RunJavaScriptPrompt(WebKit::WebFrame* webframe, | |
564 const std::wstring& message, | |
565 const std::wstring& default_value, | |
566 std::wstring* result) { | |
567 return false; | |
568 } | |
569 | |
570 // Sets the status bar text. | |
571 virtual void SetStatusbarText(WebView* webview, | |
572 const std::wstring& message) { } | |
573 | |
574 // Displays a "before unload" confirm panel associated with the given view. | |
575 // The panel should have two buttons, e.g. "OK" and "Cancel", where OK means | |
576 // that the navigation should continue, and Cancel means that the navigation | |
577 // should be cancelled, leaving the user on the current page. Returns true | |
578 // if the user hit OK, or false if the user hit Cancel. | |
579 virtual bool RunBeforeUnloadConfirm(WebKit::WebFrame* webframe, | |
580 const std::wstring& message) { | |
581 return true; // OK, continue to navigate away | |
582 } | |
583 | |
584 // Tells the client that we're hovering over a link with a given URL, | |
585 // if the node is not a link, the URL will be an empty GURL. | |
586 virtual void UpdateTargetURL(WebView* webview, | |
587 const GURL& url) { | |
588 } | |
589 | |
590 // Called to display a file chooser prompt. The prompt should be pre- | |
591 // populated with the given initial_filename string. The WebViewDelegate | |
592 // will own the WebFileChooserCallback object and is responsible for | |
593 // freeing it. | |
594 virtual void RunFileChooser(bool multi_select, | |
595 const string16& title, | |
596 const FilePath& initial_filename, | |
597 WebFileChooserCallback* file_chooser) { | |
598 delete file_chooser; | |
599 } | |
600 | |
601 // @abstract Shows a context menu with commands relevant to a specific | |
602 // element on the current page. | |
603 // @param webview The WebView sending the delegate method. | |
604 // @param node_type The type of the node(s) the context menu is being | |
605 // invoked on | |
606 // @param x The x position of the mouse pointer (relative to the webview) | |
607 // @param y The y position of the mouse pointer (relative to the webview) | |
608 // @param link_url The absolute URL of the link that contains the node the | |
609 // mouse right clicked on | |
610 // @param image_url The absolute URL of the image that the mouse right | |
611 // clicked on | |
612 // @param page_url The URL of the page the mouse right clicked on | |
613 // @param frame_url The URL of the subframe the mouse right clicked on | |
614 // @param media_params Extra attributed needed by the context menu for | |
615 // media elements. | |
616 // @param selection_text The raw text of the selection that the mouse right | |
617 // clicked on | |
618 // @param misspelled_word The editable (possibily) misspelled word | |
619 // in the Editor on which dictionary lookup for suggestions will be done. | |
620 // @param edit_flags which edit operations the renderer believes are available | |
621 // @param security_info | |
622 // @param frame_charset which indicates the character encoding of | |
623 // the currently focused frame. | |
624 virtual void ShowContextMenu(WebView* webview, | |
625 ContextNodeType node_type, | |
626 int x, | |
627 int y, | |
628 const GURL& link_url, | |
629 const GURL& image_url, | |
630 const GURL& page_url, | |
631 const GURL& frame_url, | |
632 const ContextMenuMediaParams& media_params, | |
633 const std::wstring& selection_text, | |
634 const std::wstring& misspelled_word, | |
635 int edit_flags, | |
636 const std::string& security_info, | |
637 const std::string& frame_charset) { | |
638 } | |
639 | |
640 // Starts a drag session with the supplied contextual information. | |
641 // webview: The WebView sending the delegate method. | |
642 // drop_data: a WebDropData struct which should contain all the necessary | |
643 // information for dragging data out of the webview. | |
644 virtual void StartDragging(WebView* webview, | |
645 const WebKit::WebDragData& drag_data) { | |
646 } | |
647 | |
648 // Returns the focus to the client. | |
649 // reverse: Whether the focus should go to the previous (if true) or the next | |
650 // focusable element. | |
651 virtual void TakeFocus(WebView* webview, bool reverse) { | |
652 } | |
653 | |
654 // Displays JS out-of-memory warning in the infobar | |
655 virtual void JSOutOfMemory() { | |
656 } | |
657 | |
658 // Notification that a user metric has occurred. | |
659 virtual void UserMetricsRecordAction(const std::wstring& action) { } | |
660 | |
661 // ------------------------------------------------------------------------- | |
662 | |
663 // Notification that a request to download an image has completed. |errored| | |
664 // indicates if there was a network error. The image is empty if there was | |
665 // a network error, the contents of the page couldn't by converted to an | |
666 // image, or the response from the host was not 200. | |
667 // NOTE: image is empty if the response didn't contain image data. | |
668 virtual void DidDownloadImage(int id, | |
669 const GURL& image_url, | |
670 bool errored, | |
671 const SkBitmap& image) { | |
672 } | |
673 | |
674 // History Related --------------------------------------------------------- | |
675 | |
676 // Tells the embedder to navigate back or forward in session history by the | |
677 // given offset (relative to the current position in session history). | |
678 virtual void NavigateBackForwardSoon(int offset) { | |
679 } | |
680 | |
681 // Returns how many entries are in the back and forward lists, respectively. | |
682 virtual int GetHistoryBackListCount() { | |
683 return 0; | |
684 } | |
685 virtual int GetHistoryForwardListCount() { | |
686 return 0; | |
687 } | |
688 | |
689 // Notification that the form state of an element in the document, scroll | |
690 // position, or possibly something else has changed that affects session | |
691 // history (HistoryItem). This function will be called frequently, so the | |
692 // implementor should not perform intensive operations in this notification. | |
693 virtual void OnNavStateChanged(WebView* webview) { } | |
694 | |
695 // ------------------------------------------------------------------------- | |
696 | |
697 // Tell the delegate the tooltip text and its directionality hint for the | |
698 // current mouse position. | |
699 virtual void SetTooltipText(WebView* webview, | |
700 const std::wstring& tooltip_text, | |
701 WebKit::WebTextDirection text_direction_hint) { } | |
702 | |
703 // Downloading ------------------------------------------------------------- | |
704 | |
705 virtual void DownloadUrl(const GURL& url, const GURL& referrer) { } | |
706 | |
707 // InspectorClient --------------------------------------------------------- | |
708 | |
709 virtual void UpdateInspectorSettings(const std::wstring& raw_settings) { } | |
710 | |
711 // DevTools ---------------------------------------------------------------- | |
712 | |
713 virtual WebDevToolsAgentDelegate* GetWebDevToolsAgentDelegate() { | |
714 return NULL; | |
715 } | |
716 | |
717 // Selection clipboard ----------------------------------------------------- | |
718 | |
719 // Request the text on the selection clipboard be sent back to the webview | |
720 // so it can be inserted into the current focus area. In response to this call | |
721 // the delegate should get the text and send it to the WebView via | |
722 // InsertText(). | |
723 virtual void PasteFromSelectionClipboard() { } | |
724 | |
725 // Editor Client ----------------------------------------------------------- | |
726 | |
727 // Returns true if the word is spelled correctly. The word may begin or end | |
728 // with whitespace or punctuation, so the implementor should be sure to handle | |
729 // these cases. | |
730 // | |
731 // If the word is misspelled (returns false), the given first and last | |
732 // indices (inclusive) will be filled with the offsets of the boundary of the | |
733 // word within the given buffer. The out pointers must be specified. If the | |
734 // word is correctly spelled (returns true), they will be set to (0,0). | |
735 virtual void SpellCheck(const std::wstring& word, int* misspell_location, | |
736 int* misspell_length) { | |
737 *misspell_location = *misspell_length = 0; | |
738 } | |
739 | |
740 // Computes an auto correct word for a misspelled word. If no word is found, | |
741 // empty string is computed. | |
742 virtual std::wstring GetAutoCorrectWord(const std::wstring& misspelled_word) { | |
743 return std::wstring(); | |
744 } | |
745 | |
746 // Asks the user to print the page or a specific frame. Called in response to | |
747 // a window.print() call. | |
748 virtual void ScriptedPrint(WebKit::WebFrame* frame) { } | |
749 | |
750 // Called when an item was added to the history | |
751 virtual void DidAddHistoryItem() { } | |
752 | |
753 WebViewDelegate() { } | |
754 | |
755 protected: | |
756 ~WebViewDelegate() { } | |
757 }; | |
758 | |
759 #endif // WEBKIT_GLUE_WEBVIEW_DELEGATE_H_ | |
OLD | NEW |