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

Unified Diff: components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc

Issue 1879413002: Provide currently_committed_url to PageLoadMetricsObservers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address 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: components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
index a6a910ab1c9d990299a23f1389e8be533af281c2..de1fc2668d382f3005c3994d276543b6ec2803a4 100644
--- a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
+++ b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
@@ -18,30 +18,39 @@
#include "content/public/test/test_renderer_host.h"
#include "content/public/test/web_contents_tester.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
namespace page_load_metrics {
namespace {
-const char kDefaultTestUrl[] = "https://google.com";
-const char kDefaultTestUrlAnchor[] = "https://google.com#samepage";
-const char kDefaultTestUrl2[] = "https://whatever.com";
+const char kDefaultTestUrl[] = "https://google.com/";
+const char kDefaultTestUrlAnchor[] = "https://google.com/#samepage";
+const char kDefaultTestUrl2[] = "https://whatever.com/";
// Simple PageLoadMetricsObserver that copies observed PageLoadTimings into the
// provided std::vector, so they can be analyzed by unit tests.
class TestPageLoadMetricsObserver : public PageLoadMetricsObserver {
public:
explicit TestPageLoadMetricsObserver(
- std::vector<PageLoadTiming>* observed_timings)
- : observed_timings_(observed_timings) {}
+ std::vector<PageLoadTiming>* observed_timings,
+ std::vector<GURL>* observed_committed_urls)
+ : observed_timings_(observed_timings),
+ observed_committed_urls_(observed_committed_urls) {}
+
+ void OnStart(content::NavigationHandle* navigation_handle,
+ const GURL& currently_committed_url) override {
+ observed_committed_urls_->push_back(currently_committed_url);
+ }
void OnComplete(const PageLoadTiming& timing,
- const PageLoadExtraInfo&) override {
+ const PageLoadExtraInfo& extra_info) override {
observed_timings_->push_back(timing);
}
private:
std::vector<PageLoadTiming>* const observed_timings_;
+ std::vector<GURL>* const observed_committed_urls_;
};
class TestPageLoadMetricsEmbedderInterface
@@ -56,15 +65,21 @@ class TestPageLoadMetricsEmbedderInterface
is_prerendering_ = is_prerendering;
}
void RegisterObservers(PageLoadTracker* tracker) override {
- tracker->AddObserver(
- make_scoped_ptr(new TestPageLoadMetricsObserver(&observed_timings_)));
+ tracker->AddObserver(make_scoped_ptr(new TestPageLoadMetricsObserver(
+ &observed_timings_, &observed_committed_urls_)));
}
const std::vector<PageLoadTiming>& observed_timings() const {
return observed_timings_;
}
+ // currently_committed_urls passed to OnStart().
+ const std::vector<GURL>& observed_committed_urls_from_on_start() const {
+ return observed_committed_urls_;
+ }
+
private:
std::vector<PageLoadTiming> observed_timings_;
+ std::vector<GURL> observed_committed_urls_;
bool is_prerendering_;
};
@@ -80,6 +95,18 @@ class MetricsWebContentsObserverTest
AttachObserver();
}
+ void SimulateTimingUpdate(const PageLoadTiming& timing) {
+ SimulateTimingUpdate(timing, web_contents()->GetMainFrame());
+ }
+
+ void SimulateTimingUpdate(const PageLoadTiming& timing,
+ content::RenderFrameHost* render_frame_host) {
+ ASSERT_TRUE(observer_->OnMessageReceived(
+ PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
+ PageLoadMetadata()),
+ render_frame_host));
+ }
+
void AttachObserver() {
embedder_interface_ = new TestPageLoadMetricsEmbedderInterface();
observer_.reset(new MetricsWebContentsObserver(
@@ -107,10 +134,26 @@ class MetricsWebContentsObserverTest
}
}
+ void AssertNonEmptyTimingsReported(size_t expected_non_empty_timings) {
+ ASSERT_GE(embedder_interface_->observed_timings().size(),
+ expected_non_empty_timings);
+ size_t actual_non_empty_timings = 0;
+ for (const auto& timing : embedder_interface_->observed_timings()) {
+ if (!timing.IsEmpty()) {
+ ++actual_non_empty_timings;
+ }
+ }
+ ASSERT_EQ(expected_non_empty_timings, actual_non_empty_timings);
+ }
+
void AssertNoTimingReported() {
ASSERT_TRUE(embedder_interface_->observed_timings().empty());
}
+ const std::vector<GURL>& observed_committed_urls_from_on_start() const {
+ return embedder_interface_->observed_committed_urls_from_on_start();
+ }
+
protected:
base::HistogramTester histogram_tester_;
TestPageLoadMetricsEmbedderInterface* embedder_interface_;
@@ -122,6 +165,31 @@ class MetricsWebContentsObserverTest
DISALLOW_COPY_AND_ASSIGN(MetricsWebContentsObserverTest);
};
+TEST_F(MetricsWebContentsObserverTest, SuccessfulMainFrameNavigation) {
+ PageLoadTiming timing;
+ timing.navigation_start = base::Time::FromDoubleT(1);
+ timing.response_start = base::TimeDelta::FromMilliseconds(2);
+
+ content::WebContentsTester* web_contents_tester =
+ content::WebContentsTester::For(web_contents());
+
+ ASSERT_TRUE(observed_committed_urls_from_on_start().empty());
+ web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
+ ASSERT_EQ(1u, observed_committed_urls_from_on_start().size());
+ ASSERT_TRUE(observed_committed_urls_from_on_start().at(0).is_empty());
+
+ SimulateTimingUpdate(timing);
+ AssertNoTimingReported();
+
+ web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
+ AssertNonEmptyTimingsReported(1);
+ ASSERT_EQ(2u, observed_committed_urls_from_on_start().size());
+ ASSERT_EQ(kDefaultTestUrl,
+ observed_committed_urls_from_on_start().at(1).spec());
+
+ CheckNoErrorEvents();
+}
+
TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) {
PageLoadTiming timing;
timing.navigation_start = base::Time::FromDoubleT(1);
@@ -138,10 +206,7 @@ TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) {
content::RenderFrameHostTester::For(subframe);
subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2));
subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2));
- observer_->OnMessageReceived(
- PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
- PageLoadMetadata()),
- subframe);
+ SimulateTimingUpdate(timing, subframe);
subframe_tester->SimulateNavigationStop();
// Navigate again to see if the timing updated for a subframe message.
@@ -159,11 +224,7 @@ TEST_F(MetricsWebContentsObserverTest, SamePageNoTrigger) {
content::WebContentsTester* web_contents_tester =
content::WebContentsTester::For(web_contents());
web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
-
- observer_->OnMessageReceived(
- PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
- PageLoadMetadata()),
- web_contents()->GetMainFrame());
+ SimulateTimingUpdate(timing);
web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrlAnchor));
// A same page navigation shouldn't trigger logging UMA for the original.
AssertNoNonEmptyTimingReported();
@@ -179,11 +240,7 @@ TEST_F(MetricsWebContentsObserverTest, DontLogPrerender) {
embedder_interface_->set_is_prerendering(true);
web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
- observer_->OnMessageReceived(
- PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
- PageLoadMetadata()),
- web_contents()->GetMainFrame());
-
+ SimulateTimingUpdate(timing);
web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
AssertNoTimingReported();
CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1);
@@ -199,12 +256,7 @@ TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) {
GURL about_blank_url = GURL("about:blank");
web_contents_tester->NavigateAndCommit(about_blank_url);
-
- observer_->OnMessageReceived(
- PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
- PageLoadMetadata()),
- main_rfh());
-
+ SimulateTimingUpdate(timing);
web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 1);
@@ -228,10 +280,7 @@ TEST_F(MetricsWebContentsObserverTest, NotInMainError) {
content::RenderFrameHostTester::For(subframe);
subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2));
subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2));
- observer_->OnMessageReceived(
- PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
- PageLoadMetadata()),
- subframe);
+ SimulateTimingUpdate(timing, subframe);
CheckErrorEvent(ERR_IPC_FROM_WRONG_FRAME, 1);
CheckTotalErrorEvents();
}
@@ -246,14 +295,8 @@ TEST_F(MetricsWebContentsObserverTest, BadIPC) {
content::WebContentsTester::For(web_contents());
web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
- observer_->OnMessageReceived(
- PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
- PageLoadMetadata()),
- main_rfh());
- observer_->OnMessageReceived(
- PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing2,
- PageLoadMetadata()),
- main_rfh());
+ SimulateTimingUpdate(timing);
+ SimulateTimingUpdate(timing2);
CheckErrorEvent(ERR_BAD_TIMING_IPC, 1);
CheckTotalErrorEvents();
@@ -276,10 +319,8 @@ TEST_F(MetricsWebContentsObserverTest, ObservePartialNavigation) {
AttachObserver();
rfh_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl));
- observer_->OnMessageReceived(
- PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing,
- PageLoadMetadata()),
- main_rfh());
+ SimulateTimingUpdate(timing);
+
// Navigate again to force histogram logging.
web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
AssertNoTimingReported();

Powered by Google App Engine
This is Rietveld 408576698