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

Side by Side Diff: chrome/browser/page_load_metrics/observers/ads_page_load_metrics_observer_unittest.cc

Issue 2798953002: [PageLoadMetrics] Keep track of Ad Sizes on Pages (Closed)
Patch Set: Address comments from PS8 Created 3 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/page_load_metrics/observers/ads_page_load_metrics_obser ver.h"
6
7 #include <string>
8
9 #include "base/macros.h"
10 #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_ test_harness.h"
11 #include "content/public/browser/render_frame_host.h"
12 #include "url/gurl.h"
13
14 using content::RenderFrameHost;
15 using content::RenderFrameHostTester;
Charlie Harrison 2017/04/11 17:30:07 include test_renderer_host.h
jkarlin 2017/04/13 17:25:30 Done.
16
17 namespace {
Charlie Harrison 2017/04/11 17:30:06 nit: namespace { enum class ResourceCached { NOT_
jkarlin 2017/04/13 17:25:30 Done.
18 enum class ResourceCached { NOT_CACHED, CACHED };
19 }
20
21 class AdsPageLoadMetricsObserverTest
22 : public page_load_metrics::PageLoadMetricsObserverTestHarness {
23 public:
24 AdsPageLoadMetricsObserverTest() {}
25
26 RenderFrameHost* NavigateMainFrame(const GURL& url) {
27 NavigateAndCommit(url);
28 return web_contents()->GetMainFrame();
29 }
30
31 RenderFrameHost* CreateAndNavigateSubFrame(const GURL& url,
32 const std::string& frame_name,
33 content::RenderFrameHost* parent) {
34 RenderFrameHostTester* rfh_tester = RenderFrameHostTester::For(parent);
35 RenderFrameHost* subframe = rfh_tester->AppendChild(frame_name);
36 RenderFrameHostTester* subframe_tester =
37 RenderFrameHostTester::For(subframe);
38 subframe_tester->SimulateNavigationCommit(url);
39 return subframe;
Charlie Harrison 2017/04/11 17:30:06 I wonder if you could use the NavigationSimulator
jkarlin 2017/04/13 17:25:30 Done.
40 }
41
42 void LoadResource(RenderFrameHost* frame,
43 ResourceCached resource_cached,
44 int resource_size_in_kb) {
45 page_load_metrics::ExtraRequestInfo request(
46 GURL(), frame->GetFrameTreeNodeId(),
Charlie Harrison 2017/04/11 17:30:06 include gurl
jkarlin 2017/04/13 17:25:30 Already there.
47 resource_cached == ResourceCached::CACHED, resource_size_in_kb * 1024,
48 false /* data_reduction_proxy_used */,
49 0 /* original_network_content_length */);
50 SimulateLoadedResource(request);
51 }
52
53 protected:
54 void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override {
Charlie Harrison 2017/04/11 17:30:06 include page_load_tracker.h
jkarlin 2017/04/13 17:25:30 Done.
55 tracker->AddObserver(base::WrapUnique(new AdsPageLoadMetricsObserver()));
Charlie Harrison 2017/04/11 17:30:06 nit: prefer base::MakeUnique<AdsPageLoadMetricsObs
jkarlin 2017/04/13 17:25:30 Done.
56 }
57
58 private:
59 DISALLOW_COPY_AND_ASSIGN(AdsPageLoadMetricsObserverTest);
Charlie Harrison 2017/04/11 17:30:06 include base/macros.
jkarlin 2017/04/13 17:25:30 Already there.
60 };
61
62 TEST_F(AdsPageLoadMetricsObserverTest, PageWithNoAds) {
63 RenderFrameHost* main_frame = NavigateMainFrame(GURL("https://foo.com/"));
64 RenderFrameHost* frame1 = CreateAndNavigateSubFrame(
65 GURL("https://foo.com/frame1"), "foo name", main_frame);
66 RenderFrameHost* frame2 =
67 CreateAndNavigateSubFrame(GURL("https://foo.com/frame2"), "", main_frame);
68 LoadResource(main_frame, ResourceCached::NOT_CACHED, 1);
69 LoadResource(frame1, ResourceCached::NOT_CACHED, 1);
70 LoadResource(frame2, ResourceCached::NOT_CACHED, 1);
71
72 // Navigate again to trigger histograms.
73 NavigateMainFrame(GURL("https://bar.com/"));
74
75 histogram_tester().ExpectUniqueSample(
76 "PageLoad.Clients.Ads.Google.PageHasNoAds", 1, 1);
77 histogram_tester().ExpectTotalCount(
78 "PageLoad.Clients.Ads.Google.AdFrameCount", 0);
79 histogram_tester().ExpectTotalCount(
80 "PageLoad.Clients.Ads.Google.Bytes.AdFrames", 0);
81 }
82
83 TEST_F(AdsPageLoadMetricsObserverTest, ResourceBeforeAdFrameCommits) {
84 RenderFrameHost* main_frame = NavigateMainFrame(GURL("https://foo.com/"));
85
86 LoadResource(main_frame, ResourceCached::NOT_CACHED, 1);
87
88 // Assume that the next frame's id will be the main frame + 1 and load a
89 // resource for that frame. Make sure it gets counted.
90 page_load_metrics::ExtraRequestInfo request(
91 GURL(), main_frame->GetFrameTreeNodeId() + 1, false /* cached */,
92 1024 /* size */, false /* data_reduction_proxy_used */,
93 0 /* original_network_content_length */);
94 SimulateLoadedResource(request);
95
96 CreateAndNavigateSubFrame(GURL("https://foo.com/frame2"),
97 "google_ads_iframe_1", main_frame);
98
99 // Navigate again to trigger histograms.
100 NavigateMainFrame(GURL("https://bar.com/"));
101
102 // 2KB total were loaded from network, one of which was in an ad frame.
103 histogram_tester().ExpectTotalCount(
104 "PageLoad.Clients.Ads.Google.PageHasNoAds", 0);
105 histogram_tester().ExpectUniqueSample(
106 "PageLoad.Clients.Ads.Google.AdFrameCount", 1, 1);
107
108 // Individual Ad Frame Metrics
109 histogram_tester().ExpectUniqueSample(
110 "PageLoad.Clients.Ads.Google.Bytes.AdFrame", 1, 1);
111 histogram_tester().ExpectUniqueSample(
112 "PageLoad.Clients.Ads.Google.Bytes.AdFrameFromNetwork", 1, 1);
113 histogram_tester().ExpectUniqueSample(
114 "PageLoad.Clients.Ads.Google.BytesPercent.AdFrameFromNetwork", 100, 1);
115
116 // Page percentages
117 histogram_tester().ExpectUniqueSample(
118 "PageLoad.Clients.Ads.Google.BytesPercent.AdFrames", 50, 1);
119 histogram_tester().ExpectUniqueSample(
120 "PageLoad.Clients.Ads.Google.BytesPercent."
121 "AdFramesFromNetworkOfAdFramesTotal",
122 100, 1);
123 histogram_tester().ExpectUniqueSample(
124 "PageLoad.Clients.Ads.Google.Bytes.Percent."
125 "AdFramesFromNetworkOfPageFromNetwork",
126 50, 1);
127
128 // Page byte counts
129 histogram_tester().ExpectUniqueSample(
130 "PageLoad.Clients.Ads.Google.Bytes.AdFrames", 1, 1);
131 histogram_tester().ExpectUniqueSample(
132 "PageLoad.Clients.Ads.Google.Bytes.PageSansAdFrames", 1, 1);
133 histogram_tester().ExpectUniqueSample(
134 "PageLoad.Clients.Ads.Google.Bytes.Page", 2, 1);
135 histogram_tester().ExpectUniqueSample(
136 "PageLoad.Clients.Ads.Google.Bytes.PageFromNetwork", 2, 1);
137 histogram_tester().ExpectUniqueSample(
138 "PageLoad.Clients.Ads.Google.Bytes.AdFramesFromNetwork", 1, 1);
139 }
140
141 TEST_F(AdsPageLoadMetricsObserverTest, PageWithAdFrames) {
142 RenderFrameHost* main_frame = NavigateMainFrame(GURL("https://foo.com/"));
143 RenderFrameHost* non_ad_frame = CreateAndNavigateSubFrame(
144 GURL("https://foo.com/frame1"), "foo name", main_frame);
145
146 // Create 5 ad frames, one nested inside another. Verify that the nested ad
147 // frame doesn't get counted separately (but that its bytes are still
148 // coutned). Also verify that the various ad signals (urls and names) are
149 // properly detected.
150 RenderFrameHost* ad_frame1 = CreateAndNavigateSubFrame(
151 GURL("https://foo.com/frame2"), "google_ads_iframe_1", main_frame);
152 RenderFrameHost* ad_frame2 = CreateAndNavigateSubFrame(
153 GURL("https://foo.com/frame2"), "google_ads_frame_1", main_frame);
154 RenderFrameHost* ad_frame3 = CreateAndNavigateSubFrame(
155 GURL("http://tpc.googlesyndication.com/safeframe/"), "", main_frame);
156 RenderFrameHost* ad_frame4 = CreateAndNavigateSubFrame(
157 GURL("https://tpc.googlesyndication.com/safeframe/1"), "", main_frame);
158 RenderFrameHost* nested_ad_frame4 = CreateAndNavigateSubFrame(
159 GURL("https://tpc.googlesyndication.com/safeframe/2"), "", ad_frame4);
160
161 // Create an ad frame without content, it shouldn't be counted.
162 CreateAndNavigateSubFrame(
163 GURL("https://tpc.googlesyndication.com/safeframe/3"), "", main_frame);
164
165 // 7 bytes total in page, all from network, 5 from ads.
166 LoadResource(main_frame, ResourceCached::NOT_CACHED, 1);
167 LoadResource(non_ad_frame, ResourceCached::NOT_CACHED, 1);
168 LoadResource(ad_frame1, ResourceCached::NOT_CACHED, 1);
169 LoadResource(ad_frame2, ResourceCached::NOT_CACHED, 1);
170 LoadResource(ad_frame3, ResourceCached::NOT_CACHED, 1);
171 LoadResource(ad_frame4, ResourceCached::NOT_CACHED, 1);
172 LoadResource(nested_ad_frame4, ResourceCached::NOT_CACHED, 1);
173
174 // Navigate again to trigger histograms.
175 NavigateMainFrame(GURL("https://bar.com/"));
176
177 // Individual Ad Frame Metrics
178 histogram_tester().ExpectTotalCount(
179 "PageLoad.Clients.Ads.Google.Bytes.AdFrame", 4);
180 histogram_tester().ExpectTotalCount(
181 "PageLoad.Clients.Ads.Google.Bytes.AdFrameFromNetwork", 4);
182 histogram_tester().ExpectTotalCount(
183 "PageLoad.Clients.Ads.Google.BytesPercent.AdFrameFromNetwork", 4);
184
185 // Counts
186 histogram_tester().ExpectTotalCount(
187 "PageLoad.Clients.Ads.Google.PageHasNoAds", 0);
188 histogram_tester().ExpectUniqueSample(
189 "PageLoad.Clients.Ads.Google.AdFrameCount", 4, 1);
190
191 // Page percentages
192 histogram_tester().ExpectUniqueSample(
193 "PageLoad.Clients.Ads.Google.BytesPercent.AdFrames", 71, 1);
194 histogram_tester().ExpectUniqueSample(
195 "PageLoad.Clients.Ads.Google.BytesPercent."
196 "AdFramesFromNetworkOfAdFramesTotal",
197 100, 1);
198 histogram_tester().ExpectUniqueSample(
199 "PageLoad.Clients.Ads.Google.Bytes.Percent."
200 "AdFramesFromNetworkOfPageFromNetwork",
201 71, 1);
202
203 // Page byte counts
204 histogram_tester().ExpectUniqueSample(
205 "PageLoad.Clients.Ads.Google.Bytes.AdFrames", 5, 1);
206 histogram_tester().ExpectUniqueSample(
207 "PageLoad.Clients.Ads.Google.Bytes.PageSansAdFrames", 2, 1);
208 histogram_tester().ExpectUniqueSample(
209 "PageLoad.Clients.Ads.Google.Bytes.Page", 7, 1);
210 histogram_tester().ExpectUniqueSample(
211 "PageLoad.Clients.Ads.Google.Bytes.PageFromNetwork", 7, 1);
212 histogram_tester().ExpectUniqueSample(
213 "PageLoad.Clients.Ads.Google.Bytes.AdFramesFromNetwork", 5, 1);
214 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698