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

Side by Side Diff: chrome/browser/data_use_measurement/chrome_data_use_ascriber_unittest.cc

Issue 2875263003: Support for transfer navigations in data use ascriber (Closed)
Patch Set: rebased 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 unified diff | Download patch
« no previous file with comments | « chrome/browser/data_use_measurement/chrome_data_use_ascriber_service.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/data_use_measurement/chrome_data_use_ascriber.h" 5 #include "chrome/browser/data_use_measurement/chrome_data_use_ascriber.h"
6 6
7 #include <list> 7 #include <list>
8 #include <memory> 8 #include <memory>
9 9
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "base/run_loop.h" 11 #include "base/run_loop.h"
12 #include "components/data_use_measurement/core/data_use_recorder.h" 12 #include "components/data_use_measurement/core/data_use_recorder.h"
13 #include "content/public/browser/resource_request_info.h" 13 #include "content/public/browser/resource_request_info.h"
14 #include "content/public/common/browser_side_navigation_policy.h" 14 #include "content/public/common/browser_side_navigation_policy.h"
15 #include "content/public/common/previews_state.h" 15 #include "content/public/common/previews_state.h"
16 #include "content/public/common/process_type.h" 16 #include "content/public/common/process_type.h"
17 #include "content/public/test/mock_resource_context.h" 17 #include "content/public/test/mock_resource_context.h"
18 #include "content/public/test/test_browser_thread_bundle.h" 18 #include "content/public/test/test_browser_thread_bundle.h"
19 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" 19 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
20 #include "net/url_request/url_request_test_util.h" 20 #include "net/url_request/url_request_test_util.h"
21 #include "testing/gmock/include/gmock/gmock.h" 21 #include "testing/gmock/include/gmock/gmock.h"
22 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
23 23
24 namespace { 24 namespace {
25 25
26 int kRenderProcessId = 1; 26 int kRenderProcessId = 1;
27 int kRenderFrameId = 2; 27 int kRenderFrameId = 2;
28 int kRequestId = 3; 28 int kRequestId = 3;
29 uint32_t kPageTransition = 1; 29 uint32_t kPageTransition = 5;
30 void* kNavigationHandle = &kNavigationHandle; 30 void* kNavigationHandle = &kNavigationHandle;
31 31
32 class MockPageLoadObserver 32 class MockPageLoadObserver
33 : public data_use_measurement::DataUseAscriber::PageLoadObserver { 33 : public data_use_measurement::DataUseAscriber::PageLoadObserver {
34 public: 34 public:
35 MOCK_METHOD1(OnPageLoadCommit, void(data_use_measurement::DataUse* data_use)); 35 MOCK_METHOD1(OnPageLoadCommit, void(data_use_measurement::DataUse* data_use));
36 MOCK_METHOD2(OnPageResourceLoad, 36 MOCK_METHOD2(OnPageResourceLoad,
37 void(const net::URLRequest& request, 37 void(const net::URLRequest& request,
38 data_use_measurement::DataUse* data_use)); 38 data_use_measurement::DataUse* data_use));
39 MOCK_METHOD1(OnPageLoadComplete, 39 MOCK_METHOD1(OnPageLoadComplete,
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 TEST_F(ChromeDataUseAscriberTest, RenderFrameShownAndHidden) { 117 TEST_F(ChromeDataUseAscriberTest, RenderFrameShownAndHidden) {
118 if (content::IsBrowserSideNavigationEnabled()) 118 if (content::IsBrowserSideNavigationEnabled())
119 return; 119 return;
120 120
121 std::unique_ptr<net::URLRequest> request = CreateNewRequest( 121 std::unique_ptr<net::URLRequest> request = CreateNewRequest(
122 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); 122 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId);
123 123
124 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); 124 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1);
125 ascriber()->OnBeforeUrlRequest(request.get()); 125 ascriber()->OnBeforeUrlRequest(request.get());
126 ascriber()->ReadyToCommitMainFrameNavigation( 126 ascriber()->ReadyToCommitMainFrameNavigation(
127 GURL("http://test.com"), content::GlobalRequestID(kRenderProcessId, 0), 127 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId,
128 kRenderProcessId, kRenderFrameId, true, (void*)request.get()); 128 kRenderFrameId);
129 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId,
130 GURL("http://test.com"), true,
131 kPageTransition);
129 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); 132 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true);
130 133
131 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); 134 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible());
132 135
133 // Hide the frame, and the visibility should be updated. 136 // Hide the frame, and the visibility should be updated.
134 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, false); 137 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, false);
135 EXPECT_FALSE(ascriber()->GetDataUseRecorder(*request)->is_visible()); 138 EXPECT_FALSE(ascriber()->GetDataUseRecorder(*request)->is_visible());
136 139
137 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); 140 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1);
138 } 141 }
139 142
140 TEST_F(ChromeDataUseAscriberTest, RenderFrameHiddenAndShown) { 143 TEST_F(ChromeDataUseAscriberTest, RenderFrameHiddenAndShown) {
141 if (content::IsBrowserSideNavigationEnabled()) 144 if (content::IsBrowserSideNavigationEnabled())
142 return; 145 return;
143 146
144 std::unique_ptr<net::URLRequest> request = CreateNewRequest( 147 std::unique_ptr<net::URLRequest> request = CreateNewRequest(
145 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); 148 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId);
146 149
147 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); 150 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1);
148 ascriber()->OnBeforeUrlRequest(request.get()); 151 ascriber()->OnBeforeUrlRequest(request.get());
149 ascriber()->ReadyToCommitMainFrameNavigation( 152 ascriber()->ReadyToCommitMainFrameNavigation(
150 GURL("http://test.com"), content::GlobalRequestID(kRenderProcessId, 0), 153 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId,
151 kRenderProcessId, kRenderFrameId, true, (void*)request.get()); 154 kRenderFrameId);
155 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId,
156 GURL("http://test.com"), true,
157 kPageTransition);
152 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, false); 158 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, false);
153 159
154 EXPECT_FALSE(ascriber()->GetDataUseRecorder(*request)->is_visible()); 160 EXPECT_FALSE(ascriber()->GetDataUseRecorder(*request)->is_visible());
155 161
156 // Show the frame, and the visibility should be updated. 162 // Show the frame, and the visibility should be updated.
157 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); 163 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true);
158 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); 164 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible());
159 165
160 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); 166 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1);
161 } 167 }
162 168
163 TEST_F(ChromeDataUseAscriberTest, RenderFrameHostChanged) { 169 TEST_F(ChromeDataUseAscriberTest, RenderFrameHostChanged) {
164 if (content::IsBrowserSideNavigationEnabled()) 170 if (content::IsBrowserSideNavigationEnabled())
165 return; 171 return;
166 172
167 std::unique_ptr<net::URLRequest> request = CreateNewRequest( 173 std::unique_ptr<net::URLRequest> request = CreateNewRequest(
168 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); 174 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId);
169 175
170 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); 176 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1);
171 ascriber()->OnBeforeUrlRequest(request.get()); 177 ascriber()->OnBeforeUrlRequest(request.get());
172 ascriber()->ReadyToCommitMainFrameNavigation( 178 ascriber()->ReadyToCommitMainFrameNavigation(
173 GURL("http://test.com"), content::GlobalRequestID(kRenderProcessId, 0), 179 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId,
174 kRenderProcessId, kRenderFrameId, true, (void*)request.get()); 180 kRenderFrameId);
181 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId,
182 GURL("http://test.com"), true,
183 kPageTransition);
175 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true); 184 ascriber()->WasShownOrHidden(kRenderProcessId, kRenderFrameId, true);
176 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible()); 185 EXPECT_TRUE(ascriber()->GetDataUseRecorder(*request)->is_visible());
177 186
178 // Create a new render frame and swap it. 187 // Create a new render frame and swap it.
179 ascriber()->RenderFrameCreated(kRenderProcessId + 1, kRenderFrameId + 1, -1, 188 ascriber()->RenderFrameCreated(kRenderProcessId + 1, kRenderFrameId + 1, -1,
180 -1); 189 -1);
181 ascriber()->RenderFrameHostChanged(kRenderProcessId, kRenderFrameId, 190 ascriber()->RenderFrameHostChanged(kRenderProcessId, kRenderFrameId,
182 kRenderProcessId + 1, kRenderFrameId + 1); 191 kRenderProcessId + 1, kRenderFrameId + 1);
183 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); 192 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1);
184 193
(...skipping 16 matching lines...) Expand all
201 // Request should cause a recorder to be created. 210 // Request should cause a recorder to be created.
202 ascriber()->OnBeforeUrlRequest(request.get()); 211 ascriber()->OnBeforeUrlRequest(request.get());
203 EXPECT_EQ(2u, recorders().size()); 212 EXPECT_EQ(2u, recorders().size());
204 213
205 // Navigation starts. 214 // Navigation starts.
206 ascriber()->DidStartMainFrameNavigation(GURL("http://test.com"), 215 ascriber()->DidStartMainFrameNavigation(GURL("http://test.com"),
207 kRenderProcessId, kRenderFrameId, 216 kRenderProcessId, kRenderFrameId,
208 kNavigationHandle); 217 kNavigationHandle);
209 218
210 ascriber()->ReadyToCommitMainFrameNavigation( 219 ascriber()->ReadyToCommitMainFrameNavigation(
211 GURL("http://mobile.test.com"),
212 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId, 220 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId,
213 kRenderFrameId, false, kNavigationHandle); 221 kRenderFrameId);
222 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId,
223 GURL("http://mobile.test.com"), false,
224 kPageTransition);
214 225
215 // Navigation commit should merge the two data use recorder entries. 226 // Navigation commit should merge the two data use recorder entries.
216 EXPECT_EQ(1u, recorders().size()); 227 EXPECT_EQ(1u, recorders().size());
217 auto& recorder_entry = recorders().front(); 228 auto& recorder_entry = recorders().front();
218 EXPECT_EQ(RenderFrameHostID(kRenderProcessId, kRenderFrameId), 229 EXPECT_EQ(RenderFrameHostID(kRenderProcessId, kRenderFrameId),
219 recorder_entry.main_frame_id()); 230 recorder_entry.main_frame_id());
220 EXPECT_EQ(content::GlobalRequestID(kRenderProcessId, 0), 231 EXPECT_EQ(content::GlobalRequestID(kRenderProcessId, 0),
221 recorder_entry.main_frame_request_id()); 232 recorder_entry.main_frame_request_id());
222 EXPECT_EQ(GURL("http://mobile.test.com"), recorder_entry.data_use().url()); 233 EXPECT_EQ(GURL("http://mobile.test.com"), recorder_entry.data_use().url());
223 EXPECT_EQ(DataUse::TrafficType::USER_TRAFFIC, 234 EXPECT_EQ(DataUse::TrafficType::USER_TRAFFIC,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 EXPECT_EQ(1u, recorders().size()); 281 EXPECT_EQ(1u, recorders().size());
271 282
272 ascriber()->OnBeforeUrlRequest(request.get()); 283 ascriber()->OnBeforeUrlRequest(request.get());
273 284
274 // Navigation starts. 285 // Navigation starts.
275 ascriber()->DidStartMainFrameNavigation(GURL("http://test.com"), 286 ascriber()->DidStartMainFrameNavigation(GURL("http://test.com"),
276 kRenderProcessId, kRenderFrameId, 287 kRenderProcessId, kRenderFrameId,
277 kNavigationHandle); 288 kNavigationHandle);
278 289
279 ascriber()->ReadyToCommitMainFrameNavigation( 290 ascriber()->ReadyToCommitMainFrameNavigation(
280 GURL("http://mobile.test.com"),
281 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId, 291 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId,
282 kRenderFrameId, false, kNavigationHandle); 292 kRenderFrameId);
293
294 EXPECT_EQ(2u, recorders().size());
295 DataUse* data_use = &recorders().front().data_use();
296
297 EXPECT_CALL(mock_observer,
298 OnPageResourceLoad(testing::_, &recorders().back().data_use()))
299 .Times(1);
300 ascriber()->OnUrlRequestCompleted(*request, false);
301
302 EXPECT_CALL(mock_observer, OnPageLoadCommit(data_use)).Times(1);
303 EXPECT_CALL(mock_observer, OnPageLoadComplete(testing::_)).Times(1);
304 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId,
305 GURL("http://mobile.test.com"), false,
306 kPageTransition);
283 307
284 EXPECT_EQ(1u, recorders().size()); 308 EXPECT_EQ(1u, recorders().size());
285 auto& recorder_entry = recorders().front(); 309 auto& recorder_entry = recorders().front();
286 DataUse* data_use = &recorder_entry.data_use();
287 EXPECT_EQ(RenderFrameHostID(kRenderProcessId, kRenderFrameId), 310 EXPECT_EQ(RenderFrameHostID(kRenderProcessId, kRenderFrameId),
288 recorder_entry.main_frame_id()); 311 recorder_entry.main_frame_id());
289 EXPECT_EQ(content::GlobalRequestID(kRenderProcessId, 0), 312 EXPECT_EQ(content::GlobalRequestID(kRenderProcessId, 0),
290 recorder_entry.main_frame_request_id()); 313 recorder_entry.main_frame_request_id());
291 EXPECT_EQ(GURL("http://mobile.test.com"), recorder_entry.data_use().url()); 314 EXPECT_EQ(GURL("http://mobile.test.com"), recorder_entry.data_use().url());
292 315 EXPECT_CALL(mock_observer, OnPageLoadComplete(&recorder_entry.data_use()))
293 EXPECT_CALL(mock_observer, OnPageLoadCommit(data_use)).Times(1); 316 .Times(1);
294 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId,
295 kPageTransition);
296
297 EXPECT_CALL(mock_observer, OnPageLoadComplete(data_use)).Times(1);
298 EXPECT_CALL(mock_observer, OnPageResourceLoad(testing::_, data_use)).Times(1);
299 317
300 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); 318 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1);
301 ascriber()->OnUrlRequestDestroyed(request.get()); 319 ascriber()->OnUrlRequestDestroyed(request.get());
302 320
303 EXPECT_EQ(0u, recorders().size()); 321 EXPECT_EQ(0u, recorders().size());
304 } 322 }
305 323
306 } // namespace data_use_measurement 324 } // namespace data_use_measurement
OLDNEW
« no previous file with comments | « chrome/browser/data_use_measurement/chrome_data_use_ascriber_service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698