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

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

Issue 2859393002: Report page load timing information for child frames. (Closed)
Patch Set: rebase Created 3 years, 7 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/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
diff --git a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc b/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
index a301058e1312753aae6341f00f1023fe9e375bcf..b82829299eed51ffd72fe11b97d9871d1a9adaa5 100644
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
@@ -38,12 +38,19 @@ const char kFilteredCommitUrl[] = "https://whatever.com/ignore-on-commit";
// Simple PageLoadMetricsObserver that copies observed PageLoadTimings into the
// provided std::vector, so they can be analyzed by unit tests.
-class TestPageLoadMetricsObserver : public PageLoadMetricsObserver {
+class TestPageLoadMetricsObserver
+ : public PageLoadMetricsObserver,
+ public MetricsWebContentsObserver::TestingObserver {
public:
- TestPageLoadMetricsObserver(std::vector<PageLoadTiming>* updated_timings,
- std::vector<PageLoadTiming>* complete_timings,
- std::vector<GURL>* observed_committed_urls)
- : updated_timings_(updated_timings),
+ TestPageLoadMetricsObserver(
+ content::WebContents* web_contents,
+ std::vector<PageLoadTiming>* updated_timings,
+ std::vector<PageLoadTiming>* updated_subframe_timings,
+ std::vector<PageLoadTiming>* complete_timings,
+ std::vector<GURL>* observed_committed_urls)
+ : MetricsWebContentsObserver::TestingObserver(web_contents),
+ updated_timings_(updated_timings),
+ updated_subframe_timings_(updated_subframe_timings),
complete_timings_(complete_timings),
observed_committed_urls_(observed_committed_urls) {}
@@ -59,6 +66,14 @@ class TestPageLoadMetricsObserver : public PageLoadMetricsObserver {
updated_timings_->push_back(timing);
}
+ void OnTimingUpdated(bool is_main_frame,
+ const PageLoadTiming& timing,
+ const PageLoadMetadata& metadata) override {
+ if (!is_main_frame) {
+ updated_subframe_timings_->push_back(timing);
+ }
+ }
+
void OnComplete(const PageLoadTiming& timing,
const PageLoadExtraInfo& extra_info) override {
complete_timings_->push_back(timing);
@@ -72,6 +87,7 @@ class TestPageLoadMetricsObserver : public PageLoadMetricsObserver {
private:
std::vector<PageLoadTiming>* const updated_timings_;
+ std::vector<PageLoadTiming>* const updated_subframe_timings_;
std::vector<PageLoadTiming>* const complete_timings_;
std::vector<GURL>* const observed_committed_urls_;
};
@@ -110,13 +126,16 @@ class FilteringPageLoadMetricsObserver : public PageLoadMetricsObserver {
class TestPageLoadMetricsEmbedderInterface
: public PageLoadMetricsEmbedderInterface {
public:
- TestPageLoadMetricsEmbedderInterface() : is_ntp_(false) {}
+ explicit TestPageLoadMetricsEmbedderInterface(
+ content::WebContents* web_contents)
+ : web_contents_(web_contents), is_ntp_(false) {}
bool IsNewTabPageUrl(const GURL& url) override { return is_ntp_; }
void set_is_ntp(bool is_ntp) { is_ntp_ = is_ntp; }
void RegisterObservers(PageLoadTracker* tracker) override {
tracker->AddObserver(base::MakeUnique<TestPageLoadMetricsObserver>(
- &updated_timings_, &complete_timings_, &observed_committed_urls_));
+ web_contents_, &updated_timings_, &updated_subframe_timings_,
+ &complete_timings_, &observed_committed_urls_));
tracker->AddObserver(base::MakeUnique<FilteringPageLoadMetricsObserver>(
&completed_filtered_urls_));
}
@@ -126,6 +145,9 @@ class TestPageLoadMetricsEmbedderInterface
const std::vector<PageLoadTiming>& complete_timings() const {
return complete_timings_;
}
+ const std::vector<PageLoadTiming>& updated_subframe_timings() const {
+ return updated_subframe_timings_;
+ }
// currently_committed_urls passed to OnStart().
const std::vector<GURL>& observed_committed_urls_from_on_start() const {
@@ -139,9 +161,11 @@ class TestPageLoadMetricsEmbedderInterface
private:
std::vector<PageLoadTiming> updated_timings_;
+ std::vector<PageLoadTiming> updated_subframe_timings_;
std::vector<PageLoadTiming> complete_timings_;
std::vector<GURL> observed_committed_urls_;
std::vector<GURL> completed_filtered_urls_;
+ content::WebContents* web_contents_;
bool is_ntp_;
};
@@ -171,7 +195,8 @@ class MetricsWebContentsObserverTest : public ChromeRenderViewHostTestHarness {
}
void AttachObserver() {
- embedder_interface_ = new TestPageLoadMetricsEmbedderInterface();
+ embedder_interface_ =
+ new TestPageLoadMetricsEmbedderInterface(web_contents());
// Owned by the web_contents. Tests must be careful not to call
// SimulateTimingUpdate after they call DeleteContents() without also
// calling AttachObserver() again. Otherwise they will use-after-free the
@@ -203,11 +228,19 @@ class MetricsWebContentsObserverTest : public ChromeRenderViewHostTestHarness {
return empty;
}
- int CountCompleteTimingReported() {
- return embedder_interface_->complete_timings().size();
+ const std::vector<PageLoadTiming>& updated_timings() const {
+ return embedder_interface_->updated_timings();
}
- int CountUpdatedTimingReported() {
- return embedder_interface_->updated_timings().size();
+ const std::vector<PageLoadTiming>& complete_timings() const {
+ return embedder_interface_->complete_timings();
+ }
+ const std::vector<PageLoadTiming>& updated_subframe_timings() const {
+ return embedder_interface_->updated_subframe_timings();
+ }
+ int CountCompleteTimingReported() { return complete_timings().size(); }
+ int CountUpdatedTimingReported() { return updated_timings().size(); }
+ int CountUpdatedSubFrameTimingReported() {
+ return updated_subframe_timings().size();
}
const std::vector<GURL>& observed_committed_urls_from_on_start() const {
@@ -253,38 +286,45 @@ TEST_F(MetricsWebContentsObserverTest, SuccessfulMainFrameNavigation) {
ASSERT_EQ(kDefaultTestUrl,
observed_committed_urls_from_on_start().at(1).spec());
ASSERT_EQ(1, CountUpdatedTimingReported());
+ ASSERT_EQ(0, CountUpdatedSubFrameTimingReported());
CheckNoErrorEvents();
}
-TEST_F(MetricsWebContentsObserverTest, NotInMainFrame) {
+TEST_F(MetricsWebContentsObserverTest, SubFrame) {
PageLoadTiming timing;
timing.navigation_start = base::Time::FromDoubleT(1);
content::WebContentsTester* web_contents_tester =
content::WebContentsTester::For(web_contents());
web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
+ SimulateTimingUpdate(timing);
content::RenderFrameHostTester* rfh_tester =
content::RenderFrameHostTester::For(main_rfh());
content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe");
+ PageLoadTiming subframe_timing;
+ subframe_timing.navigation_start = base::Time::FromDoubleT(2);
content::RenderFrameHostTester* subframe_tester =
content::RenderFrameHostTester::For(subframe);
subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2));
subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2));
- SimulateTimingUpdate(timing, subframe);
+ SimulateTimingUpdate(subframe_timing, subframe);
subframe_tester->SimulateNavigationStop();
// Navigate again to see if the timing updated for a subframe message.
web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2));
- ASSERT_EQ(0, CountUpdatedTimingReported());
ASSERT_EQ(1, CountCompleteTimingReported());
- ASSERT_EQ(1, CountEmptyCompleteTimingReported());
- CheckErrorEvent(ERR_TIMING_IPC_FROM_SUBFRAME, 1);
- CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1);
- CheckTotalErrorEvents();
+ ASSERT_EQ(1, CountUpdatedTimingReported());
+ ASSERT_EQ(0, CountEmptyCompleteTimingReported());
+ EXPECT_EQ(timing, updated_timings().at(0));
+
+ ASSERT_EQ(1, CountUpdatedSubFrameTimingReported());
+ EXPECT_EQ(subframe_timing, updated_subframe_timings().at(0));
+
+ CheckNoErrorEvents();
}
TEST_F(MetricsWebContentsObserverTest, SameDocumentNoTrigger) {
@@ -429,29 +469,6 @@ TEST_F(MetricsWebContentsObserverTest, TimingOrderError) {
page_load_metrics::internal::INVALID_ORDER_PARSE_START_PARSE_STOP, 1);
}
-TEST_F(MetricsWebContentsObserverTest, NotInMainError) {
- PageLoadTiming timing;
- timing.navigation_start = base::Time::FromDoubleT(1);
-
- content::WebContentsTester* web_contents_tester =
- content::WebContentsTester::For(web_contents());
- web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
-
- content::RenderFrameHostTester* rfh_tester =
- content::RenderFrameHostTester::For(main_rfh());
- content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe");
-
- content::RenderFrameHostTester* subframe_tester =
- content::RenderFrameHostTester::For(subframe);
- subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2));
- subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2));
- SimulateTimingUpdate(timing, subframe);
- CheckErrorEvent(ERR_TIMING_IPC_FROM_SUBFRAME, 1);
- CheckTotalErrorEvents();
- ASSERT_EQ(0, CountUpdatedTimingReported());
- ASSERT_EQ(0, CountCompleteTimingReported());
-}
-
TEST_F(MetricsWebContentsObserverTest, BadIPC) {
PageLoadTiming timing;
timing.navigation_start = base::Time::FromDoubleT(10);

Powered by Google App Engine
This is Rietveld 408576698