Index: chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer_unittest.cc |
diff --git a/chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer_unittest.cc |
index 706022d3d4db6d333d403b8d17d929d025675e6f..79c9fae1df17cc2af2f8fb60adcea4487a22bb8c 100644 |
--- a/chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer_unittest.cc |
+++ b/chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer_unittest.cc |
@@ -450,6 +450,70 @@ TEST_F(AdsPageLoadMetricsObserverTest, PageWithNonAdFrameThatRenavigatesToAd) { |
"PageLoad.Clients.Ads.Google.Bytes.NonAdFrames.Aggregate.Total", 20, 1); |
} |
+TEST_F(AdsPageLoadMetricsObserverTest, CountAbortedNavigation) { |
+ // If the first navigation in a frame is aborted, keep track of its bytes. |
+ RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); |
+ LoadResource(main_frame, ResourceCached::NOT_CACHED, 10); |
+ |
+ // Create an ad subframe that aborts before committing. |
+ RenderFrameHost* subframe_ad = |
+ RenderFrameHostTester::For(main_frame)->AppendChild(kAdName); |
+ auto navigation_simulator = NavigationSimulator::CreateRendererInitiated( |
+ GURL(kNonAdUrl), subframe_ad); |
+ // The sub-frame renavigates before it commits. |
+ navigation_simulator->Start(); |
+ navigation_simulator->Fail(net::ERR_ABORTED); |
+ |
+ // Load resources for the aborted frame (e.g., simulate the navigation |
+ // aborting due to a doc.write during provisional navigation). They should |
+ // be counted. |
+ LoadResource(subframe_ad, ResourceCached::NOT_CACHED, 10); |
+ LoadResource(subframe_ad, ResourceCached::NOT_CACHED, 10); |
+ |
+ // Navigate again to trigger histograms. |
+ NavigateFrame(kNonAdUrl, main_frame); |
+ |
+ histogram_tester().ExpectUniqueSample( |
+ "PageLoad.Clients.Ads.Google.FrameCounts.AnyParentFrame.AdFrames", 1, 1); |
+ histogram_tester().ExpectUniqueSample( |
+ "PageLoad.Clients.Ads.Google.Bytes.AdFrames.Aggregate.Total", 20, 1); |
+ histogram_tester().ExpectUniqueSample( |
+ "PageLoad.Clients.Ads.Google.Bytes.FullPage.Total", 30, 1); |
+} |
+ |
+TEST_F(AdsPageLoadMetricsObserverTest, CountAbortedSecondNavigationForFrame) { |
+ RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); |
+ LoadResource(main_frame, ResourceCached::NOT_CACHED, 10); |
+ |
+ // Sub frame that is not an ad. |
+ RenderFrameHost* sub_frame = |
+ CreateAndNavigateSubFrame(kNonAdUrl, kNonAdName, main_frame); |
+ LoadResource(sub_frame, ResourceCached::NOT_CACHED, 10); |
+ |
+ // Now navigate (and abort) the subframe to an ad. |
+ auto navigation_simulator = |
+ NavigationSimulator::CreateRendererInitiated(GURL(kAdUrl), sub_frame); |
+ // The sub-frame renavigates before it commits. |
+ navigation_simulator->Start(); |
+ navigation_simulator->Fail(net::ERR_ABORTED); |
+ |
+ // Load resources for the aborted frame (e.g., simulate the navigation |
+ // aborting due to a doc.write during provisional navigation). Since the |
+ // frame attempted to load an ad, the frame is tagged forever as an ad. |
+ LoadResource(sub_frame, ResourceCached::NOT_CACHED, 10); |
+ LoadResource(sub_frame, ResourceCached::NOT_CACHED, 10); |
+ |
+ // Navigate again to trigger histograms. |
+ NavigateFrame(kNonAdUrl, main_frame); |
+ |
+ histogram_tester().ExpectUniqueSample( |
+ "PageLoad.Clients.Ads.Google.FrameCounts.AnyParentFrame.AdFrames", 1, 1); |
+ histogram_tester().ExpectUniqueSample( |
+ "PageLoad.Clients.Ads.Google.Bytes.AdFrames.Aggregate.Total", 20, 1); |
+ histogram_tester().ExpectUniqueSample( |
+ "PageLoad.Clients.Ads.Google.Bytes.FullPage.Total", 40, 1); |
+} |
+ |
TEST_F(AdsPageLoadMetricsObserverTest, TwoResourceLoadsBeforeCommit) { |
// Main frame. |
RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); |
@@ -482,13 +546,13 @@ TEST_F(AdsPageLoadMetricsObserverTest, TwoResourceLoadsBeforeCommit) { |
// 30KB in total was loaded. Ten for the main page, ten for an aborted |
// ad subframe, and ten for a successful ad subframe. The aborted ad |
- // subframe's bytes don't count. |
+ // subframe's bytes count. |
// Individual Ad Frame Metrics |
histogram_tester().ExpectUniqueSample( |
- "PageLoad.Clients.Ads.Google.Bytes.AdFrames.PerFrame.Total", 10, 1); |
+ "PageLoad.Clients.Ads.Google.Bytes.AdFrames.PerFrame.Total", 20, 1); |
histogram_tester().ExpectUniqueSample( |
- "PageLoad.Clients.Ads.Google.Bytes.AdFrames.PerFrame.Network", 10, 1); |
+ "PageLoad.Clients.Ads.Google.Bytes.AdFrames.PerFrame.Network", 20, 1); |
histogram_tester().ExpectUniqueSample( |
"PageLoad.Clients.Ads.Google.Bytes.AdFrames.PerFrame.PercentNetwork", 100, |
1); |
@@ -507,22 +571,22 @@ TEST_F(AdsPageLoadMetricsObserverTest, TwoResourceLoadsBeforeCommit) { |
// Page percentages |
histogram_tester().ExpectUniqueSample( |
- "PageLoad.Clients.Ads.Google.Bytes.FullPage.Total.PercentAds", 50, 1); |
+ "PageLoad.Clients.Ads.Google.Bytes.FullPage.Total.PercentAds", 66, 1); |
histogram_tester().ExpectUniqueSample( |
"PageLoad.Clients.Ads.Google.Bytes.AdFrames.Aggregate.PercentNetwork", |
100, 1); |
histogram_tester().ExpectUniqueSample( |
- "PageLoad.Clients.Ads.Google.Bytes.FullPage.Network.PercentAds", 50, 1); |
+ "PageLoad.Clients.Ads.Google.Bytes.FullPage.Network.PercentAds", 66, 1); |
// Page byte counts |
histogram_tester().ExpectUniqueSample( |
- "PageLoad.Clients.Ads.Google.Bytes.AdFrames.Aggregate.Total", 10, 1); |
+ "PageLoad.Clients.Ads.Google.Bytes.AdFrames.Aggregate.Total", 20, 1); |
histogram_tester().ExpectUniqueSample( |
- "PageLoad.Clients.Ads.Google.Bytes.AdFrames.Aggregate.Network", 10, 1); |
+ "PageLoad.Clients.Ads.Google.Bytes.AdFrames.Aggregate.Network", 20, 1); |
histogram_tester().ExpectUniqueSample( |
- "PageLoad.Clients.Ads.Google.Bytes.FullPage.Total", 20, 1); |
+ "PageLoad.Clients.Ads.Google.Bytes.FullPage.Total", 30, 1); |
histogram_tester().ExpectUniqueSample( |
- "PageLoad.Clients.Ads.Google.Bytes.FullPage.Network", 20, 1); |
+ "PageLoad.Clients.Ads.Google.Bytes.FullPage.Network", 30, 1); |
histogram_tester().ExpectUniqueSample( |
"PageLoad.Clients.Ads.Google.Bytes.NonAdFrames.Aggregate.Total", 10, 1); |
} |