blob: b869a52af7f64752cdecf2221e02ada453e3e4f8 [file] [log] [blame]
[email protected]4fdf6742012-01-10 20:14:361// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]0dd3a0ab2011-02-18 08:17:442// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]674bc592011-12-20 23:00:425#ifndef CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_DELEGATE_H_
6#define CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_DELEGATE_H_
[email protected]0dd3a0ab2011-02-18 08:17:447
[email protected]1de2b8b2011-06-29 19:38:468#include <set>
[email protected]0dd3a0ab2011-02-18 08:17:449#include <string>
[email protected]0dd3a0ab2011-02-18 08:17:4410
11#include "base/basictypes.h"
[email protected]f13b4202012-06-12 23:53:2312#include "base/callback.h"
[email protected]26dd01c2013-06-12 13:52:1313#include "base/strings/string16.h"
[email protected]8d128d62011-09-13 22:11:5714#include "content/common/content_export.h"
[email protected]e6e646d2011-12-01 00:50:1115#include "content/public/browser/navigation_type.h"
[email protected]f13b4202012-06-12 23:53:2316#include "content/public/common/media_stream_request.h"
[email protected]2905f742011-10-13 03:51:5817#include "content/public/common/page_transition_types.h"
[email protected]4fdf6742012-01-10 20:14:3618#include "content/public/common/window_container_type.h"
[email protected]2255a9332013-06-17 05:12:3119#include "third_party/WebKit/public/web/WebDragOperation.h"
[email protected]da8543762012-03-20 08:52:2020#include "third_party/skia/include/core/SkColor.h"
[email protected]f47621b2013-01-22 20:50:3321#include "ui/base/window_open_disposition.h"
[email protected]0dd3a0ab2011-02-18 08:17:4422#include "ui/gfx/native_widget_types.h"
[email protected]59363fc92012-09-05 03:46:3123#include "ui/gfx/rect_f.h"
[email protected]0dd3a0ab2011-02-18 08:17:4424
[email protected]7dba43dc2011-11-10 01:57:5825class GURL;
[email protected]7dba43dc2011-11-10 01:57:5826
[email protected]32ded2212011-11-10 18:51:4327namespace base {
[email protected]a3ef4832013-02-02 05:12:3328class FilePath;
[email protected]32ded2212011-11-10 18:51:4329class ListValue;
30}
31
[email protected]3ab9cb82011-06-03 18:02:0732namespace content {
[email protected]3d7474ff2011-07-27 17:47:3733class BrowserContext;
[email protected]da8543762012-03-20 08:52:2034class ColorChooser;
[email protected]e582fdd2011-12-20 16:48:1735class DownloadItem;
[email protected]71a88bb2013-02-01 22:05:1536class JavaScriptDialogManager;
[email protected]691aa2f2013-05-28 22:52:0437class PageState;
[email protected]c0c1c622012-03-13 04:51:5438class RenderViewHost;
[email protected]dd6730412013-08-14 15:03:3739class SessionStorageNamespace;
[email protected]a81343d232011-12-27 07:39:2040class WebContents;
[email protected]8ff00d72012-10-23 19:12:2141class WebContentsImpl;
[email protected]8bc5ff02013-11-29 06:34:0342struct ColorSuggestion;
[email protected]35be7ec2012-02-12 20:42:5143struct ContextMenuParams;
[email protected]dc293a72013-07-01 11:11:2244struct DropData;
[email protected]e582fdd2011-12-20 16:48:1745struct FileChooserParams;
[email protected]b87ee522012-05-18 15:16:5446struct NativeWebKeyboardEvent;
[email protected]44e55b012013-07-23 14:21:5647struct Referrer;
[email protected]d583e3f22011-12-27 21:38:1748struct SSLStatus;
[email protected]3ab9cb82011-06-03 18:02:0749}
50
[email protected]0dd3a0ab2011-02-18 08:17:4451namespace gfx {
52class Point;
53class Rect;
54class Size;
55}
56
[email protected]180ef242013-11-07 06:50:4657namespace blink {
[email protected]04bce562014-01-30 05:34:5458class WebGestureEvent;
[email protected]16383382012-09-05 23:57:2659class WebLayer;
[email protected]453c1b22013-07-23 09:31:4860struct WebWindowFeatures;
[email protected]16383382012-09-05 23:57:2661}
62
[email protected]674bc592011-12-20 23:00:4263namespace content {
64
[email protected]e5d549d2011-12-28 01:29:2065struct OpenURLParams;
66
[email protected]0dd3a0ab2011-02-18 08:17:4467// Objects implement this interface to get notified about changes in the
[email protected]2a6bc3e2011-12-28 23:51:3368// WebContents and to provide necessary functionality.
[email protected]674bc592011-12-20 23:00:4269class CONTENT_EXPORT WebContentsDelegate {
[email protected]0dd3a0ab2011-02-18 08:17:4470 public:
[email protected]674bc592011-12-20 23:00:4271 WebContentsDelegate();
[email protected]1de2b8b2011-06-29 19:38:4672
[email protected]e5d549d2011-12-28 01:29:2073 // Opens a new URL inside the passed in WebContents (if source is 0 open
[email protected]0dd3a0ab2011-02-18 08:17:4474 // in the current front-most tab), unless |disposition| indicates the url
75 // should be opened in a new tab or window.
76 //
77 // A NULL source indicates the current tab (callers should probably use
78 // OpenURL() for these cases which does it for you).
[email protected]00c37fc2011-08-02 00:22:5079
[email protected]e5d549d2011-12-28 01:29:2080 // Returns the WebContents the URL is opened in, or NULL if the URL wasn't
[email protected]992e4542011-07-20 23:09:2581 // opened immediately.
[email protected]e5d549d2011-12-28 01:29:2082 virtual WebContents* OpenURLFromTab(WebContents* source,
[email protected]00c37fc2011-08-02 00:22:5083 const OpenURLParams& params);
84
[email protected]ca13a442012-04-17 14:00:1285 // Called to inform the delegate that the WebContents's navigation state
[email protected]0dd3a0ab2011-02-18 08:17:4486 // changed. The |changed_flags| indicates the parts of the navigation state
87 // that have been updated, and is any combination of the
[email protected]2a6bc3e2011-12-28 23:51:3388 // |WebContents::InvalidateTypes| bits.
89 virtual void NavigationStateChanged(const WebContents* source,
[email protected]229eb7e2011-12-23 01:04:0890 unsigned changed_flags) {}
[email protected]0dd3a0ab2011-02-18 08:17:4491
[email protected]2a6bc3e2011-12-28 23:51:3392 // Creates a new tab with the already-created WebContents 'new_contents'.
[email protected]0dd3a0ab2011-02-18 08:17:4493 // The window for the added contents should be reparented correctly when this
[email protected]dc0fd432013-08-27 15:29:2194 // method returns. If |disposition| is NEW_POPUP, |initial_pos| should hold
95 // the initial position. If |was_blocked| is non-NULL, then |*was_blocked|
96 // will be set to true if the popup gets blocked, and left unchanged
97 // otherwise.
[email protected]2a6bc3e2011-12-28 23:51:3398 virtual void AddNewContents(WebContents* source,
99 WebContents* new_contents,
[email protected]0dd3a0ab2011-02-18 08:17:44100 WindowOpenDisposition disposition,
101 const gfx::Rect& initial_pos,
[email protected]eda238a12012-09-07 23:44:00102 bool user_gesture,
103 bool* was_blocked) {}
[email protected]0dd3a0ab2011-02-18 08:17:44104
105 // Selects the specified contents, bringing its container to the front.
[email protected]2a6bc3e2011-12-28 23:51:33106 virtual void ActivateContents(WebContents* contents) {}
[email protected]0dd3a0ab2011-02-18 08:17:44107
108 // Deactivates the specified contents by deactivating its container and
109 // potentialy moving it to the back of the Z order.
[email protected]2a6bc3e2011-12-28 23:51:33110 virtual void DeactivateContents(WebContents* contents) {}
[email protected]0dd3a0ab2011-02-18 08:17:44111
112 // Notifies the delegate that this contents is starting or is done loading
113 // some resource. The delegate should use this notification to represent
[email protected]2a6bc3e2011-12-28 23:51:33114 // loading feedback. See WebContents::IsLoading()
[email protected]e3b10d12014-03-28 16:06:09115 // |to_different_document| will be true unless the load is a fragment
116 // navigation, or triggered by history.pushState/replaceState.
117 virtual void LoadingStateChanged(WebContents* source,
118 bool to_different_document) {}
[email protected]0dd3a0ab2011-02-18 08:17:44119
[email protected]0dd3a0ab2011-02-18 08:17:44120 // Notifies the delegate that the page has made some progress loading.
121 // |progress| is a value between 0.0 (nothing loaded) to 1.0 (page fully
122 // loaded).
[email protected]b3996ba2012-08-08 00:39:13123 virtual void LoadProgressChanged(WebContents* source,
124 double progress) {}
[email protected]0dd3a0ab2011-02-18 08:17:44125
[email protected]2a6bc3e2011-12-28 23:51:33126 // Request the delegate to close this web contents, and do whatever cleanup
[email protected]0dd3a0ab2011-02-18 08:17:44127 // it needs to do.
[email protected]a81343d232011-12-27 07:39:20128 virtual void CloseContents(WebContents* source) {}
[email protected]0dd3a0ab2011-02-18 08:17:44129
[email protected]cd9ed79d2011-11-15 19:22:57130 // Informs the delegate that the underlying RenderViewHost has been swapped
131 // out so it can perform any cleanup necessary.
[email protected]2a6bc3e2011-12-28 23:51:33132 virtual void SwappedOut(WebContents* source) {}
[email protected]cd9ed79d2011-11-15 19:22:57133
[email protected]ca13a442012-04-17 14:00:12134 // Request the delegate to move this WebContents to the specified position
[email protected]0dd3a0ab2011-02-18 08:17:44135 // in screen coordinates.
[email protected]2a6bc3e2011-12-28 23:51:33136 virtual void MoveContents(WebContents* source, const gfx::Rect& pos) {}
[email protected]0dd3a0ab2011-02-18 08:17:44137
[email protected]2a6bc3e2011-12-28 23:51:33138 // Called to determine if the WebContents is contained in a popup window
[email protected]b35b26b32011-05-05 20:35:14139 // or a panel window.
[email protected]2a6bc3e2011-12-28 23:51:33140 virtual bool IsPopupOrPanel(const WebContents* source) const;
[email protected]0dd3a0ab2011-02-18 08:17:44141
[email protected]0dd3a0ab2011-02-18 08:17:44142 // Notification that the target URL has changed.
[email protected]2a6bc3e2011-12-28 23:51:33143 virtual void UpdateTargetURL(WebContents* source,
[email protected]229eb7e2011-12-23 01:04:08144 int32 page_id,
145 const GURL& url) {}
[email protected]0dd3a0ab2011-02-18 08:17:44146
147 // Notification that there was a mouse event, along with the absolute
148 // coordinates of the mouse pointer and whether it was a normal motion event
149 // (otherwise, the pointer left the contents area).
[email protected]2a6bc3e2011-12-28 23:51:33150 virtual void ContentsMouseEvent(WebContents* source,
[email protected]229eb7e2011-12-23 01:04:08151 const gfx::Point& location,
152 bool motion) {}
[email protected]0dd3a0ab2011-02-18 08:17:44153
154 // Request the delegate to change the zoom level of the current tab.
[email protected]229eb7e2011-12-23 01:04:08155 virtual void ContentsZoomChange(bool zoom_in) {}
[email protected]0dd3a0ab2011-02-18 08:17:44156
[email protected]067310262012-11-22 14:30:41157 // Called to determine if the WebContents can be overscrolled with touch/wheel
158 // gestures.
159 virtual bool CanOverscrollContent() const;
160
[email protected]888878e82013-07-24 22:49:40161 // Callback that allows vertical overscroll activies to be communicated to the
162 // delegate.
163 virtual void OverscrollUpdate(int delta_y) {}
164
[email protected]b7a756d42012-01-23 18:08:17165 // Return the rect where to display the resize corner, if any, otherwise
166 // an empty rect.
167 virtual gfx::Rect GetRootWindowResizerRect() const;
168
[email protected]0dd3a0ab2011-02-18 08:17:44169 // Invoked prior to showing before unload handler confirmation dialog.
[email protected]229eb7e2011-12-23 01:04:08170 virtual void WillRunBeforeUnloadConfirm() {}
[email protected]0dd3a0ab2011-02-18 08:17:44171
172 // Returns true if javascript dialogs and unload alerts are suppressed.
173 // Default is false.
174 virtual bool ShouldSuppressDialogs();
175
[email protected]a796f202012-05-30 14:14:25176 // Add a message to the console. Returning true indicates that the delegate
177 // handled the message. If false is returned the default logging mechanism
178 // will be used for the message.
[email protected]0c9406632013-02-08 01:13:33179 virtual bool AddMessageToConsole(WebContents* source,
[email protected]a796f202012-05-30 14:14:25180 int32 level,
[email protected]fcf75d42013-12-03 20:11:26181 const base::string16& message,
[email protected]a796f202012-05-30 14:14:25182 int32 line_no,
[email protected]fcf75d42013-12-03 20:11:26183 const base::string16& source_id);
[email protected]a796f202012-05-30 14:14:25184
[email protected]0dd3a0ab2011-02-18 08:17:44185 // Tells us that we've finished firing this tab's beforeunload event.
186 // The proceed bool tells us whether the user chose to proceed closing the
[email protected]a2c92a1c2012-04-03 12:32:14187 // tab. Returns true if the tab can continue on firing its unload event.
[email protected]0dd3a0ab2011-02-18 08:17:44188 // If we're closing the entire browser, then we'll want to delay firing
189 // unload events until all the beforeunload events have fired.
[email protected]2a6bc3e2011-12-28 23:51:33190 virtual void BeforeUnloadFired(WebContents* tab,
[email protected]0dd3a0ab2011-02-18 08:17:44191 bool proceed,
192 bool* proceed_to_fire_unload);
193
[email protected]0c9406632013-02-08 01:13:33194 // Returns true if the location bar should be focused by default rather than
[email protected]af4b5f92013-03-05 07:48:38195 // the page contents. NOTE: this is only used if WebContents can't determine
196 // for itself whether the location bar should be focused by default. For a
197 // complete check, you should use WebContents::FocusLocationBarByDefault().
[email protected]0c9406632013-02-08 01:13:33198 virtual bool ShouldFocusLocationBarByDefault(WebContents* source);
199
[email protected]0dd3a0ab2011-02-18 08:17:44200 // Sets focus to the location bar or some other place that is appropriate.
201 // This is called when the tab wants to encourage user input, like for the
202 // new tab page.
[email protected]229eb7e2011-12-23 01:04:08203 virtual void SetFocusToLocationBar(bool select_all) {}
[email protected]0dd3a0ab2011-02-18 08:17:44204
205 // Returns whether the page should be focused when transitioning from crashed
206 // to live. Default is true.
207 virtual bool ShouldFocusPageAfterCrash();
208
[email protected]0dd3a0ab2011-02-18 08:17:44209 // This is called when WebKit tells us that it is done tabbing through
[email protected]674bc592011-12-20 23:00:42210 // controls on the page. Provides a way for WebContentsDelegates to handle
[email protected]0dd3a0ab2011-02-18 08:17:44211 // this. Returns true if the delegate successfully handled it.
[email protected]0c9406632013-02-08 01:13:33212 virtual bool TakeFocus(WebContents* source,
[email protected]b3996ba2012-08-08 00:39:13213 bool reverse);
[email protected]0dd3a0ab2011-02-18 08:17:44214
215 // Invoked when the page loses mouse capture.
[email protected]229eb7e2011-12-23 01:04:08216 virtual void LostCapture() {}
[email protected]0dd3a0ab2011-02-18 08:17:44217
[email protected]2a6bc3e2011-12-28 23:51:33218 // Notification that |contents| has gained focus.
219 virtual void WebContentsFocused(WebContents* contents) {}
[email protected]0dd3a0ab2011-02-18 08:17:44220
[email protected]686493142011-07-15 21:47:22221 // Asks the delegate if the given tab can download.
[email protected]f85f5032013-04-03 09:01:54222 // Invoking the |callback| synchronously is OK.
223 virtual void CanDownload(RenderViewHost* render_view_host,
[email protected]c0c1c622012-03-13 04:51:54224 int request_id,
[email protected]f85f5032013-04-03 09:01:54225 const std::string& request_method,
226 const base::Callback<void(bool)>& callback);
[email protected]686493142011-07-15 21:47:22227
[email protected]0dd3a0ab2011-02-18 08:17:44228 // Return much extra vertical space should be allotted to the
229 // render view widget during various animations (e.g. infobar closing).
230 // This is used to make painting look smoother.
231 virtual int GetExtraRenderViewHeight() const;
232
[email protected]0dd3a0ab2011-02-18 08:17:44233 // Returns true if the context menu operation was handled by the delegate.
[email protected]63028f52014-02-10 16:45:40234 virtual bool HandleContextMenu(const content::ContextMenuParams& params);
[email protected]0dd3a0ab2011-02-18 08:17:44235
[email protected]ca13a442012-04-17 14:00:12236 // Opens source view for given WebContents that is navigated to the given
[email protected]0dd3a0ab2011-02-18 08:17:44237 // page url.
[email protected]2a6bc3e2011-12-28 23:51:33238 virtual void ViewSourceForTab(WebContents* source, const GURL& page_url);
[email protected]0dd3a0ab2011-02-18 08:17:44239
[email protected]932b7a12011-03-09 12:50:27240 // Opens source view for the given subframe.
[email protected]2a6bc3e2011-12-28 23:51:33241 virtual void ViewSourceForFrame(WebContents* source,
[email protected]932b7a12011-03-09 12:50:27242 const GURL& url,
[email protected]691aa2f2013-05-28 22:52:04243 const PageState& page_state);
[email protected]932b7a12011-03-09 12:50:27244
[email protected]0dd3a0ab2011-02-18 08:17:44245 // Allows delegates to handle keyboard events before sending to the renderer.
246 // Returns true if the |event| was handled. Otherwise, if the |event| would be
247 // handled in HandleKeyboardEvent() method as a normal keyboard shortcut,
248 // |*is_keyboard_shortcut| should be set to true.
[email protected]b3996ba2012-08-08 00:39:13249 virtual bool PreHandleKeyboardEvent(WebContents* source,
250 const NativeWebKeyboardEvent& event,
[email protected]0dd3a0ab2011-02-18 08:17:44251 bool* is_keyboard_shortcut);
252
253 // Allows delegates to handle unhandled keyboard messages coming back from
254 // the renderer.
[email protected]b3996ba2012-08-08 00:39:13255 virtual void HandleKeyboardEvent(WebContents* source,
256 const NativeWebKeyboardEvent& event) {}
[email protected]0dd3a0ab2011-02-18 08:17:44257
[email protected]229eb7e2011-12-23 01:04:08258 virtual void HandleMouseDown() {}
259 virtual void HandleMouseUp() {}
[email protected]590a634e2012-07-19 16:38:23260
261 // Handles activation resulting from a pointer event (e.g. when mouse is
262 // pressed, or a touch-gesture begins).
263 virtual void HandlePointerActivate() {}
264
[email protected]04bce562014-01-30 05:34:54265 // Allows delegates to handle gesture events before sending to the renderer.
266 // Returns true if the |event| was handled and thus shouldn't be processed
267 // by the renderer's event handler. Note that the touch events that create
268 // the gesture are always passed to the renderer since the gesture is created
269 // and dispatched after the touches return without being "preventDefault()"ed.
270 virtual bool PreHandleGestureEvent(
271 WebContents* source,
272 const blink::WebGestureEvent& event);
273
[email protected]590a634e2012-07-19 16:38:23274 virtual void HandleGestureBegin() {}
275 virtual void HandleGestureEnd() {}
[email protected]0dd3a0ab2011-02-18 08:17:44276
[email protected]090550f2013-06-11 15:04:47277 // Called when an external drag event enters the web contents window. Return
278 // true to allow dragging and dropping on the web contents window or false to
279 // cancel the operation. This method is used by Chromium Embedded Framework.
280 virtual bool CanDragEnter(WebContents* source,
[email protected]dc293a72013-07-01 11:11:22281 const DropData& data,
[email protected]180ef242013-11-07 06:50:46282 blink::WebDragOperationsMask operations_allowed);
[email protected]090550f2013-06-11 15:04:47283
[email protected]0dd3a0ab2011-02-18 08:17:44284 // Render view drag n drop ended.
[email protected]229eb7e2011-12-23 01:04:08285 virtual void DragEnded() {}
[email protected]0dd3a0ab2011-02-18 08:17:44286
287 // Shows the repost form confirmation dialog box.
[email protected]2a6bc3e2011-12-28 23:51:33288 virtual void ShowRepostFormWarningDialog(WebContents* source) {}
[email protected]0dd3a0ab2011-02-18 08:17:44289
[email protected]0dd3a0ab2011-02-18 08:17:44290 // Allows delegate to override navigation to the history entries.
[email protected]2a6bc3e2011-12-28 23:51:33291 // Returns true to allow WebContents to continue with the default processing.
[email protected]0dd3a0ab2011-02-18 08:17:44292 virtual bool OnGoToEntryOffset(int offset);
293
[email protected]4fdf6742012-01-10 20:14:36294 // Allows delegate to control whether a WebContents will be created. Returns
[email protected]03b6d552012-03-29 04:03:01295 // true to allow the creation. Default is to allow it. In cases where the
296 // delegate handles the creation/navigation itself, it will use |target_url|.
[email protected]f1cd3362014-01-07 20:43:01297 // The embedder has to synchronously adopt |route_id| or else the view will
298 // be destroyed.
[email protected]4fdf6742012-01-10 20:14:36299 virtual bool ShouldCreateWebContents(
300 WebContents* web_contents,
301 int route_id,
302 WindowContainerType window_container_type,
[email protected]fcf75d42013-12-03 20:11:26303 const base::string16& frame_name,
[email protected]4543b67c2013-07-11 18:18:36304 const GURL& target_url,
[email protected]dd6730412013-08-14 15:03:37305 const std::string& partition_id,
306 SessionStorageNamespace* session_storage_namespace);
[email protected]4fdf6742012-01-10 20:14:36307
[email protected]2a6bc3e2011-12-28 23:51:33308 // Notifies the delegate about the creation of a new WebContents. This
[email protected]0dd3a0ab2011-02-18 08:17:44309 // typically happens when popups are created.
[email protected]4fdf6742012-01-10 20:14:36310 virtual void WebContentsCreated(WebContents* source_contents,
[email protected]a7531d772014-03-25 16:15:07311 int opener_render_frame_id,
[email protected]fcf75d42013-12-03 20:11:26312 const base::string16& frame_name,
[email protected]4fdf6742012-01-10 20:14:36313 const GURL& target_url,
314 WebContents* new_contents) {}
[email protected]0dd3a0ab2011-02-18 08:17:44315
[email protected]55452902011-06-01 21:57:47316 // Notification that the tab is hung.
[email protected]2a6bc3e2011-12-28 23:51:33317 virtual void RendererUnresponsive(WebContents* source) {}
[email protected]55452902011-06-01 21:57:47318
319 // Notification that the tab is no longer hung.
[email protected]2a6bc3e2011-12-28 23:51:33320 virtual void RendererResponsive(WebContents* source) {}
[email protected]0dd3a0ab2011-02-18 08:17:44321
322 // Notification that a worker associated with this tab has crashed.
[email protected]2a6bc3e2011-12-28 23:51:33323 virtual void WorkerCrashed(WebContents* source) {}
[email protected]0dd3a0ab2011-02-18 08:17:44324
[email protected]09b29342011-06-24 19:18:48325 // Invoked when a main fram navigation occurs.
[email protected]3bbacc5b2012-04-17 17:46:15326 virtual void DidNavigateMainFramePostCommit(WebContents* source) {}
[email protected]93f230e02011-06-01 14:40:00327
[email protected]09b29342011-06-24 19:18:48328 // Invoked when navigating to a pending entry. When invoked the
329 // NavigationController has configured its pending entry, but it has not yet
330 // been committed.
[email protected]3bbacc5b2012-04-17 17:46:15331 virtual void DidNavigateToPendingEntry(WebContents* source) {}
[email protected]93f230e02011-06-01 14:40:00332
[email protected]71a88bb2013-02-01 22:05:15333 // Returns a pointer to a service to manage JavaScript dialogs. May return
[email protected]51da7e32012-01-30 19:24:52334 // NULL in which case dialogs aren't shown.
[email protected]71a88bb2013-02-01 22:05:15335 virtual JavaScriptDialogManager* GetJavaScriptDialogManager();
[email protected]3ab9cb82011-06-03 18:02:07336
[email protected]da8543762012-03-20 08:52:20337 // Called when color chooser should open. Returns the opened color chooser.
[email protected]820957a2014-01-14 14:56:30338 // Returns NULL if we failed to open the color chooser (e.g. when there is a
339 // ColorChooserDialog already open on Windows). Ownership of the returned
340 // pointer is transferred to the caller.
[email protected]8bc5ff02013-11-29 06:34:03341 virtual ColorChooser* OpenColorChooser(
342 WebContents* web_contents,
343 SkColor color,
344 const std::vector<ColorSuggestion>& suggestions);
[email protected]da8543762012-03-20 08:52:20345
[email protected]3a29a6e2011-08-24 18:26:21346 // Called when a file selection is to be done.
[email protected]3bbacc5b2012-04-17 17:46:15347 virtual void RunFileChooser(WebContents* web_contents,
[email protected]229eb7e2011-12-23 01:04:08348 const FileChooserParams& params) {}
[email protected]3a29a6e2011-08-24 18:26:21349
350 // Request to enumerate a directory. This is equivalent to running the file
351 // chooser in directory-enumeration mode and having the user select the given
352 // directory.
[email protected]3bbacc5b2012-04-17 17:46:15353 virtual void EnumerateDirectory(WebContents* web_contents,
[email protected]229eb7e2011-12-23 01:04:08354 int request_id,
[email protected]a3ef4832013-02-02 05:12:33355 const base::FilePath& path) {}
[email protected]3a29a6e2011-08-24 18:26:21356
[email protected]4aebbca2013-09-17 22:26:49357 // Returns true if the delegate will embed a WebContents-owned fullscreen
358 // render widget. In this case, the delegate may access the widget by calling
359 // WebContents::GetFullscreenRenderWidgetHostView(). If false is returned,
360 // WebContents will be responsible for showing the fullscreen widget.
361 virtual bool EmbedsFullscreenWidget() const;
362
[email protected]8a5e0ca2011-08-25 06:30:47363 // Called when the renderer puts a tab into or out of fullscreen mode.
[email protected]3bbacc5b2012-04-17 17:46:15364 virtual void ToggleFullscreenModeForTab(WebContents* web_contents,
[email protected]229eb7e2011-12-23 01:04:08365 bool enter_fullscreen) {}
[email protected]3bbacc5b2012-04-17 17:46:15366 virtual bool IsFullscreenForTabOrPending(
367 const WebContents* web_contents) const;
[email protected]8a5e0ca2011-08-25 06:30:47368
[email protected]7d189022011-08-25 22:54:20369 // Register a new handler for URL requests with the given scheme.
[email protected]3a3b75a2012-06-01 08:38:36370 // |user_gesture| is true if the registration is made in the context of a user
371 // gesture.
[email protected]3bbacc5b2012-04-17 17:46:15372 virtual void RegisterProtocolHandler(WebContents* web_contents,
[email protected]7d189022011-08-25 22:54:20373 const std::string& protocol,
374 const GURL& url,
[email protected]fcf75d42013-12-03 20:11:26375 const base::string16& title,
[email protected]3a3b75a2012-06-01 08:38:36376 bool user_gesture) {}
[email protected]7d189022011-08-25 22:54:20377
[email protected]b888919c2011-09-02 00:32:16378 // Result of string search in the page. This includes the number of matches
379 // found and the selection rect (in screen coordinates) for the string found.
380 // If |final_update| is false, it indicates that more results follow.
[email protected]3bbacc5b2012-04-17 17:46:15381 virtual void FindReply(WebContents* web_contents,
[email protected]b888919c2011-09-02 00:32:16382 int request_id,
383 int number_of_matches,
384 const gfx::Rect& selection_rect,
385 int active_match_ordinal,
[email protected]229eb7e2011-12-23 01:04:08386 bool final_update) {}
[email protected]b888919c2011-09-02 00:32:16387
[email protected]59363fc92012-09-05 03:46:31388#if defined(OS_ANDROID)
389 // Provides the rects of the current find-in-page matches.
390 // Sent as a reply to RequestFindMatchRects.
391 virtual void FindMatchRectsReply(WebContents* web_contents,
392 int version,
393 const std::vector<gfx::RectF>& rects,
394 const gfx::RectF& active_rect) {}
[email protected]59363fc92012-09-05 03:46:31395#endif
396
[email protected]0548c5352011-09-07 00:33:33397 // Invoked when the preferred size of the contents has been changed.
[email protected]3bbacc5b2012-04-17 17:46:15398 virtual void UpdatePreferredSize(WebContents* web_contents,
[email protected]229eb7e2011-12-23 01:04:08399 const gfx::Size& pref_size) {}
[email protected]0548c5352011-09-07 00:33:33400
[email protected]61e2b3cc2012-03-02 16:13:34401 // Invoked when the contents auto-resized and the container should match it.
[email protected]3bbacc5b2012-04-17 17:46:15402 virtual void ResizeDueToAutoResize(WebContents* web_contents,
[email protected]61e2b3cc2012-03-02 16:13:34403 const gfx::Size& new_size) {}
404
[email protected]32ded2212011-11-10 18:51:43405 // Notification message from HTML UI.
[email protected]3bbacc5b2012-04-17 17:46:15406 virtual void WebUISend(WebContents* web_contents,
[email protected]32ded2212011-11-10 18:51:43407 const GURL& source_url,
408 const std::string& name,
[email protected]229eb7e2011-12-23 01:04:08409 const base::ListValue& args) {}
[email protected]32ded2212011-11-10 18:51:43410
[email protected]e9621112011-10-17 05:38:37411 // Requests to lock the mouse. Once the request is approved or rejected,
412 // GotResponseToLockMouseRequest() will be called on the requesting tab
413 // contents.
[email protected]42252e02012-04-26 16:29:39414 virtual void RequestToLockMouse(WebContents* web_contents,
[email protected]a9c81f02012-06-01 00:15:44415 bool user_gesture,
[email protected]f13b4202012-06-12 23:53:23416 bool last_unlocked_by_target) {}
[email protected]e9621112011-10-17 05:38:37417
418 // Notification that the page has lost the mouse lock.
[email protected]229eb7e2011-12-23 01:04:08419 virtual void LostMouseLock() {}
[email protected]e9621112011-10-17 05:38:37420
[email protected]f13b4202012-06-12 23:53:23421 // Asks permission to use the camera and/or microphone. If permission is
422 // granted, a call should be made to |callback| with the devices. If the
423 // request is denied, a call should be made to |callback| with an empty list
424 // of devices. |request| has the details of the request (e.g. which of audio
425 // and/or video devices are requested, and lists of available devices).
426 virtual void RequestMediaAccessPermission(
427 WebContents* web_contents,
[email protected]33662e52013-01-07 21:31:09428 const MediaStreamRequest& request,
[email protected]db3cd9132013-09-03 17:39:23429 const MediaResponseCallback& callback);
[email protected]f13b4202012-06-12 23:53:23430
[email protected]8c8fc292012-11-23 18:57:16431 // Requests permission to access the PPAPI broker. The delegate should return
432 // true and call the passed in |callback| with the result, or return false
433 // to indicate that it does not support asking for permission.
434 virtual bool RequestPpapiBrokerPermission(
435 WebContents* web_contents,
436 const GURL& url,
[email protected]a3ef4832013-02-02 05:12:33437 const base::FilePath& plugin_path,
[email protected]8c8fc292012-11-23 18:57:16438 const base::Callback<void(bool)>& callback);
439
[email protected]dc0fd432013-08-27 15:29:21440 // Returns the size for the new render view created for the pending entry in
441 // |web_contents|; if there's no size, returns an empty size.
442 // This is optional for implementations of WebContentsDelegate; if the
443 // delegate doesn't provide a size, the current WebContentsView's size will be
444 // used.
445 virtual gfx::Size GetSizeForNewRenderView(
446 const WebContents* web_contents) const;
447
[email protected]edc3af82013-12-12 21:24:07448 // Notification that validation of a form displayed by the |web_contents|
449 // has failed. There can only be one message per |web_contents| at a time.
450 virtual void ShowValidationMessage(WebContents* web_contents,
451 const gfx::Rect& anchor_in_root_view,
[email protected]6ff9c8f2013-12-20 09:05:29452 const base::string16& main_text,
453 const base::string16& sub_text) {}
[email protected]edc3af82013-12-12 21:24:07454
455 // Notification that the delegate should hide any showing form validation
456 // message.
457 virtual void HideValidationMessage(WebContents* web_contents) {}
458
459 // Notification that the form element that triggered the validation failure
460 // has moved.
461 virtual void MoveValidationMessage(WebContents* web_contents,
462 const gfx::Rect& anchor_in_root_view) {}
463
[email protected]0dd3a0ab2011-02-18 08:17:44464 protected:
[email protected]674bc592011-12-20 23:00:42465 virtual ~WebContentsDelegate();
[email protected]1de2b8b2011-06-29 19:38:46466
467 private:
[email protected]8ff00d72012-10-23 19:12:21468 friend class WebContentsImpl;
[email protected]1de2b8b2011-06-29 19:38:46469
[email protected]674bc592011-12-20 23:00:42470 // Called when |this| becomes the WebContentsDelegate for |source|.
[email protected]2a6bc3e2011-12-28 23:51:33471 void Attach(WebContents* source);
[email protected]1de2b8b2011-06-29 19:38:46472
[email protected]674bc592011-12-20 23:00:42473 // Called when |this| is no longer the WebContentsDelegate for |source|.
[email protected]2a6bc3e2011-12-28 23:51:33474 void Detach(WebContents* source);
[email protected]1de2b8b2011-06-29 19:38:46475
[email protected]2a6bc3e2011-12-28 23:51:33476 // The WebContents that this is currently a delegate for.
477 std::set<WebContents*> attached_contents_;
[email protected]0dd3a0ab2011-02-18 08:17:44478};
479
[email protected]674bc592011-12-20 23:00:42480} // namespace content
481
482#endif // CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_DELEGATE_H_