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