convert list_proxies to base::CommandLine
We need libbase already, so use that for command line processing rather
than gflags.
BUG=None
TEST=`FEATURES=test emerge-x86-alex platform2` builds & runs crash tests
TEST=`list_proxies --help` works
TEST=ran other list_proxies commands and checked results
Change-Id: I569fa88edb8fee4d6920965d644f69a0998a3202
Reviewed-on: https://chromium-review.googlesource.com/184627
Reviewed-by: Ben Chan <benchan@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
diff --git a/crash_reporter/crash-reporter.gyp b/crash_reporter/crash-reporter.gyp
index d82282f..8aca8cf 100644
--- a/crash_reporter/crash-reporter.gyp
+++ b/crash_reporter/crash-reporter.gyp
@@ -73,11 +73,6 @@
'libchrome-<(libbase_ver)',
],
},
- 'link_settings': {
- 'libraries': [
- '-lgflags',
- ],
- },
'dependencies': [
'../libchromeos/libchromeos-<(libbase_ver).gyp:libchromeos-<(libbase_ver)',
],
diff --git a/crash_reporter/list_proxies.cc b/crash_reporter/list_proxies.cc
index 9f3b3ec..1be76e3 100644
--- a/crash_reporter/list_proxies.cc
+++ b/crash_reporter/list_proxies.cc
@@ -12,20 +12,12 @@
#include "base/command_line.h"
#include "base/file_util.h"
+#include "base/string_number_conversions.h"
#include "base/string_util.h"
#include "base/strings/string_tokenizer.h"
#include "base/values.h"
#include "chromeos/dbus/dbus.h"
#include "chromeos/syslog_logging.h"
-#include "gflags/gflags.h"
-
-#pragma GCC diagnostic ignored "-Wstrict-aliasing"
-DEFINE_bool(quiet, false, "Only print the proxies");
-// Number of seconds to wait for browser to send us a signal
-DEFINE_int32(timeout, 5, "Set timeout for browser resolving proxies");
-DEFINE_bool(verbose, false, "Print additional messages even "
- "when not run from a TTY");
-#pragma GCC diagnostic error "-Wstrict-aliasing"
const char kLibCrosProxyResolveSignalInterface[] =
"org.chromium.CrashReporterLibcrosProxyResolvedInterface";
@@ -37,6 +29,26 @@
"ResolveNetworkProxy";
const char kNoProxy[] = "direct://";
+namespace switches {
+
+const unsigned kTimeoutDefault = 5;
+
+const char kHelp[] = "help";
+const char kQuiet[] = "quiet";
+const char kTimeout[] = "timeout";
+const char kVerbose[] = "verbose";
+// Help message to show when the --help command line switch is specified.
+const char kHelpMessage[] =
+ "Chromium OS Crash helper: proxy lister\n"
+ "\n"
+ "Available Switches:\n"
+ " --quiet Only print the proxies\n"
+ " --verbose Print additional messages even when not run from a TTY\n"
+ " --timeout=N Set timeout for browser resolving proxies (default is 5)\n"
+ " --help Show this help.\n";
+
+} // namespace switches
+
static const char *GetGErrorMessage(const GError *error) {
if (!error)
return "Unknown error.";
@@ -138,7 +150,7 @@
return false; // only call once
}
-static bool ShowBrowserProxies(const char *url) {
+static bool ShowBrowserProxies(std::string url, unsigned timeout) {
GMainLoop *main_loop = g_main_loop_new(NULL, false);
chromeos::dbus::BusConnection dbus = chromeos::dbus::GetSystemBusConnection();
@@ -168,7 +180,7 @@
if (!dbus_g_proxy_call(browser_proxy.gproxy(),
kLibCrosServiceResolveNetworkProxyMethodName,
&gerror,
- G_TYPE_STRING, url,
+ G_TYPE_STRING, url.c_str(),
G_TYPE_STRING, kLibCrosProxyResolveSignalInterface,
G_TYPE_STRING, kLibCrosProxyResolveName,
G_TYPE_INVALID, G_TYPE_INVALID)) {
@@ -179,7 +191,7 @@
}
// Setup a timeout in case the browser doesn't respond with our signal
- g_timeout_add_seconds(FLAGS_timeout, &HandleBrowserTimeout, main_loop);
+ g_timeout_add_seconds(timeout, &HandleBrowserTimeout, main_loop);
// Loop until we either get the proxy-resolved signal, or until the
// timeout is reached.
@@ -198,28 +210,45 @@
}
int main(int argc, char *argv[]) {
- google::ParseCommandLineFlags(&argc, &argv, true);
CommandLine::Init(argc, argv);
+ CommandLine* cl = CommandLine::ForCurrentProcess();
+
+ if (cl->HasSwitch(switches::kHelp)) {
+ LOG(INFO) << switches::kHelpMessage;
+ return 0;
+ }
+
+ bool quiet = cl->HasSwitch(switches::kQuiet);
+ bool verbose = cl->HasSwitch(switches::kVerbose);
+
+ unsigned timeout = switches::kTimeoutDefault;
+ std::string str_timeout = cl->GetSwitchValueASCII(switches::kTimeout);
+ if (!str_timeout.empty() && !base::StringToUint(str_timeout, &timeout)) {
+ LOG(ERROR) << "Invalid timeout value: " << str_timeout;
+ return 1;
+ }
// Default to logging to syslog.
int init_flags = chromeos::kLogToSyslog;
// Log to stderr if a TTY (and "-quiet" wasn't passed), or if "-verbose"
// was passed.
- if ((!FLAGS_quiet && isatty(STDERR_FILENO)) || FLAGS_verbose)
+
+ if ((!quiet && isatty(STDERR_FILENO)) || verbose)
init_flags |= chromeos::kLogToStderr;
chromeos::InitLog(init_flags);
::g_type_init();
- const char *url = NULL;
- if (argc >= 2) {
- url = argv[1];
+ std::string url;
+ CommandLine::StringVector urls = cl->GetArgs();
+ if (!urls.empty()) {
+ url = urls[0];
LOG(INFO) << "Resolving proxies for URL: " << url;
} else {
LOG(INFO) << "Resolving proxies without URL";
}
- if (!ShowBrowserProxies(url)) {
+ if (!ShowBrowserProxies(url, timeout)) {
LOG(ERROR) << "Error resolving proxies via the browser";
LOG(INFO) << "Assuming direct proxy";
printf("%s\n", kNoProxy);