Index: chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc |
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc |
index 9b26180312a80bf44653210c5dd9f2fee490453b..046fdf96fcdd7eaa5dcab17766505ef091575302 100644 |
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc |
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc |
@@ -63,6 +63,8 @@ |
#include "content/public/test/test_utils.h" |
#include "net/cookies/cookie_store.h" |
#include "net/http/http_transaction_factory.h" |
+#include "net/reporting/reporting_browsing_data_remover.h" |
+#include "net/reporting/reporting_service.h" |
#include "net/url_request/url_request_context.h" |
#include "net/url_request/url_request_context_getter.h" |
#include "third_party/skia/include/core/SkBitmap.h" |
@@ -840,6 +842,118 @@ class RemoveAutofillTester : public autofill::PersonalDataManagerObserver { |
DISALLOW_COPY_AND_ASSIGN(RemoveAutofillTester); |
}; |
+class MockReportingService : public net::ReportingService { |
+ public: |
+ MockReportingService() {} |
+ |
+ // net::ReportingService implementation: |
+ |
+ ~MockReportingService() override {} |
+ |
+ void QueueReport(const GURL& url, |
+ const std::string& group, |
+ const std::string& type, |
+ std::unique_ptr<const base::Value> body) override { |
+ NOTREACHED(); |
+ } |
+ |
+ void ProcessHeader(const GURL& url, |
+ const std::string& header_value) override { |
+ NOTREACHED(); |
+ } |
+ |
+ void RemoveBrowsingData( |
+ int data_type_mask, |
+ base::Callback<bool(const GURL&)> origin_filter) override { |
+ ++remove_calls_; |
+ last_data_type_mask_ = data_type_mask; |
+ last_origin_filter_ = origin_filter; |
+ } |
+ |
+ int remove_calls() const { return remove_calls_; } |
+ int last_data_type_mask() const { return last_data_type_mask_; } |
+ base::Callback<bool(const GURL&)> last_origin_filter() const { |
+ return last_origin_filter_; |
+ } |
+ |
+ private: |
+ int remove_calls_ = 0; |
+ int last_data_type_mask_ = 0; |
+ base::Callback<bool(const GURL&)> last_origin_filter_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MockReportingService); |
+}; |
+ |
+class ClearReportingCacheTester { |
+ public: |
+ ClearReportingCacheTester(TestingProfile* profile, bool create_service) |
+ : profile_(profile) { |
+ if (create_service) |
+ service_ = base::MakeUnique<MockReportingService>(); |
+ |
+ base::RunLoop run_loop; |
+ content::BrowserThread::PostTaskAndReply( |
+ content::BrowserThread::IO, FROM_HERE, |
+ base::Bind(&ClearReportingCacheTester::SetUpOnIOThread, |
+ base::Unretained(this)), |
+ run_loop.QuitClosure()); |
+ run_loop.Run(); |
+ } |
+ |
+ void SetUpOnIOThread() { |
+ net::URLRequestContext* request_context = |
+ profile_->GetRequestContext()->GetURLRequestContext(); |
+ old_service_ = request_context->reporting_service(); |
+ request_context->set_reporting_service(service_.get()); |
+ } |
+ |
+ ~ClearReportingCacheTester() { |
+ base::RunLoop run_loop; |
+ content::BrowserThread::PostTaskAndReply( |
+ content::BrowserThread::IO, FROM_HERE, |
+ base::Bind(&ClearReportingCacheTester::TearDownOnIOThread, |
+ base::Unretained(this)), |
+ run_loop.QuitClosure()); |
+ run_loop.Run(); |
+ } |
+ |
+ void TearDownOnIOThread() { |
+ net::URLRequestContext* request_context = |
+ profile_->GetRequestContext()->GetURLRequestContext(); |
+ DCHECK_EQ(service_.get(), request_context->reporting_service()); |
+ request_context->set_reporting_service(old_service_); |
+ } |
+ |
+ void GetMockInfo(int* remove_calls_out, |
+ int* last_data_type_mask_out, |
+ base::Callback<bool(const GURL&)>* last_origin_filter_out) { |
+ DCHECK_NE(nullptr, service_.get()); |
+ |
+ base::RunLoop run_loop; |
+ content::BrowserThread::PostTaskAndReply( |
+ content::BrowserThread::IO, FROM_HERE, |
+ base::Bind(&ClearReportingCacheTester::GetMockInfoOnIOThread, |
+ base::Unretained(this), remove_calls_out, |
+ last_data_type_mask_out, last_origin_filter_out), |
+ run_loop.QuitClosure()); |
+ run_loop.Run(); |
+ } |
+ |
+ void GetMockInfoOnIOThread( |
+ int* remove_calls_out, |
+ int* last_data_type_mask_out, |
+ base::Callback<bool(const GURL&)>* last_origin_filter_out) { |
+ *remove_calls_out = service_->remove_calls(); |
+ *last_data_type_mask_out = service_->last_data_type_mask(); |
+ *last_origin_filter_out = service_->last_origin_filter(); |
+ } |
+ |
+ private: |
+ TestingProfile* profile_; |
+ std::unique_ptr<MockReportingService> service_; |
+ net::ReportingService* old_service_; |
+}; |
+ |
// Test Class ----------------------------------------------------------------- |
class ChromeBrowsingDataRemoverDelegateTest : public testing::Test { |
@@ -1995,3 +2109,153 @@ TEST_F(ChromeBrowsingDataRemoverDelegateTest, OriginTypeMasksNoPolicy) { |
EXPECT_FALSE(Match(kOriginDevTools, kExtension, nullptr)); |
#endif |
} |
+ |
+TEST_F(ChromeBrowsingDataRemoverDelegateTest, ReportingCache_NoService) { |
+ ClearReportingCacheTester tester(GetProfile(), false); |
+ |
+ BlockUntilBrowsingDataRemoved( |
+ base::Time(), base::Time::Max(), |
+ BrowsingDataRemover::DATA_TYPE_COOKIES | |
+ ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, |
+ true); |
+ |
+ // Nothing to check, since there's no mock service; we're just making sure |
+ // nothing crashes without a service. |
+} |
+ |
+TEST_F(ChromeBrowsingDataRemoverDelegateTest, ReportingCache_Cookies) { |
+ ClearReportingCacheTester tester(GetProfile(), true); |
+ |
+ BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), |
+ BrowsingDataRemover::DATA_TYPE_COOKIES, true); |
+ |
+ int remove_count; |
+ int data_type_mask; |
+ base::Callback<bool(const GURL&)> origin_filter; |
+ tester.GetMockInfo(&remove_count, &data_type_mask, &origin_filter); |
+ |
+ EXPECT_EQ(1, remove_count); |
+ EXPECT_EQ(net::ReportingBrowsingDataRemover::DATA_TYPE_CLIENTS, |
+ data_type_mask); |
+ EXPECT_TRUE(ProbablySameFilters(BrowsingDataFilterBuilder::BuildNoopFilter(), |
+ origin_filter)); |
+} |
+ |
+TEST_F(ChromeBrowsingDataRemoverDelegateTest, |
+ ReportingCache_Cookies_WithFilter) { |
+ ClearReportingCacheTester tester(GetProfile(), true); |
+ |
+ std::unique_ptr<BrowsingDataFilterBuilder> builder( |
+ BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::WHITELIST)); |
+ builder->AddRegisterableDomain(kTestRegisterableDomain1); |
+ |
+ BlockUntilOriginDataRemoved(base::Time(), base::Time::Max(), |
+ BrowsingDataRemover::DATA_TYPE_COOKIES, |
+ builder->Copy()); |
+ |
+ int remove_count; |
+ int data_type_mask; |
+ base::Callback<bool(const GURL&)> origin_filter; |
+ tester.GetMockInfo(&remove_count, &data_type_mask, &origin_filter); |
+ |
+ EXPECT_EQ(1, remove_count); |
+ EXPECT_EQ(net::ReportingBrowsingDataRemover::DATA_TYPE_CLIENTS, |
+ data_type_mask); |
+ EXPECT_TRUE( |
+ ProbablySameFilters(builder->BuildGeneralFilter(), origin_filter)); |
+} |
+ |
+TEST_F(ChromeBrowsingDataRemoverDelegateTest, ReportingCache_History) { |
+ ClearReportingCacheTester tester(GetProfile(), true); |
+ |
+ BlockUntilBrowsingDataRemoved( |
+ base::Time(), base::Time::Max(), |
+ ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, true); |
+ |
+ int remove_count; |
+ int data_type_mask; |
+ base::Callback<bool(const GURL&)> origin_filter; |
+ tester.GetMockInfo(&remove_count, &data_type_mask, &origin_filter); |
+ |
+ EXPECT_EQ(1, remove_count); |
+ EXPECT_EQ(net::ReportingBrowsingDataRemover::DATA_TYPE_REPORTS, |
+ data_type_mask); |
+ EXPECT_TRUE(ProbablySameFilters(BrowsingDataFilterBuilder::BuildNoopFilter(), |
+ origin_filter)); |
+} |
+ |
+// Disabled because history is not iterable yet. |
+TEST_F(ChromeBrowsingDataRemoverDelegateTest, |
+ DISABLED_ReportingCache_History_WithFilter) { |
+ ClearReportingCacheTester tester(GetProfile(), true); |
+ |
+ std::unique_ptr<BrowsingDataFilterBuilder> builder( |
+ BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::WHITELIST)); |
+ builder->AddRegisterableDomain(kTestRegisterableDomain1); |
+ |
+ BlockUntilOriginDataRemoved( |
+ base::Time(), base::Time::Max(), |
+ ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, builder->Copy()); |
+ |
+ int remove_count; |
+ int data_type_mask; |
+ base::Callback<bool(const GURL&)> origin_filter; |
+ tester.GetMockInfo(&remove_count, &data_type_mask, &origin_filter); |
+ |
+ EXPECT_EQ(1, remove_count); |
+ EXPECT_EQ(net::ReportingBrowsingDataRemover::DATA_TYPE_REPORTS, |
+ data_type_mask); |
+ EXPECT_TRUE( |
+ ProbablySameFilters(builder->BuildGeneralFilter(), origin_filter)); |
+} |
+ |
+TEST_F(ChromeBrowsingDataRemoverDelegateTest, |
+ ReportingCache_CookiesAndHistory) { |
+ ClearReportingCacheTester tester(GetProfile(), true); |
+ |
+ BlockUntilBrowsingDataRemoved( |
+ base::Time(), base::Time::Max(), |
+ BrowsingDataRemover::DATA_TYPE_COOKIES | |
+ ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, |
+ true); |
+ |
+ int remove_count; |
+ int data_type_mask; |
+ base::Callback<bool(const GURL&)> origin_filter; |
+ tester.GetMockInfo(&remove_count, &data_type_mask, &origin_filter); |
+ |
+ EXPECT_EQ(1, remove_count); |
+ EXPECT_EQ(net::ReportingBrowsingDataRemover::DATA_TYPE_REPORTS | |
+ net::ReportingBrowsingDataRemover::DATA_TYPE_CLIENTS, |
+ data_type_mask); |
+ EXPECT_TRUE(ProbablySameFilters(BrowsingDataFilterBuilder::BuildNoopFilter(), |
+ origin_filter)); |
+} |
+ |
+// Disabled because history is not iterable yet. |
shivanisha
2017/04/20 18:21:52
Is iterable history something that is being worked
Julia Tuttle
2017/04/21 13:34:53
I have no idea -- I just know that the similar Dom
|
+TEST_F(ChromeBrowsingDataRemoverDelegateTest, |
+ DISABLED_ReportingCache_CookiesAndHistory_WithFilter) { |
+ ClearReportingCacheTester tester(GetProfile(), true); |
+ |
+ std::unique_ptr<BrowsingDataFilterBuilder> builder( |
+ BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::WHITELIST)); |
+ builder->AddRegisterableDomain(kTestRegisterableDomain1); |
+ |
+ BlockUntilOriginDataRemoved( |
+ base::Time(), base::Time::Max(), |
+ BrowsingDataRemover::DATA_TYPE_COOKIES | |
+ ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, |
+ builder->Copy()); |
+ |
+ int remove_count; |
+ int data_type_mask; |
+ base::Callback<bool(const GURL&)> origin_filter; |
+ tester.GetMockInfo(&remove_count, &data_type_mask, &origin_filter); |
+ |
+ EXPECT_EQ(1, remove_count); |
+ EXPECT_EQ(net::ReportingBrowsingDataRemover::DATA_TYPE_REPORTS | |
+ net::ReportingBrowsingDataRemover::DATA_TYPE_CLIENTS, |
+ data_type_mask); |
+ EXPECT_TRUE( |
+ ProbablySameFilters(builder->BuildGeneralFilter(), origin_filter)); |
+} |