Home | History | Annotate | Download | only in browser
      1 // Copyright (c) 2011 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/file_util.h"
      8 #include "base/process_util.h"
      9 #include "base/task.h"
     10 #include "base/utf_string_conversions.h"
     11 #include "chrome/browser/extensions/file_manager_util.h"
     12 #include "chrome/browser/ui/browser.h"
     13 #include "chrome/browser/ui/browser_list.h"
     14 #include "chrome/browser/tabs/tab_strip_model.h"
     15 #include "content/browser/browser_thread.h"
     16 #include "content/common/process_watcher.h"
     17 #include "googleurl/src/gurl.h"
     18 
     19 class Profile;
     20 
     21 namespace platform_util {
     22 
     23 static const std::string kGmailComposeUrl =
     24     "https://mail.google.com/mail/?extsrc=mailto&url=";
     25 
     26 // Opens file browser on UI thread.
     27 void OpenFileBrowserOnUIThread(const FilePath& dir) {
     28   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
     29 
     30   Browser* browser = BrowserList::GetLastActive();
     31   if (!browser)
     32     return;
     33   GURL url = FileManagerUtil::GetFileBrowserUrlWithParams(
     34      SelectFileDialog::SELECT_NONE, string16(), dir, NULL, 0,
     35      FilePath::StringType());
     36   browser->ShowSingletonTab(url);
     37 }
     38 
     39 void ShowItemInFolder(const FilePath& full_path) {
     40   FilePath dir = full_path.DirName();
     41   if (!file_util::DirectoryExists(dir))
     42     return;
     43 
     44   if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
     45     OpenFileBrowserOnUIThread(dir);
     46   } else {
     47     BrowserThread::PostTask(
     48         BrowserThread::UI, FROM_HERE,
     49         NewRunnableFunction(&OpenFileBrowserOnUIThread, dir));
     50   }
     51 }
     52 
     53 void OpenItem(const FilePath& full_path) {
     54   FileManagerUtil::ViewItem(full_path, false);
     55 }
     56 
     57 static void OpenURL(const std::string& url) {
     58   Browser* browser = BrowserList::GetLastActive();
     59   browser->AddSelectedTabWithURL(GURL(url), PageTransition::LINK);
     60 }
     61 
     62 void OpenExternal(const GURL& url) {
     63   if (url.SchemeIs("mailto")) {
     64     std::string string_url = kGmailComposeUrl;
     65     string_url.append(url.spec());
     66     BrowserThread::PostTask(
     67         BrowserThread::UI, FROM_HERE, NewRunnableFunction(OpenURL, string_url));
     68   }
     69 }
     70 
     71 }  // namespace platform_util
     72