Home | History | Annotate | Download | only in browser
      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 "chrome/browser/platform_util.h"
      6 
      7 #include "base/bind.h"
      8 #include "chrome/browser/chromeos/extensions/file_manager/file_manager_util.h"
      9 #include "chrome/browser/profiles/profile_manager.h"
     10 #include "chrome/browser/ui/browser_finder.h"
     11 #include "chrome/browser/ui/browser_navigator.h"
     12 #include "chrome/browser/ui/host_desktop.h"
     13 #include "chrome/browser/ui/tabs/tab_strip_model.h"
     14 #include "content/public/browser/browser_thread.h"
     15 #include "url/gurl.h"
     16 
     17 using content::BrowserThread;
     18 
     19 namespace {
     20 
     21 const char kGmailComposeUrl[] =
     22     "https://mail.google.com/mail/?extsrc=mailto&url=";
     23 
     24 void OpenURL(const std::string& url) {
     25   // TODO(beng): improve this to locate context from call stack.
     26   Browser* browser = chrome::FindOrCreateTabbedBrowser(
     27       ProfileManager::GetDefaultProfileOrOffTheRecord(),
     28       chrome::HOST_DESKTOP_TYPE_ASH);
     29   chrome::NavigateParams params(
     30       browser, GURL(url), content::PAGE_TRANSITION_LINK);
     31   params.disposition = NEW_FOREGROUND_TAB;
     32   params.window_action = chrome::NavigateParams::SHOW_WINDOW;
     33   chrome::Navigate(&params);
     34 }
     35 
     36 }  // namespace
     37 
     38 namespace platform_util {
     39 
     40 void ShowItemInFolder(const base::FilePath& full_path) {
     41   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
     42   file_manager::util::ShowFileInFolder(full_path);
     43 }
     44 
     45 void OpenItem(const base::FilePath& full_path) {
     46   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
     47   file_manager::util::ViewItem(full_path);
     48 }
     49 
     50 void OpenExternal(const GURL& url) {
     51   // This code should be obsolete since we have default handlers in ChromeOS
     52   // which should handle this. However - there are two things which make it
     53   // necessary to keep it in:
     54   // a.) The user might have deleted the default handler in this session.
     55   //     In this case we would need to have this in place.
     56   // b.) There are several code paths which are not clear if they would call
     57   //     this function directly and which would therefore break (e.g.
     58   //     "Browser::EmailPageLocation" (to name only one).
     59   // As such we should keep this code here.
     60   if (url.SchemeIs("mailto")) {
     61     std::string string_url = kGmailComposeUrl;
     62     string_url.append(url.spec());
     63     BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
     64                             base::Bind(OpenURL, string_url));
     65   } else if (url.is_valid()) {
     66     BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
     67                             base::Bind(OpenURL, url.spec()));
     68   }
     69 }
     70 
     71 }  // namespace platform_util
     72