Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / ui / apps / chrome_shell_window_delegate.cc
blob957be818492419878fc69d8a9f5c78a3fe5f1fac
1 // Copyright 2013 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.
5 #include "chrome/browser/ui/apps/chrome_shell_window_delegate.h"
7 #include "base/strings/stringprintf.h"
8 #include "chrome/browser/favicon/favicon_tab_helper.h"
9 #include "chrome/browser/file_select_helper.h"
10 #include "chrome/browser/media/media_capture_devices_dispatcher.h"
11 #include "chrome/browser/platform_util.h"
12 #include "chrome/browser/ui/browser.h"
13 #include "chrome/browser/ui/browser_dialogs.h"
14 #include "chrome/browser/ui/browser_tabstrip.h"
15 #include "chrome/browser/ui/browser_window.h"
16 #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
17 #include "chrome/common/render_messages.h"
18 #include "content/public/browser/render_view_host.h"
19 #include "content/public/browser/web_contents.h"
20 #include "content/public/browser/web_contents_view.h"
22 #if defined(USE_ASH)
23 #include "ash/shelf/shelf_constants.h"
24 #endif
26 #if defined(ENABLE_PRINTING)
27 #if defined(ENABLE_FULL_PRINTING)
28 #include "chrome/browser/printing/print_preview_message_handler.h"
29 #include "chrome/browser/printing/print_view_manager.h"
30 #else
31 #include "chrome/browser/printing/print_view_manager_basic.h"
32 #endif // defined(ENABLE_FULL_PRINTING)
33 #endif // defined(ENABLE_PRINTING)
35 namespace {
37 bool disable_external_open_for_testing_ = false;
39 } // namespace
41 ShellWindowLinkDelegate::ShellWindowLinkDelegate() {}
43 ShellWindowLinkDelegate::~ShellWindowLinkDelegate() {}
45 // TODO(rockot): Add a test that exercises this code. See
46 // http://crbug.com/254260.
47 content::WebContents* ShellWindowLinkDelegate::OpenURLFromTab(
48 content::WebContents* source,
49 const content::OpenURLParams& params) {
50 if (source) {
51 platform_util::OpenExternal(
52 Profile::FromBrowserContext(source->GetBrowserContext()), params.url);
54 delete source;
55 return NULL;
58 ChromeShellWindowDelegate::ChromeShellWindowDelegate() {}
60 ChromeShellWindowDelegate::~ChromeShellWindowDelegate() {}
62 void ChromeShellWindowDelegate::DisableExternalOpenForTesting() {
63 disable_external_open_for_testing_ = true;
66 void ChromeShellWindowDelegate::InitWebContents(
67 content::WebContents* web_contents) {
68 FaviconTabHelper::CreateForWebContents(web_contents);
70 #if defined(ENABLE_PRINTING)
71 #if defined(ENABLE_FULL_PRINTING)
72 printing::PrintViewManager::CreateForWebContents(web_contents);
73 printing::PrintPreviewMessageHandler::CreateForWebContents(web_contents);
74 #else
75 printing::PrintViewManagerBasic::CreateForWebContents(web_contents);
76 #endif // defined(ENABLE_FULL_PRINTING)
77 #endif // defined(ENABLE_PRINTING)
80 apps::NativeAppWindow* ChromeShellWindowDelegate::CreateNativeAppWindow(
81 apps::ShellWindow* window,
82 const apps::ShellWindow::CreateParams& params) {
83 return CreateNativeAppWindowImpl(window, params);
86 content::WebContents* ChromeShellWindowDelegate::OpenURLFromTab(
87 Profile* profile,
88 content::WebContents* source,
89 const content::OpenURLParams& params) {
90 // Force all links to open in a new tab, even if they were trying to open a
91 // window.
92 chrome::NavigateParams new_tab_params(
93 static_cast<Browser*>(NULL), params.url, params.transition);
94 new_tab_params.disposition = params.disposition == NEW_BACKGROUND_TAB ?
95 params.disposition : NEW_FOREGROUND_TAB;
96 new_tab_params.initiating_profile = profile;
97 chrome::Navigate(&new_tab_params);
99 return new_tab_params.target_contents;
102 void ChromeShellWindowDelegate::AddNewContents(
103 Profile* profile,
104 content::WebContents* new_contents,
105 WindowOpenDisposition disposition,
106 const gfx::Rect& initial_pos,
107 bool user_gesture,
108 bool* was_blocked) {
109 if (!disable_external_open_for_testing_) {
110 if (!shell_window_link_delegate_.get())
111 shell_window_link_delegate_.reset(new ShellWindowLinkDelegate());
112 new_contents->SetDelegate(shell_window_link_delegate_.get());
113 return;
115 chrome::ScopedTabbedBrowserDisplayer displayer(
116 profile, chrome::GetActiveDesktop());
117 // Force all links to open in a new tab, even if they were trying to open a
118 // new window.
119 disposition =
120 disposition == NEW_BACKGROUND_TAB ? disposition : NEW_FOREGROUND_TAB;
121 chrome::AddWebContents(displayer.browser(), NULL, new_contents, disposition,
122 initial_pos, user_gesture, was_blocked);
125 content::ColorChooser* ChromeShellWindowDelegate::ShowColorChooser(
126 content::WebContents* web_contents,
127 SkColor initial_color) {
128 return chrome::ShowColorChooser(web_contents, initial_color);
131 void ChromeShellWindowDelegate::RunFileChooser(
132 content::WebContents* tab,
133 const content::FileChooserParams& params) {
134 FileSelectHelper::RunFileChooser(tab, params);
137 void ChromeShellWindowDelegate::RequestMediaAccessPermission(
138 content::WebContents* web_contents,
139 const content::MediaStreamRequest& request,
140 const content::MediaResponseCallback& callback,
141 const extensions::Extension* extension) {
142 MediaCaptureDevicesDispatcher::GetInstance()->ProcessMediaAccessRequest(
143 web_contents, request, callback, extension);
146 int ChromeShellWindowDelegate::PreferredIconSize() {
147 #if defined(USE_ASH)
148 return ash::kShelfPreferredSize;
149 #else
150 return extension_misc::EXTENSION_ICON_SMALL;
151 #endif
154 void ChromeShellWindowDelegate::SetWebContentsBlocked(
155 content::WebContents* web_contents,
156 bool blocked) {
157 // RenderViewHost may be NULL during shutdown.
158 content::RenderViewHost* host = web_contents->GetRenderViewHost();
159 if (host) {
160 host->Send(new ChromeViewMsg_SetVisuallyDeemphasized(
161 host->GetRoutingID(), blocked));
165 bool ChromeShellWindowDelegate::IsWebContentsVisible(
166 content::WebContents* web_contents) {
167 return platform_util::IsVisible(web_contents->GetView()->GetNativeView());