Commit 62715ad5 authored by chrisgao@chromium.org's avatar chrisgao@chromium.org

[chromedriver] Accept loadAsync as a non-op chromeOption.

BUG=none

Review URL: https://chromiumcodereview.appspot.com/19773012

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@217147 0039d316-1c4b-4281-b951-d872f2087c98
parent c026e394
......@@ -11,6 +11,7 @@
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/values.h"
#include "chrome/test/chromedriver/chrome/log.h"
#include "chrome/test/chromedriver/chrome/status.h"
namespace {
......@@ -25,6 +26,17 @@ Status ParseDetach(
return Status(kOk);
}
Status IgnoreDeprecatedOption(
Log* log,
const char* option_name,
const base::Value& option,
Capabilities* capabilities) {
log->AddEntry(Log::kWarning,
base::StringPrintf("deprecated chrome option is ignored: '%s'",
option_name));
return Status(kOk);
}
Status ParseChromeBinary(
const base::Value& option,
Capabilities* capabilities) {
......@@ -171,6 +183,7 @@ Status ParseProxy(const base::Value& option, Capabilities* capabilities) {
}
Status ParseDesktopChromeCapabilities(
Log* log,
const base::Value& capability,
Capabilities* capabilities) {
const base::DictionaryValue* chrome_options = NULL;
......@@ -180,6 +193,8 @@ Status ParseDesktopChromeCapabilities(
std::map<std::string, Parser> parser_map;
parser_map["detach"] = base::Bind(&ParseDetach);
parser_map["loadAsync"] =
base::Bind(&IgnoreDeprecatedOption, log, "loadAsync");
parser_map["binary"] = base::Bind(&ParseChromeBinary);
parser_map["logPath"] = base::Bind(&ParseLogPath);
parser_map["args"] = base::Bind(&ParseArgs, false);
......@@ -284,7 +299,9 @@ bool Capabilities::IsAndroid() const {
return !android_package.empty();
}
Status Capabilities::Parse(const base::DictionaryValue& desired_caps) {
Status Capabilities::Parse(
const base::DictionaryValue& desired_caps,
Log* log) {
Status status = ParseLoggingPrefs(desired_caps, this);
if (status.IsError())
return status;
......@@ -296,7 +313,8 @@ Status Capabilities::Parse(const base::DictionaryValue& desired_caps) {
std::map<std::string, Parser> parser_map;
parser_map["proxy"] = base::Bind(&ParseProxy);
parser_map["chromeOptions"] = base::Bind(&ParseDesktopChromeCapabilities);
parser_map["chromeOptions"] =
base::Bind(&ParseDesktopChromeCapabilities, log);
for (std::map<std::string, Parser>::iterator it = parser_map.begin();
it != parser_map.end(); ++it) {
const base::Value* capability = NULL;
......
......@@ -16,6 +16,7 @@ namespace base {
class DictionaryValue;
}
class Log;
class Status;
struct Capabilities {
......@@ -25,7 +26,7 @@ struct Capabilities {
// Return true if android package is specified.
bool IsAndroid() const;
Status Parse(const base::DictionaryValue& desired_caps);
Status Parse(const base::DictionaryValue& desired_caps, Log* log);
// Whether the lifetime of the started Chrome browser process should be
// bound to ChromeDriver's process. If true, Chrome will not quit if
......
......@@ -5,6 +5,7 @@
#include "chrome/test/chromedriver/capabilities.h"
#include "base/values.h"
#include "chrome/test/chromedriver/chrome/log.h"
#include "chrome/test/chromedriver/chrome/status.h"
#include "testing/gtest/include/gtest/gtest.h"
......@@ -12,7 +13,8 @@ TEST(ParseCapabilities, WithAndroidPackage) {
Capabilities capabilities;
base::DictionaryValue caps;
caps.SetString("chromeOptions.androidPackage", "abc");
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_TRUE(capabilities.IsAndroid());
ASSERT_EQ("abc", capabilities.android_package);
......@@ -22,7 +24,8 @@ TEST(ParseCapabilities, EmptyAndroidPackage) {
Capabilities capabilities;
base::DictionaryValue caps;
caps.SetString("chromeOptions.androidPackage", std::string());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_FALSE(status.IsOk());
}
......@@ -30,7 +33,8 @@ TEST(ParseCapabilities, IllegalAndroidPackage) {
Capabilities capabilities;
base::DictionaryValue caps;
caps.SetInteger("chromeOptions.androidPackage", 123);
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_FALSE(status.IsOk());
}
......@@ -38,7 +42,8 @@ TEST(ParseCapabilities, LogPath) {
Capabilities capabilities;
base::DictionaryValue caps;
caps.SetString("chromeOptions.logPath", "path/to/logfile");
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_STREQ("path/to/logfile", capabilities.log_path.c_str());
}
......@@ -49,7 +54,8 @@ TEST(ParseCapabilities, NoArgs) {
ASSERT_TRUE(args.empty());
base::DictionaryValue caps;
caps.Set("chromeOptions.args", args.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_TRUE(capabilities.command.GetSwitches().empty());
}
......@@ -61,7 +67,8 @@ TEST(ParseCapabilities, SingleArgWithoutValue) {
ASSERT_EQ(1u, args.GetSize());
base::DictionaryValue caps;
caps.Set("chromeOptions.args", args.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
ASSERT_TRUE(capabilities.command.HasSwitch("enable-nacl"));
......@@ -74,7 +81,8 @@ TEST(ParseCapabilities, SingleArgWithValue) {
ASSERT_EQ(1u, args.GetSize());
base::DictionaryValue caps;
caps.Set("chromeOptions.args", args.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
ASSERT_TRUE(capabilities.command.HasSwitch("load-extension"));
......@@ -92,7 +100,8 @@ TEST(ParseCapabilities, MultipleArgs) {
ASSERT_EQ(3u, args.GetSize());
base::DictionaryValue caps;
caps.Set("chromeOptions.args", args.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_EQ(3u, capabilities.command.GetSwitches().size());
ASSERT_TRUE(capabilities.command.HasSwitch("arg1"));
......@@ -110,7 +119,8 @@ TEST(ParseCapabilities, Prefs) {
prefs.SetString("key2.k", "value2");
base::DictionaryValue caps;
caps.Set("chromeOptions.prefs", prefs.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_TRUE(capabilities.prefs->Equals(&prefs));
}
......@@ -122,7 +132,8 @@ TEST(ParseCapabilities, LocalState) {
local_state.SetString("s2.s", "v2");
base::DictionaryValue caps;
caps.Set("chromeOptions.localState", local_state.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_TRUE(capabilities.local_state->Equals(&local_state));
}
......@@ -134,7 +145,8 @@ TEST(ParseCapabilities, Extensions) {
extensions.AppendString("ext2");
base::DictionaryValue caps;
caps.Set("chromeOptions.extensions", extensions.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_EQ(2u, capabilities.extensions.size());
ASSERT_EQ("ext1", capabilities.extensions[0]);
......@@ -147,7 +159,8 @@ TEST(ParseCapabilities, UnrecognizedProxyType) {
proxy.SetString("proxyType", "unknown proxy type");
base::DictionaryValue caps;
caps.Set("proxy", proxy.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_FALSE(status.IsOk());
}
......@@ -157,7 +170,8 @@ TEST(ParseCapabilities, IllegalProxyType) {
proxy.SetInteger("proxyType", 123);
base::DictionaryValue caps;
caps.Set("proxy", proxy.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_FALSE(status.IsOk());
}
......@@ -167,7 +181,8 @@ TEST(ParseCapabilities, DirectProxy) {
proxy.SetString("proxyType", "DIRECT");
base::DictionaryValue caps;
caps.Set("proxy", proxy.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
ASSERT_TRUE(capabilities.command.HasSwitch("no-proxy-server"));
......@@ -179,7 +194,8 @@ TEST(ParseCapabilities, SystemProxy) {
proxy.SetString("proxyType", "system");
base::DictionaryValue caps;
caps.Set("proxy", proxy.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_TRUE(capabilities.command.GetSwitches().empty());
}
......@@ -191,7 +207,8 @@ TEST(ParseCapabilities, PacProxy) {
proxy.SetString("proxyAutoconfigUrl", "test.wpad");
base::DictionaryValue caps;
caps.Set("proxy", proxy.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
ASSERT_STREQ(
......@@ -206,7 +223,8 @@ TEST(ParseCapabilities, MissingProxyAutoconfigUrl) {
proxy.SetString("httpProxy", "http://localhost:8001");
base::DictionaryValue caps;
caps.Set("proxy", proxy.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_FALSE(status.IsOk());
}
......@@ -216,7 +234,8 @@ TEST(ParseCapabilities, AutodetectProxy) {
proxy.SetString("proxyType", "autodetect");
base::DictionaryValue caps;
caps.Set("proxy", proxy.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
ASSERT_TRUE(capabilities.command.HasSwitch("proxy-auto-detect"));
......@@ -232,7 +251,8 @@ TEST(ParseCapabilities, ManualProxy) {
proxy.SetString("noProxy", "google.com, youtube.com");
base::DictionaryValue caps;
caps.Set("proxy", proxy.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_EQ(2u, capabilities.command.GetSwitches().size());
ASSERT_STREQ(
......@@ -249,7 +269,8 @@ TEST(ParseCapabilities, MissingSettingForManualProxy) {
proxy.SetString("proxyType", "manual");
base::DictionaryValue caps;
caps.Set("proxy", proxy.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_FALSE(status.IsOk());
}
......@@ -262,7 +283,8 @@ TEST(ParseCapabilities, IgnoreNullValueForManualProxy) {
proxy.Set("noProxy", base::Value::CreateNullValue());
base::DictionaryValue caps;
caps.Set("proxy", proxy.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
ASSERT_TRUE(capabilities.command.HasSwitch("proxy-server"));
......@@ -277,7 +299,8 @@ TEST(ParseCapabilities, LoggingPrefsOk) {
logging_prefs.SetString("Network", "INFO");
base::DictionaryValue caps;
caps.Set("loggingPrefs", logging_prefs.DeepCopy());
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_TRUE(status.IsOk());
ASSERT_TRUE(capabilities.logging_prefs.get());
ASSERT_EQ(1u, capabilities.logging_prefs->size());
......@@ -290,6 +313,7 @@ TEST(ParseCapabilities, LoggingPrefsNotDict) {
Capabilities capabilities;
base::DictionaryValue caps;
caps.SetString("loggingPrefs", "INFO");
Status status = capabilities.Parse(caps);
Logger log(Log::kError);
Status status = capabilities.Parse(caps, &log);
ASSERT_FALSE(status.IsOk());
}
......@@ -88,7 +88,7 @@ Status CreateSessionOnSessionThreadHelper(
return Status(kUnknownError, "cannot find dict 'desiredCapabilities'");
Capabilities capabilities;
Status status = capabilities.Parse(*desired_caps);
Status status = capabilities.Parse(*desired_caps, bound_params.log);
if (status.IsError())
return status;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment