web_contents_delegate.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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 ui::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 ui::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 LOG(ERROR) << "WebContentsDelegate::RequestMediaAccessPermission: " 168 << "Not supported."; 169 callback.Run(MediaStreamDevices(), 170 MEDIA_DEVICE_NOT_SUPPORTED, 171 scoped_ptr<MediaStreamUI>()); 172} 173 174bool WebContentsDelegate::CheckMediaAccessPermission( 175 WebContents* web_contents, 176 const GURL& security_origin, 177 MediaStreamType type) { 178 LOG(ERROR) << "WebContentsDelegate::CheckMediaAccessPermission: " 179 << "Not supported."; 180 return false; 181} 182 183bool WebContentsDelegate::RequestPpapiBrokerPermission( 184 WebContents* web_contents, 185 const GURL& url, 186 const base::FilePath& plugin_path, 187 const base::Callback<void(bool)>& callback) { 188 return false; 189} 190 191WebContentsDelegate::~WebContentsDelegate() { 192 while (!attached_contents_.empty()) { 193 WebContents* web_contents = *attached_contents_.begin(); 194 web_contents->SetDelegate(NULL); 195 } 196 DCHECK(attached_contents_.empty()); 197} 198 199void WebContentsDelegate::Attach(WebContents* web_contents) { 200 DCHECK(attached_contents_.find(web_contents) == attached_contents_.end()); 201 attached_contents_.insert(web_contents); 202} 203 204void WebContentsDelegate::Detach(WebContents* web_contents) { 205 DCHECK(attached_contents_.find(web_contents) != attached_contents_.end()); 206 attached_contents_.erase(web_contents); 207} 208 209gfx::Size WebContentsDelegate::GetSizeForNewRenderView( 210 WebContents* web_contents) const { 211 return gfx::Size(); 212} 213 214bool WebContentsDelegate::IsNeverVisible(WebContents* web_contents) { 215 return false; 216} 217 218} // namespace content 219