• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_DELEGATE_H_
6 #define CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_DELEGATE_H_
7 
8 #include <string>
9 
10 #include "base/basictypes.h"
11 #include "base/callback.h"
12 #include "base/process/kill.h"
13 #include "base/strings/string16.h"
14 #include "content/browser/dom_storage/session_storage_namespace_impl.h"
15 #include "content/common/content_export.h"
16 #include "net/base/load_states.h"
17 #include "third_party/WebKit/public/web/WebPopupType.h"
18 #include "ui/base/window_open_disposition.h"
19 
20 class GURL;
21 class SkBitmap;
22 struct ViewHostMsg_CreateWindow_Params;
23 struct FrameHostMsg_DidCommitProvisionalLoad_Params;
24 struct ViewMsg_PostMessage_Params;
25 
26 namespace base {
27 class ListValue;
28 class TimeTicks;
29 }
30 
31 namespace IPC {
32 class Message;
33 }
34 
35 namespace gfx {
36 class Point;
37 class Rect;
38 class Size;
39 }
40 
41 namespace content {
42 
43 class BrowserContext;
44 class CrossSiteTransferringRequest;
45 class FrameTree;
46 class PageState;
47 class RenderViewHost;
48 class RenderViewHostDelegateView;
49 class SessionStorageNamespace;
50 class SiteInstance;
51 class WebContents;
52 class WebContentsImpl;
53 struct FileChooserParams;
54 struct GlobalRequestID;
55 struct NativeWebKeyboardEvent;
56 struct Referrer;
57 struct RendererPreferences;
58 struct WebPreferences;
59 
60 //
61 // RenderViewHostDelegate
62 //
63 //  An interface implemented by an object interested in knowing about the state
64 //  of the RenderViewHost.
65 //
66 //  This interface currently encompasses every type of message that was
67 //  previously being sent by WebContents itself. Some of these notifications
68 //  may not be relevant to all users of RenderViewHost and we should consider
69 //  exposing a more generic Send function on RenderViewHost and a response
70 //  listener here to serve that need.
71 class CONTENT_EXPORT RenderViewHostDelegate {
72  public:
73   // Returns the current delegate associated with a feature. May return NULL if
74   // there is no corresponding delegate.
75   virtual RenderViewHostDelegateView* GetDelegateView();
76 
77   // This is used to give the delegate a chance to filter IPC messages.
78   virtual bool OnMessageReceived(RenderViewHost* render_view_host,
79                                  const IPC::Message& message);
80 
81   // Return this object cast to a WebContents, if it is one. If the object is
82   // not a WebContents, returns NULL. DEPRECATED: Be sure to include brettw or
83   // jam as reviewers before you use this method. http://crbug.com/82582
84   virtual WebContents* GetAsWebContents();
85 
86   // Return the rect where to display the resize corner, if any, otherwise
87   // an empty rect.
88   virtual gfx::Rect GetRootWindowResizerRect() const = 0;
89 
90   // The RenderView is being constructed (message sent to the renderer process
91   // to construct a RenderView).  Now is a good time to send other setup events
92   // to the RenderView.  This precedes any other commands to the RenderView.
RenderViewCreated(RenderViewHost * render_view_host)93   virtual void RenderViewCreated(RenderViewHost* render_view_host) {}
94 
95   // The RenderView has been constructed.
RenderViewReady(RenderViewHost * render_view_host)96   virtual void RenderViewReady(RenderViewHost* render_view_host) {}
97 
98   // The RenderView died somehow (crashed or was killed by the user).
RenderViewTerminated(RenderViewHost * render_view_host,base::TerminationStatus status,int error_code)99   virtual void RenderViewTerminated(RenderViewHost* render_view_host,
100                                     base::TerminationStatus status,
101                                     int error_code) {}
102 
103   // The RenderView is going to be deleted. This is called when each
104   // RenderView is going to be destroyed
RenderViewDeleted(RenderViewHost * render_view_host)105   virtual void RenderViewDeleted(RenderViewHost* render_view_host) {}
106 
107   // The state for the page changed and should be updated.
UpdateState(RenderViewHost * render_view_host,int32 page_id,const PageState & state)108   virtual void UpdateState(RenderViewHost* render_view_host,
109                            int32 page_id,
110                            const PageState& state) {}
111 
112   // The destination URL has changed should be updated.
UpdateTargetURL(const GURL & url)113   virtual void UpdateTargetURL(const GURL& url) {}
114 
115   // The page is trying to close the RenderView's representation in the client.
Close(RenderViewHost * render_view_host)116   virtual void Close(RenderViewHost* render_view_host) {}
117 
118   // The page is trying to move the RenderView's representation in the client.
RequestMove(const gfx::Rect & new_bounds)119   virtual void RequestMove(const gfx::Rect& new_bounds) {}
120 
121   // The pending page load was canceled.
DidCancelLoading()122   virtual void DidCancelLoading() {}
123 
124   // The RenderView's main frame document element is ready. This happens when
125   // the document has finished parsing.
DocumentAvailableInMainFrame(RenderViewHost * render_view_host)126   virtual void DocumentAvailableInMainFrame(RenderViewHost* render_view_host) {}
127 
128   // The page wants to close the active view in this tab.
RouteCloseEvent(RenderViewHost * rvh)129   virtual void RouteCloseEvent(RenderViewHost* rvh) {}
130 
131   // The page wants to post a message to the active view in this tab.
RouteMessageEvent(RenderViewHost * rvh,const ViewMsg_PostMessage_Params & params)132   virtual void RouteMessageEvent(
133       RenderViewHost* rvh,
134       const ViewMsg_PostMessage_Params& params) {}
135 
136   // Return a dummy RendererPreferences object that will be used by the renderer
137   // associated with the owning RenderViewHost.
138   virtual RendererPreferences GetRendererPrefs(
139       BrowserContext* browser_context) const = 0;
140 
141   // Computes a WebPreferences object that will be used by the renderer
142   // associated with the owning render view host.
143   virtual WebPreferences ComputeWebkitPrefs();
144 
145   // Notification the user has made a gesture while focus was on the
146   // page. This is used to avoid uninitiated user downloads (aka carpet
147   // bombing), see DownloadRequestLimiter for details.
OnUserGesture()148   virtual void OnUserGesture() {}
149 
150   // Notification from the renderer host that blocked UI event occurred.
151   // This happens when there are tab-modal dialogs. In this case, the
152   // notification is needed to let us draw attention to the dialog (i.e.
153   // refocus on the modal dialog, flash title etc).
OnIgnoredUIEvent()154   virtual void OnIgnoredUIEvent() {}
155 
156   // Notification that the renderer has become unresponsive. The
157   // delegate can use this notification to show a warning to the user.
RendererUnresponsive(RenderViewHost * render_view_host,bool is_during_before_unload,bool is_during_unload)158   virtual void RendererUnresponsive(RenderViewHost* render_view_host,
159                                     bool is_during_before_unload,
160                                     bool is_during_unload) {}
161 
162   // Notification that a previously unresponsive renderer has become
163   // responsive again. The delegate can use this notification to end the
164   // warning shown to the user.
RendererResponsive(RenderViewHost * render_view_host)165   virtual void RendererResponsive(RenderViewHost* render_view_host) {}
166 
167   // Notification that the RenderViewHost's load state changed.
LoadStateChanged(const GURL & url,const net::LoadStateWithParam & load_state,uint64 upload_position,uint64 upload_size)168   virtual void LoadStateChanged(const GURL& url,
169                                 const net::LoadStateWithParam& load_state,
170                                 uint64 upload_position,
171                                 uint64 upload_size) {}
172 
173   // The page wants the hosting window to activate/deactivate itself (it
174   // called the JavaScript window.focus()/blur() method).
Activate()175   virtual void Activate() {}
Deactivate()176   virtual void Deactivate() {}
177 
178   // Notification that the view has lost capture.
LostCapture()179   virtual void LostCapture() {}
180 
181   // Notifications about mouse events in this view.  This is useful for
182   // implementing global 'on hover' features external to the view.
HandleMouseMove()183   virtual void HandleMouseMove() {}
HandleMouseDown()184   virtual void HandleMouseDown() {}
HandleMouseLeave()185   virtual void HandleMouseLeave() {}
HandleMouseUp()186   virtual void HandleMouseUp() {}
HandlePointerActivate()187   virtual void HandlePointerActivate() {}
HandleGestureBegin()188   virtual void HandleGestureBegin() {}
HandleGestureEnd()189   virtual void HandleGestureEnd() {}
190 
191   // Called when a file selection is to be done.
RunFileChooser(RenderViewHost * render_view_host,const FileChooserParams & params)192   virtual void RunFileChooser(
193       RenderViewHost* render_view_host,
194       const FileChooserParams& params) {}
195 
196   // Notification that the page wants to go into or out of fullscreen mode.
ToggleFullscreenMode(bool enter_fullscreen)197   virtual void ToggleFullscreenMode(bool enter_fullscreen) {}
198   virtual bool IsFullscreenForCurrentTab() const;
199 
200   // The contents' preferred size changed.
UpdatePreferredSize(const gfx::Size & pref_size)201   virtual void UpdatePreferredSize(const gfx::Size& pref_size) {}
202 
203   // The contents auto-resized and the container should match it.
ResizeDueToAutoResize(const gfx::Size & new_size)204   virtual void ResizeDueToAutoResize(const gfx::Size& new_size) {}
205 
206   // Requests to lock the mouse. Once the request is approved or rejected,
207   // GotResponseToLockMouseRequest() will be called on the requesting render
208   // view host.
RequestToLockMouse(bool user_gesture,bool last_unlocked_by_target)209   virtual void RequestToLockMouse(bool user_gesture,
210                                   bool last_unlocked_by_target) {}
211 
212   // Notification that the view has lost the mouse lock.
LostMouseLock()213   virtual void LostMouseLock() {}
214 
215   // The page is trying to open a new page (e.g. a popup window). The window
216   // should be created associated with the given |route_id| in process
217   // |render_process_id|, but it should not be shown yet. That should happen in
218   // response to ShowCreatedWindow.
219   // |params.window_container_type| describes the type of RenderViewHost
220   // container that is requested -- in particular, the window.open call may
221   // have specified 'background' and 'persistent' in the feature string.
222   //
223   // The passed |params.frame_name| parameter is the name parameter that was
224   // passed to window.open(), and will be empty if none was passed.
225   //
226   // Note: this is not called "CreateWindow" because that will clash with
227   // the Windows function which is actually a #define.
CreateNewWindow(int render_process_id,int route_id,int main_frame_route_id,const ViewHostMsg_CreateWindow_Params & params,SessionStorageNamespace * session_storage_namespace)228   virtual void CreateNewWindow(
229       int render_process_id,
230       int route_id,
231       int main_frame_route_id,
232       const ViewHostMsg_CreateWindow_Params& params,
233       SessionStorageNamespace* session_storage_namespace) {}
234 
235   // The page is trying to open a new widget (e.g. a select popup). The
236   // widget should be created associated with the given |route_id| in the
237   // process |render_process_id|, but it should not be shown yet. That should
238   // happen in response to ShowCreatedWidget.
239   // |popup_type| indicates if the widget is a popup and what kind of popup it
240   // is (select, autofill...).
CreateNewWidget(int render_process_id,int route_id,blink::WebPopupType popup_type)241   virtual void CreateNewWidget(int render_process_id,
242                                int route_id,
243                                blink::WebPopupType popup_type) {}
244 
245   // Creates a full screen RenderWidget. Similar to above.
CreateNewFullscreenWidget(int render_process_id,int route_id)246   virtual void CreateNewFullscreenWidget(int render_process_id, int route_id) {}
247 
248   // Show a previously created page with the specified disposition and bounds.
249   // The window is identified by the route_id passed to CreateNewWindow.
250   //
251   // Note: this is not called "ShowWindow" because that will clash with
252   // the Windows function which is actually a #define.
ShowCreatedWindow(int route_id,WindowOpenDisposition disposition,const gfx::Rect & initial_pos,bool user_gesture)253   virtual void ShowCreatedWindow(int route_id,
254                                  WindowOpenDisposition disposition,
255                                  const gfx::Rect& initial_pos,
256                                  bool user_gesture) {}
257 
258   // Show the newly created widget with the specified bounds.
259   // The widget is identified by the route_id passed to CreateNewWidget.
ShowCreatedWidget(int route_id,const gfx::Rect & initial_pos)260   virtual void ShowCreatedWidget(int route_id,
261                                  const gfx::Rect& initial_pos) {}
262 
263   // Show the newly created full screen widget. Similar to above.
ShowCreatedFullscreenWidget(int route_id)264   virtual void ShowCreatedFullscreenWidget(int route_id) {}
265 
266   // Returns the SessionStorageNamespace the render view should use. Might
267   // create the SessionStorageNamespace on the fly.
268   virtual SessionStorageNamespace* GetSessionStorageNamespace(
269       SiteInstance* instance);
270 
271   // Returns a copy of the map of all session storage namespaces related
272   // to this view.
273   virtual SessionStorageNamespaceMap GetSessionStorageNamespaceMap();
274 
275   // Returns true if the RenderViewHost will never be visible.
276   virtual bool IsNeverVisible();
277 
278   // Returns the FrameTree the render view should use. Guaranteed to be constant
279   // for the lifetime of the render view.
280   //
281   // TODO(ajwong): Remove once the main frame RenderFrameHost is no longer
282   // created by the RenderViewHost.
283   virtual FrameTree* GetFrameTree();
284 
285   // Optional state storage for if the Virtual Keyboard has been requested by
286   // this page or not. If it has, this can be used to suppress things like the
287   // link disambiguation dialog, which doesn't interact well with the virtual
288   // keyboard.
SetIsVirtualKeyboardRequested(bool requested)289   virtual void SetIsVirtualKeyboardRequested(bool requested) {}
290   virtual bool IsVirtualKeyboardRequested();
291 
292  protected:
~RenderViewHostDelegate()293   virtual ~RenderViewHostDelegate() {}
294 };
295 
296 }  // namespace content
297 
298 #endif  // CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_DELEGATE_H_
299