| 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..65551ceaaf978761dda36941d1f4b6e77893205f 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
|
| @@ -40,10 +40,13 @@ const char kFilteredCommitUrl[] = "https://whatever.com/ignore-on-commit";
|
| // provided std::vector, so they can be analyzed by unit tests.
|
| class TestPageLoadMetricsObserver : public PageLoadMetricsObserver {
|
| public:
|
| - TestPageLoadMetricsObserver(std::vector<PageLoadTiming>* updated_timings,
|
| - std::vector<PageLoadTiming>* complete_timings,
|
| - std::vector<GURL>* observed_committed_urls)
|
| + TestPageLoadMetricsObserver(
|
| + std::vector<PageLoadTiming>* updated_timings,
|
| + std::vector<PageLoadTiming>* updated_sub_frame_timings,
|
| + std::vector<PageLoadTiming>* complete_timings,
|
| + std::vector<GURL>* observed_committed_urls)
|
| : updated_timings_(updated_timings),
|
| + updated_sub_frame_timings_(updated_sub_frame_timings),
|
| complete_timings_(complete_timings),
|
| observed_committed_urls_(observed_committed_urls) {}
|
|
|
| @@ -59,6 +62,14 @@ class TestPageLoadMetricsObserver : public PageLoadMetricsObserver {
|
| updated_timings_->push_back(timing);
|
| }
|
|
|
| + void OnSubFrameTimingUpdate(FrameTreeNodeId child_frame_id,
|
| + base::TimeDelta navigation_start,
|
| + const PageLoadTiming& child_timing,
|
| + const PageLoadMetadata& child_metadata,
|
| + const PageLoadExtraInfo& extra_info) override {
|
| + updated_sub_frame_timings_->push_back(child_timing);
|
| + }
|
| +
|
| void OnComplete(const PageLoadTiming& timing,
|
| const PageLoadExtraInfo& extra_info) override {
|
| complete_timings_->push_back(timing);
|
| @@ -72,6 +83,7 @@ class TestPageLoadMetricsObserver : public PageLoadMetricsObserver {
|
|
|
| private:
|
| std::vector<PageLoadTiming>* const updated_timings_;
|
| + std::vector<PageLoadTiming>* const updated_sub_frame_timings_;
|
| std::vector<PageLoadTiming>* const complete_timings_;
|
| std::vector<GURL>* const observed_committed_urls_;
|
| };
|
| @@ -116,7 +128,8 @@ class TestPageLoadMetricsEmbedderInterface
|
| 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_));
|
| + &updated_timings_, &updated_sub_frame_timings_, &complete_timings_,
|
| + &observed_committed_urls_));
|
| tracker->AddObserver(base::MakeUnique<FilteringPageLoadMetricsObserver>(
|
| &completed_filtered_urls_));
|
| }
|
| @@ -126,6 +139,9 @@ class TestPageLoadMetricsEmbedderInterface
|
| const std::vector<PageLoadTiming>& complete_timings() const {
|
| return complete_timings_;
|
| }
|
| + const std::vector<PageLoadTiming>& updated_subframe_timings() const {
|
| + return updated_sub_frame_timings_;
|
| + }
|
|
|
| // currently_committed_urls passed to OnStart().
|
| const std::vector<GURL>& observed_committed_urls_from_on_start() const {
|
| @@ -139,6 +155,7 @@ class TestPageLoadMetricsEmbedderInterface
|
|
|
| private:
|
| std::vector<PageLoadTiming> updated_timings_;
|
| + std::vector<PageLoadTiming> updated_sub_frame_timings_;
|
| std::vector<PageLoadTiming> complete_timings_;
|
| std::vector<GURL> observed_committed_urls_;
|
| std::vector<GURL> completed_filtered_urls_;
|
| @@ -203,11 +220,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 +278,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 +461,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);
|
|
|