summaryrefslogtreecommitdiffstats
path: root/chrome/browser/platform_util_linux.cc
diff options
context:
space:
mode:
authordhg@chromium.org <dhg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-29 21:44:24 +0000
committerdhg@chromium.org <dhg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-29 21:44:24 +0000
commit14a000d1e7ced20cb4866a727323e4ea99f78bf7 (patch)
treebdee87d2b78ec19c5f64cb2121f61a5d46d12a0b /chrome/browser/platform_util_linux.cc
parent58e1d9a47237870c128fe00fbd2e94e96319ffed (diff)
downloadchromium_src-14a000d1e7ced20cb4866a727323e4ea99f78bf7.zip
chromium_src-14a000d1e7ced20cb4866a727323e4ea99f78bf7.tar.gz
chromium_src-14a000d1e7ced20cb4866a727323e4ea99f78bf7.tar.bz2
Changing linux platform for chromeos. This involved moving platform_util and extension_error_reporter to browser, so that the UIs surrounding them can be in the browser.
BUG=none TEST=none Review URL: http://codereview.chromium.org/1705009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45986 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/platform_util_linux.cc')
-rw-r--r--chrome/browser/platform_util_linux.cc68
1 files changed, 68 insertions, 0 deletions
diff --git a/chrome/browser/platform_util_linux.cc b/chrome/browser/platform_util_linux.cc
new file mode 100644
index 0000000..38ffba6
--- /dev/null
+++ b/chrome/browser/platform_util_linux.cc
@@ -0,0 +1,68 @@
+// 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/gtk_util.h"
+#include "base/file_util.h"
+#include "base/process_util.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/common/process_watcher.h"
+#include "googleurl/src/gurl.h"
+
+namespace {
+
+void XDGOpen(const std::string& path) {
+ std::vector<std::string> argv;
+ argv.push_back("xdg-open");
+ argv.push_back(path);
+
+ base::environment_vector env;
+ // xdg-open can fall back on mailcap which eventually might plumb through
+ // to a command that needs a terminal. Set the environment variable telling
+ // it that we definitely don't have a terminal available and that it should
+ // bring up a new terminal if necessary. See "man mailcap".
+ env.push_back(std::make_pair("MM_NOTTTY", "1"));
+
+ // In Google Chrome, we do not let GNOME's bug-buddy intercept our crashes.
+ // However, we do not want this environment variable to propagate to external
+ // applications. See http://crbug.com/24120
+ char* disable_gnome_bug_buddy = getenv("GNOME_DISABLE_CRASH_DIALOG");
+ if (disable_gnome_bug_buddy &&
+ disable_gnome_bug_buddy == std::string("SET_BY_GOOGLE_CHROME")) {
+ env.push_back(std::make_pair("GNOME_DISABLE_CRASH_DIALOG", ""));
+ }
+
+ base::file_handle_mapping_vector no_files;
+ base::ProcessHandle handle;
+ if (base::LaunchApp(argv, env, no_files, false, &handle))
+ ProcessWatcher::EnsureProcessGetsReaped(handle);
+}
+
+} // namespace
+
+namespace platform_util {
+
+// 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;
+
+ XDGOpen(dir.value());
+}
+
+void OpenItem(const FilePath& full_path) {
+ XDGOpen(full_path.value());
+}
+
+void OpenExternal(const GURL& url) {
+ XDGOpen(url.spec());
+}
+
+} // namespace platform_util