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

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

Issue 1669453002: [chromedriver] Apply page load timeout to slow cross-process navigations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: pure virtual Created 4 years, 8 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/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 2ea366834af277aae6b855e1ec61528e7e4f80e5..b49be56ff738e85411999a323c83c324f80b6a05 100644
--- a/chrome/test/chromedriver/chrome/devtools_client_impl.cc
+++ b/chrome/test/chromedriver/chrome/devtools_client_impl.cc
@@ -17,6 +17,7 @@
#include "chrome/test/chromedriver/chrome/status.h"
#include "chrome/test/chromedriver/chrome/util.h"
#include "chrome/test/chromedriver/net/sync_websocket.h"
+#include "chrome/test/chromedriver/net/timeout.h"
#include "chrome/test/chromedriver/net/url_request_context_getter.h"
namespace {
@@ -171,24 +172,39 @@ Status DevToolsClientImpl::ConnectIfNecessary() {
Status DevToolsClientImpl::SendCommand(
const std::string& method,
const base::DictionaryValue& params) {
+ return SendCommandWithTimeout(method, params, nullptr);
+}
+
+Status DevToolsClientImpl::SendCommandWithTimeout(
+ const std::string& method,
+ const base::DictionaryValue& params,
+ const Timeout* timeout) {
std::unique_ptr<base::DictionaryValue> result;
- return SendCommandInternal(method, params, &result, true);
+ return SendCommandInternal(method, params, &result, true, timeout);
}
Status DevToolsClientImpl::SendAsyncCommand(
const std::string& method,
const base::DictionaryValue& params) {
std::unique_ptr<base::DictionaryValue> result;
- return SendCommandInternal(method, params, &result, false);
+ return SendCommandInternal(method, params, &result, false, nullptr);
}
Status DevToolsClientImpl::SendCommandAndGetResult(
const std::string& method,
const base::DictionaryValue& params,
std::unique_ptr<base::DictionaryValue>* result) {
+ return SendCommandAndGetResultWithTimeout(method, params, nullptr, result);
+}
+
+Status DevToolsClientImpl::SendCommandAndGetResultWithTimeout(
+ const std::string& method,
+ const base::DictionaryValue& params,
+ const Timeout* timeout,
+ std::unique_ptr<base::DictionaryValue>* result) {
std::unique_ptr<base::DictionaryValue> intermediate_result;
Status status = SendCommandInternal(
- method, params, &intermediate_result, true);
+ method, params, &intermediate_result, true, timeout);
if (status.IsError())
return status;
if (!intermediate_result)
@@ -203,16 +219,15 @@ void DevToolsClientImpl::AddListener(DevToolsEventListener* listener) {
}
Status DevToolsClientImpl::HandleReceivedEvents() {
- return HandleEventsUntil(base::Bind(&ConditionIsMet), base::TimeDelta());
+ return HandleEventsUntil(base::Bind(&ConditionIsMet),
+ Timeout(base::TimeDelta()));
}
Status DevToolsClientImpl::HandleEventsUntil(
- const ConditionalFunc& conditional_func, const base::TimeDelta& timeout) {
+ const ConditionalFunc& conditional_func, const Timeout& timeout) {
if (!socket_->IsConnected())
return Status(kDisconnected, "not connected to DevTools");
- base::TimeTicks deadline = base::TimeTicks::Now() + timeout;
- base::TimeDelta next_message_timeout = timeout;
while (true) {
if (!socket_->HasNextMessage()) {
bool is_condition_met = false;
@@ -223,10 +238,9 @@ Status DevToolsClientImpl::HandleEventsUntil(
return Status(kOk);
}
- Status status = ProcessNextMessage(-1, next_message_timeout);
+ Status status = ProcessNextMessage(-1, timeout);
if (status.IsError())
return status;
- next_message_timeout = deadline - base::TimeTicks::Now();
}
}
@@ -239,7 +253,8 @@ Status DevToolsClientImpl::SendCommandInternal(
const std::string& method,
const base::DictionaryValue& params,
std::unique_ptr<base::DictionaryValue>* result,
- bool wait_for_response) {
+ bool wait_for_response,
+ const Timeout* timeout) {
if (!socket_->IsConnected())
return Status(kDisconnected, "not connected to DevTools");
@@ -262,7 +277,7 @@ Status DevToolsClientImpl::SendCommandInternal(
response_info_map_[command_id] = response_info;
while (response_info->state == kWaiting) {
Status status = ProcessNextMessage(
- command_id, base::TimeDelta::FromMinutes(10));
+ command_id, Timeout(base::TimeDelta::FromMinutes(10), timeout));
if (status.IsError()) {
if (response_info->state == kReceived)
response_info_map_.erase(command_id);
@@ -284,7 +299,7 @@ Status DevToolsClientImpl::SendCommandInternal(
Status DevToolsClientImpl::ProcessNextMessage(
int expected_id,
- const base::TimeDelta& timeout) {
+ const Timeout& timeout) {
ScopedIncrementer increment_stack_count(&stack_count_);
Status status = EnsureListenersNotifiedOfConnect();
@@ -321,7 +336,7 @@ Status DevToolsClientImpl::ProcessNextMessage(
case SyncWebSocket::kTimeout: {
std::string err =
"Timed out receiving message from renderer: " +
- base::StringPrintf("%.3lf", timeout.InSecondsF());
+ base::StringPrintf("%.3lf", timeout.GetDuration().InSecondsF());
LOG(ERROR) << err;
return Status(kTimeout, err);
}

Powered by Google App Engine
This is Rietveld 408576698