OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/android/data_usage/external_data_use_observer.h" | 5 #include "chrome/browser/android/data_usage/external_data_use_observer.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 } | 240 } |
241 | 241 |
242 // Tests that at most one data use request is submitted. | 242 // Tests that at most one data use request is submitted. |
243 TEST_F(ExternalDataUseObserverTest, AtMostOneDataUseSubmitRequest) { | 243 TEST_F(ExternalDataUseObserverTest, AtMostOneDataUseSubmitRequest) { |
244 const std::string label("label"); | 244 const std::string label("label"); |
245 | 245 |
246 std::vector<std::string> url_regexes; | 246 std::vector<std::string> url_regexes; |
247 url_regexes.push_back( | 247 url_regexes.push_back( |
248 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); | 248 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); |
249 | 249 |
250 external_data_use_observer()->FetchMatchingRulesCallbackOnIOThread( | 250 external_data_use_observer()->FetchMatchingRulesDoneOnIOThread( |
251 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, | 251 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, |
252 std::vector<std::string>(url_regexes.size(), label)); | 252 std::vector<std::string>(url_regexes.size(), label)); |
253 EXPECT_EQ(0U, external_data_use_observer()->buffered_data_reports_.size()); | 253 EXPECT_EQ(0U, external_data_use_observer()->buffered_data_reports_.size()); |
254 EXPECT_FALSE(external_data_use_observer()->submit_data_report_pending_); | 254 EXPECT_FALSE(external_data_use_observer()->submit_data_report_pending_); |
255 EXPECT_FALSE(external_data_use_observer()->matching_rules_fetch_pending_); | 255 EXPECT_FALSE(external_data_use_observer()->matching_rules_fetch_pending_); |
256 | 256 |
257 std::vector<const data_usage::DataUse*> data_use_sequence; | 257 std::vector<const data_usage::DataUse*> data_use_sequence; |
258 data_usage::DataUse data_use_foo( | 258 data_usage::DataUse data_use_foo( |
259 GURL("http://www.google.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, | 259 GURL("http://www.google.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, |
260 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_foo", | 260 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_foo", |
(...skipping 11 matching lines...) Expand all Loading... |
272 } | 272 } |
273 | 273 |
274 // Verifies that buffer size does not exceed the specified limit. | 274 // Verifies that buffer size does not exceed the specified limit. |
275 TEST_F(ExternalDataUseObserverTest, BufferSize) { | 275 TEST_F(ExternalDataUseObserverTest, BufferSize) { |
276 const std::string label("label"); | 276 const std::string label("label"); |
277 | 277 |
278 std::vector<std::string> url_regexes; | 278 std::vector<std::string> url_regexes; |
279 url_regexes.push_back( | 279 url_regexes.push_back( |
280 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); | 280 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); |
281 | 281 |
282 external_data_use_observer()->FetchMatchingRulesCallbackOnIOThread( | 282 external_data_use_observer()->FetchMatchingRulesDoneOnIOThread( |
283 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, | 283 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, |
284 std::vector<std::string>(url_regexes.size(), label)); | 284 std::vector<std::string>(url_regexes.size(), label)); |
285 | 285 |
286 const size_t max_buffer_size = ExternalDataUseObserver::kMaxBufferSize; | 286 const size_t max_buffer_size = ExternalDataUseObserver::kMaxBufferSize; |
287 const int bytes_downloaded = 1000; | 287 const int bytes_downloaded = 1000; |
288 const int bytes_uploaded = 100; | 288 const int bytes_uploaded = 100; |
289 | 289 |
290 ScopedVector<data_usage::DataUse> data_use_vector; | 290 ScopedVector<data_usage::DataUse> data_use_vector; |
291 // Push more entries than the buffer size. Buffer size should not be exceeded. | 291 // Push more entries than the buffer size. Buffer size should not be exceeded. |
292 for (size_t i = 0; i < max_buffer_size * 5; ++i) { | 292 for (size_t i = 0; i < max_buffer_size * 5; ++i) { |
(...skipping 24 matching lines...) Expand all Loading... |
317 } | 317 } |
318 | 318 |
319 // Tests that buffered data use reports are merged correctly. | 319 // Tests that buffered data use reports are merged correctly. |
320 TEST_F(ExternalDataUseObserverTest, ReportsMergedCorrectly) { | 320 TEST_F(ExternalDataUseObserverTest, ReportsMergedCorrectly) { |
321 const std::string label("label"); | 321 const std::string label("label"); |
322 | 322 |
323 std::vector<std::string> url_regexes; | 323 std::vector<std::string> url_regexes; |
324 url_regexes.push_back( | 324 url_regexes.push_back( |
325 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); | 325 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); |
326 | 326 |
327 external_data_use_observer()->FetchMatchingRulesCallbackOnIOThread( | 327 external_data_use_observer()->FetchMatchingRulesDoneOnIOThread( |
328 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, | 328 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, |
329 std::vector<std::string>(url_regexes.size(), label)); | 329 std::vector<std::string>(url_regexes.size(), label)); |
330 | 330 |
331 const size_t num_iterations = ExternalDataUseObserver::kMaxBufferSize * 5; | 331 const size_t num_iterations = ExternalDataUseObserver::kMaxBufferSize * 5; |
332 | 332 |
333 ScopedVector<data_usage::DataUse> data_use_vector; | 333 ScopedVector<data_usage::DataUse> data_use_vector; |
334 for (size_t i = 0; i < num_iterations; ++i) { | 334 for (size_t i = 0; i < num_iterations; ++i) { |
335 scoped_ptr<data_usage::DataUse> data_use_foo(new data_usage::DataUse( | 335 scoped_ptr<data_usage::DataUse> data_use_foo(new data_usage::DataUse( |
336 GURL("http://www.google.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, | 336 GURL("http://www.google.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, |
337 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_foo", | 337 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_foo", |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 } | 385 } |
386 | 386 |
387 // Tests that timestamps of merged reports is correct. | 387 // Tests that timestamps of merged reports is correct. |
388 TEST_F(ExternalDataUseObserverTest, TimestampsMergedCorrectly) { | 388 TEST_F(ExternalDataUseObserverTest, TimestampsMergedCorrectly) { |
389 const std::string label("label"); | 389 const std::string label("label"); |
390 | 390 |
391 std::vector<std::string> url_regexes; | 391 std::vector<std::string> url_regexes; |
392 url_regexes.push_back( | 392 url_regexes.push_back( |
393 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); | 393 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); |
394 | 394 |
395 external_data_use_observer()->FetchMatchingRulesCallbackOnIOThread( | 395 external_data_use_observer()->FetchMatchingRulesDoneOnIOThread( |
396 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, | 396 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, |
397 std::vector<std::string>(url_regexes.size(), label)); | 397 std::vector<std::string>(url_regexes.size(), label)); |
398 | 398 |
399 const size_t num_iterations = ExternalDataUseObserver::kMaxBufferSize * 5; | 399 const size_t num_iterations = ExternalDataUseObserver::kMaxBufferSize * 5; |
400 | 400 |
401 ScopedVector<data_usage::DataUse> data_use_vector; | 401 ScopedVector<data_usage::DataUse> data_use_vector; |
402 for (size_t i = 0; i < num_iterations; ++i) { | 402 for (size_t i = 0; i < num_iterations; ++i) { |
403 scoped_ptr<data_usage::DataUse> data_use_foo(new data_usage::DataUse( | 403 scoped_ptr<data_usage::DataUse> data_use_foo(new data_usage::DataUse( |
404 GURL("http://www.google.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, | 404 GURL("http://www.google.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, |
405 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_foo", 1, 2)); | 405 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, "mccmnc_foo", 1, 2)); |
(...skipping 29 matching lines...) Expand all Loading... |
435 "http://www[.]foo[.]com/#q=.*|https://www[.]foo[.]com/#q=.*"); | 435 "http://www[.]foo[.]com/#q=.*|https://www[.]foo[.]com/#q=.*"); |
436 url_regexes.push_back( | 436 url_regexes.push_back( |
437 "http://www[.]bar[.]com/#q=.*|https://www[.]bar[.]com/#q=.*"); | 437 "http://www[.]bar[.]com/#q=.*|https://www[.]bar[.]com/#q=.*"); |
438 | 438 |
439 std::vector<std::string> labels; | 439 std::vector<std::string> labels; |
440 const std::string label_foo("label_foo"); | 440 const std::string label_foo("label_foo"); |
441 const std::string label_bar("label_bar"); | 441 const std::string label_bar("label_bar"); |
442 labels.push_back(label_foo); | 442 labels.push_back(label_foo); |
443 labels.push_back(label_bar); | 443 labels.push_back(label_bar); |
444 | 444 |
445 external_data_use_observer()->FetchMatchingRulesCallbackOnIOThread( | 445 external_data_use_observer()->FetchMatchingRulesDoneOnIOThread( |
446 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, | 446 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, |
447 labels); | 447 labels); |
448 EXPECT_EQ(0U, external_data_use_observer()->buffered_data_reports_.size()); | 448 EXPECT_EQ(0U, external_data_use_observer()->buffered_data_reports_.size()); |
449 EXPECT_FALSE(external_data_use_observer()->submit_data_report_pending_); | 449 EXPECT_FALSE(external_data_use_observer()->submit_data_report_pending_); |
450 EXPECT_FALSE(external_data_use_observer()->matching_rules_fetch_pending_); | 450 EXPECT_FALSE(external_data_use_observer()->matching_rules_fetch_pending_); |
451 | 451 |
452 // Check |label_foo| matching rule. | 452 // Check |label_foo| matching rule. |
453 std::vector<const data_usage::DataUse*> data_use_sequence; | 453 std::vector<const data_usage::DataUse*> data_use_sequence; |
454 data_usage::DataUse data_foo_1( | 454 data_usage::DataUse data_foo_1( |
455 GURL("http://www.foo.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, | 455 GURL("http://www.foo.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
514 } | 514 } |
515 | 515 |
516 // Tests if matching rules are fetched periodically. | 516 // Tests if matching rules are fetched periodically. |
517 TEST_F(ExternalDataUseObserverTest, PeriodicFetchMatchingRules) { | 517 TEST_F(ExternalDataUseObserverTest, PeriodicFetchMatchingRules) { |
518 const std::string label("label"); | 518 const std::string label("label"); |
519 | 519 |
520 std::vector<std::string> url_regexes; | 520 std::vector<std::string> url_regexes; |
521 url_regexes.push_back( | 521 url_regexes.push_back( |
522 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); | 522 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); |
523 | 523 |
524 external_data_use_observer()->FetchMatchingRulesCallbackOnIOThread( | 524 external_data_use_observer()->FetchMatchingRulesDoneOnIOThread( |
525 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, | 525 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, |
526 std::vector<std::string>(url_regexes.size(), label)); | 526 std::vector<std::string>(url_regexes.size(), label)); |
527 | 527 |
528 EXPECT_FALSE(external_data_use_observer()->matching_rules_fetch_pending_); | 528 EXPECT_FALSE(external_data_use_observer()->matching_rules_fetch_pending_); |
529 EXPECT_FALSE( | 529 EXPECT_FALSE( |
530 external_data_use_observer()->last_matching_rules_fetch_time_.is_null()); | 530 external_data_use_observer()->last_matching_rules_fetch_time_.is_null()); |
531 | 531 |
532 std::vector<const data_usage::DataUse*> data_use_sequence; | 532 std::vector<const data_usage::DataUse*> data_use_sequence; |
533 data_usage::DataUse data_use_foo( | 533 data_usage::DataUse data_use_foo( |
534 GURL("http://www.google.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, | 534 GURL("http://www.google.com/#q=abc"), base::TimeTicks::Now(), GURL(), 0, |
(...skipping 20 matching lines...) Expand all Loading... |
555 | 555 |
556 // Tests if data use reports are sent only after the total bytes send/received | 556 // Tests if data use reports are sent only after the total bytes send/received |
557 // across all buffered reports have reached the specified threshold. | 557 // across all buffered reports have reached the specified threshold. |
558 TEST_F(ExternalDataUseObserverTest, BufferDataUseReports) { | 558 TEST_F(ExternalDataUseObserverTest, BufferDataUseReports) { |
559 const std::string label("label"); | 559 const std::string label("label"); |
560 | 560 |
561 std::vector<std::string> url_regexes; | 561 std::vector<std::string> url_regexes; |
562 url_regexes.push_back( | 562 url_regexes.push_back( |
563 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); | 563 "http://www[.]google[.]com/#q=.*|https://www[.]google[.]com/#q=.*"); |
564 | 564 |
565 external_data_use_observer()->FetchMatchingRulesCallbackOnIOThread( | 565 external_data_use_observer()->FetchMatchingRulesDoneOnIOThread( |
566 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, | 566 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, |
567 std::vector<std::string>(url_regexes.size(), label)); | 567 std::vector<std::string>(url_regexes.size(), label)); |
568 | 568 |
569 // This tests reports 1024 bytes in each loop iteration. For the test to work | 569 // This tests reports 1024 bytes in each loop iteration. For the test to work |
570 // properly, |data_use_report_min_bytes_| should be a multiple of 1024. | 570 // properly, |data_use_report_min_bytes_| should be a multiple of 1024. |
571 ASSERT_EQ(0, external_data_use_observer()->data_use_report_min_bytes_ % 1024); | 571 ASSERT_EQ(0, external_data_use_observer()->data_use_report_min_bytes_ % 1024); |
572 | 572 |
573 const size_t num_iterations = | 573 const size_t num_iterations = |
574 external_data_use_observer()->data_use_report_min_bytes_ / 1024; | 574 external_data_use_observer()->data_use_report_min_bytes_ / 1024; |
575 | 575 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
636 external_data_use_obsever_with_variations | 636 external_data_use_obsever_with_variations |
637 ->fetch_matching_rules_duration_); | 637 ->fetch_matching_rules_duration_); |
638 EXPECT_EQ( | 638 EXPECT_EQ( |
639 data_use_report_min_bytes, | 639 data_use_report_min_bytes, |
640 external_data_use_obsever_with_variations->data_use_report_min_bytes_); | 640 external_data_use_obsever_with_variations->data_use_report_min_bytes_); |
641 } | 641 } |
642 | 642 |
643 } // namespace android | 643 } // namespace android |
644 | 644 |
645 } // namespace chrome | 645 } // namespace chrome |
OLD | NEW |