Commit 9023f51c authored by John Delaney's avatar John Delaney Committed by Commit Bot

Add TestNavigationObserver constructor that takes a desired net::Error

Add a constructor to TestNavigationObserver that takes a target
net:Error, and will wait until a navigation with that error finishes.
This simplifies the testing of error pages in the browser process.
Prevents racing with other navigations when registering an observer for
an error.

This is a precursor to crrev.com/c/1783300 which introduces tests that
have many subframe navigations which eventually cause an error page to
load.

Change-Id: I7ad301c1d4999e79b6590cd4d5d2d4dccaf3aeb4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1789427Reviewed-by: default avatarAvi Drissman <avi@chromium.org>
Commit-Queue: John Delaney <johnidel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#694785}
parent 0508bbaa
...@@ -886,7 +886,8 @@ IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest, ...@@ -886,7 +886,8 @@ IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest,
// navigate the frame. // navigate the frame.
content::WebContents* web_contents = content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents(); browser()->tab_strip_model()->GetActiveWebContents();
content::TestNavigationObserver same_tab_observer(web_contents, 2); content::TestNavigationObserver error_observer(web_contents,
net::ERR_BLOCKED_BY_CLIENT);
auto waiter = CreateAdsPageLoadMetricsTestWaiter(); auto waiter = CreateAdsPageLoadMetricsTestWaiter();
GURL url = embedded_test_server()->GetURL( GURL url = embedded_test_server()->GetURL(
...@@ -906,12 +907,10 @@ IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest, ...@@ -906,12 +907,10 @@ IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest,
FrameData::HeavyAdStatus::kNetwork, 1); FrameData::HeavyAdStatus::kNetwork, 1);
// Wait for the intervention page navigation to finish on the frame. // Wait for the intervention page navigation to finish on the frame.
same_tab_observer.Wait(); error_observer.WaitForNavigationFinished();
// Check that the ad frame was navigated to the intervention page. // Check that the ad frame was navigated to the intervention page.
EXPECT_FALSE(same_tab_observer.last_navigation_succeeded()); EXPECT_FALSE(error_observer.last_navigation_succeeded());
EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT,
same_tab_observer.last_net_error_code());
} }
// Check that when the heavy ad feature is disabled we don't navigate // Check that when the heavy ad feature is disabled we don't navigate
...@@ -1000,7 +999,8 @@ IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest, ...@@ -1000,7 +999,8 @@ IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest,
// navigate the frame. // navigate the frame.
content::WebContents* web_contents = content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents(); browser()->tab_strip_model()->GetActiveWebContents();
content::TestNavigationObserver first_frame_observer(web_contents, 3); content::TestNavigationObserver error_observer(web_contents,
net::ERR_BLOCKED_BY_CLIENT);
auto waiter = CreateAdsPageLoadMetricsTestWaiter(); auto waiter = CreateAdsPageLoadMetricsTestWaiter();
...@@ -1023,12 +1023,10 @@ IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest, ...@@ -1023,12 +1023,10 @@ IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest,
FrameData::HeavyAdStatus::kNetwork, 1); FrameData::HeavyAdStatus::kNetwork, 1);
// Wait for the intervention page navigation to finish on the frame. // Wait for the intervention page navigation to finish on the frame.
first_frame_observer.Wait(); error_observer.WaitForNavigationFinished();
// Check that the ad frame was navigated to the intervention page. // Check that the ad frame was navigated to the intervention page.
EXPECT_FALSE(first_frame_observer.last_navigation_succeeded()); EXPECT_FALSE(error_observer.last_navigation_succeeded());
EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT,
first_frame_observer.last_net_error_code());
EXPECT_TRUE(ExecJs( EXPECT_TRUE(ExecJs(
web_contents, web_contents,
......
...@@ -69,7 +69,8 @@ TestNavigationObserver::TestNavigationObserver( ...@@ -69,7 +69,8 @@ TestNavigationObserver::TestNavigationObserver(
MessageLoopRunner::QuitMode quit_mode) MessageLoopRunner::QuitMode quit_mode)
: TestNavigationObserver(web_contents, : TestNavigationObserver(web_contents,
number_of_navigations, number_of_navigations,
GURL(), GURL() /* target_url */,
net::OK /* target_error */,
quit_mode) {} quit_mode) {}
TestNavigationObserver::TestNavigationObserver( TestNavigationObserver::TestNavigationObserver(
...@@ -83,6 +84,17 @@ TestNavigationObserver::TestNavigationObserver( ...@@ -83,6 +84,17 @@ TestNavigationObserver::TestNavigationObserver(
: TestNavigationObserver(nullptr, : TestNavigationObserver(nullptr,
-1 /* num_of_navigations */, -1 /* num_of_navigations */,
target_url, target_url,
net::OK /* target_error */,
quit_mode) {}
TestNavigationObserver::TestNavigationObserver(
WebContents* web_contents,
net::Error target_error,
MessageLoopRunner::QuitMode quit_mode)
: TestNavigationObserver(web_contents,
-1 /* num_of_navigations */,
GURL(),
target_error,
quit_mode) {} quit_mode) {}
TestNavigationObserver::~TestNavigationObserver() { TestNavigationObserver::~TestNavigationObserver() {
...@@ -122,12 +134,14 @@ TestNavigationObserver::TestNavigationObserver( ...@@ -122,12 +134,14 @@ TestNavigationObserver::TestNavigationObserver(
WebContents* web_contents, WebContents* web_contents,
int number_of_navigations, int number_of_navigations,
const GURL& target_url, const GURL& target_url,
net::Error target_error,
MessageLoopRunner::QuitMode quit_mode) MessageLoopRunner::QuitMode quit_mode)
: wait_event_(WaitEvent::kLoadStopped), : wait_event_(WaitEvent::kLoadStopped),
navigation_started_(false), navigation_started_(false),
navigations_completed_(0), navigations_completed_(0),
number_of_navigations_(number_of_navigations), number_of_navigations_(number_of_navigations),
target_url_(target_url), target_url_(target_url),
target_error_(target_error),
last_navigation_succeeded_(false), last_navigation_succeeded_(false),
last_net_error_code_(net::OK), last_net_error_code_(net::OK),
last_navigation_type_(NAVIGATION_TYPE_UNKNOWN), last_navigation_type_(NAVIGATION_TYPE_UNKNOWN),
...@@ -203,14 +217,18 @@ void TestNavigationObserver::OnDidFinishNavigation( ...@@ -203,14 +217,18 @@ void TestNavigationObserver::OnDidFinishNavigation(
} }
void TestNavigationObserver::EventTriggered() { void TestNavigationObserver::EventTriggered() {
if (target_url_ == GURL()) { if (target_url_ == GURL() && target_error_ == net::OK) {
DCHECK_GE(navigations_completed_, 0); DCHECK_GE(navigations_completed_, 0);
++navigations_completed_; ++navigations_completed_;
if (navigations_completed_ != number_of_navigations_) { if (navigations_completed_ != number_of_navigations_) {
return; return;
} }
} else if (target_url_ != last_navigation_url_) { } else if (target_url_ != GURL()) {
if (target_url_ != last_navigation_url_) {
return;
}
} else if (target_error_ != last_net_error_code_) {
return; return;
} }
......
...@@ -46,6 +46,13 @@ class TestNavigationObserver { ...@@ -46,6 +46,13 @@ class TestNavigationObserver {
MessageLoopRunner::QuitMode quit_mode = MessageLoopRunner::QuitMode quit_mode =
MessageLoopRunner::QuitMode::IMMEDIATE); MessageLoopRunner::QuitMode::IMMEDIATE);
// Create and register a new TestNavigationObserver that will wait for
// a navigation with |target_error|.
explicit TestNavigationObserver(WebContents* web_contents,
net::Error target_error,
MessageLoopRunner::QuitMode quit_mode =
MessageLoopRunner::QuitMode::IMMEDIATE);
virtual ~TestNavigationObserver(); virtual ~TestNavigationObserver();
void set_wait_event(WaitEvent event) { wait_event_ = event; } void set_wait_event(WaitEvent event) { wait_event_ = event; }
...@@ -92,6 +99,7 @@ class TestNavigationObserver { ...@@ -92,6 +99,7 @@ class TestNavigationObserver {
TestNavigationObserver(WebContents* web_contents, TestNavigationObserver(WebContents* web_contents,
int number_of_navigations, int number_of_navigations,
const GURL& target_url, const GURL& target_url,
net::Error target_error,
MessageLoopRunner::QuitMode quit_mode = MessageLoopRunner::QuitMode quit_mode =
MessageLoopRunner::QuitMode::IMMEDIATE); MessageLoopRunner::QuitMode::IMMEDIATE);
...@@ -124,6 +132,9 @@ class TestNavigationObserver { ...@@ -124,6 +132,9 @@ class TestNavigationObserver {
// The URL to wait for. // The URL to wait for.
const GURL target_url_; const GURL target_url_;
// The error to wait for.
net::Error target_error_;
// The url of the navigation that last committed. // The url of the navigation that last committed.
GURL last_navigation_url_; GURL last_navigation_url_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment