web_contents_delegate.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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#include "content/public/browser/web_contents_delegate.h"
6
7#include "base/compiler_specific.h"
8#include "base/logging.h"
9#include "base/memory/singleton.h"
10#include "content/public/browser/render_view_host.h"
11#include "content/public/browser/web_contents.h"
12#include "content/public/common/url_constants.h"
13#include "content/public/common/bindings_policy.h"
14#include "ui/gfx/rect.h"
15
16namespace content {
17
18WebContentsDelegate::WebContentsDelegate() {
19}
20
21WebContents* WebContentsDelegate::OpenURLFromTab(WebContents* source,
22                                                 const OpenURLParams& params) {
23  return NULL;
24}
25
26bool WebContentsDelegate::IsPopupOrPanel(const WebContents* source) const {
27  return false;
28}
29
30bool WebContentsDelegate::CanOverscrollContent() const { return false; }
31
32gfx::Rect WebContentsDelegate::GetRootWindowResizerRect() const {
33  return gfx::Rect();
34}
35
36bool WebContentsDelegate::ShouldSuppressDialogs() {
37  return false;
38}
39
40bool WebContentsDelegate::ShouldPreserveAbortedURLs(WebContents* source) {
41  return false;
42}
43
44bool WebContentsDelegate::AddMessageToConsole(WebContents* source,
45                                              int32 level,
46                                              const base::string16& message,
47                                              int32 line_no,
48                                              const base::string16& source_id) {
49  return false;
50}
51
52void WebContentsDelegate::BeforeUnloadFired(WebContents* web_contents,
53                                            bool proceed,
54                                            bool* proceed_to_fire_unload) {
55  *proceed_to_fire_unload = true;
56}
57
58bool WebContentsDelegate::ShouldFocusLocationBarByDefault(WebContents* source) {
59  return false;
60}
61
62bool WebContentsDelegate::ShouldFocusPageAfterCrash() {
63  return true;
64}
65
66bool WebContentsDelegate::TakeFocus(WebContents* source, bool reverse) {
67  return false;
68}
69
70int WebContentsDelegate::GetExtraRenderViewHeight() const {
71  return 0;
72}
73
74void WebContentsDelegate::CanDownload(
75    RenderViewHost* render_view_host,
76    const GURL& url,
77    const std::string& request_method,
78    const base::Callback<void(bool)>& callback) {
79  callback.Run(true);
80}
81
82bool WebContentsDelegate::HandleContextMenu(
83    const content::ContextMenuParams& params) {
84  return false;
85}
86
87void WebContentsDelegate::ViewSourceForTab(WebContents* source,
88                                           const GURL& page_url) {
89  // Fall back implementation based entirely on the view-source scheme.
90  // It suffers from http://crbug.com/523 and that is why browser overrides
91  // it with proper implementation.
92  GURL url = GURL(kViewSourceScheme + std::string(":") + page_url.spec());
93  OpenURLFromTab(source, OpenURLParams(url, Referrer(),
94                                       NEW_FOREGROUND_TAB,
95                                       PAGE_TRANSITION_LINK, false));
96}
97
98void WebContentsDelegate::ViewSourceForFrame(WebContents* source,
99                                             const GURL& frame_url,
100                                             const PageState& page_state) {
101  // Same as ViewSourceForTab, but for given subframe.
102  GURL url = GURL(kViewSourceScheme + std::string(":") + frame_url.spec());
103  OpenURLFromTab(source, OpenURLParams(url, Referrer(),
104                                       NEW_FOREGROUND_TAB,
105                                       PAGE_TRANSITION_LINK, false));
106}
107
108bool WebContentsDelegate::PreHandleKeyboardEvent(
109    WebContents* source,
110    const NativeWebKeyboardEvent& event,
111    bool* is_keyboard_shortcut) {
112  return false;
113}
114
115bool WebContentsDelegate::PreHandleGestureEvent(
116    WebContents* source,
117    const blink::WebGestureEvent& event) {
118  return false;
119}
120
121bool WebContentsDelegate::CanDragEnter(
122    WebContents* source,
123    const DropData& data,
124    blink::WebDragOperationsMask operations_allowed) {
125  return true;
126}
127
128bool WebContentsDelegate::OnGoToEntryOffset(int offset) {
129  return true;
130}
131
132bool WebContentsDelegate::ShouldCreateWebContents(
133    WebContents* web_contents,
134    int route_id,
135    WindowContainerType window_container_type,
136    const base::string16& frame_name,
137    const GURL& target_url,
138    const std::string& partition_id,
139    SessionStorageNamespace* session_storage_namespace) {
140  return true;
141}
142
143JavaScriptDialogManager* WebContentsDelegate::GetJavaScriptDialogManager() {
144  return NULL;
145}
146
147bool WebContentsDelegate::EmbedsFullscreenWidget() const {
148  return false;
149}
150
151bool WebContentsDelegate::IsFullscreenForTabOrPending(
152    const WebContents* web_contents) const {
153  return false;
154}
155
156content::ColorChooser* WebContentsDelegate::OpenColorChooser(
157    WebContents* web_contents,
158    SkColor color,
159    const std::vector<ColorSuggestion>& suggestions) {
160  return NULL;
161}
162
163void WebContentsDelegate::RequestMediaAccessPermission(
164    WebContents* web_contents,
165    const MediaStreamRequest& request,
166    const MediaResponseCallback& callback) {
167  callback.Run(MediaStreamDevices(),
168               MEDIA_DEVICE_INVALID_STATE,
169               scoped_ptr<MediaStreamUI>());
170}
171
172bool WebContentsDelegate::RequestPpapiBrokerPermission(
173    WebContents* web_contents,
174    const GURL& url,
175    const base::FilePath& plugin_path,
176    const base::Callback<void(bool)>& callback) {
177  return false;
178}
179
180WebContentsDelegate::~WebContentsDelegate() {
181  while (!attached_contents_.empty()) {
182    WebContents* web_contents = *attached_contents_.begin();
183    web_contents->SetDelegate(NULL);
184  }
185  DCHECK(attached_contents_.empty());
186}
187
188void WebContentsDelegate::Attach(WebContents* web_contents) {
189  DCHECK(attached_contents_.find(web_contents) == attached_contents_.end());
190  attached_contents_.insert(web_contents);
191}
192
193void WebContentsDelegate::Detach(WebContents* web_contents) {
194  DCHECK(attached_contents_.find(web_contents) != attached_contents_.end());
195  attached_contents_.erase(web_contents);
196}
197
198gfx::Size WebContentsDelegate::GetSizeForNewRenderView(
199   WebContents* web_contents) const {
200  return gfx::Size();
201}
202
203bool WebContentsDelegate::IsNeverVisible(WebContents* web_contents) {
204  return false;
205}
206
207}  // namespace content
208