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

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

Issue 23467010: [chromedriver] Logging tweaks and fixes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 3 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/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);
}
}

Powered by Google App Engine
This is Rietveld 408576698