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

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: rebase 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
« no previous file with comments | « chrome/test/chromedriver/session_commands.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
}
« no previous file with comments | « chrome/test/chromedriver/session_commands.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698