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
SubresourceFilterTestHarness::SetUp();
tester_ =
std::make_unique<page_load_metrics::PageLoadMetricsObserverTester>(
web_contents(),
web_contents(), this,
base::BindRepeating(
&AdsPageLoadMetricsObserverTest::RegisterObservers,
base::Unretained(this)));
......
......@@ -13,7 +13,6 @@
#include "content/public/browser/global_request_id.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/referrer.h"
#include "content/public/test/navigation_simulator.h"
#include "content/public/test/web_contents_tester.h"
#include "third_party/blink/public/platform/web_input_event.h"
#include "url/gurl.h"
......@@ -34,7 +33,7 @@ void PageLoadMetricsObserverTestHarness::SetUp() {
// the SourceUrlRecorderWebContentsObserver is instantiated.
ukm::InitializeSourceUrlRecorderForWebContents(web_contents());
tester_ = std::make_unique<PageLoadMetricsObserverTester>(
web_contents(),
web_contents(), this,
base::BindRepeating(
&PageLoadMetricsObserverTestHarness::RegisterObservers,
base::Unretained(this)));
......@@ -42,10 +41,7 @@ void PageLoadMetricsObserverTestHarness::SetUp() {
}
void PageLoadMetricsObserverTestHarness::StartNavigation(const GURL& gurl) {
std::unique_ptr<content::NavigationSimulator> navigation =
content::NavigationSimulator::CreateBrowserInitiated(gurl,
web_contents());
navigation->Start();
tester_->StartNavigation(gurl);
}
void PageLoadMetricsObserverTestHarness::SimulateTimingUpdate(
......@@ -156,7 +152,7 @@ void PageLoadMetricsObserverTestHarness::SimulateDomStorageAccess(
const base::HistogramTester&
PageLoadMetricsObserverTestHarness::histogram_tester() const {
return histogram_tester_;
return tester_->histogram_tester();
}
MetricsWebContentsObserver* PageLoadMetricsObserverTestHarness::observer()
......@@ -164,6 +160,11 @@ MetricsWebContentsObserver* PageLoadMetricsObserverTestHarness::observer()
return tester_->observer();
}
const ukm::TestAutoSetUkmRecorder&
PageLoadMetricsObserverTestHarness::test_ukm_recorder() const {
return tester_->test_ukm_recorder();
}
const PageLoadMetricsObserverDelegate&
PageLoadMetricsObserverTestHarness::GetDelegateForCommittedLoad() const {
return tester_->GetDelegateForCommittedLoad();
......@@ -172,17 +173,11 @@ PageLoadMetricsObserverTestHarness::GetDelegateForCommittedLoad() const {
void PageLoadMetricsObserverTestHarness::NavigateWithPageTransitionAndCommit(
const GURL& url,
ui::PageTransition transition) {
auto simulator = PageTransitionIsWebTriggerable(transition)
? content::NavigationSimulator::CreateRendererInitiated(
url, main_rfh())
: content::NavigationSimulator::CreateBrowserInitiated(
url, web_contents());
simulator->SetTransition(transition);
simulator->Commit();
tester_->NavigateWithPageTransitionAndCommit(url, transition);
}
void PageLoadMetricsObserverTestHarness::NavigateToUntrackedUrl() {
NavigateAndCommit(GURL(url::kAboutBlankURL));
tester_->NavigateToUntrackedUrl();
}
const char PageLoadMetricsObserverTestHarness::kResourceUrl[] =
......
......@@ -136,13 +136,9 @@ class PageLoadMetricsObserverTestHarness
const PageLoadMetricsObserverDelegate& GetDelegateForCommittedLoad() const;
const ukm::TestAutoSetUkmRecorder& test_ukm_recorder() const {
return test_ukm_recorder_;
}
const ukm::TestAutoSetUkmRecorder& test_ukm_recorder() const;
private:
base::HistogramTester histogram_tester_;
ukm::TestAutoSetUkmRecorder test_ukm_recorder_;
std::unique_ptr<PageLoadMetricsObserverTester> tester_;
DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsObserverTestHarness);
......
......@@ -20,6 +20,8 @@
#include "content/public/browser/web_contents_observer.h"
#include "content/public/common/resource_load_info.mojom.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 "net/base/ip_endpoint.h"
#include "testing/gtest/include/gtest/gtest.h"
......@@ -56,17 +58,11 @@ class TestPageLoadMetricsEmbedderInterface
}
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;
#endif
}
bool IsExtensionUrl(const GURL& url) override { return false; }
private:
PageLoadMetricsObserverTester* test_;
......@@ -77,15 +73,40 @@ class TestPageLoadMetricsEmbedderInterface
PageLoadMetricsObserverTester::PageLoadMetricsObserverTester(
content::WebContents* web_contents,
content::RenderViewHostTestHarness* rfh_test_harness,
const RegisterObserversCallback& callback)
: register_callback_(callback),
web_contents_(web_contents),
rfh_test_harness_(rfh_test_harness),
observer_(MetricsWebContentsObserver::CreateForWebContents(
web_contents,
std::make_unique<TestPageLoadMetricsEmbedderInterface>(this))) {}
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(
const mojom::PageLoadTiming& timing) {
SimulateTimingUpdate(timing, web_contents()->GetMainFrame());
......@@ -278,10 +299,6 @@ void PageLoadMetricsObserverTester::SimulateDomStorageAccess(
blocked_by_policy);
}
MetricsWebContentsObserver* PageLoadMetricsObserverTester::observer() const {
return observer_;
}
const PageLoadMetricsObserverDelegate&
PageLoadMetricsObserverTester::GetDelegateForCommittedLoad() const {
return observer_->GetDelegateForCommittedLoad();
......
......@@ -7,8 +7,10 @@
#include "base/callback.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/common/test/weak_mock_timer.h"
#include "components/ukm/test_ukm_recorder.h"
namespace blink {
class WebInputEvent;
......@@ -16,6 +18,7 @@ class WebInputEvent;
namespace content {
struct GlobalRequestID;
class RenderViewHostTestHarness;
class WebContents;
} // namespace content
......@@ -39,10 +42,27 @@ class PageLoadMetricsObserverTester : public test::WeakMockTimerProvider {
public:
using RegisterObserversCallback =
base::RepeatingCallback<void(PageLoadTracker*)>;
PageLoadMetricsObserverTester(content::WebContents* web_contents,
const RegisterObserversCallback& callback);
PageLoadMetricsObserverTester(
content::WebContents* web_contents,
content::RenderViewHostTestHarness* rfh_test_harness,
const RegisterObserversCallback& callback);
~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
// to the browser process. These will update the timing information for the
// most recently committed navigation.
......@@ -107,7 +127,13 @@ class PageLoadMetricsObserverTester : public test::WeakMockTimerProvider {
bool local,
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;
void RegisterObservers(PageLoadTracker* tracker);
......@@ -125,7 +151,10 @@ class PageLoadMetricsObserverTester : public test::WeakMockTimerProvider {
RegisterObserversCallback register_callback_;
content::WebContents* web_contents_;
content::RenderViewHostTestHarness* rfh_test_harness_;
MetricsWebContentsObserver* observer_;
base::HistogramTester histogram_tester_;
ukm::TestAutoSetUkmRecorder test_ukm_recorder_;
DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsObserverTester);
};
......
......@@ -89,7 +89,7 @@ class SessionRestorePageLoadMetricsObserverTest
WebContents* contents = tabs_.back().get();
auto tester =
std::make_unique<page_load_metrics::PageLoadMetricsObserverTester>(
contents,
contents, this,
base::BindRepeating(
&SessionRestorePageLoadMetricsObserverTest::RegisterObservers,
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