| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |