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

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

Issue 2914923002: Fixing removing entries from DUA too early. (Closed)
Patch Set: nit Created 3 years, 6 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
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"
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 68
69 std::unique_ptr<net::URLRequest> CreateNewRequest(std::string url, 69 std::unique_ptr<net::URLRequest> CreateNewRequest(std::string url,
70 bool is_main_frame, 70 bool is_main_frame,
71 int request_id, 71 int request_id,
72 int render_process_id, 72 int render_process_id,
73 int render_frame_id) { 73 int render_frame_id) {
74 std::unique_ptr<net::URLRequest> request = context()->CreateRequest( 74 std::unique_ptr<net::URLRequest> request = context()->CreateRequest(
75 GURL(url), net::IDLE, nullptr, TRAFFIC_ANNOTATION_FOR_TESTS); 75 GURL(url), net::IDLE, nullptr, TRAFFIC_ANNOTATION_FOR_TESTS);
76 // TODO(kundaji): Allow request_id to be specified in AllocateForTesting. 76 // TODO(kundaji): Allow request_id to be specified in AllocateForTesting.
77 content::ResourceRequestInfo::AllocateForTesting( 77 content::ResourceRequestInfo::AllocateForTesting(
78 request.get(), content::RESOURCE_TYPE_MAIN_FRAME, resource_context(), 78 request.get(),
79 render_process_id, 79 is_main_frame ? content::RESOURCE_TYPE_MAIN_FRAME
80 : content::RESOURCE_TYPE_SCRIPT,
81 resource_context(), render_process_id,
80 /*render_view_id=*/-1, render_frame_id, is_main_frame, 82 /*render_view_id=*/-1, render_frame_id, is_main_frame,
81 /*parent_is_main_frame=*/false, 83 /*parent_is_main_frame=*/false,
82 /*allow_download=*/false, 84 /*allow_download=*/false,
83 /*is_async=*/true, content::PREVIEWS_OFF); 85 /*is_async=*/true, content::PREVIEWS_OFF);
84 return request; 86 return request;
85 } 87 }
86 88
87 private: 89 private:
88 content::TestBrowserThreadBundle thread_bundle_; 90 content::TestBrowserThreadBundle thread_bundle_;
89 ChromeDataUseAscriber ascriber_; 91 ChromeDataUseAscriber ascriber_;
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 EXPECT_EQ(GURL("http://mobile.test.com"), recorder_entry.data_use().url()); 222 EXPECT_EQ(GURL("http://mobile.test.com"), recorder_entry.data_use().url());
221 EXPECT_EQ(DataUse::TrafficType::USER_TRAFFIC, 223 EXPECT_EQ(DataUse::TrafficType::USER_TRAFFIC,
222 recorder_entry.data_use().traffic_type()); 224 recorder_entry.data_use().traffic_type());
223 225
224 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); 226 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1);
225 ascriber()->OnUrlRequestDestroyed(request.get()); 227 ascriber()->OnUrlRequestDestroyed(request.get());
226 228
227 EXPECT_EQ(0u, recorders().size()); 229 EXPECT_EQ(0u, recorders().size());
228 } 230 }
229 231
232 TEST_F(ChromeDataUseAscriberTest, SubResourceRequestsAttributed) {
233 // A regression test that verifies that subframe requests in the second page
234 // load in the same frame get attributed to the entry correctly.
235 std::unique_ptr<net::URLRequest> page_load_a_main_frame_request =
236 CreateNewRequest("http://test.com", true, kRequestId, kRenderProcessId,
237 kRenderFrameId);
238
239 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1);
240
241 // Start the main frame reuqest.
242 ascriber()->OnBeforeUrlRequest(page_load_a_main_frame_request.get());
243
244 // Commit the page load.
245 ascriber()->DidStartMainFrameNavigation(GURL("http://test.com"),
246 kRenderProcessId, kRenderFrameId,
247 kNavigationHandle);
248 ascriber()->ReadyToCommitMainFrameNavigation(
249 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId,
250 kRenderFrameId);
251 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId,
252 GURL("http://mobile.test.com"), false,
253 kPageTransition);
254
255 std::unique_ptr<net::URLRequest> page_load_b_main_frame_request =
256 CreateNewRequest("http://test_2.com", true, kRequestId + 1,
257 kRenderProcessId, kRenderFrameId);
258 std::unique_ptr<net::URLRequest> page_load_b_sub_request =
259 CreateNewRequest("http://test_2.com/s", false, kRequestId + 2,
260 kRenderProcessId, kRenderFrameId);
261
262 // Start the second main frame request.
263 ascriber()->OnBeforeUrlRequest(page_load_b_main_frame_request.get());
264
265 // Commit the second page load.
266 ascriber()->DidStartMainFrameNavigation(GURL("http://test_2.com"),
267 kRenderProcessId, kRenderFrameId,
268 kNavigationHandle);
269 ascriber()->ReadyToCommitMainFrameNavigation(
270 content::GlobalRequestID(kRenderProcessId, 0), kRenderProcessId,
271 kRenderFrameId);
272 ascriber()->DidFinishNavigation(kRenderProcessId, kRenderFrameId,
273 GURL("http://mobile.test_2.com"), false,
274 kPageTransition);
275
276 // Delete the first main frame request.
277 ascriber()->OnUrlRequestDestroyed(page_load_a_main_frame_request.get());
278
279 // Start the sub resource request for the second page load.
280 ascriber()->OnBeforeUrlRequest(page_load_b_sub_request.get());
281 ascriber()->OnNetworkBytesReceived(page_load_b_sub_request.get(), 100);
282
283 EXPECT_EQ(1u, recorders().size());
284 auto& recorder_entry = recorders().front();
285 EXPECT_EQ(RenderFrameHostID(kRenderProcessId, kRenderFrameId),
286 recorder_entry.main_frame_id());
287 EXPECT_EQ(content::GlobalRequestID(kRenderProcessId, 0),
288 recorder_entry.main_frame_request_id());
289 EXPECT_EQ(GURL("http://mobile.test_2.com"), recorder_entry.data_use().url());
290 EXPECT_EQ(DataUse::TrafficType::USER_TRAFFIC,
291 recorder_entry.data_use().traffic_type());
292 // Verify that the data usage for the sub-resource was counted towards the
293 // entry.
294 EXPECT_EQ(100, recorder_entry.data_use().total_bytes_received());
295
296 ascriber()->OnUrlRequestDestroyed(page_load_b_sub_request.get());
297 ascriber()->OnUrlRequestDestroyed(page_load_b_main_frame_request.get());
298 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1);
299 EXPECT_EQ(0u, recorders().size());
300 }
301
230 TEST_F(ChromeDataUseAscriberTest, FailedMainFrameNavigation) { 302 TEST_F(ChromeDataUseAscriberTest, FailedMainFrameNavigation) {
231 std::unique_ptr<net::URLRequest> request = CreateNewRequest( 303 std::unique_ptr<net::URLRequest> request = CreateNewRequest(
232 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId); 304 "http://test.com", true, kRequestId, kRenderProcessId, kRenderFrameId);
233 305
234 // Mainframe is created. 306 // Mainframe is created.
235 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1); 307 ascriber()->RenderFrameCreated(kRenderProcessId, kRenderFrameId, -1, -1);
236 EXPECT_EQ(1u, recorders().size()); 308 EXPECT_EQ(1u, recorders().size());
237 309
238 // Request should cause a recorder to be created. 310 // Request should cause a recorder to be created.
239 ascriber()->OnBeforeUrlRequest(request.get()); 311 ascriber()->OnBeforeUrlRequest(request.get());
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 EXPECT_CALL(mock_observer, OnPageLoadComplete(&recorder_entry.data_use())) 368 EXPECT_CALL(mock_observer, OnPageLoadComplete(&recorder_entry.data_use()))
297 .Times(1); 369 .Times(1);
298 370
299 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1); 371 ascriber()->RenderFrameDeleted(kRenderProcessId, kRenderFrameId, -1, -1);
300 ascriber()->OnUrlRequestDestroyed(request.get()); 372 ascriber()->OnUrlRequestDestroyed(request.get());
301 373
302 EXPECT_EQ(0u, recorders().size()); 374 EXPECT_EQ(0u, recorders().size());
303 } 375 }
304 376
305 } // namespace data_use_measurement 377 } // namespace data_use_measurement
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698