Commit 51cdc5e9 authored by Tao Bai's avatar Tao Bai Committed by Commit Bot

Refactoring PageLoadMetricsObserverTestHarness

Moved the functionality of PageLoadMetricsObserverTestHarness to
PageLoadMetricsObserverTester which will be moved components.

In following patch, we will have a new TestHarness class in
components, it along with TestHarness in Chrome are derived from
a wrapper of PageLoadMetrictsObserverTester to share the code as
much as possible.

This patch also removed PageLoadMetricsObserverTester's dependence
on prerender and extension which seem not used by any tests.

Bug: 995880
Change-Id: I5a945d880392e87f3eab687f40ba2ae58345e30b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1832523Reviewed-by: default avatarBryan McQuade <bmcquade@chromium.org>
Commit-Queue: Tao Bai <michaelbai@chromium.org>
Cr-Commit-Position: refs/heads/master@{#702068}
parent 70589ab6
...@@ -270,7 +270,7 @@ class AdsPageLoadMetricsObserverTest ...@@ -270,7 +270,7 @@ class AdsPageLoadMetricsObserverTest
SubresourceFilterTestHarness::SetUp(); SubresourceFilterTestHarness::SetUp();
tester_ = tester_ =
std::make_unique<page_load_metrics::PageLoadMetricsObserverTester>( std::make_unique<page_load_metrics::PageLoadMetricsObserverTester>(
web_contents(), web_contents(), this,
base::BindRepeating( base::BindRepeating(
&AdsPageLoadMetricsObserverTest::RegisterObservers, &AdsPageLoadMetricsObserverTest::RegisterObservers,
base::Unretained(this))); base::Unretained(this)));
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include "content/public/browser/global_request_id.h" #include "content/public/browser/global_request_id.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "content/public/common/referrer.h" #include "content/public/common/referrer.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/web_contents_tester.h" #include "content/public/test/web_contents_tester.h"
#include "third_party/blink/public/platform/web_input_event.h" #include "third_party/blink/public/platform/web_input_event.h"
#include "url/gurl.h" #include "url/gurl.h"
...@@ -34,7 +33,7 @@ void PageLoadMetricsObserverTestHarness::SetUp() { ...@@ -34,7 +33,7 @@ void PageLoadMetricsObserverTestHarness::SetUp() {
// the SourceUrlRecorderWebContentsObserver is instantiated. // the SourceUrlRecorderWebContentsObserver is instantiated.
ukm::InitializeSourceUrlRecorderForWebContents(web_contents()); ukm::InitializeSourceUrlRecorderForWebContents(web_contents());
tester_ = std::make_unique<PageLoadMetricsObserverTester>( tester_ = std::make_unique<PageLoadMetricsObserverTester>(
web_contents(), web_contents(), this,
base::BindRepeating( base::BindRepeating(
&PageLoadMetricsObserverTestHarness::RegisterObservers, &PageLoadMetricsObserverTestHarness::RegisterObservers,
base::Unretained(this))); base::Unretained(this)));
...@@ -42,10 +41,7 @@ void PageLoadMetricsObserverTestHarness::SetUp() { ...@@ -42,10 +41,7 @@ void PageLoadMetricsObserverTestHarness::SetUp() {
} }
void PageLoadMetricsObserverTestHarness::StartNavigation(const GURL& gurl) { void PageLoadMetricsObserverTestHarness::StartNavigation(const GURL& gurl) {
std::unique_ptr<content::NavigationSimulator> navigation = tester_->StartNavigation(gurl);
content::NavigationSimulator::CreateBrowserInitiated(gurl,
web_contents());
navigation->Start();
} }
void PageLoadMetricsObserverTestHarness::SimulateTimingUpdate( void PageLoadMetricsObserverTestHarness::SimulateTimingUpdate(
...@@ -156,7 +152,7 @@ void PageLoadMetricsObserverTestHarness::SimulateDomStorageAccess( ...@@ -156,7 +152,7 @@ void PageLoadMetricsObserverTestHarness::SimulateDomStorageAccess(
const base::HistogramTester& const base::HistogramTester&
PageLoadMetricsObserverTestHarness::histogram_tester() const { PageLoadMetricsObserverTestHarness::histogram_tester() const {
return histogram_tester_; return tester_->histogram_tester();
} }
MetricsWebContentsObserver* PageLoadMetricsObserverTestHarness::observer() MetricsWebContentsObserver* PageLoadMetricsObserverTestHarness::observer()
...@@ -164,6 +160,11 @@ MetricsWebContentsObserver* PageLoadMetricsObserverTestHarness::observer() ...@@ -164,6 +160,11 @@ MetricsWebContentsObserver* PageLoadMetricsObserverTestHarness::observer()
return tester_->observer(); return tester_->observer();
} }
const ukm::TestAutoSetUkmRecorder&
PageLoadMetricsObserverTestHarness::test_ukm_recorder() const {
return tester_->test_ukm_recorder();
}
const PageLoadMetricsObserverDelegate& const PageLoadMetricsObserverDelegate&
PageLoadMetricsObserverTestHarness::GetDelegateForCommittedLoad() const { PageLoadMetricsObserverTestHarness::GetDelegateForCommittedLoad() const {
return tester_->GetDelegateForCommittedLoad(); return tester_->GetDelegateForCommittedLoad();
...@@ -172,17 +173,11 @@ PageLoadMetricsObserverTestHarness::GetDelegateForCommittedLoad() const { ...@@ -172,17 +173,11 @@ PageLoadMetricsObserverTestHarness::GetDelegateForCommittedLoad() const {
void PageLoadMetricsObserverTestHarness::NavigateWithPageTransitionAndCommit( void PageLoadMetricsObserverTestHarness::NavigateWithPageTransitionAndCommit(
const GURL& url, const GURL& url,
ui::PageTransition transition) { ui::PageTransition transition) {
auto simulator = PageTransitionIsWebTriggerable(transition) tester_->NavigateWithPageTransitionAndCommit(url, transition);
? content::NavigationSimulator::CreateRendererInitiated(
url, main_rfh())
: content::NavigationSimulator::CreateBrowserInitiated(
url, web_contents());
simulator->SetTransition(transition);
simulator->Commit();
} }
void PageLoadMetricsObserverTestHarness::NavigateToUntrackedUrl() { void PageLoadMetricsObserverTestHarness::NavigateToUntrackedUrl() {
NavigateAndCommit(GURL(url::kAboutBlankURL)); tester_->NavigateToUntrackedUrl();
} }
const char PageLoadMetricsObserverTestHarness::kResourceUrl[] = const char PageLoadMetricsObserverTestHarness::kResourceUrl[] =
......
...@@ -136,13 +136,9 @@ class PageLoadMetricsObserverTestHarness ...@@ -136,13 +136,9 @@ class PageLoadMetricsObserverTestHarness
const PageLoadMetricsObserverDelegate& GetDelegateForCommittedLoad() const; const PageLoadMetricsObserverDelegate& GetDelegateForCommittedLoad() const;
const ukm::TestAutoSetUkmRecorder& test_ukm_recorder() const { const ukm::TestAutoSetUkmRecorder& test_ukm_recorder() const;
return test_ukm_recorder_;
}
private: private:
base::HistogramTester histogram_tester_;
ukm::TestAutoSetUkmRecorder test_ukm_recorder_;
std::unique_ptr<PageLoadMetricsObserverTester> tester_; std::unique_ptr<PageLoadMetricsObserverTester> tester_;
DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsObserverTestHarness); DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsObserverTestHarness);
......
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
#include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_observer.h"
#include "content/public/common/resource_load_info.mojom.h" #include "content/public/common/resource_load_info.mojom.h"
#include "content/public/common/resource_type.h" #include "content/public/common/resource_type.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/test_renderer_host.h"
#include "extensions/buildflags/buildflags.h" #include "extensions/buildflags/buildflags.h"
#include "net/base/ip_endpoint.h" #include "net/base/ip_endpoint.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -56,17 +58,11 @@ class TestPageLoadMetricsEmbedderInterface ...@@ -56,17 +58,11 @@ class TestPageLoadMetricsEmbedderInterface
} }
bool IsPrerender(content::WebContents* web_contents) override { bool IsPrerender(content::WebContents* web_contents) override {
return prerender::PrerenderContents::FromWebContents(web_contents);
}
bool IsExtensionUrl(const GURL& url) override {
#if BUILDFLAG(ENABLE_EXTENSIONS)
return url.SchemeIs(extensions::kExtensionScheme);
#else
return false; return false;
#endif
} }
bool IsExtensionUrl(const GURL& url) override { return false; }
private: private:
PageLoadMetricsObserverTester* test_; PageLoadMetricsObserverTester* test_;
...@@ -77,15 +73,40 @@ class TestPageLoadMetricsEmbedderInterface ...@@ -77,15 +73,40 @@ class TestPageLoadMetricsEmbedderInterface
PageLoadMetricsObserverTester::PageLoadMetricsObserverTester( PageLoadMetricsObserverTester::PageLoadMetricsObserverTester(
content::WebContents* web_contents, content::WebContents* web_contents,
content::RenderViewHostTestHarness* rfh_test_harness,
const RegisterObserversCallback& callback) const RegisterObserversCallback& callback)
: register_callback_(callback), : register_callback_(callback),
web_contents_(web_contents), web_contents_(web_contents),
rfh_test_harness_(rfh_test_harness),
observer_(MetricsWebContentsObserver::CreateForWebContents( observer_(MetricsWebContentsObserver::CreateForWebContents(
web_contents, web_contents,
std::make_unique<TestPageLoadMetricsEmbedderInterface>(this))) {} std::make_unique<TestPageLoadMetricsEmbedderInterface>(this))) {}
PageLoadMetricsObserverTester::~PageLoadMetricsObserverTester() {} PageLoadMetricsObserverTester::~PageLoadMetricsObserverTester() {}
void PageLoadMetricsObserverTester::StartNavigation(const GURL& gurl) {
std::unique_ptr<content::NavigationSimulator> navigation =
content::NavigationSimulator::CreateBrowserInitiated(gurl,
web_contents());
navigation->Start();
}
void PageLoadMetricsObserverTester::NavigateWithPageTransitionAndCommit(
const GURL& url,
ui::PageTransition transition) {
auto simulator = PageTransitionIsWebTriggerable(transition)
? content::NavigationSimulator::CreateRendererInitiated(
url, rfh_test_harness_->main_rfh())
: content::NavigationSimulator::CreateBrowserInitiated(
url, web_contents());
simulator->SetTransition(transition);
simulator->Commit();
}
void PageLoadMetricsObserverTester::NavigateToUntrackedUrl() {
rfh_test_harness_->NavigateAndCommit(GURL(url::kAboutBlankURL));
}
void PageLoadMetricsObserverTester::SimulateTimingUpdate( void PageLoadMetricsObserverTester::SimulateTimingUpdate(
const mojom::PageLoadTiming& timing) { const mojom::PageLoadTiming& timing) {
SimulateTimingUpdate(timing, web_contents()->GetMainFrame()); SimulateTimingUpdate(timing, web_contents()->GetMainFrame());
...@@ -278,10 +299,6 @@ void PageLoadMetricsObserverTester::SimulateDomStorageAccess( ...@@ -278,10 +299,6 @@ void PageLoadMetricsObserverTester::SimulateDomStorageAccess(
blocked_by_policy); blocked_by_policy);
} }
MetricsWebContentsObserver* PageLoadMetricsObserverTester::observer() const {
return observer_;
}
const PageLoadMetricsObserverDelegate& const PageLoadMetricsObserverDelegate&
PageLoadMetricsObserverTester::GetDelegateForCommittedLoad() const { PageLoadMetricsObserverTester::GetDelegateForCommittedLoad() const {
return observer_->GetDelegateForCommittedLoad(); return observer_->GetDelegateForCommittedLoad();
......
...@@ -7,8 +7,10 @@ ...@@ -7,8 +7,10 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/test/metrics/histogram_tester.h"
#include "components/page_load_metrics/browser/page_load_metrics_observer.h" #include "components/page_load_metrics/browser/page_load_metrics_observer.h"
#include "components/page_load_metrics/common/test/weak_mock_timer.h" #include "components/page_load_metrics/common/test/weak_mock_timer.h"
#include "components/ukm/test_ukm_recorder.h"
namespace blink { namespace blink {
class WebInputEvent; class WebInputEvent;
...@@ -16,6 +18,7 @@ class WebInputEvent; ...@@ -16,6 +18,7 @@ class WebInputEvent;
namespace content { namespace content {
struct GlobalRequestID; struct GlobalRequestID;
class RenderViewHostTestHarness;
class WebContents; class WebContents;
} // namespace content } // namespace content
...@@ -39,10 +42,27 @@ class PageLoadMetricsObserverTester : public test::WeakMockTimerProvider { ...@@ -39,10 +42,27 @@ class PageLoadMetricsObserverTester : public test::WeakMockTimerProvider {
public: public:
using RegisterObserversCallback = using RegisterObserversCallback =
base::RepeatingCallback<void(PageLoadTracker*)>; base::RepeatingCallback<void(PageLoadTracker*)>;
PageLoadMetricsObserverTester(content::WebContents* web_contents, PageLoadMetricsObserverTester(
const RegisterObserversCallback& callback); content::WebContents* web_contents,
content::RenderViewHostTestHarness* rfh_test_harness,
const RegisterObserversCallback& callback);
~PageLoadMetricsObserverTester() override; ~PageLoadMetricsObserverTester() override;
// Simulates starting a navigation to the given gurl, without committing the
// navigation.
// Note: The navigation is left in a pending state and cannot be successfully
// completed.
void StartNavigation(const GURL& gurl);
// Simulates committing a navigation to the given URL with the given
// PageTransition.
void NavigateWithPageTransitionAndCommit(const GURL& url,
ui::PageTransition transition);
// Navigates to a URL that is not tracked by page_load_metrics. Useful for
// forcing the OnComplete method of a PageLoadMetricsObserver to run.
void NavigateToUntrackedUrl();
// Call this to simulate sending a PageLoadTiming IPC from the render process // Call this to simulate sending a PageLoadTiming IPC from the render process
// to the browser process. These will update the timing information for the // to the browser process. These will update the timing information for the
// most recently committed navigation. // most recently committed navigation.
...@@ -107,7 +127,13 @@ class PageLoadMetricsObserverTester : public test::WeakMockTimerProvider { ...@@ -107,7 +127,13 @@ class PageLoadMetricsObserverTester : public test::WeakMockTimerProvider {
bool local, bool local,
bool blocked_by_policy); bool blocked_by_policy);
MetricsWebContentsObserver* observer() const; MetricsWebContentsObserver* observer() const { return observer_; }
const base::HistogramTester& histogram_tester() const {
return histogram_tester_;
}
const ukm::TestAutoSetUkmRecorder& test_ukm_recorder() const {
return test_ukm_recorder_;
}
const PageLoadMetricsObserverDelegate& GetDelegateForCommittedLoad() const; const PageLoadMetricsObserverDelegate& GetDelegateForCommittedLoad() const;
void RegisterObservers(PageLoadTracker* tracker); void RegisterObservers(PageLoadTracker* tracker);
...@@ -125,7 +151,10 @@ class PageLoadMetricsObserverTester : public test::WeakMockTimerProvider { ...@@ -125,7 +151,10 @@ class PageLoadMetricsObserverTester : public test::WeakMockTimerProvider {
RegisterObserversCallback register_callback_; RegisterObserversCallback register_callback_;
content::WebContents* web_contents_; content::WebContents* web_contents_;
content::RenderViewHostTestHarness* rfh_test_harness_;
MetricsWebContentsObserver* observer_; MetricsWebContentsObserver* observer_;
base::HistogramTester histogram_tester_;
ukm::TestAutoSetUkmRecorder test_ukm_recorder_;
DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsObserverTester); DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsObserverTester);
}; };
......
...@@ -89,7 +89,7 @@ class SessionRestorePageLoadMetricsObserverTest ...@@ -89,7 +89,7 @@ class SessionRestorePageLoadMetricsObserverTest
WebContents* contents = tabs_.back().get(); WebContents* contents = tabs_.back().get();
auto tester = auto tester =
std::make_unique<page_load_metrics::PageLoadMetricsObserverTester>( std::make_unique<page_load_metrics::PageLoadMetricsObserverTester>(
contents, contents, this,
base::BindRepeating( base::BindRepeating(
&SessionRestorePageLoadMetricsObserverTest::RegisterObservers, &SessionRestorePageLoadMetricsObserverTest::RegisterObservers,
base::Unretained(this))); base::Unretained(this)));
......
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