Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(541)

Side by Side Diff: chrome/browser/ui/extensions/shell_window.cc

Issue 10915047: Links in platform apps should open in the system default browser. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: refine the patch. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/extensions/shell_window.h" 5 #include "chrome/browser/ui/extensions/shell_window.h"
6 6
7 #if defined(OS_WIN)
8 #include <windows.h>
9 #include <shellapi.h>
10 #endif // OS_WIN
11
12 #if defined(OS_POSIX)
13 #include "chrome/browser/shell_integration_linux.h"
14 #endif // OS_POSIX
15
16 #if defined(OS_MACOSX)
17 #include <CoreFoundation/CFBundle.h>
18 #include <ApplicationServices/ApplicationServices.h>
19 #endif // OS_MACOSX
Marijn Kruisselbrink 2012/09/04 15:40:53 I think the chromium coding style says platform-sp
20
7 #include "base/utf_string_conversions.h" 21 #include "base/utf_string_conversions.h"
8 #include "chrome/browser/extensions/extension_process_manager.h" 22 #include "chrome/browser/extensions/extension_process_manager.h"
9 #include "chrome/browser/extensions/extension_system.h" 23 #include "chrome/browser/extensions/extension_system.h"
10 #include "chrome/browser/extensions/shell_window_geometry_cache.h" 24 #include "chrome/browser/extensions/shell_window_geometry_cache.h"
11 #include "chrome/browser/extensions/shell_window_registry.h" 25 #include "chrome/browser/extensions/shell_window_registry.h"
12 #include "chrome/browser/file_select_helper.h" 26 #include "chrome/browser/file_select_helper.h"
13 #include "chrome/browser/infobars/infobar_tab_helper.h" 27 #include "chrome/browser/infobars/infobar_tab_helper.h"
14 #include "chrome/browser/intents/web_intents_util.h" 28 #include "chrome/browser/intents/web_intents_util.h"
15 #include "chrome/browser/lifetime/application_lifetime.h" 29 #include "chrome/browser/lifetime/application_lifetime.h"
16 #include "chrome/browser/profiles/profile.h" 30 #include "chrome/browser/profiles/profile.h"
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 extension()->HasAPIPermission(APIPermission::kVideoCapture) && 208 extension()->HasAPIPermission(APIPermission::kVideoCapture) &&
195 !iter->second.empty()) { 209 !iter->second.empty()) {
196 devices.push_back(iter->second[0]); 210 devices.push_back(iter->second[0]);
197 } 211 }
198 212
199 callback.Run(devices); 213 callback.Run(devices);
200 } 214 }
201 215
202 WebContents* ShellWindow::OpenURLFromTab(WebContents* source, 216 WebContents* ShellWindow::OpenURLFromTab(WebContents* source,
203 const content::OpenURLParams& params) { 217 const content::OpenURLParams& params) {
218 #if defined(OS_WIN)
219 ShellExecuteA(NULL, "open", params.url.spec().c_str(),
220 NULL, NULL, SW_SHOWNORMAL);
221 #elif defined(OS_POSIX)
222 ShellIntegrationLinux::LaunchDefaultBrowser(params.url);
223 #elif defined(OS_MACOSX)
224 CFURLRef url = CFURLCreateWithBytes(
225 NULL,
226 (UInt8*)params.url.spec().c_str(),
227 params.url.spec().length(),
228 kCFStringEncodingASCII,
229 NULL
230 );
231 LSOpenCFURLRef(url,0);
232 CFRelease(url);
jeremya 2012/09/03 02:42:29 It's kind of icky to have all these #ifdefs here.
233 #else
204 DCHECK(source == web_contents_); 234 DCHECK(source == web_contents_);
205 235
206 if (params.url.host() == extension_->id()) { 236 if (params.url.host() == extension_->id()) {
207 AddMessageToDevToolsConsole( 237 AddMessageToDevToolsConsole(
208 content::CONSOLE_MESSAGE_LEVEL_ERROR, 238 content::CONSOLE_MESSAGE_LEVEL_ERROR,
209 base::StringPrintf( 239 base::StringPrintf(
210 "Can't navigate to \"%s\"; apps do not support navigation.", 240 "Can't navigate to \"%s\"; apps do not support navigation.",
211 params.url.spec().c_str())); 241 params.url.spec().c_str()));
212 return NULL; 242 return NULL;
213 } 243 }
(...skipping 21 matching lines...) Expand all
235 265
236 // Force all links to open in a new tab, even if they were trying to open a 266 // Force all links to open in a new tab, even if they were trying to open a
237 // window. 267 // window.
238 content::OpenURLParams new_tab_params = params; 268 content::OpenURLParams new_tab_params = params;
239 new_tab_params.disposition = 269 new_tab_params.disposition =
240 disposition == NEW_BACKGROUND_TAB ? disposition : NEW_FOREGROUND_TAB; 270 disposition == NEW_BACKGROUND_TAB ? disposition : NEW_FOREGROUND_TAB;
241 Browser* browser = browser::FindOrCreateTabbedBrowser(profile_); 271 Browser* browser = browser::FindOrCreateTabbedBrowser(profile_);
242 WebContents* new_tab = browser->OpenURL(new_tab_params); 272 WebContents* new_tab = browser->OpenURL(new_tab_params);
243 browser->window()->Show(); 273 browser->window()->Show();
244 return new_tab; 274 return new_tab;
275 #endif
276 source->SetDelegate(NULL);
jeremya 2012/09/03 02:42:29 Rather than setting the delegate to the ShellWindo
277 return NULL;
245 } 278 }
246 279
247 void ShellWindow::AddNewContents(WebContents* source, 280 void ShellWindow::AddNewContents(WebContents* source,
248 WebContents* new_contents, 281 WebContents* new_contents,
249 WindowOpenDisposition disposition, 282 WindowOpenDisposition disposition,
250 const gfx::Rect& initial_pos, 283 const gfx::Rect& initial_pos,
251 bool user_gesture) { 284 bool user_gesture) {
252 DCHECK(source == web_contents_); 285 DCHECK(source == web_contents_);
253 DCHECK(Profile::FromBrowserContext(new_contents->GetBrowserContext()) == 286 DCHECK(Profile::FromBrowserContext(new_contents->GetBrowserContext()) ==
254 profile_); 287 profile_);
288
289 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_POSIX)
290 new_contents->SetDelegate(this);
291 #else
255 Browser* browser = browser::FindOrCreateTabbedBrowser(profile_); 292 Browser* browser = browser::FindOrCreateTabbedBrowser(profile_);
256 // Force all links to open in a new tab, even if they were trying to open a 293 // Force all links to open in a new tab, even if they were trying to open a
257 // new window. 294 // new window.
258 disposition = 295 disposition =
259 disposition == NEW_BACKGROUND_TAB ? disposition : NEW_FOREGROUND_TAB; 296 disposition == NEW_BACKGROUND_TAB ? disposition : NEW_FOREGROUND_TAB;
260 chrome::AddWebContents(browser, NULL, new_contents, disposition, initial_pos, 297 chrome::AddWebContents(browser, NULL, new_contents, disposition, initial_pos,
261 user_gesture); 298 user_gesture);
299 #endif
262 } 300 }
263 301
264 void ShellWindow::HandleKeyboardEvent( 302 void ShellWindow::HandleKeyboardEvent(
265 WebContents* source, 303 WebContents* source,
266 const content::NativeWebKeyboardEvent& event) { 304 const content::NativeWebKeyboardEvent& event) {
267 DCHECK_EQ(source, web_contents_); 305 DCHECK_EQ(source, web_contents_);
268 native_window_->HandleKeyboardEvent(event); 306 native_window_->HandleKeyboardEvent(event);
269 } 307 }
270 308
271 void ShellWindow::OnNativeClose() { 309 void ShellWindow::OnNativeClose() {
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 return; 452 return;
415 453
416 extensions::ShellWindowGeometryCache* cache = 454 extensions::ShellWindowGeometryCache* cache =
417 extensions::ExtensionSystem::Get(profile())-> 455 extensions::ExtensionSystem::Get(profile())->
418 shell_window_geometry_cache(); 456 shell_window_geometry_cache();
419 457
420 gfx::Rect bounds = native_window_->GetBounds(); 458 gfx::Rect bounds = native_window_->GetBounds();
421 cache->SaveGeometry(extension()->id(), window_key_, bounds); 459 cache->SaveGeometry(extension()->id(), window_key_, bounds);
422 } 460 }
423 461
OLDNEW
« chrome/browser/shell_integration_linux.cc ('K') | « chrome/browser/shell_integration_linux.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698