| Index: chrome/browser/dom_ui/advanced_options_utils_gtk.cc
|
| ===================================================================
|
| --- chrome/browser/dom_ui/advanced_options_utils_gtk.cc (revision 0)
|
| +++ chrome/browser/dom_ui/advanced_options_utils_gtk.cc (revision 0)
|
| @@ -0,0 +1,132 @@
|
| +// Copyright (c) 2010 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.
|
| +
|
| +#if !defined(OS_CHROMEOS)
|
| +
|
| +#include "chrome/browser/dom_ui/advanced_options_utils.h"
|
| +
|
| +#include "app/gtk_signal.h"
|
| +#include "app/gtk_util.h"
|
| +#include "base/file_util.h"
|
| +#include "base/env_var.h"
|
| +#include "base/process_util.h"
|
| +#include "base/string_tokenizer.h"
|
| +#include "base/xdg_util.h"
|
| +#include "chrome/browser/browser_list.h"
|
| +#include "chrome/browser/tab_contents/tab_contents.h"
|
| +#include "chrome/common/process_watcher.h"
|
| +
|
| +// Command used to configure GNOME proxy settings. The command was renamed
|
| +// in January 2009, so both are used to work on both old and new systems.
|
| +const char* kOldGNOMEProxyConfigCommand[] = {"gnome-network-preferences", NULL};
|
| +const char* kGNOMEProxyConfigCommand[] = {"gnome-network-properties", NULL};
|
| +// KDE3 and KDE4 are only slightly different, but incompatible. Go figure.
|
| +const char* kKDE3ProxyConfigCommand[] = {"kcmshell", "proxy", NULL};
|
| +const char* kKDE4ProxyConfigCommand[] = {"kcmshell4", "proxy", NULL};
|
| +
|
| +// The URL for Linux proxy configuration help when not running under a
|
| +// supported desktop environment.
|
| +const char kLinuxProxyConfigUrl[] = "about:linux-proxy-config";
|
| +
|
| +// The URL for Linux ssl certificate configuration help.
|
| +const char* const kLinuxCertificatesConfigUrl =
|
| + "http://code.google.com/p/chromium/wiki/LinuxCertManagement";
|
| +
|
| +
|
| +struct ProxyConfigCommand {
|
| + std::string binary;
|
| + const char** argv;
|
| +};
|
| +
|
| +static bool SearchPATH(ProxyConfigCommand* commands, size_t ncommands,
|
| + size_t* index) {
|
| + const char* path = getenv("PATH");
|
| + if (!path)
|
| + return false;
|
| + FilePath bin_path;
|
| + CStringTokenizer tk(path, path + strlen(path), ":");
|
| + // Search $PATH looking for the commands in order.
|
| + while (tk.GetNext()) {
|
| + for (size_t i = 0; i < ncommands; i++) {
|
| + bin_path = FilePath(tk.token()).Append(commands[i].argv[0]);
|
| + if (file_util::PathExists(bin_path)) {
|
| + commands[i].binary = bin_path.value();
|
| + if (index)
|
| + *index = i;
|
| + return true;
|
| + }
|
| + }
|
| + }
|
| + // Did not find any of the binaries in $PATH.
|
| + return false;
|
| +}
|
| +
|
| +static void StartProxyConfigUtil(const ProxyConfigCommand& command) {
|
| + std::vector<std::string> argv;
|
| + argv.push_back(command.binary);
|
| + for (size_t i = 1; command.argv[i]; i++)
|
| + argv.push_back(command.argv[i]);
|
| + base::file_handle_mapping_vector no_files;
|
| + base::ProcessHandle handle;
|
| + if (!base::LaunchApp(argv, no_files, false, &handle)) {
|
| + LOG(ERROR) << "StartProxyConfigUtil failed to start " << command.binary;
|
| + BrowserList::GetLastActive()->
|
| + OpenURL(GURL(kLinuxProxyConfigUrl), GURL(), NEW_FOREGROUND_TAB,
|
| + PageTransition::LINK);
|
| + return;
|
| + }
|
| + ProcessWatcher::EnsureProcessGetsReaped(handle);
|
| +}
|
| +
|
| +void AdvancedOptionsUtilities::ShowNetworkProxySettings(
|
| + TabContents* tab_contents) {
|
| + scoped_ptr<base::EnvVarGetter> env_getter(base::EnvVarGetter::Create());
|
| +
|
| + ProxyConfigCommand command;
|
| + bool found_command = false;
|
| + switch (base::GetDesktopEnvironment(env_getter.get())) {
|
| + case base::DESKTOP_ENVIRONMENT_GNOME: {
|
| + size_t index;
|
| + ProxyConfigCommand commands[2];
|
| + commands[0].argv = kGNOMEProxyConfigCommand;
|
| + commands[1].argv = kOldGNOMEProxyConfigCommand;
|
| + found_command = SearchPATH(commands, 2, &index);
|
| + if (found_command)
|
| + command = commands[index];
|
| + break;
|
| + }
|
| +
|
| + case base::DESKTOP_ENVIRONMENT_KDE3:
|
| + command.argv = kKDE3ProxyConfigCommand;
|
| + found_command = SearchPATH(&command, 1, NULL);
|
| + break;
|
| +
|
| + case base::DESKTOP_ENVIRONMENT_KDE4:
|
| + command.argv = kKDE4ProxyConfigCommand;
|
| + found_command = SearchPATH(&command, 1, NULL);
|
| + break;
|
| +
|
| + case base::DESKTOP_ENVIRONMENT_XFCE:
|
| + case base::DESKTOP_ENVIRONMENT_OTHER:
|
| + break;
|
| + }
|
| +
|
| + if (found_command) {
|
| + StartProxyConfigUtil(command);
|
| + } else {
|
| + const char* name = base::GetDesktopEnvironmentName(env_getter.get());
|
| + if (name)
|
| + LOG(ERROR) << "Could not find " << name << " network settings in $PATH";
|
| + tab_contents->OpenURL(GURL(kLinuxProxyConfigUrl), GURL(),
|
| + NEW_FOREGROUND_TAB, PageTransition::LINK);
|
| + }
|
| +}
|
| +
|
| +void AdvancedOptionsUtilities::ShowManageSSLCertificates(
|
| + TabContents* tab_contents) {
|
| + tab_contents->OpenURL(GURL(kLinuxCertificatesConfigUrl), GURL(),
|
| + NEW_WINDOW, PageTransition::LINK);
|
| +}
|
| +
|
| +#endif // !defined(OS_CHROMEOS)
|
|
|
| Property changes on: chrome/browser/dom_ui/advanced_options_utils_gtk.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|