| 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 /* should_compare_filter */); |
| 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 /* should_compare_filter */); |
| 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 /* should_compare_filter */); |
| 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 should_compare_filter) |
| 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 should_compare_filter_(should_compare_filter) {} |
| 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.should_compare_filter_ || !b.should_compare_filter_) |
| 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 should_compare_filter_; |
| 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 |