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

Side by Side Diff: chrome/browser/chrome_content_browser_client_unittest.cc

Issue 2647683002: Consolidate Origin- and RegistrableDomain- FilterBuilder into one class (Closed)
Patch Set: Fix memory leak. Created 3 years, 11 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 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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698