| Index: chrome/test/chromedriver/session_commands.cc
|
| diff --git a/chrome/test/chromedriver/session_commands.cc b/chrome/test/chromedriver/session_commands.cc
|
| index 4372bdbf12f88ba1c0fadc6f9e0d9d9316616f4d..d2d0f9670beb0e26370d7fcdc1a7ee132527d610 100644
|
| --- a/chrome/test/chromedriver/session_commands.cc
|
| +++ b/chrome/test/chromedriver/session_commands.cc
|
| @@ -16,12 +16,20 @@
|
| #include "base/synchronization/waitable_event.h"
|
| #include "base/values.h"
|
| #include "chrome/test/chromedriver/basic_types.h"
|
| +#include "chrome/test/chromedriver/capabilities.h"
|
| #include "chrome/test/chromedriver/chrome/automation_extension.h"
|
| #include "chrome/test/chromedriver/chrome/chrome.h"
|
| +#include "chrome/test/chromedriver/chrome/chrome_android_impl.h"
|
| +#include "chrome/test/chromedriver/chrome/chrome_desktop_impl.h"
|
| +#include "chrome/test/chromedriver/chrome/device_manager.h"
|
| +#include "chrome/test/chromedriver/chrome/devtools_event_listener.h"
|
| #include "chrome/test/chromedriver/chrome/geoposition.h"
|
| #include "chrome/test/chromedriver/chrome/status.h"
|
| +#include "chrome/test/chromedriver/chrome/version.h"
|
| #include "chrome/test/chromedriver/chrome/web_view.h"
|
| +#include "chrome/test/chromedriver/chrome_launcher.h"
|
| #include "chrome/test/chromedriver/logging.h"
|
| +#include "chrome/test/chromedriver/net/url_request_context_getter.h"
|
| #include "chrome/test/chromedriver/session.h"
|
| #include "chrome/test/chromedriver/util.h"
|
|
|
| @@ -44,6 +52,107 @@ bool WindowHandleToWebViewId(const std::string& window_handle,
|
|
|
| } // namespace
|
|
|
| +InitSessionParams::InitSessionParams(
|
| + scoped_refptr<URLRequestContextGetter> context_getter,
|
| + const SyncWebSocketFactory& socket_factory,
|
| + DeviceManager* device_manager)
|
| + : context_getter(context_getter),
|
| + socket_factory(socket_factory),
|
| + device_manager(device_manager) {}
|
| +
|
| +InitSessionParams::~InitSessionParams() {}
|
| +
|
| +namespace {
|
| +
|
| +scoped_ptr<base::DictionaryValue> CreateCapabilities(Chrome* chrome) {
|
| + scoped_ptr<base::DictionaryValue> caps(new base::DictionaryValue());
|
| + caps->SetString("browserName", "chrome");
|
| + caps->SetString("version", chrome->GetVersion());
|
| + caps->SetString("chrome.chromedriverVersion", kChromeDriverVersion);
|
| + caps->SetString("platform", chrome->GetOperatingSystemName());
|
| + caps->SetBoolean("javascriptEnabled", true);
|
| + caps->SetBoolean("takesScreenshot", true);
|
| + caps->SetBoolean("handlesAlerts", true);
|
| + caps->SetBoolean("databaseEnabled", true);
|
| + caps->SetBoolean("locationContextEnabled", true);
|
| + caps->SetBoolean("applicationCacheEnabled", false);
|
| + caps->SetBoolean("browserConnectionEnabled", false);
|
| + caps->SetBoolean("cssSelectorsEnabled", true);
|
| + caps->SetBoolean("webStorageEnabled", true);
|
| + caps->SetBoolean("rotatable", false);
|
| + caps->SetBoolean("acceptSslCerts", true);
|
| + caps->SetBoolean("nativeEvents", true);
|
| + return caps.Pass();
|
| +}
|
| +
|
| +
|
| +Status InitSessionHelper(
|
| + const InitSessionParams& bound_params,
|
| + Session* session,
|
| + const base::DictionaryValue& params,
|
| + scoped_ptr<base::Value>* value) {
|
| + session->driver_log.reset(
|
| + new WebDriverLog(WebDriverLog::kDriverType, Log::kAll));
|
| + const base::DictionaryValue* desired_caps;
|
| + if (!params.GetDictionary("desiredCapabilities", &desired_caps))
|
| + return Status(kUnknownError, "cannot find dict 'desiredCapabilities'");
|
| +
|
| + Capabilities capabilities;
|
| + Status status = capabilities.Parse(*desired_caps);
|
| + if (status.IsError())
|
| + return status;
|
| +
|
| + if (capabilities.logging_prefs.count(WebDriverLog::kDriverType)) {
|
| + session->driver_log->set_min_level(
|
| + capabilities.logging_prefs[WebDriverLog::kDriverType]);
|
| + }
|
| +
|
| + // Create Log's and DevToolsEventListener's for ones that are DevTools-based.
|
| + // Session will own the Log's, Chrome will own the listeners.
|
| + ScopedVector<DevToolsEventListener> devtools_event_listeners;
|
| + status = CreateLogs(capabilities,
|
| + &session->devtools_logs,
|
| + &devtools_event_listeners);
|
| + if (status.IsError())
|
| + return status;
|
| +
|
| + status = LaunchChrome(bound_params.context_getter.get(),
|
| + bound_params.socket_factory,
|
| + bound_params.device_manager,
|
| + capabilities,
|
| + devtools_event_listeners,
|
| + &session->chrome);
|
| + if (status.IsError())
|
| + return status;
|
| +
|
| + std::list<std::string> web_view_ids;
|
| + status = session->chrome->GetWebViewIds(&web_view_ids);
|
| + if (status.IsError() || web_view_ids.empty()) {
|
| + return status.IsError() ? status :
|
| + Status(kUnknownError, "unable to discover open window in chrome");
|
| + }
|
| +
|
| + session->window = web_view_ids.front();
|
| + session->detach = capabilities.detach;
|
| + session->force_devtools_screenshot = capabilities.force_devtools_screenshot;
|
| + session->capabilities = CreateCapabilities(session->chrome.get());
|
| + value->reset(session->capabilities->DeepCopy());
|
| + return Status(kOk);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +Status ExecuteInitSession(
|
| + const InitSessionParams& bound_params,
|
| + Session* session,
|
| + const base::DictionaryValue& params,
|
| + scoped_ptr<base::Value>* value) {
|
| + Status status = InitSessionHelper(bound_params, session, params, value);
|
| + if (status.IsError())
|
| + session->quit = true;
|
| + return status;
|
| +}
|
| +
|
| Status ExecuteQuit(
|
| bool allow_detach,
|
| Session* session,
|
| @@ -386,12 +495,13 @@ Status ExecuteGetAvailableLogTypes(
|
| const base::DictionaryValue& params,
|
| scoped_ptr<base::Value>* value) {
|
| scoped_ptr<base::ListValue> types(new base::ListValue());
|
| - for (ScopedVector<WebDriverLog>::const_iterator log
|
| - = session->devtools_logs.begin();
|
| - log != session->devtools_logs.end(); ++log) {
|
| + std::vector<WebDriverLog*> logs = session->GetAllLogs();
|
| + for (std::vector<WebDriverLog*>::const_iterator log = logs.begin();
|
| + log != logs.end();
|
| + ++log) {
|
| types->AppendString((*log)->type());
|
| }
|
| - value->reset(types.release());
|
| + *value = types.Pass();
|
| return Status(kOk);
|
| }
|
|
|
| @@ -403,12 +513,12 @@ Status ExecuteGetLog(
|
| if (!params.GetString("type", &log_type)) {
|
| return Status(kUnknownError, "missing or invalid 'type'");
|
| }
|
| - for (ScopedVector<WebDriverLog>::const_iterator log
|
| - = session->devtools_logs.begin();
|
| - log != session->devtools_logs.end(); ++log) {
|
| + std::vector<WebDriverLog*> logs = session->GetAllLogs();
|
| + for (std::vector<WebDriverLog*>::const_iterator log = logs.begin();
|
| + log != logs.end();
|
| + ++log) {
|
| if (log_type == (*log)->type()) {
|
| - scoped_ptr<base::ListValue> log_entries = (*log)->GetAndClearEntries();
|
| - value->reset(log_entries.release());
|
| + *value = (*log)->GetAndClearEntries();
|
| return Status(kOk);
|
| }
|
| }
|
|
|