Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10146)

Unified Diff: chrome/test/chromedriver/chrome_launcher.cc

Issue 13185004: [chromedriver] Implement proxy capability. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Check unexpected capabilities failed java tests. Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/chromedriver/chrome_launcher.cc
diff --git a/chrome/test/chromedriver/chrome_launcher.cc b/chrome/test/chromedriver/chrome_launcher.cc
index 161377b16add638b735486e623e9d66d8719d512..8ad4695e486e9a30713dd66b340471c37ae6f328 100644
--- a/chrome/test/chromedriver/chrome_launcher.cc
+++ b/chrome/test/chromedriver/chrome_launcher.cc
@@ -34,50 +34,42 @@
namespace {
Status PrepareCommandLine(int port,
- const base::FilePath& exe,
- const base::ListValue* args,
- const base::ListValue* extensions,
- const base::DictionaryValue* prefs,
- const base::DictionaryValue* local_state,
+ const Capabilities& capabilities,
CommandLine* prepared_command,
base::ScopedTempDir* user_data_dir,
base::ScopedTempDir* extension_dir) {
- base::FilePath program = exe;
+ CommandLine command = capabilities.command;
+ base::FilePath program = command.GetProgram();
if (program.empty()) {
if (!FindChrome(&program))
return Status(kUnknownError, "cannot find Chrome binary");
+ command.SetProgram(program);
}
LOG(INFO) << "Using chrome from " << program.value();
- CommandLine command(program);
command.AppendSwitchASCII("remote-debugging-port", base::IntToString(port));
command.AppendSwitch("no-first-run");
command.AppendSwitch("enable-logging");
command.AppendSwitchASCII("logging-level", "1");
command.AppendArg("data:text/html;charset=utf-8,");
- if (args) {
- Status status = internal::ProcessCommandLineArgs(args, &command);
- if (status.IsError())
- return status;
- }
-
if (!command.HasSwitch("user-data-dir")) {
if (!user_data_dir->CreateUniqueTempDir())
return Status(kUnknownError, "cannot create temp dir for user data dir");
command.AppendSwitchPath("user-data-dir", user_data_dir->path());
Status status = internal::PrepareUserDataDir(
- user_data_dir->path(), prefs, local_state);
+ user_data_dir->path(), capabilities.prefs.get(),
+ capabilities.local_state.get());
if (status.IsError())
return status;
}
- if (extensions) {
+ if (!capabilities.extensions.empty()) {
if (!extension_dir->CreateUniqueTempDir())
return Status(kUnknownError,
"cannot create temp dir for unpacking extensions");
Status status = internal::ProcessExtensions(
- extensions, extension_dir->path(), &command);
+ capabilities.extensions, extension_dir->path(), &command);
if (status.IsError())
return status;
}
@@ -159,30 +151,24 @@ Status WaitForDevToolsAndCheckVersion(
return Status(kUnknownError, "unable to discover open pages");
}
-} // namespace
-
Status LaunchDesktopChrome(URLRequestContextGetter* context_getter,
int port,
const SyncWebSocketFactory& socket_factory,
- const base::FilePath& exe,
- const base::ListValue* args,
- const base::ListValue* extensions,
- const base::DictionaryValue* prefs,
- const base::DictionaryValue* local_state,
- const std::string& log_path,
+ const Capabilities& capabilities,
scoped_ptr<Chrome>* chrome) {
CommandLine command(CommandLine::NO_PROGRAM);
base::ScopedTempDir user_data_dir;
base::ScopedTempDir extension_dir;
- PrepareCommandLine(port, exe, args, extensions, prefs, local_state,
+ PrepareCommandLine(port, capabilities,
&command, &user_data_dir, &extension_dir);
base::LaunchOptions options;
#if !defined(OS_WIN)
base::EnvironmentVector environ;
- if (!log_path.empty()) {
- environ.push_back(base::EnvironmentVector::value_type("CHROME_LOG_FILE",
- log_path));
+ if (!capabilities.log_path.empty()) {
+ environ.push_back(
+ base::EnvironmentVector::value_type("CHROME_LOG_FILE",
+ capabilities.log_path));
options.environ = &environ;
}
#endif
@@ -241,13 +227,13 @@ Status LaunchDesktopChrome(URLRequestContextGetter* context_getter,
Status LaunchAndroidChrome(URLRequestContextGetter* context_getter,
int port,
const SyncWebSocketFactory& socket_factory,
- const std::string& package_name,
+ const Capabilities& capabilities,
scoped_ptr<Chrome>* chrome) {
// TODO(frankf): Figure out how this should be installed to
// make this work for all platforms.
base::FilePath adb_commands(FILE_PATH_LITERAL("adb_commands.py"));
CommandLine command(adb_commands);
- command.AppendSwitchASCII("package", package_name);
+ command.AppendSwitchASCII("package", capabilities.android_package);
command.AppendSwitch("launch");
command.AppendSwitchASCII("port", base::IntToString(port));
@@ -275,45 +261,37 @@ Status LaunchAndroidChrome(URLRequestContextGetter* context_getter,
return Status(kOk);
}
-namespace internal {
+} // namespace
-Status ProcessCommandLineArgs(const base::ListValue* args,
- CommandLine* command) {
- for (size_t i = 0; i < args->GetSize(); ++i) {
- std::string arg_string;
- if (!args->GetString(i, &arg_string))
- return Status(kUnknownError, "invalid chrome command line argument");
- size_t separator_index = arg_string.find("=");
- if (separator_index != std::string::npos) {
- CommandLine::StringType arg_string_native;
- if (!args->GetString(i, &arg_string_native))
- return Status(kUnknownError, "invalid chrome command line argument");
- command->AppendSwitchNative(
- arg_string.substr(0, separator_index),
- arg_string_native.substr(separator_index + 1));
- } else {
- command->AppendSwitch(arg_string);
- }
+Status LaunchChrome(URLRequestContextGetter* context_getter,
+ int port,
+ const SyncWebSocketFactory& socket_factory,
+ const Capabilities& capabilities,
+ scoped_ptr<Chrome>* chrome) {
+ if (capabilities.IsAndroid()) {
+ return LaunchAndroidChrome(
+ context_getter, port, socket_factory, capabilities, chrome);
+ } else {
+ return LaunchDesktopChrome(
+ context_getter, port, socket_factory, capabilities, chrome);
}
- return Status(kOk);
}
-Status ProcessExtensions(const base::ListValue* extensions,
+namespace internal {
+
+Status ProcessExtensions(const std::vector<std::string>& extensions,
const base::FilePath& temp_dir,
CommandLine* command) {
std::vector<base::FilePath::StringType> extension_paths;
- for (size_t i = 0; i < extensions->GetSize(); ++i) {
+ size_t count = 0;
+ for (std::vector<std::string>::const_iterator it = extensions.begin();
+ it != extensions.end(); ++it) {
std::string extension_base64;
- if (!extensions->GetString(i, &extension_base64)) {
- return Status(kUnknownError,
- "each extension must be a base64 encoded string");
- }
-
// Decodes extension string.
// Some WebDriver client base64 encoders follow RFC 1521, which require that
// 'encoded lines be no more than 76 characters long'. Just remove any
// newlines.
- RemoveChars(extension_base64, "\n", &extension_base64);
+ RemoveChars(*it, "\n", &extension_base64);
std::string decoded_extension;
if (!base::Base64Decode(extension_base64, &decoded_extension))
return Status(kUnknownError, "failed to base64 decode extension");
@@ -326,12 +304,14 @@ Status ProcessExtensions(const base::ListValue* extensions,
base::FilePath extension_crx = temp_crx_dir.path().AppendASCII("temp.crx");
int size = static_cast<int>(decoded_extension.length());
if (file_util::WriteFile(extension_crx, decoded_extension.c_str(), size)
- != size)
+ != size) {
return Status(kUnknownError, "failed to write extension file");
+ }
// Unzips the temporary .crx file.
+ count++;
base::FilePath extension_dir = temp_dir.AppendASCII(
- base::StringPrintf("extension%" PRIuS, i));
+ base::StringPrintf("extension%" PRIuS, count));
if (!zip::Unzip(extension_crx, extension_dir))
return Status(kUnknownError, "failed to unzip the extension CRX file");
extension_paths.push_back(extension_dir.value());

Powered by Google App Engine
This is Rietveld 408576698