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

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: Rebase and Address comments. 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
« no previous file with comments | « chrome/test/chromedriver/chrome_launcher.h ('k') | chrome/test/chromedriver/chrome_launcher_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/chromedriver/chrome_launcher.cc
diff --git a/chrome/test/chromedriver/chrome_launcher.cc b/chrome/test/chromedriver/chrome_launcher.cc
index 62ecd5f2c5baa98ae607812ea2e6c9b0e1538d9f..e22befe3cd6fbc7295ceea68ccbd2234027410ae 100644
--- a/chrome/test/chromedriver/chrome_launcher.cc
+++ b/chrome/test/chromedriver/chrome_launcher.cc
@@ -56,40 +56,36 @@ Status UnpackAutomationExtension(const base::FilePath& temp_dir,
}
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);
+ } else if (!file_util::PathExists(program)) {
+ return Status(kUnknownError,
+ base::StringPrintf("no chrome binary at %" PRFilePath,
+ program.value().c_str()));
}
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;
}
@@ -99,7 +95,7 @@ Status PrepareCommandLine(int port,
"cannot create temp dir for unpacking extensions");
}
Status status = internal::ProcessExtensions(
- extensions, extension_dir->path(), true, &command);
+ capabilities.extensions, extension_dir->path(), true, &command);
if (status.IsError())
return status;
@@ -181,30 +177,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
@@ -263,13 +253,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));
@@ -297,46 +287,38 @@ 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,
bool include_automation_extension,
CommandLine* command) {
std::vector<base::FilePath::StringType> extension_paths;
- for (size_t i = 0; i < (extensions ? extensions->GetSize() : 0); ++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");
@@ -349,12 +331,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());
« no previous file with comments | « chrome/test/chromedriver/chrome_launcher.h ('k') | chrome/test/chromedriver/chrome_launcher_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698