| // Copyright (c) 2012 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. |
| |
| #include "content/public/browser/web_contents_delegate.h" |
| |
| #include "base/compiler_specific.h" |
| #include "base/logging.h" |
| #include "base/memory/singleton.h" |
| #include "content/public/browser/render_view_host.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/common/url_constants.h" |
| #include "content/public/common/bindings_policy.h" |
| #include "ui/gfx/rect.h" |
| |
| namespace content { |
| |
| WebContentsDelegate::WebContentsDelegate() { |
| } |
| |
| WebContents* WebContentsDelegate::OpenURLFromTab(WebContents* source, |
| const OpenURLParams& params) { |
| return NULL; |
| } |
| |
| bool WebContentsDelegate::IsPopupOrPanel(const WebContents* source) const { |
| return false; |
| } |
| |
| bool WebContentsDelegate::CanOverscrollContent() const { return false; } |
| |
| gfx::Rect WebContentsDelegate::GetRootWindowResizerRect() const { |
| return gfx::Rect(); |
| } |
| |
| bool WebContentsDelegate::ShouldSuppressDialogs() { |
| return false; |
| } |
| |
| bool WebContentsDelegate::ShouldPreserveAbortedURLs(WebContents* source) { |
| return false; |
| } |
| |
| bool WebContentsDelegate::AddMessageToConsole(WebContents* source, |
| int32 level, |
| const base::string16& message, |
| int32 line_no, |
| const base::string16& source_id) { |
| return false; |
| } |
| |
| void WebContentsDelegate::BeforeUnloadFired(WebContents* web_contents, |
| bool proceed, |
| bool* proceed_to_fire_unload) { |
| *proceed_to_fire_unload = true; |
| } |
| |
| bool WebContentsDelegate::ShouldFocusLocationBarByDefault(WebContents* source) { |
| return false; |
| } |
| |
| bool WebContentsDelegate::ShouldFocusPageAfterCrash() { |
| return true; |
| } |
| |
| bool WebContentsDelegate::TakeFocus(WebContents* source, bool reverse) { |
| return false; |
| } |
| |
| int WebContentsDelegate::GetExtraRenderViewHeight() const { |
| return 0; |
| } |
| |
| void WebContentsDelegate::CanDownload( |
| RenderViewHost* render_view_host, |
| const GURL& url, |
| const std::string& request_method, |
| const base::Callback<void(bool)>& callback) { |
| callback.Run(true); |
| } |
| |
| bool WebContentsDelegate::HandleContextMenu( |
| const content::ContextMenuParams& params) { |
| return false; |
| } |
| |
| void WebContentsDelegate::ViewSourceForTab(WebContents* source, |
| const GURL& page_url) { |
| // Fall back implementation based entirely on the view-source scheme. |
| // It suffers from http://crbug.com/523 and that is why browser overrides |
| // it with proper implementation. |
| GURL url = GURL(kViewSourceScheme + std::string(":") + page_url.spec()); |
| OpenURLFromTab(source, OpenURLParams(url, Referrer(), |
| NEW_FOREGROUND_TAB, |
| ui::PAGE_TRANSITION_LINK, false)); |
| } |
| |
| void WebContentsDelegate::ViewSourceForFrame(WebContents* source, |
| const GURL& frame_url, |
| const PageState& page_state) { |
| // Same as ViewSourceForTab, but for given subframe. |
| GURL url = GURL(kViewSourceScheme + std::string(":") + frame_url.spec()); |
| OpenURLFromTab(source, OpenURLParams(url, Referrer(), |
| NEW_FOREGROUND_TAB, |
| ui::PAGE_TRANSITION_LINK, false)); |
| } |
| |
| bool WebContentsDelegate::PreHandleKeyboardEvent( |
| WebContents* source, |
| const NativeWebKeyboardEvent& event, |
| bool* is_keyboard_shortcut) { |
| return false; |
| } |
| |
| bool WebContentsDelegate::PreHandleGestureEvent( |
| WebContents* source, |
| const blink::WebGestureEvent& event) { |
| return false; |
| } |
| |
| bool WebContentsDelegate::CanDragEnter( |
| WebContents* source, |
| const DropData& data, |
| blink::WebDragOperationsMask operations_allowed) { |
| return true; |
| } |
| |
| bool WebContentsDelegate::OnGoToEntryOffset(int offset) { |
| return true; |
| } |
| |
| bool WebContentsDelegate::ShouldCreateWebContents( |
| WebContents* web_contents, |
| int route_id, |
| WindowContainerType window_container_type, |
| const base::string16& frame_name, |
| const GURL& target_url, |
| const std::string& partition_id, |
| SessionStorageNamespace* session_storage_namespace) { |
| return true; |
| } |
| |
| JavaScriptDialogManager* WebContentsDelegate::GetJavaScriptDialogManager() { |
| return NULL; |
| } |
| |
| bool WebContentsDelegate::EmbedsFullscreenWidget() const { |
| return false; |
| } |
| |
| bool WebContentsDelegate::IsFullscreenForTabOrPending( |
| const WebContents* web_contents) const { |
| return false; |
| } |
| |
| content::ColorChooser* WebContentsDelegate::OpenColorChooser( |
| WebContents* web_contents, |
| SkColor color, |
| const std::vector<ColorSuggestion>& suggestions) { |
| return NULL; |
| } |
| |
| void WebContentsDelegate::RequestMediaAccessPermission( |
| WebContents* web_contents, |
| const MediaStreamRequest& request, |
| const MediaResponseCallback& callback) { |
| LOG(ERROR) << "WebContentsDelegate::RequestMediaAccessPermission: " |
| << "Not supported."; |
| callback.Run(MediaStreamDevices(), |
| MEDIA_DEVICE_NOT_SUPPORTED, |
| scoped_ptr<MediaStreamUI>()); |
| } |
| |
| bool WebContentsDelegate::CheckMediaAccessPermission( |
| WebContents* web_contents, |
| const GURL& security_origin, |
| MediaStreamType type) { |
| LOG(ERROR) << "WebContentsDelegate::CheckMediaAccessPermission: " |
| << "Not supported."; |
| return false; |
| } |
| |
| bool WebContentsDelegate::RequestPpapiBrokerPermission( |
| WebContents* web_contents, |
| const GURL& url, |
| const base::FilePath& plugin_path, |
| const base::Callback<void(bool)>& callback) { |
| return false; |
| } |
| |
| WebContentsDelegate::~WebContentsDelegate() { |
| while (!attached_contents_.empty()) { |
| WebContents* web_contents = *attached_contents_.begin(); |
| web_contents->SetDelegate(NULL); |
| } |
| DCHECK(attached_contents_.empty()); |
| } |
| |
| void WebContentsDelegate::Attach(WebContents* web_contents) { |
| DCHECK(attached_contents_.find(web_contents) == attached_contents_.end()); |
| attached_contents_.insert(web_contents); |
| } |
| |
| void WebContentsDelegate::Detach(WebContents* web_contents) { |
| DCHECK(attached_contents_.find(web_contents) != attached_contents_.end()); |
| attached_contents_.erase(web_contents); |
| } |
| |
| gfx::Size WebContentsDelegate::GetSizeForNewRenderView( |
| WebContents* web_contents) const { |
| return gfx::Size(); |
| } |
| |
| bool WebContentsDelegate::IsNeverVisible(WebContents* web_contents) { |
| return false; |
| } |
| |
| } // namespace content |