Chromium Code Reviews| Index: chrome/test/chromedriver/chrome/devtools_client_impl.cc |
| diff --git a/chrome/test/chromedriver/chrome/devtools_client_impl.cc b/chrome/test/chromedriver/chrome/devtools_client_impl.cc |
| index 40771125885aa32781ce3661a102ccbfc586cbef..c9191916bd082afc6b5f3b189f905ff8a1bcab60 100644 |
| --- a/chrome/test/chromedriver/chrome/devtools_client_impl.cc |
| +++ b/chrome/test/chromedriver/chrome/devtools_client_impl.cc |
| @@ -47,6 +47,11 @@ class ScopedIncrementer { |
| int* count_; |
| }; |
| +Status ConditionIsMet(bool* is_condition_met) { |
| + *is_condition_met = true; |
| + return Status(kOk); |
| +} |
| + |
| } // namespace |
| namespace internal { |
| @@ -158,17 +163,7 @@ void DevToolsClientImpl::AddListener(DevToolsEventListener* listener) { |
| } |
| Status DevToolsClientImpl::HandleReceivedEvents() { |
| - if (!socket_->IsConnected()) |
| - return Status(kDisconnected, "not connected to DevTools"); |
| - |
| - while (true) { |
| - if (!socket_->HasNextMessage()) |
| - return Status(kOk); |
| - |
| - Status status = ProcessNextMessage(-1); |
| - if (status.IsError()) |
| - return status; |
| - } |
| + return HandleEventsUntil(base::Bind(&ConditionIsMet), base::TimeDelta()); |
| } |
| Status DevToolsClientImpl::HandleEventsUntil( |
| @@ -177,14 +172,10 @@ Status DevToolsClientImpl::HandleEventsUntil( |
| return Status(kDisconnected, "not connected to DevTools"); |
| base::TimeTicks deadline = base::TimeTicks::Now() + timeout; |
| - |
| + base::TimeDelta next_message_timeout = timeout; |
| while (true) { |
| - if (base::TimeTicks::Now() >= deadline) |
| - return Status(kTimeout, base::StringPrintf( |
| - "exceeded %dms", static_cast<int>(timeout.InMilliseconds()))); |
| - |
| if (!socket_->HasNextMessage()) { |
| - bool is_condition_met; |
| + bool is_condition_met = false; |
| Status status = conditional_func.Run(&is_condition_met); |
| if (status.IsError()) |
| return status; |
| @@ -192,12 +183,10 @@ Status DevToolsClientImpl::HandleEventsUntil( |
| return Status(kOk); |
| } |
| - // To keep this simple, we don't pass the delta time to |
| - // ProcessNextMessage. As a result, we may not immediately |
| - // return after |timeout|ms. |
| - Status status = ProcessNextMessage(-1); |
| - if (status.IsError() && status.code() != kTimeout) |
| + Status status = ProcessNextMessage(-1, next_message_timeout); |
| + if (status.IsError()) |
| return status; |
| + next_message_timeout = deadline - base::TimeTicks::Now(); |
| } |
| } |
| @@ -228,7 +217,8 @@ Status DevToolsClientImpl::SendCommandInternal( |
| make_linked_ptr(new ResponseInfo(method)); |
| response_info_map_[command_id] = response_info; |
| while (response_info->state == kWaiting) { |
| - Status status = ProcessNextMessage(command_id); |
| + Status status = ProcessNextMessage( |
| + command_id, base::TimeDelta::FromMinutes(10)); |
| if (status.IsError()) { |
| if (response_info->state == kReceived) |
| response_info_map_.erase(command_id); |
| @@ -247,7 +237,9 @@ Status DevToolsClientImpl::SendCommandInternal( |
| return Status(kOk); |
| } |
| -Status DevToolsClientImpl::ProcessNextMessage(int expected_id) { |
| +Status DevToolsClientImpl::ProcessNextMessage( |
| + int expected_id, |
| + const base::TimeDelta& timeout) { |
|
frankf
2013/08/29 17:49:29
My problem is with the timeout param here. What do
|
| ScopedIncrementer increment_stack_count(&stack_count_); |
| Status status = EnsureListenersNotifiedOfConnect(); |
| @@ -266,8 +258,7 @@ Status DevToolsClientImpl::ProcessNextMessage(int expected_id) { |
| return Status(kOk); |
| std::string message; |
| - switch (socket_->ReceiveNextMessage(&message, |
| - base::TimeDelta::FromMinutes(1))) { |
| + switch (socket_->ReceiveNextMessage(&message, timeout)) { |
|
frankf
2013/08/28 23:15:50
IIRC, the reason we didn't pass the timeout throug
kkania
2013/08/29 14:07:46
Yes. This CL doesn't change the contract that the
|
| case SyncWebSocket::kOk: |
| log_->AddEntry(Log::kDebug, "received Inspector response " + message); |
| break; |