Chromium Code Reviews| 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..173eae31f3c464ef579be18a043fed3b47b2cc85 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,101 @@ 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) { |
| + 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); |
|
chrisgao (Use stgao instead)
2013/09/06 21:20:13
If there is some warning during parsing like "load
kkania
2013/09/06 23:09:29
OK
|
| + if (status.IsError()) |
| + return status; |
| + |
| + // 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, |
| + &session->driver_log, |
| + &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 +489,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 +507,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); |
| } |
| } |