1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
|
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_DELEGATE_H_
#define CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_DELEGATE_H_
#pragma once
#include <string>
#include <vector>
#include "base/basictypes.h"
#include "base/process_util.h"
#include "base/ref_counted.h"
#include "base/string16.h"
#include "chrome/common/content_settings_types.h"
#include "chrome/common/dom_storage_common.h"
#include "chrome/common/translate_errors.h"
#include "chrome/common/view_types.h"
#include "chrome/common/window_container_type.h"
#include "ipc/ipc_channel.h"
#include "net/base/load_states.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebDragOperation.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPopupType.h"
#include "webkit/glue/window_open_disposition.h"
class AutomationResourceRoutingDelegate;
class BackgroundContents;
struct BookmarkNodeData;
class BookmarkNode;
struct ContextMenuParams;
class FilePath;
class GURL;
class ListValue;
struct NativeWebKeyboardEvent;
class NavigationEntry;
class Profile;
struct RendererPreferences;
class RenderProcessHost;
class RenderViewHost;
class ResourceRedirectDetails;
class ResourceRequestDetails;
class SkBitmap;
class SSLClientAuthHandler;
class SSLAddCertHandler;
class TabContents;
struct ThumbnailScore;
struct ViewHostMsg_CreateWindow_Params;
struct ViewHostMsg_DomMessage_Params;
struct ViewHostMsg_FrameNavigate_Params;
struct WebApplicationInfo;
struct WebDropData;
struct WebMenuItem;
class WebKeyboardEvent;
struct WebPreferences;
namespace base {
class WaitableEvent;
}
namespace gfx {
class Point;
class Rect;
class Size;
}
namespace IPC {
class Message;
}
namespace net {
class CookieList;
class CookieOptions;
}
namespace webkit_glue {
struct FormData;
struct FormField;
struct PasswordForm;
}
//
// RenderViewHostDelegate
//
// An interface implemented by an object interested in knowing about the state
// of the RenderViewHost.
//
// This interface currently encompasses every type of message that was
// previously being sent by TabContents itself. Some of these notifications
// may not be relevant to all users of RenderViewHost and we should consider
// exposing a more generic Send function on RenderViewHost and a response
// listener here to serve that need.
//
class RenderViewHostDelegate : public IPC::Channel::Listener {
public:
// View ----------------------------------------------------------------------
// Functions that can be routed directly to a view-specific class.
class View {
public:
// The page is trying to open a new page (e.g. a popup window). The window
// should be created associated with the given route, but it should not be
// shown yet. That should happen in response to ShowCreatedWindow.
// |params.window_container_type| describes the type of RenderViewHost
// container that is requested -- in particular, the window.open call may
// have specified 'background' and 'persistent' in the feature string.
//
// The passed |params.frame_name| parameter is the name parameter that was
// passed to window.open(), and will be empty if none was passed.
//
// Note: this is not called "CreateWindow" because that will clash with
// the Windows function which is actually a #define.
//
// NOTE: this takes ownership of @modal_dialog_event
virtual void CreateNewWindow(
int route_id,
const ViewHostMsg_CreateWindow_Params& params) = 0;
// The page is trying to open a new widget (e.g. a select popup). The
// widget should be created associated with the given route, but it should
// not be shown yet. That should happen in response to ShowCreatedWidget.
// |popup_type| indicates if the widget is a popup and what kind of popup it
// is (select, autofill...).
virtual void CreateNewWidget(int route_id,
WebKit::WebPopupType popup_type) = 0;
// Creates a full screen RenderWidget. Similar to above.
virtual void CreateNewFullscreenWidget(int route_id) = 0;
// Show a previously created page with the specified disposition and bounds.
// The window is identified by the route_id passed to CreateNewWindow.
//
// Note: this is not called "ShowWindow" because that will clash with
// the Windows function which is actually a #define.
virtual void ShowCreatedWindow(int route_id,
WindowOpenDisposition disposition,
const gfx::Rect& initial_pos,
bool user_gesture) = 0;
// Show the newly created widget with the specified bounds.
// The widget is identified by the route_id passed to CreateNewWidget.
virtual void ShowCreatedWidget(int route_id,
const gfx::Rect& initial_pos) = 0;
// Show the newly created full screen widget. Similar to above.
virtual void ShowCreatedFullscreenWidget(int route_id) = 0;
// A context menu should be shown, to be built using the context information
// provided in the supplied params.
virtual void ShowContextMenu(const ContextMenuParams& params) = 0;
// Shows a popup menu with the specified items.
// This method should call RenderViewHost::DidSelectPopupMenuItemAt() or
// RenderViewHost::DidCancelPopupMenu() ased on the user action.
virtual void ShowPopupMenu(const gfx::Rect& bounds,
int item_height,
double item_font_size,
int selected_item,
const std::vector<WebMenuItem>& items,
bool right_aligned) = 0;
// The user started dragging content of the specified type within the
// RenderView. Contextual information about the dragged content is supplied
// by WebDropData.
virtual void StartDragging(const WebDropData& drop_data,
WebKit::WebDragOperationsMask allowed_ops,
const SkBitmap& image,
const gfx::Point& image_offset) = 0;
// The page wants to update the mouse cursor during a drag & drop operation.
// |operation| describes the current operation (none, move, copy, link.)
virtual void UpdateDragCursor(WebKit::WebDragOperation operation) = 0;
// Notification that view for this delegate got the focus.
virtual void GotFocus() = 0;
// Callback to inform the browser that the page is returning the focus to
// the browser's chrome. If reverse is true, it means the focus was
// retrieved by doing a Shift-Tab.
virtual void TakeFocus(bool reverse) = 0;
// Notification that the view has lost capture.
virtual void LostCapture() = 0;
// The page wants the hosting window to activate/deactivate itself (it
// called the JavaScript window.focus()/blur() method).
virtual void Activate() = 0;
virtual void Deactivate() = 0;
// Callback to give the browser a chance to handle the specified keyboard
// event before sending it to the renderer.
// Returns true if the |event| was handled. Otherwise, if the |event| would
// be handled in HandleKeyboardEvent() method as a normal keyboard shortcut,
// |*is_keyboard_shortcut| should be set to true.
virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event,
bool* is_keyboard_shortcut) = 0;
// Callback to inform the browser that the renderer did not process the
// specified events. This gives an opportunity to the browser to process the
// event (used for keyboard shortcuts).
virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) = 0;
// Notifications about mouse events in this view. This is useful for
// implementing global 'on hover' features external to the view.
virtual void HandleMouseMove() = 0;
virtual void HandleMouseDown() = 0;
virtual void HandleMouseLeave() = 0;
virtual void HandleMouseUp() = 0;
virtual void HandleMouseActivate() = 0;
// The contents' preferred size changed.
virtual void UpdatePreferredSize(const gfx::Size& pref_size) = 0;
protected:
virtual ~View() {}
};
// RendererManagerment -------------------------------------------------------
// Functions for managing switching of Renderers. For TabContents, this is
// implemented by the RenderViewHostManager
class RendererManagement {
public:
// Notification whether we should close the page, after an explicit call to
// AttemptToClosePage. This is called before a cross-site request or before
// a tab/window is closed (as indicated by the first parameter) to allow the
// appropriate renderer to approve or deny the request. |proceed| indicates
// whether the user chose to proceed.
virtual void ShouldClosePage(bool for_cross_site_transition,
bool proceed) = 0;
// Called by ResourceDispatcherHost when a response for a pending cross-site
// request is received. The ResourceDispatcherHost will pause the response
// until the onunload handler of the previous renderer is run.
virtual void OnCrossSiteResponse(int new_render_process_host_id,
int new_request_id) = 0;
// Called the ResourceDispatcherHost's associate CrossSiteRequestHandler
// when a cross-site navigation has been canceled.
virtual void OnCrossSiteNavigationCanceled() = 0;
protected:
virtual ~RendererManagement() {}
};
// ContentSettings------------------------------------------------------------
// Interface for content settings related events.
class ContentSettings {
public:
// Called when content in the current page was blocked due to the user's
// content settings.
virtual void OnContentBlocked(ContentSettingsType type,
const std::string& resource_identifier) = 0;
// Called when cookies for the given URL were read either from within the
// current page or while loading it. |blocked_by_policy| should be true, if
// reading cookies was blocked due to the user's content settings. In that
// case, this function should invoke OnContentBlocked.
virtual void OnCookiesRead(
const GURL& url,
const net::CookieList& cookie_list,
bool blocked_by_policy) = 0;
// Called when a specific cookie in the current page was changed.
// |blocked_by_policy| should be true, if the cookie was blocked due to the
// user's content settings. In that case, this function should invoke
// OnContentBlocked.
virtual void OnCookieChanged(const GURL& url,
const std::string& cookie_line,
const net::CookieOptions& options,
bool blocked_by_policy) = 0;
// Called when a specific indexed db factory in the current page was
// accessed. If access was blocked due to the user's content settings,
// |blocked_by_policy| should be true, and this function should invoke
// OnContentBlocked.
virtual void OnIndexedDBAccessed(const GURL& url,
const string16& description,
bool blocked_by_policy) = 0;
// Called when a specific local storage area in the current page was
// accessed. If access was blocked due to the user's content settings,
// |blocked_by_policy| should be true, and this function should invoke
// OnContentBlocked.
virtual void OnLocalStorageAccessed(const GURL& url,
DOMStorageType storage_type,
bool blocked_by_policy) = 0;
// Called when a specific Web database in the current page was accessed. If
// access was blocked due to the user's content settings,
// |blocked_by_policy| should eb true, and this function should invoke
// OnContentBlocked.
virtual void OnWebDatabaseAccessed(const GURL& url,
const string16& name,
const string16& display_name,
unsigned long estimated_size,
bool blocked_by_policy) = 0;
// Called when a specific appcache in the current page was accessed. If
// access was blocked due to the user's content settings,
// |blocked_by_policy| should eb true, and this function should invoke
// OnContentBlocked.
virtual void OnAppCacheAccessed(const GURL& manifest_url,
bool blocked_by_policy) = 0;
// Called when geolocation permission was set in a frame on the current
// page.
virtual void OnGeolocationPermissionSet(const GURL& requesting_frame,
bool allowed) = 0;
protected:
virtual ~ContentSettings() {}
};
// BookmarkDrag --------------------------------------------------------------
// Interface for forwarding bookmark drag and drop to extenstions.
class BookmarkDrag {
public:
virtual void OnDragEnter(const BookmarkNodeData& data) = 0;
virtual void OnDragOver(const BookmarkNodeData& data) = 0;
virtual void OnDragLeave(const BookmarkNodeData& data) = 0;
virtual void OnDrop(const BookmarkNodeData& data) = 0;
protected:
virtual ~BookmarkDrag() {}
};
// SSL -----------------------------------------------------------------------
// Interface for UI and other RenderViewHost-specific interactions with SSL.
class SSL {
public:
// Displays a dialog to select client certificates from |request_info|,
// returning them to |handler|.
virtual void ShowClientCertificateRequestDialog(
scoped_refptr<SSLClientAuthHandler> handler) = 0;
// Called when |handler| encounters an error in verifying a
// received client certificate. Note that, because CAs often will
// not send us intermediate certificates, the verification we can
// do is minimal: we verify the certificate is parseable, that we
// have the corresponding private key, and that the certificate
// has not expired.
virtual void OnVerifyClientCertificateError(
scoped_refptr<SSLAddCertHandler> handler, int error_code) = 0;
// Called when |handler| requests the user's confirmation in adding a
// client certificate.
virtual void AskToAddClientCertificate(
scoped_refptr<SSLAddCertHandler> handler) = 0;
// Called when |handler| successfully adds a client certificate.
virtual void OnAddClientCertificateSuccess(
scoped_refptr<SSLAddCertHandler> handler) = 0;
// Called when |handler| encounters an error adding a client certificate.
virtual void OnAddClientCertificateError(
scoped_refptr<SSLAddCertHandler> handler, int error_code) = 0;
// Called when |handler| has completed, so the delegate may release any
// state accumulated.
virtual void OnAddClientCertificateFinished(
scoped_refptr<SSLAddCertHandler> handler) = 0;
protected:
virtual ~SSL() {}
};
// ---------------------------------------------------------------------------
// Returns the current delegate associated with a feature. May return NULL if
// there is no corresponding delegate.
virtual View* GetViewDelegate();
virtual RendererManagement* GetRendererManagementDelegate();
virtual ContentSettings* GetContentSettingsDelegate();
virtual BookmarkDrag* GetBookmarkDragDelegate();
virtual SSL* GetSSLDelegate();
// Return the delegate for registering RenderViewHosts for automation resource
// routing.
virtual AutomationResourceRoutingDelegate*
GetAutomationResourceRoutingDelegate();
// IPC::Channel::Listener implementation.
// This is used to give the delegate a chance to filter IPC messages.
virtual bool OnMessageReceived(const IPC::Message& message);
// Gets the URL that is currently being displayed, if there is one.
virtual const GURL& GetURL() const;
// Return this object cast to a TabContents, if it is one. If the object is
// not a TabContents, returns NULL. DEPRECATED: Be sure to include brettw and
// jam as reviewers before you use this method.
virtual TabContents* GetAsTabContents();
// Return this object cast to a BackgroundContents, if it is one. If the
// object is not a BackgroundContents, returns NULL.
virtual BackgroundContents* GetAsBackgroundContents();
// Return id number of browser window which this object is attached to. If no
// browser window is attached to, just return -1.
virtual int GetBrowserWindowID() const = 0;
// Return type of RenderView which is attached with this object.
virtual ViewType::Type GetRenderViewType() const = 0;
// The RenderView is being constructed (message sent to the renderer process
// to construct a RenderView). Now is a good time to send other setup events
// to the RenderView. This precedes any other commands to the RenderView.
virtual void RenderViewCreated(RenderViewHost* render_view_host) {}
// The RenderView has been constructed.
virtual void RenderViewReady(RenderViewHost* render_view_host) {}
// The RenderView died somehow (crashed or was killed by the user).
virtual void RenderViewGone(RenderViewHost* render_view_host,
base::TerminationStatus status,
int error_code) {}
// The RenderView is going to be deleted. This is called when each
// RenderView is going to be destroyed
virtual void RenderViewDeleted(RenderViewHost* render_view_host) {}
// The RenderView was navigated to a different page.
virtual void DidNavigate(RenderViewHost* render_view_host,
const ViewHostMsg_FrameNavigate_Params& params) {}
// The state for the page changed and should be updated.
virtual void UpdateState(RenderViewHost* render_view_host,
int32 page_id,
const std::string& state) {}
// The page's title was changed and should be updated.
virtual void UpdateTitle(RenderViewHost* render_view_host,
int32 page_id,
const std::wstring& title) {}
// The page's encoding was changed and should be updated.
virtual void UpdateEncoding(RenderViewHost* render_view_host,
const std::string& encoding) {}
// The destination URL has changed should be updated
virtual void UpdateTargetURL(int32 page_id, const GURL& url) {}
// The thumbnail representation of the page changed and should be updated.
virtual void UpdateThumbnail(const GURL& url,
const SkBitmap& bitmap,
const ThumbnailScore& score) {}
// Inspector setting was changed and should be persisted.
virtual void UpdateInspectorSetting(const std::string& key,
const std::string& value) = 0;
virtual void ClearInspectorSettings() = 0;
// The page is trying to close the RenderView's representation in the client.
virtual void Close(RenderViewHost* render_view_host) {}
// The page is trying to move the RenderView's representation in the client.
virtual void RequestMove(const gfx::Rect& new_bounds) {}
// The RenderView began loading a new page. This corresponds to WebKit's
// notion of the throbber starting.
virtual void DidStartLoading() {}
// The RenderView stopped loading a page. This corresponds to WebKit's
// notion of the throbber stopping.
virtual void DidStopLoading() {}
// The RenderView made progress loading a page's top frame.
// |progress| is a value between 0 (nothing loaded) to 1.0 (top frame
// entirely loaded).
virtual void DidChangeLoadProgress(double progress) {}
// The RenderView's main frame document element is ready. This happens when
// the document has finished parsing.
virtual void DocumentAvailableInMainFrame(RenderViewHost* render_view_host) {}
// The onload handler in the RenderView's main frame has completed.
virtual void DocumentOnLoadCompletedInMainFrame(
RenderViewHost* render_view_host,
int32 page_id) {}
// The page wants to open a URL with the specified disposition.
virtual void RequestOpenURL(const GURL& url,
const GURL& referrer,
WindowOpenDisposition disposition) {}
// A DOM automation operation completed. The result of the operation is
// expressed in a json string.
virtual void DomOperationResponse(const std::string& json_string,
int automation_id) {}
// A message was sent from HTML-based UI.
// By default we ignore such messages.
virtual void ProcessWebUIMessage(
const ViewHostMsg_DomMessage_Params& params) {}
// A message for external host. By default we ignore such messages.
// |receiver| can be a receiving script and |message| is any
// arbitrary string that makes sense to the receiver.
virtual void ProcessExternalHostMessage(const std::string& message,
const std::string& origin,
const std::string& target) {}
// A javascript message, confirmation or prompt should be shown.
virtual void RunJavaScriptMessage(const std::wstring& message,
const std::wstring& default_prompt,
const GURL& frame_url,
const int flags,
IPC::Message* reply_msg,
bool* did_suppress_message) {}
virtual void RunBeforeUnloadConfirm(const std::wstring& message,
IPC::Message* reply_msg) {}
// |url| is assigned to a server that can provide alternate error pages. If
// the returned URL is empty, the default error page built into WebKit will
// be used.
virtual GURL GetAlternateErrorPageURL() const;
// Return a dummy RendererPreferences object that will be used by the renderer
// associated with the owning RenderViewHost.
virtual RendererPreferences GetRendererPrefs(Profile* profile) const = 0;
// Returns a WebPreferences object that will be used by the renderer
// associated with the owning render view host.
virtual WebPreferences GetWebkitPrefs();
// Notification the user has made a gesture while focus was on the
// page. This is used to avoid uninitiated user downloads (aka carpet
// bombing), see DownloadRequestLimiter for details.
virtual void OnUserGesture() {}
// Notification from the renderer host that blocked UI event occurred.
// This happens when there are tab-modal dialogs. In this case, the
// notification is needed to let us draw attention to the dialog (i.e.
// refocus on the modal dialog, flash title etc).
virtual void OnIgnoredUIEvent() {}
// Notification that the renderer has become unresponsive. The
// delegate can use this notification to show a warning to the user.
virtual void RendererUnresponsive(RenderViewHost* render_view_host,
bool is_during_unload) {}
// Notification that a previously unresponsive renderer has become
// responsive again. The delegate can use this notification to end the
// warning shown to the user.
virtual void RendererResponsive(RenderViewHost* render_view_host) {}
// Notification that the RenderViewHost's load state changed.
virtual void LoadStateChanged(const GURL& url, net::LoadState load_state,
uint64 upload_position, uint64 upload_size) {}
// Returns true if this view is used to host an external tab container.
virtual bool IsExternalTabContainer() const;
// The RenderView has inserted one css file into page.
virtual void DidInsertCSS() {}
// A different node in the page got focused.
virtual void FocusedNodeChanged(bool is_editable_node) {}
// Updates the minimum and maximum zoom percentages.
virtual void UpdateZoomLimits(int minimum_percent,
int maximum_percent,
bool remember) {}
// Notification that a worker process has crashed.
void WorkerCrashed() {}
protected:
virtual ~RenderViewHostDelegate() {}
};
#endif // CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_DELEGATE_H_
|