Index: chrome/test/chromedriver/commands.cc |
diff --git a/chrome/test/chromedriver/commands.cc b/chrome/test/chromedriver/commands.cc |
index debf3a857a9df24f3017d500d9afa262e8ef503c..a060975849e758c4f87b42be553d09e720f18d6c 100644 |
--- a/chrome/test/chromedriver/commands.cc |
+++ b/chrome/test/chromedriver/commands.cc |
@@ -9,7 +9,6 @@ |
#include "base/bind.h" |
#include "base/bind_helpers.h" |
-#include "base/lazy_instance.h" |
#include "base/logging.h" // For CHECK macros. |
#include "base/memory/linked_ptr.h" |
#include "base/message_loop/message_loop.h" |
@@ -17,21 +16,11 @@ |
#include "base/run_loop.h" |
#include "base/strings/stringprintf.h" |
#include "base/sys_info.h" |
-#include "base/threading/thread_local.h" |
#include "base/values.h" |
#include "chrome/test/chromedriver/capabilities.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/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/net_util.h" |
-#include "chrome/test/chromedriver/net/url_request_context_getter.h" |
#include "chrome/test/chromedriver/session.h" |
#include "chrome/test/chromedriver/session_thread_map.h" |
#include "chrome/test/chromedriver/util.h" |
@@ -55,100 +44,16 @@ void ExecuteGetStatus( |
Status(kOk), scoped_ptr<base::Value>(info.DeepCopy()), std::string()); |
} |
-NewSessionParams::NewSessionParams( |
+void ExecuteCreateSession( |
SessionThreadMap* session_thread_map, |
- scoped_refptr<URLRequestContextGetter> context_getter, |
- const SyncWebSocketFactory& socket_factory, |
- DeviceManager* device_manager) |
- : session_thread_map(session_thread_map), |
- context_getter(context_getter), |
- socket_factory(socket_factory), |
- device_manager(device_manager) {} |
- |
-NewSessionParams::~NewSessionParams() {} |
- |
-namespace { |
- |
-base::LazyInstance<base::ThreadLocalPointer<Session> > |
- lazy_tls_session = LAZY_INSTANCE_INITIALIZER; |
- |
-Status CreateSessionOnSessionThreadHelper( |
- const NewSessionParams& bound_params, |
- const base::DictionaryValue& params, |
- const std::string& session_id, |
- scoped_ptr<base::Value>* out_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); |
- 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<WebDriverLog> devtools_logs; |
- // TODO(kkania): Save this log in the session. |
- scoped_ptr<WebDriverLog> driver_log; |
- ScopedVector<DevToolsEventListener> devtools_event_listeners; |
- status = CreateLogs( |
- capabilities, &devtools_logs, &driver_log, &devtools_event_listeners); |
- if (status.IsError()) |
- return status; |
- |
- scoped_ptr<Chrome> chrome; |
- status = LaunchChrome(bound_params.context_getter.get(), |
- bound_params.socket_factory, |
- bound_params.device_manager, |
- capabilities, |
- devtools_event_listeners, |
- &chrome); |
- if (status.IsError()) |
- return status; |
- |
- std::list<std::string> web_view_ids; |
- status = chrome->GetWebViewIds(&web_view_ids); |
- if (status.IsError() || web_view_ids.empty()) { |
- chrome->Quit(); |
- return status.IsError() ? status : |
- Status(kUnknownError, "unable to discover open window in chrome"); |
- } |
- |
- scoped_ptr<Session> session(new Session(session_id, chrome.Pass())); |
- session->devtools_logs.swap(devtools_logs); |
- session->window = web_view_ids.front(); |
- session->detach = capabilities.detach; |
- session->force_devtools_screenshot = capabilities.force_devtools_screenshot; |
- out_value->reset(session->capabilities->DeepCopy()); |
- lazy_tls_session.Pointer()->Set(session.release()); |
- return Status(kOk); |
-} |
- |
-void CreateSessionOnSessionThread( |
- const scoped_refptr<base::SingleThreadTaskRunner>& cmd_task_runner, |
- const NewSessionParams& bound_params, |
- scoped_ptr<base::DictionaryValue> params, |
- const std::string& session_id, |
- const CommandCallback& callback_on_cmd) { |
- scoped_ptr<base::Value> value; |
- Status status = CreateSessionOnSessionThreadHelper( |
- bound_params, *params, session_id, &value); |
- cmd_task_runner->PostTask( |
- FROM_HERE, |
- base::Bind(callback_on_cmd, status, base::Passed(&value), session_id)); |
-} |
- |
-} // namespace |
- |
-void ExecuteNewSession( |
- const NewSessionParams& bound_params, |
+ const Command& init_session_cmd, |
const base::DictionaryValue& params, |
const std::string& session_id, |
const CommandCallback& callback) { |
std::string new_id = session_id; |
if (new_id.empty()) |
new_id = GenerateId(); |
+ scoped_ptr<Session> session(new Session(new_id)); |
scoped_ptr<base::Thread> thread(new base::Thread(new_id.c_str())); |
if (!thread->Start()) { |
callback.Run( |
@@ -158,16 +63,11 @@ void ExecuteNewSession( |
return; |
} |
- thread->message_loop() |
- ->PostTask(FROM_HERE, |
- base::Bind(&CreateSessionOnSessionThread, |
- base::MessageLoopProxy::current(), |
- bound_params, |
- base::Passed(make_scoped_ptr(params.DeepCopy())), |
- new_id, |
- callback)); |
- bound_params.session_thread_map |
+ thread->message_loop()->PostTask( |
+ FROM_HERE, base::Bind(&SetThreadLocalSession, base::Passed(&session))); |
+ session_thread_map |
->insert(std::make_pair(new_id, make_linked_ptr(thread.release()))); |
+ init_session_cmd.Run(params, new_id, callback); |
chrisgao (Use stgao instead)
2013/09/06 21:20:13
I like this change, although it is a little hard f
kkania
2013/09/06 23:09:29
Done.
|
} |
namespace { |
@@ -227,13 +127,14 @@ void TerminateSessionThreadOnCommandThread(SessionThreadMap* session_thread_map, |
} |
void ExecuteSessionCommandOnSessionThread( |
+ const char* command_name, |
const SessionCommand& command, |
bool return_ok_without_session, |
scoped_ptr<base::DictionaryValue> params, |
scoped_refptr<base::SingleThreadTaskRunner> cmd_task_runner, |
const CommandCallback& callback_on_cmd, |
const base::Closure& terminate_on_cmd) { |
- Session* session = lazy_tls_session.Pointer()->Get(); |
+ Session* session = GetThreadLocalSession(); |
if (!session) { |
cmd_task_runner->PostTask( |
FROM_HERE, |
@@ -244,17 +145,30 @@ void ExecuteSessionCommandOnSessionThread( |
return; |
} |
+ VLOG(0) << "COMMAND " << command_name << " " |
chrisgao (Use stgao instead)
2013/09/06 21:20:13
I like command names than guessing from urls :)
Th
kkania
2013/09/06 23:09:29
Done.
|
+ << PrettyPrintValue(*params); |
chrisgao (Use stgao instead)
2013/09/06 21:20:13
No need to check if log is enabled?
kkania
2013/09/06 23:09:29
Done.
|
scoped_ptr<base::Value> value; |
Status status = command.Run(session, *params, &value); |
if (status.IsError() && session->chrome) |
status.AddDetails("Session info: chrome=" + session->chrome->GetVersion()); |
+ if (IsVLogOn(0)) { |
+ std::string result; |
+ if (status.IsError()) { |
+ result = status.message(); |
+ } else if (value) { |
+ result = FormatValueForDisplay(*value); |
+ } |
+ VLOG(0) << "RESPONSE " << command_name |
+ << (result.length() ? " " + result : ""); |
+ } |
+ |
cmd_task_runner->PostTask( |
FROM_HERE, |
base::Bind(callback_on_cmd, status, base::Passed(&value), session->id)); |
if (session->quit) { |
- lazy_tls_session.Pointer()->Set(NULL); |
+ SetThreadLocalSession(scoped_ptr<Session>()); |
delete session; |
cmd_task_runner->PostTask(FROM_HERE, terminate_on_cmd); |
} |
@@ -264,6 +178,7 @@ void ExecuteSessionCommandOnSessionThread( |
void ExecuteSessionCommand( |
SessionThreadMap* session_thread_map, |
+ const char* command_name, |
const SessionCommand& command, |
bool return_ok_without_session, |
const base::DictionaryValue& params, |
@@ -277,6 +192,7 @@ void ExecuteSessionCommand( |
iter->second->message_loop() |
->PostTask(FROM_HERE, |
base::Bind(&ExecuteSessionCommandOnSessionThread, |
+ command_name, |
command, |
return_ok_without_session, |
base::Passed(make_scoped_ptr(params.DeepCopy())), |
@@ -291,7 +207,7 @@ void ExecuteSessionCommand( |
namespace internal { |
void CreateSessionOnSessionThreadForTesting(const std::string& id) { |
- lazy_tls_session.Pointer()->Set(new Session(id)); |
+ SetThreadLocalSession(make_scoped_ptr(new Session(id))); |
} |
} // namespace internal |