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

Unified Diff: chrome/test/chromedriver/chrome/web_view_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/web_view_impl.cc
diff --git a/chrome/test/chromedriver/chrome/web_view_impl.cc b/chrome/test/chromedriver/chrome/web_view_impl.cc
index 581b2610e8d65108d981f467ed470adc54d87dd4..063b450231afedbee8b9aae34c484b8ecf26e22e 100644
--- a/chrome/test/chromedriver/chrome/web_view_impl.cc
+++ b/chrome/test/chromedriver/chrome/web_view_impl.cc
@@ -30,6 +30,7 @@
#include "chrome/test/chromedriver/chrome/network_conditions_override_manager.h"
#include "chrome/test/chromedriver/chrome/status.h"
#include "chrome/test/chromedriver/chrome/ui_events.h"
+#include "chrome/test/chromedriver/net/timeout.h"
namespace {
@@ -178,7 +179,7 @@ Status WebViewImpl::GetUrl(std::string* url) {
return Status(kOk);
}
-Status WebViewImpl::Load(const std::string& url) {
+Status WebViewImpl::Load(const std::string& url, const Timeout* timeout) {
// Javascript URLs will cause a hang while waiting for the page to stop
// loading, so just disallow.
if (base::StartsWith(url, "javascript:",
@@ -186,7 +187,7 @@ Status WebViewImpl::Load(const std::string& url) {
return Status(kUnknownError, "unsupported protocol");
base::DictionaryValue params;
params.SetString("url", url);
- return client_->SendCommand("Page.navigate", params);
+ return client_->SendCommandWithTimeout("Page.navigate", params, timeout);
}
Status WebViewImpl::Reload() {
@@ -423,34 +424,34 @@ Status WebViewImpl::DeleteCookie(const std::string& name,
}
Status WebViewImpl::WaitForPendingNavigations(const std::string& frame_id,
- const base::TimeDelta& timeout,
+ const Timeout& timeout,
bool stop_load_on_timeout) {
VLOG(0) << "Waiting for pending navigations...";
- Status status = client_->HandleEventsUntil(
- base::Bind(&WebViewImpl::IsNotPendingNavigation,
- base::Unretained(this),
- frame_id),
- timeout);
+ const auto not_pending_navigation =
+ base::Bind(&WebViewImpl::IsNotPendingNavigation, base::Unretained(this),
+ frame_id, base::Unretained(&timeout));
+ Status status = client_->HandleEventsUntil(not_pending_navigation, timeout);
if (status.code() == kTimeout && stop_load_on_timeout) {
VLOG(0) << "Timed out. Stopping navigation...";
std::unique_ptr<base::Value> unused_value;
navigation_tracker_->set_timed_out(true);
EvaluateScript(std::string(), "window.stop();", &unused_value);
- Status new_status = client_->HandleEventsUntil(
- base::Bind(&WebViewImpl::IsNotPendingNavigation, base::Unretained(this),
- frame_id),
- base::TimeDelta::FromSeconds(10));
+ Status new_status =
+ client_->HandleEventsUntil(not_pending_navigation, timeout);
navigation_tracker_->set_timed_out(false);
if (new_status.IsError())
status = new_status;
}
- VLOG(0) << "Done waiting for pending navigations";
+ VLOG(0) << "Done waiting for pending navigations. Status: "
+ << status.message();
return status;
}
Status WebViewImpl::IsPendingNavigation(const std::string& frame_id,
+ const Timeout* timeout,
bool* is_pending) {
- return navigation_tracker_->IsPendingNavigation(frame_id, is_pending);
+ return
+ navigation_tracker_->IsPendingNavigation(frame_id, timeout, is_pending);
}
JavaScriptDialogManager* WebViewImpl::GetJavaScriptDialogManager() {
@@ -690,10 +691,11 @@ Status WebViewImpl::CallAsyncFunctionInternal(
}
Status WebViewImpl::IsNotPendingNavigation(const std::string& frame_id,
+ const Timeout* timeout,
bool* is_not_pending) {
bool is_pending;
Status status =
- navigation_tracker_->IsPendingNavigation(frame_id, &is_pending);
+ navigation_tracker_->IsPendingNavigation(frame_id, timeout, &is_pending);
if (status.IsError())
return status;
// An alert may block the pending navigation.
« no previous file with comments | « chrome/test/chromedriver/chrome/web_view_impl.h ('k') | chrome/test/chromedriver/chrome/web_view_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698