OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/chrome_content_browser_client.h" | 5 #include "chrome/browser/chrome_content_browser_client.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 #include <map> | 8 #include <map> |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "base/memory/ptr_util.h" | 14 #include "base/memory/ptr_util.h" |
15 #include "base/message_loop/message_loop.h" | 15 #include "base/message_loop/message_loop.h" |
16 #include "base/metrics/field_trial.h" | 16 #include "base/metrics/field_trial.h" |
17 #include "base/strings/stringprintf.h" | 17 #include "base/strings/stringprintf.h" |
18 #include "base/strings/utf_string_conversions.h" | 18 #include "base/strings/utf_string_conversions.h" |
19 #include "build/build_config.h" | 19 #include "build/build_config.h" |
20 #include "chrome/browser/browsing_data/browsing_data_filter_builder.h" | 20 #include "chrome/browser/browsing_data/browsing_data_filter_builder.h" |
21 #include "chrome/browser/browsing_data/browsing_data_helper.h" | 21 #include "chrome/browser/browsing_data/browsing_data_helper.h" |
22 #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" | 22 #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" |
23 #include "chrome/browser/browsing_data/browsing_data_remover_impl.h" | 23 #include "chrome/browser/browsing_data/browsing_data_remover_impl.h" |
24 #include "chrome/browser/browsing_data/origin_filter_builder.h" | |
25 #include "chrome/browser/browsing_data/registrable_domain_filter_builder.h" | |
26 #include "chrome/browser/search_engines/template_url_service_factory.h" | 24 #include "chrome/browser/search_engines/template_url_service_factory.h" |
27 #include "chrome/test/base/testing_profile.h" | 25 #include "chrome/test/base/testing_profile.h" |
28 #include "components/content_settings/core/browser/host_content_settings_map.h" | 26 #include "components/content_settings/core/browser/host_content_settings_map.h" |
29 #include "components/search_engines/template_url_service.h" | 27 #include "components/search_engines/template_url_service.h" |
30 #include "components/variations/entropy_provider.h" | 28 #include "components/variations/entropy_provider.h" |
31 #include "components/variations/variations_associated_data.h" | 29 #include "components/variations/variations_associated_data.h" |
32 #include "components/version_info/version_info.h" | 30 #include "components/version_info/version_info.h" |
33 #include "content/public/browser/navigation_controller.h" | 31 #include "content/public/browser/navigation_controller.h" |
34 #include "content/public/browser/navigation_entry.h" | 32 #include "content/public/browser/navigation_entry.h" |
35 #include "content/public/browser/web_contents.h" | 33 #include "content/public/browser/web_contents.h" |
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
360 } | 358 } |
361 | 359 |
362 void RemoveInternal(const base::Time& delete_begin, | 360 void RemoveInternal(const base::Time& delete_begin, |
363 const base::Time& delete_end, | 361 const base::Time& delete_end, |
364 int remove_mask, | 362 int remove_mask, |
365 int origin_type_mask, | 363 int origin_type_mask, |
366 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, | 364 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
367 BrowsingDataRemover::Observer* observer) override { | 365 BrowsingDataRemover::Observer* observer) override { |
368 actual_calls_.emplace_back(delete_begin, delete_end, remove_mask, | 366 actual_calls_.emplace_back(delete_begin, delete_end, remove_mask, |
369 origin_type_mask, std::move(filter_builder), | 367 origin_type_mask, std::move(filter_builder), |
370 UNKNOWN); | 368 true /* filter_is_important */); |
371 | 369 |
372 // |observer| is not recorded in |actual_calls_| to be compared with | 370 // |observer| is not recorded in |actual_calls_| to be compared with |
373 // expectations, because it's created internally in ClearSiteData() and | 371 // expectations, because it's created internally in ClearSiteData() and |
374 // it's unknown to this. However, it is tested implicitly, because we use | 372 // it's unknown to this. However, it is tested implicitly, because we use |
375 // it for the completion callback, so an incorrect |observer| will fail | 373 // it for the completion callback, so an incorrect |observer| will fail |
376 // the test by waiting for the callback forever. | 374 // the test by waiting for the callback forever. |
377 DCHECK(observer); | 375 DCHECK(observer); |
378 observer->OnBrowsingDataRemoverDone(); | 376 observer->OnBrowsingDataRemoverDone(); |
379 } | 377 } |
380 | 378 |
381 void ExpectCall( | 379 void ExpectCall( |
382 const base::Time& delete_begin, | 380 const base::Time& delete_begin, |
383 const base::Time& delete_end, | 381 const base::Time& delete_end, |
384 int remove_mask, | 382 int remove_mask, |
385 int origin_type_mask, | 383 int origin_type_mask, |
386 std::unique_ptr<RegistrableDomainFilterBuilder> filter_builder) { | 384 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder) { |
387 expected_calls_.emplace_back(delete_begin, delete_end, remove_mask, | 385 expected_calls_.emplace_back(delete_begin, delete_end, remove_mask, |
388 origin_type_mask, std::move(filter_builder), | 386 origin_type_mask, std::move(filter_builder), |
389 REGISTRABLE_DOMAIN_FILTER_BUILDER); | 387 true /* filter_is_important */); |
390 } | |
391 | |
392 void ExpectCall(const base::Time& delete_begin, | |
393 const base::Time& delete_end, | |
394 int remove_mask, | |
395 int origin_type_mask, | |
396 std::unique_ptr<OriginFilterBuilder> filter_builder) { | |
397 expected_calls_.emplace_back(delete_begin, delete_end, remove_mask, | |
398 origin_type_mask, std::move(filter_builder), | |
399 ORIGIN_FILTER_BUILDER); | |
400 } | 388 } |
401 | 389 |
402 void ExpectCallDontCareAboutFilterBuilder(const base::Time& delete_begin, | 390 void ExpectCallDontCareAboutFilterBuilder(const base::Time& delete_begin, |
403 const base::Time& delete_end, | 391 const base::Time& delete_end, |
404 int remove_mask, | 392 int remove_mask, |
405 int origin_type_mask) { | 393 int origin_type_mask) { |
406 expected_calls_.emplace_back(delete_begin, delete_end, remove_mask, | 394 expected_calls_.emplace_back(delete_begin, delete_end, remove_mask, |
407 origin_type_mask, | 395 origin_type_mask, |
408 std::unique_ptr<BrowsingDataFilterBuilder>(), | 396 std::unique_ptr<BrowsingDataFilterBuilder>(), |
409 DONT_CARE); | 397 false /* filter_is_important */); |
410 } | 398 } |
411 | 399 |
412 void VerifyAndClearExpectations() { | 400 void VerifyAndClearExpectations() { |
413 EXPECT_EQ(expected_calls_, actual_calls_); | 401 EXPECT_EQ(expected_calls_, actual_calls_); |
414 expected_calls_.clear(); | 402 expected_calls_.clear(); |
415 actual_calls_.clear(); | 403 actual_calls_.clear(); |
416 } | 404 } |
417 | 405 |
418 private: | 406 private: |
419 // Used to further specify the type and intention behind the passed | |
420 // std::unique_ptr<BrowsingDataFilterBuilder>. This is needed for comparison | |
421 // between the expected and actual call parameters. | |
422 enum FilterBuilderType { | |
423 REGISTRABLE_DOMAIN_FILTER_BUILDER, // RegistrableDomainFilterBuilder | |
424 ORIGIN_FILTER_BUILDER, // OriginFilterBuilder | |
425 UNKNOWN, // can't static_cast<> | |
426 DONT_CARE // don't have to compare for equality | |
427 }; | |
428 | |
429 class CallParameters { | 407 class CallParameters { |
430 public: | 408 public: |
431 CallParameters(const base::Time& delete_begin, | 409 CallParameters(const base::Time& delete_begin, |
432 const base::Time& delete_end, | 410 const base::Time& delete_end, |
433 int remove_mask, | 411 int remove_mask, |
434 int origin_type_mask, | 412 int origin_type_mask, |
435 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, | 413 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
436 FilterBuilderType type) | 414 bool filter_is_important) |
Mike West
2017/01/24 08:37:27
Nit: What does "important" mean? How about "should
msramek
2017/01/24 11:52:31
Yeah, good point. Let's call it "should_compare_fi
| |
437 : delete_begin_(delete_begin), | 415 : delete_begin_(delete_begin), |
438 delete_end_(delete_end), | 416 delete_end_(delete_end), |
439 remove_mask_(remove_mask), | 417 remove_mask_(remove_mask), |
440 origin_type_mask_(origin_type_mask), | 418 origin_type_mask_(origin_type_mask), |
441 filter_builder_(std::move(filter_builder)), | 419 filter_builder_(std::move(filter_builder)), |
442 type_(type) {} | 420 filter_is_important_(filter_is_important) {} |
443 ~CallParameters() {} | 421 ~CallParameters() {} |
444 | 422 |
445 bool operator==(const CallParameters& other) const { | 423 bool operator==(const CallParameters& other) const { |
446 const CallParameters& a = *this; | 424 const CallParameters& a = *this; |
447 const CallParameters& b = other; | 425 const CallParameters& b = other; |
448 | 426 |
449 if (a.delete_begin_ != b.delete_begin_ || | 427 if (a.delete_begin_ != b.delete_begin_ || |
450 a.delete_end_ != b.delete_end_ || | 428 a.delete_end_ != b.delete_end_ || |
451 a.remove_mask_ != b.remove_mask_ || | 429 a.remove_mask_ != b.remove_mask_ || |
452 a.origin_type_mask_ != b.origin_type_mask_) { | 430 a.origin_type_mask_ != b.origin_type_mask_) { |
453 return false; | 431 return false; |
454 } | 432 } |
455 | 433 |
456 if (a.type_ == DONT_CARE || b.type_ == DONT_CARE) | 434 if (!a.filter_is_important_ || !b.filter_is_important_) |
457 return true; | 435 return true; |
458 if (a.type_ == UNKNOWN && b.type_ == UNKNOWN) | 436 return *a.filter_builder_ == *b.filter_builder_; |
459 return false; | |
460 if (a.type_ != UNKNOWN && b.type_ != UNKNOWN && a.type_ != b.type_) | |
461 return false; | |
462 | |
463 FilterBuilderType resolved_type = | |
464 (a.type_ != UNKNOWN) ? a.type_ : b.type_; | |
465 | |
466 DCHECK(resolved_type == ORIGIN_FILTER_BUILDER || | |
467 resolved_type == REGISTRABLE_DOMAIN_FILTER_BUILDER); | |
468 | |
469 if (resolved_type == ORIGIN_FILTER_BUILDER) { | |
470 return *static_cast<OriginFilterBuilder*>(a.filter_builder_.get()) == | |
471 *static_cast<OriginFilterBuilder*>(b.filter_builder_.get()); | |
472 } else if (resolved_type == REGISTRABLE_DOMAIN_FILTER_BUILDER) { | |
473 return *static_cast<RegistrableDomainFilterBuilder*>( | |
474 a.filter_builder_.get()) == | |
475 *static_cast<RegistrableDomainFilterBuilder*>( | |
476 b.filter_builder_.get()); | |
477 } | |
478 | |
479 NOTREACHED(); | |
480 return false; | |
481 } | 437 } |
482 | 438 |
483 private: | 439 private: |
484 base::Time delete_begin_; | 440 base::Time delete_begin_; |
485 base::Time delete_end_; | 441 base::Time delete_end_; |
486 int remove_mask_; | 442 int remove_mask_; |
487 int origin_type_mask_; | 443 int origin_type_mask_; |
488 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder_; | 444 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder_; |
489 FilterBuilderType type_; | 445 bool filter_is_important_; |
490 }; | 446 }; |
491 | 447 |
492 std::list<CallParameters> actual_calls_; | 448 std::list<CallParameters> actual_calls_; |
493 std::list<CallParameters> expected_calls_; | 449 std::list<CallParameters> expected_calls_; |
494 }; | 450 }; |
495 | 451 |
496 // Tests for ChromeContentBrowserClient::ClearSiteData(). | 452 // Tests for ChromeContentBrowserClient::ClearSiteData(). |
497 class ChromeContentBrowserClientClearSiteDataTest : public testing::Test { | 453 class ChromeContentBrowserClientClearSiteDataTest : public testing::Test { |
498 public: | 454 public: |
499 void SetUp() override { | 455 void SetUp() override { |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
641 | 597 |
642 // Scheme and port don't matter. | 598 // Scheme and port don't matter. |
643 {"http://example.com", "example.com"}, | 599 {"http://example.com", "example.com"}, |
644 {"http://example.com:8080", "example.com"}, | 600 {"http://example.com:8080", "example.com"}, |
645 {"https://example.com:4433", "example.com"}, | 601 {"https://example.com:4433", "example.com"}, |
646 }; | 602 }; |
647 | 603 |
648 for (const TestCase& test_case : test_cases) { | 604 for (const TestCase& test_case : test_cases) { |
649 SCOPED_TRACE(test_case.origin); | 605 SCOPED_TRACE(test_case.origin); |
650 | 606 |
651 std::unique_ptr<RegistrableDomainFilterBuilder> | 607 std::unique_ptr<BrowsingDataFilterBuilder> |
652 registrable_domain_filter_builder(new RegistrableDomainFilterBuilder( | 608 registrable_domain_filter_builder(BrowsingDataFilterBuilder::Create( |
653 BrowsingDataFilterBuilder::WHITELIST)); | 609 BrowsingDataFilterBuilder::WHITELIST)); |
654 registrable_domain_filter_builder->AddRegisterableDomain(test_case.domain); | 610 registrable_domain_filter_builder->AddRegisterableDomain(test_case.domain); |
655 | 611 |
656 remover()->ExpectCall( | 612 remover()->ExpectCall( |
657 base::Time(), base::Time::Max(), | 613 base::Time(), base::Time::Max(), |
658 BrowsingDataRemover::REMOVE_COOKIES | | 614 BrowsingDataRemover::REMOVE_COOKIES | |
659 BrowsingDataRemover::REMOVE_CHANNEL_IDS | | 615 BrowsingDataRemover::REMOVE_CHANNEL_IDS | |
660 BrowsingDataRemover::REMOVE_PLUGIN_DATA, | 616 BrowsingDataRemover::REMOVE_PLUGIN_DATA, |
661 BrowsingDataHelper::ALL, std::move(registrable_domain_filter_builder)); | 617 BrowsingDataHelper::ALL, std::move(registrable_domain_filter_builder)); |
662 | 618 |
663 std::unique_ptr<OriginFilterBuilder> origin_filter_builder( | 619 std::unique_ptr<BrowsingDataFilterBuilder> origin_filter_builder( |
664 new OriginFilterBuilder(BrowsingDataFilterBuilder::WHITELIST)); | 620 BrowsingDataFilterBuilder::Create( |
621 BrowsingDataFilterBuilder::WHITELIST)); | |
665 origin_filter_builder->AddOrigin(url::Origin(GURL(test_case.origin))); | 622 origin_filter_builder->AddOrigin(url::Origin(GURL(test_case.origin))); |
666 | 623 |
667 remover()->ExpectCall( | 624 remover()->ExpectCall( |
668 base::Time(), base::Time::Max(), | 625 base::Time(), base::Time::Max(), |
669 BrowsingDataRemover::REMOVE_CACHE, BrowsingDataHelper::ALL, | 626 BrowsingDataRemover::REMOVE_CACHE, BrowsingDataHelper::ALL, |
670 std::move(origin_filter_builder)); | 627 std::move(origin_filter_builder)); |
671 | 628 |
672 SetClearingFinished(false); | 629 SetClearingFinished(false); |
673 client.ClearSiteData( | 630 client.ClearSiteData( |
674 profile(), url::Origin(GURL(test_case.origin)), true /* cookies */, | 631 profile(), url::Origin(GURL(test_case.origin)), true /* cookies */, |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
723 client.ClearSiteData( | 680 client.ClearSiteData( |
724 profile(), origin, true /* cookies */, false /* storage */, | 681 profile(), origin, true /* cookies */, false /* storage */, |
725 true /* cache */, | 682 true /* cache */, |
726 base::Bind( | 683 base::Bind( |
727 &ChromeContentBrowserClientClearSiteDataTest::SetClearingFinished, | 684 &ChromeContentBrowserClientClearSiteDataTest::SetClearingFinished, |
728 base::Unretained(this), true)); | 685 base::Unretained(this), true)); |
729 EXPECT_TRUE(IsClearingFinished()); | 686 EXPECT_TRUE(IsClearingFinished()); |
730 } | 687 } |
731 | 688 |
732 } // namespace | 689 } // namespace |
OLD | NEW |