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

Side by Side Diff: chrome/browser/browsing_data/browsing_data_remover_unittest.cc

Issue 1741123002: Add removal filter support for Cookies, Storage, and Content Settings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 4 years, 9 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/browsing_data/browsing_data_remover.h" 5 #include "chrome/browser/browsing_data/browsing_data_remover.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <set> 10 #include <set>
(...skipping 11 matching lines...) Expand all
22 #include "base/run_loop.h" 22 #include "base/run_loop.h"
23 #include "base/strings/utf_string_conversions.h" 23 #include "base/strings/utf_string_conversions.h"
24 #include "base/task/cancelable_task_tracker.h" 24 #include "base/task/cancelable_task_tracker.h"
25 #include "build/build_config.h" 25 #include "build/build_config.h"
26 #include "chrome/browser/autofill/personal_data_manager_factory.h" 26 #include "chrome/browser/autofill/personal_data_manager_factory.h"
27 #include "chrome/browser/bookmarks/bookmark_model_factory.h" 27 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
28 #include "chrome/browser/browsing_data/browsing_data_helper.h" 28 #include "chrome/browser/browsing_data/browsing_data_helper.h"
29 #include "chrome/browser/browsing_data/browsing_data_remover_factory.h" 29 #include "chrome/browser/browsing_data/browsing_data_remover_factory.h"
30 #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h" 30 #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h"
31 #include "chrome/browser/browsing_data/origin_filter_builder.h" 31 #include "chrome/browser/browsing_data/origin_filter_builder.h"
32 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
32 #include "chrome/browser/domain_reliability/service_factory.h" 33 #include "chrome/browser/domain_reliability/service_factory.h"
33 #include "chrome/browser/download/chrome_download_manager_delegate.h" 34 #include "chrome/browser/download/chrome_download_manager_delegate.h"
34 #include "chrome/browser/favicon/favicon_service_factory.h" 35 #include "chrome/browser/favicon/favicon_service_factory.h"
35 #include "chrome/browser/history/history_service_factory.h" 36 #include "chrome/browser/history/history_service_factory.h"
36 #include "chrome/browser/password_manager/password_store_factory.h" 37 #include "chrome/browser/password_manager/password_store_factory.h"
37 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 38 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
38 #include "chrome/common/pref_names.h" 39 #include "chrome/common/pref_names.h"
39 #include "chrome/test/base/testing_browser_process.h" 40 #include "chrome/test/base/testing_browser_process.h"
40 #include "chrome/test/base/testing_profile.h" 41 #include "chrome/test/base/testing_profile.h"
41 #include "components/autofill/core/browser/autofill_profile.h" 42 #include "components/autofill/core/browser/autofill_profile.h"
42 #include "components/autofill/core/browser/autofill_test_utils.h" 43 #include "components/autofill/core/browser/autofill_test_utils.h"
43 #include "components/autofill/core/browser/credit_card.h" 44 #include "components/autofill/core/browser/credit_card.h"
44 #include "components/autofill/core/browser/personal_data_manager.h" 45 #include "components/autofill/core/browser/personal_data_manager.h"
45 #include "components/autofill/core/browser/personal_data_manager_observer.h" 46 #include "components/autofill/core/browser/personal_data_manager_observer.h"
46 #include "components/bookmarks/browser/bookmark_model.h" 47 #include "components/bookmarks/browser/bookmark_model.h"
47 #include "components/bookmarks/test/bookmark_test_helpers.h" 48 #include "components/bookmarks/test/bookmark_test_helpers.h"
49 #include "components/content_settings/core/browser/host_content_settings_map.h"
50 #include "components/content_settings/core/common/content_settings.h"
51 #include "components/content_settings/core/common/content_settings_pattern.h"
48 #include "components/domain_reliability/clear_mode.h" 52 #include "components/domain_reliability/clear_mode.h"
49 #include "components/domain_reliability/monitor.h" 53 #include "components/domain_reliability/monitor.h"
50 #include "components/domain_reliability/service.h" 54 #include "components/domain_reliability/service.h"
51 #include "components/favicon/core/favicon_service.h" 55 #include "components/favicon/core/favicon_service.h"
52 #include "components/history/core/browser/history_service.h" 56 #include "components/history/core/browser/history_service.h"
53 #include "components/omnibox/browser/omnibox_pref_names.h" 57 #include "components/omnibox/browser/omnibox_pref_names.h"
54 #include "components/password_manager/core/browser/mock_password_store.h" 58 #include "components/password_manager/core/browser/mock_password_store.h"
55 #include "components/password_manager/core/browser/password_manager_test_utils.h " 59 #include "components/password_manager/core/browser/password_manager_test_utils.h "
56 #include "components/password_manager/core/browser/password_store_consumer.h" 60 #include "components/password_manager/core/browser/password_store_consumer.h"
57 #include "components/prefs/testing_pref_service.h" 61 #include "components/prefs/testing_pref_service.h"
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 137
134 const base::FilePath::CharType kDomStorageOrigin2[] = 138 const base::FilePath::CharType kDomStorageOrigin2[] =
135 FILE_PATH_LITERAL("http_host2_1.localstorage"); 139 FILE_PATH_LITERAL("http_host2_1.localstorage");
136 140
137 const base::FilePath::CharType kDomStorageOrigin3[] = 141 const base::FilePath::CharType kDomStorageOrigin3[] =
138 FILE_PATH_LITERAL("http_host3_1.localstorage"); 142 FILE_PATH_LITERAL("http_host3_1.localstorage");
139 143
140 const base::FilePath::CharType kDomStorageExt[] = FILE_PATH_LITERAL( 144 const base::FilePath::CharType kDomStorageExt[] = FILE_PATH_LITERAL(
141 "chrome-extension_abcdefghijklmnopqrstuvwxyz_0.localstorage"); 145 "chrome-extension_abcdefghijklmnopqrstuvwxyz_0.localstorage");
142 146
147 bool MatchPrimaryPattern(const ContentSettingsPattern& expected_primary,
148 const ContentSettingsPattern& primary_pattern,
149 const ContentSettingsPattern& secondary_pattern) {
150 return expected_primary == primary_pattern;
151 }
152
143 #if defined(OS_CHROMEOS) 153 #if defined(OS_CHROMEOS)
144 void FakeDBusCall(const chromeos::BoolDBusMethodCallback& callback) { 154 void FakeDBusCall(const chromeos::BoolDBusMethodCallback& callback) {
145 base::MessageLoop::current()->PostTask( 155 base::MessageLoop::current()->PostTask(
146 FROM_HERE, 156 FROM_HERE,
147 base::Bind(callback, chromeos::DBUS_METHOD_CALL_SUCCESS, true)); 157 base::Bind(callback, chromeos::DBUS_METHOD_CALL_SUCCESS, true));
148 } 158 }
149 #endif 159 #endif
150 160
151 struct StoragePartitionRemovalData { 161 struct StoragePartitionRemovalData {
152 uint32_t remove_mask = 0; 162 uint32_t remove_mask = 0;
(...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after
1013 void BlockUntilOriginDataRemoved(BrowsingDataRemover::TimePeriod period, 1023 void BlockUntilOriginDataRemoved(BrowsingDataRemover::TimePeriod period,
1014 int remove_mask, 1024 int remove_mask,
1015 const GURL& remove_origin) { 1025 const GURL& remove_origin) {
1016 BrowsingDataRemover* remover = 1026 BrowsingDataRemover* remover =
1017 BrowsingDataRemoverFactory::GetForBrowserContext(profile_.get()); 1027 BrowsingDataRemoverFactory::GetForBrowserContext(profile_.get());
1018 TestStoragePartition storage_partition; 1028 TestStoragePartition storage_partition;
1019 remover->OverrideStoragePartitionForTesting(&storage_partition); 1029 remover->OverrideStoragePartitionForTesting(&storage_partition);
1020 1030
1021 called_with_details_.reset(new BrowsingDataRemover::NotificationDetails()); 1031 called_with_details_.reset(new BrowsingDataRemover::NotificationDetails());
1022 1032
1033 OriginFilterBuilder builder(OriginFilterBuilder::WHITELIST);
1034 builder.AddOrigin(url::Origin(remove_origin));
1023 BrowsingDataRemoverCompletionObserver completion_observer(remover); 1035 BrowsingDataRemoverCompletionObserver completion_observer(remover);
1024 remover->RemoveImpl(BrowsingDataRemover::Period(period), remove_mask, 1036 remover->RemoveImpl(BrowsingDataRemover::Period(period), remove_mask,
1025 remove_origin, BrowsingDataHelper::UNPROTECTED_WEB); 1037 builder, BrowsingDataHelper::UNPROTECTED_WEB);
1026 completion_observer.BlockUntilCompletion(); 1038 completion_observer.BlockUntilCompletion();
1027 1039
1028 // Save so we can verify later. 1040 // Save so we can verify later.
1029 storage_partition_removal_data_ = 1041 storage_partition_removal_data_ =
1030 storage_partition.GetStoragePartitionRemovalData(); 1042 storage_partition.GetStoragePartitionRemovalData();
1031 } 1043 }
1032 1044
1033 TestingProfile* GetProfile() { 1045 TestingProfile* GetProfile() {
1034 return profile_.get(); 1046 return profile_.get();
1035 } 1047 }
(...skipping 1234 matching lines...) Expand 10 before | Expand all | Expand 10 after
2270 TEST_F(BrowsingDataRemoverTest, RemovePasswordsByOrigin) { 2282 TEST_F(BrowsingDataRemoverTest, RemovePasswordsByOrigin) {
2271 RemovePasswordsTester tester(GetProfile()); 2283 RemovePasswordsTester tester(GetProfile());
2272 const url::Origin expectedOrigin(kOrigin1); 2284 const url::Origin expectedOrigin(kOrigin1);
2273 2285
2274 EXPECT_CALL(*tester.store(), 2286 EXPECT_CALL(*tester.store(),
2275 RemoveLoginsByOriginAndTimeImpl(SameOrigin(expectedOrigin), _, _)) 2287 RemoveLoginsByOriginAndTimeImpl(SameOrigin(expectedOrigin), _, _))
2276 .WillOnce(Return(password_manager::PasswordStoreChangeList())); 2288 .WillOnce(Return(password_manager::PasswordStoreChangeList()));
2277 BlockUntilOriginDataRemoved(BrowsingDataRemover::EVERYTHING, 2289 BlockUntilOriginDataRemoved(BrowsingDataRemover::EVERYTHING,
2278 BrowsingDataRemover::REMOVE_PASSWORDS, kOrigin1); 2290 BrowsingDataRemover::REMOVE_PASSWORDS, kOrigin1);
2279 } 2291 }
2292
2293 TEST_F(BrowsingDataRemoverTest, ClearWithPredicate) {
2294 TestingProfile profile;
2295 HostContentSettingsMap* host_content_settings_map =
2296 HostContentSettingsMapFactory::GetForProfile(&profile);
2297 ContentSettingsForOneType host_settings;
2298
2299 // Patterns with wildcards.
2300 ContentSettingsPattern pattern =
2301 ContentSettingsPattern::FromString("[*.]example.org");
2302 ContentSettingsPattern pattern2 =
2303 ContentSettingsPattern::FromString("[*.]example.net");
2304
2305 // Patterns without wildcards.
2306 GURL url1("https://www.google.com/");
2307 GURL url2("https://www.google.com/maps");
2308 GURL url3("http://www.google.com/maps");
2309 GURL url3_origin_only("http://www.google.com/");
2310
2311 host_content_settings_map->SetContentSetting(
2312 pattern2, ContentSettingsPattern::Wildcard(),
2313 CONTENT_SETTINGS_TYPE_IMAGES, std::string(), CONTENT_SETTING_BLOCK);
2314 host_content_settings_map->SetContentSetting(
2315 pattern, ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_IMAGES,
2316 std::string(), CONTENT_SETTING_BLOCK);
2317 host_content_settings_map->SetContentSetting(
2318 pattern2, ContentSettingsPattern::Wildcard(),
2319 CONTENT_SETTINGS_TYPE_APP_BANNER, std::string(), CONTENT_SETTING_BLOCK);
2320
2321 // First, test that we clear only IMAGES (not APP_BANNER), and pattern2.
2322 BrowsingDataRemover::ClearSettingsForOneTypeWithPredicate(
2323 host_content_settings_map, CONTENT_SETTINGS_TYPE_IMAGES,
2324 base::Bind(&MatchPrimaryPattern, pattern2));
2325 host_content_settings_map->GetSettingsForOneType(
2326 CONTENT_SETTINGS_TYPE_IMAGES, std::string(), &host_settings);
2327 // |host_settings| contains default & block.
2328 EXPECT_EQ(2U, host_settings.size());
2329 EXPECT_EQ(pattern, host_settings[0].primary_pattern);
2330 EXPECT_EQ("*", host_settings[0].secondary_pattern.ToString());
2331 EXPECT_EQ("*", host_settings[1].primary_pattern.ToString());
2332 EXPECT_EQ("*", host_settings[1].secondary_pattern.ToString());
2333
2334 host_content_settings_map->GetSettingsForOneType(
2335 CONTENT_SETTINGS_TYPE_APP_BANNER, std::string(), &host_settings);
2336 // |host_settings| contains block.
2337 EXPECT_EQ(1U, host_settings.size());
2338 EXPECT_EQ(pattern2, host_settings[0].primary_pattern);
2339 EXPECT_EQ("*", host_settings[0].secondary_pattern.ToString());
2340
2341 // Next, test that we do correct pattern matching w/ an origin policy item.
2342 // We verify that we have no settings stored.
2343 host_content_settings_map->GetSettingsForOneType(
2344 CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(), &host_settings);
2345 EXPECT_EQ(0u, host_settings.size());
2346 // Add settings.
2347 host_content_settings_map->SetWebsiteSettingDefaultScope(
2348 url1, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(),
2349 new base::FundamentalValue(10));
2350 // This setting should override the one above, as it's the same origin.
2351 host_content_settings_map->SetWebsiteSettingDefaultScope(
2352 url2, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(),
2353 new base::FundamentalValue(10));
2354 host_content_settings_map->SetWebsiteSettingDefaultScope(
2355 url3, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(),
2356 new base::FundamentalValue(10));
2357 // Verify we only have two.
2358 host_content_settings_map->GetSettingsForOneType(
2359 CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(), &host_settings);
2360 EXPECT_EQ(2u, host_settings.size());
2361
2362 // Clear the http one, which we should be able to do w/ the origin only, as
2363 // the scope of CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT is
2364 // REQUESTING_ORIGIN_ONLY_SCOPE.
2365 ContentSettingsPattern http_pattern =
2366 ContentSettingsPattern::FromURLNoWildcard(url3_origin_only);
2367 BrowsingDataRemover::ClearSettingsForOneTypeWithPredicate(
2368 host_content_settings_map, CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT,
2369 base::Bind(&MatchPrimaryPattern, http_pattern));
2370 // Verify we only have one, and it's url1.
2371 host_content_settings_map->GetSettingsForOneType(
2372 CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(), &host_settings);
2373 EXPECT_EQ(1u, host_settings.size());
2374 EXPECT_EQ(ContentSettingsPattern::FromURLNoWildcard(url1),
2375 host_settings[0].primary_pattern);
2376 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698