summaryrefslogtreecommitdiffstats
path: root/chrome/browser/platform_util_chromeos.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/platform_util_chromeos.cc')
-rw-r--r--chrome/browser/platform_util_chromeos.cc130
1 files changed, 130 insertions, 0 deletions
diff --git a/chrome/browser/platform_util_chromeos.cc b/chrome/browser/platform_util_chromeos.cc
new file mode 100644
index 0000000..4c0d8cd
--- /dev/null
+++ b/chrome/browser/platform_util_chromeos.cc
@@ -0,0 +1,130 @@
+// Copyright (c) 2009 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 "chrome/browser/platform_util.h"
+
+#include <gtk/gtk.h>
+
+#include "app/l10n_util.h"
+#include "app/gtk_util.h"
+#include "base/file_util.h"
+#include "base/process_util.h"
+#include "base/task.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/common/process_watcher.h"
+#include "googleurl/src/gurl.h"
+#include "grit/generated_resources.h"
+
+#include "chrome/browser/chrome_thread.h"
+#include "chrome/browser/browser_list.h"
+#include "chrome/browser/dom_ui/filebrowse_ui.h"
+#include "chrome/browser/dom_ui/mediaplayer_ui.h"
+
+class Profile;
+
+namespace platform_util {
+
+static const std::string kGmailComposeUrl =
+ "https://mail.google.com/mail/?extsrc=mailto&url=";
+
+// Opens file browser on UI thread.
+void OpenFileBrowserOnUIThread(const FilePath& dir) {
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
+
+ Profile* profile;
+ profile = BrowserList::GetLastActive()->profile();
+
+ FileBrowseUI::OpenPopup(profile,
+ dir.value(),
+ FileBrowseUI::kPopupWidth,
+ FileBrowseUI::kPopupHeight);
+}
+
+// TODO(estade): It would be nice to be able to select the file in the file
+// manager, but that probably requires extending xdg-open. For now just
+// show the folder.
+void ShowItemInFolder(const FilePath& full_path) {
+ FilePath dir = full_path.DirName();
+ if (!file_util::DirectoryExists(dir))
+ return;
+
+ if (ChromeThread::CurrentlyOn(ChromeThread::UI)) {
+ OpenFileBrowserOnUIThread(dir);
+ } else {
+ ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE,
+ NewRunnableFunction(&OpenFileBrowserOnUIThread, dir));
+ }
+}
+
+void OpenItem(const FilePath& full_path) {
+ std::string ext = full_path.Extension();
+ // For things supported natively by the browser, we should open it
+ // in a tab.
+ if (ext == ".jpg" ||
+ ext == ".jpeg" ||
+ ext == ".png" ||
+ ext == ".gif" ||
+ ext == ".txt" ||
+ ext == ".html" ||
+ ext == ".htm") {
+ std::string path;
+ path = "file://";
+ path.append(full_path.value());
+ if (!ChromeThread::CurrentlyOn(ChromeThread::UI)) {
+ bool result = ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE,
+ NewRunnableFunction(&OpenItem, full_path));
+ DCHECK(result);
+ return;
+ }
+ Browser* browser = BrowserList::GetLastActive();
+ browser->AddTabWithURL(
+ GURL(path), GURL(), PageTransition::LINK, -1,
+ TabStripModel::ADD_SELECTED, NULL, std::string());
+ return;
+ }
+ if (ext == ".avi" ||
+ ext == ".wav" ||
+ ext == ".mp4" ||
+ ext == ".mp3" ||
+ ext == ".mkv" ||
+ ext == ".ogg") {
+ MediaPlayer* mediaplayer = MediaPlayer::Get();
+ std::string url = "file://";
+ url += full_path.value();
+ GURL gurl(url);
+ mediaplayer->EnqueueMediaURL(gurl, NULL);
+ return;
+ }
+
+ // Unknwon file type. Show an error message to user.
+ ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE,
+ NewRunnableFunction(
+ &SimpleErrorBox,
+ static_cast<gfx::NativeWindow>(NULL),
+ l10n_util::GetStringUTF16(IDS_FILEBROWSER_ERROR_TITLE),
+ l10n_util::GetStringFUTF16(IDS_FILEBROWSER_ERROR_UNKNOWN_FILE_TYPE,
+ UTF8ToUTF16(full_path.BaseName().value()))
+ ));
+}
+
+static void OpenURL(const std::string& url) {
+ Browser* browser = BrowserList::GetLastActive();
+ browser->AddTabWithURL(
+ GURL(url), GURL(), PageTransition::LINK, -1,
+ TabStripModel::ADD_SELECTED, NULL, std::string());
+}
+
+void OpenExternal(const GURL& url) {
+ if (url.SchemeIs("mailto")) {
+ std::string string_url = kGmailComposeUrl;
+ string_url.append(url.spec());
+ ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE, NewRunnableFunction(OpenURL, string_url));
+ }
+}
+
+} // namespace platform_util