| 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 c492069696c44bf40f4a058741041c584fe32566..2d085ad371a7bb731f13f20d34c7413770ec8e3d 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
|
| @@ -241,6 +241,10 @@ TEST_F(AdsPageLoadMetricsObserverTest, PageWithAdFrames) {
|
| 1);
|
|
|
| // Counts
|
| + histogram_tester().ExpectBucketCount(
|
| + "PageLoad.Clients.Ads.Google.ParentExistsForSubFrame", 0, 0);
|
| + histogram_tester().ExpectTotalCount(
|
| + "PageLoad.Clients.Ads.Google.ResourceTypeWhenNoFrameFound", 0);
|
| histogram_tester().ExpectUniqueSample(
|
| "PageLoad.Clients.Ads.Google.FrameCounts.AnyParentFrame.AdFrames", 4, 1);
|
|
|
| @@ -331,6 +335,10 @@ TEST_F(AdsPageLoadMetricsObserverTest, PageWithAdFrameThatRenavigates) {
|
| 1);
|
|
|
| // Counts
|
| + histogram_tester().ExpectBucketCount(
|
| + "PageLoad.Clients.Ads.Google.ParentExistsForSubFrame", 0, 0);
|
| + histogram_tester().ExpectTotalCount(
|
| + "PageLoad.Clients.Ads.Google.ResourceTypeWhenNoFrameFound", 0);
|
| histogram_tester().ExpectUniqueSample(
|
| "PageLoad.Clients.Ads.Google.FrameCounts.AnyParentFrame.AdFrames", 1, 1);
|
|
|
| @@ -393,6 +401,10 @@ TEST_F(AdsPageLoadMetricsObserverTest, PageWithNonAdFrameThatRenavigatesToAd) {
|
| 2);
|
|
|
| // Counts
|
| + histogram_tester().ExpectBucketCount(
|
| + "PageLoad.Clients.Ads.Google.ParentExistsForSubFrame", 0, 0);
|
| + histogram_tester().ExpectTotalCount(
|
| + "PageLoad.Clients.Ads.Google.ResourceTypeWhenNoFrameFound", 0);
|
| histogram_tester().ExpectUniqueSample(
|
| "PageLoad.Clients.Ads.Google.FrameCounts.AnyParentFrame.AdFrames", 2, 1);
|
|
|
| @@ -526,6 +538,11 @@ TEST_F(AdsPageLoadMetricsObserverTest, TwoResourceLoadsBeforeCommit) {
|
| 1);
|
|
|
| // Counts
|
| + histogram_tester().ExpectBucketCount(
|
| + "PageLoad.Clients.Ads.Google.ParentExistsForSubFrame", 0, 0);
|
| + histogram_tester().ExpectUniqueSample(
|
| + "PageLoad.Clients.Ads.Google.ResourceTypeWhenNoFrameFound",
|
| + content::RESOURCE_TYPE_SUB_FRAME, 1);
|
| histogram_tester().ExpectUniqueSample(
|
| "PageLoad.Clients.Ads.Google.FrameCounts.AnyParentFrame.AdFrames", 1, 1);
|
|
|
| @@ -550,3 +567,41 @@ TEST_F(AdsPageLoadMetricsObserverTest, TwoResourceLoadsBeforeCommit) {
|
| histogram_tester().ExpectUniqueSample(
|
| "PageLoad.Clients.Ads.Google.Bytes.NonAdFrames.Aggregate.Total", 10, 1);
|
| }
|
| +
|
| +// This tests an issue that is believed to be the cause of
|
| +// https://crbug.com/721369. The issue is that a frame from a previous
|
| +// navigation might commit during a new navigation, and the ads metrics won't
|
| +// know about the frame's parent (because it doesn't exist in the page).
|
| +TEST_F(AdsPageLoadMetricsObserverTest, FrameWithNoParent) {
|
| + RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl);
|
| + RenderFrameHost* sub_frame =
|
| + CreateAndNavigateSubFrame(kNonAdUrl, kNonAdName, main_frame);
|
| +
|
| + histogram_tester().ExpectBucketCount(
|
| + "PageLoad.Clients.Ads.Google.ParentExistsForSubFrame", 0, 0);
|
| +
|
| + // Renavigate the child, but, while navigating, the main frame renavigates.
|
| + RenderFrameHost* child_of_subframe =
|
| + RenderFrameHostTester::For(sub_frame)->AppendChild(kAdName);
|
| + auto navigation_simulator = NavigationSimulator::CreateRendererInitiated(
|
| + GURL(kNonAdUrl2), child_of_subframe);
|
| + navigation_simulator->Start();
|
| +
|
| + // Main frame renavigates.
|
| + NavigateMainFrame(kNonAdUrl);
|
| +
|
| + // Child frame commits.
|
| + navigation_simulator->Commit();
|
| + child_of_subframe = navigation_simulator->GetFinalRenderFrameHost();
|
| + histogram_tester().ExpectBucketCount(
|
| + "PageLoad.Clients.Ads.Google.ParentExistsForSubFrame", 0, 1);
|
| +
|
| + // Test that a resource loaded into an unknown frame doesn't cause any
|
| + // issues.
|
| + histogram_tester().ExpectTotalCount(
|
| + "PageLoad.Clients.Ads.Google.ResourceTypeWhenNoFrameFound", 0);
|
| + LoadResource(child_of_subframe, ResourceCached::NOT_CACHED, 10);
|
| + histogram_tester().ExpectBucketCount(
|
| + "PageLoad.Clients.Ads.Google.ResourceTypeWhenNoFrameFound",
|
| + content::RESOURCE_TYPE_SUB_FRAME, 1);
|
| +}
|
|
|