Adding instrumentation to locate the source of jankiness
[chromium-blink-merge.git] / chrome / browser / browsing_data / browsing_data_remover_unittest.cc
blob7f9aaad1c29134c719577b9b8d57e7308ad7f77a
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
3 // found in the LICENSE file.
5 #include "chrome/browser/browsing_data/browsing_data_remover.h"
7 #include <set>
8 #include <string>
9 #include <vector>
11 #include "base/bind.h"
12 #include "base/bind_helpers.h"
13 #include "base/files/file_path.h"
14 #include "base/files/file_util.h"
15 #include "base/guid.h"
16 #include "base/message_loop/message_loop.h"
17 #include "base/prefs/testing_pref_service.h"
18 #include "base/strings/utf_string_conversions.h"
19 #include "base/task/cancelable_task_tracker.h"
20 #include "chrome/browser/autofill/personal_data_manager_factory.h"
21 #include "chrome/browser/browsing_data/browsing_data_helper.h"
22 #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h"
23 #include "chrome/browser/chrome_notification_types.h"
24 #include "chrome/browser/domain_reliability/service_factory.h"
25 #include "chrome/browser/history/history_service.h"
26 #include "chrome/browser/history/history_service_factory.h"
27 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
28 #include "chrome/common/pref_names.h"
29 #include "chrome/test/base/testing_browser_process.h"
30 #include "chrome/test/base/testing_profile.h"
31 #include "components/autofill/core/browser/autofill_profile.h"
32 #include "components/autofill/core/browser/autofill_test_utils.h"
33 #include "components/autofill/core/browser/credit_card.h"
34 #include "components/autofill/core/browser/personal_data_manager.h"
35 #include "components/autofill/core/browser/personal_data_manager_observer.h"
36 #include "components/domain_reliability/clear_mode.h"
37 #include "components/domain_reliability/monitor.h"
38 #include "components/domain_reliability/service.h"
39 #include "content/public/browser/cookie_store_factory.h"
40 #include "content/public/browser/dom_storage_context.h"
41 #include "content/public/browser/local_storage_usage_info.h"
42 #include "content/public/browser/notification_service.h"
43 #include "content/public/browser/storage_partition.h"
44 #include "content/public/test/test_browser_thread.h"
45 #include "content/public/test/test_browser_thread_bundle.h"
46 #include "content/public/test/test_utils.h"
47 #include "net/cookies/cookie_store.h"
48 #include "net/ssl/channel_id_service.h"
49 #include "net/ssl/channel_id_store.h"
50 #include "net/ssl/ssl_client_cert_type.h"
51 #include "net/url_request/url_request_context.h"
52 #include "net/url_request/url_request_context_getter.h"
53 #include "testing/gmock/include/gmock/gmock.h"
54 #include "testing/gtest/include/gtest/gtest.h"
56 #if defined(OS_CHROMEOS)
57 #include "chrome/browser/chromeos/login/users/mock_user_manager.h"
58 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
59 #include "chrome/browser/chromeos/settings/cros_settings.h"
60 #include "chrome/browser/chromeos/settings/device_settings_service.h"
61 #include "chromeos/dbus/dbus_thread_manager.h"
62 #include "chromeos/dbus/mock_cryptohome_client.h"
63 #endif
65 #if defined(ENABLE_EXTENSIONS)
66 #include "chrome/browser/extensions/mock_extension_special_storage_policy.h"
67 #endif
69 class MockExtensionSpecialStoragePolicy;
71 using content::BrowserThread;
72 using content::StoragePartition;
73 using domain_reliability::CLEAR_BEACONS;
74 using domain_reliability::CLEAR_CONTEXTS;
75 using domain_reliability::DomainReliabilityClearMode;
76 using domain_reliability::DomainReliabilityMonitor;
77 using domain_reliability::DomainReliabilityService;
78 using domain_reliability::DomainReliabilityServiceFactory;
79 using testing::_;
80 using testing::Invoke;
81 using testing::WithArgs;
83 namespace {
85 const char kTestOrigin1[] = "http://host1:1/";
86 const char kTestOrigin2[] = "http://host2:1/";
87 const char kTestOrigin3[] = "http://host3:1/";
88 const char kTestOriginExt[] = "chrome-extension://abcdefghijklmnopqrstuvwxyz/";
89 const char kTestOriginDevTools[] = "chrome-devtools://abcdefghijklmnopqrstuvw/";
91 // For Autofill.
92 const char kChromeOrigin[] = "Chrome settings";
93 const char kWebOrigin[] = "https://www.example.com/";
95 const GURL kOrigin1(kTestOrigin1);
96 const GURL kOrigin2(kTestOrigin2);
97 const GURL kOrigin3(kTestOrigin3);
98 const GURL kOriginExt(kTestOriginExt);
99 const GURL kOriginDevTools(kTestOriginDevTools);
101 const base::FilePath::CharType kDomStorageOrigin1[] =
102 FILE_PATH_LITERAL("http_host1_1.localstorage");
104 const base::FilePath::CharType kDomStorageOrigin2[] =
105 FILE_PATH_LITERAL("http_host2_1.localstorage");
107 const base::FilePath::CharType kDomStorageOrigin3[] =
108 FILE_PATH_LITERAL("http_host3_1.localstorage");
110 const base::FilePath::CharType kDomStorageExt[] = FILE_PATH_LITERAL(
111 "chrome-extension_abcdefghijklmnopqrstuvwxyz_0.localstorage");
113 #if defined(OS_CHROMEOS)
114 void FakeDBusCall(const chromeos::BoolDBusMethodCallback& callback) {
115 base::MessageLoop::current()->PostTask(
116 FROM_HERE,
117 base::Bind(callback, chromeos::DBUS_METHOD_CALL_SUCCESS, true));
119 #endif
121 struct StoragePartitionRemovalData {
122 uint32 remove_mask;
123 uint32 quota_storage_remove_mask;
124 GURL remove_origin;
125 base::Time remove_begin;
126 base::Time remove_end;
127 StoragePartition::OriginMatcherFunction origin_matcher;
129 StoragePartitionRemovalData() : remove_mask(0),
130 quota_storage_remove_mask(0) {}
133 class TestStoragePartition : public StoragePartition {
134 public:
135 TestStoragePartition() {}
136 virtual ~TestStoragePartition() {}
138 // content::StoragePartition implementation.
139 virtual base::FilePath GetPath() override { return base::FilePath(); }
140 virtual net::URLRequestContextGetter* GetURLRequestContext() override {
141 return NULL;
143 virtual net::URLRequestContextGetter* GetMediaURLRequestContext() override {
144 return NULL;
146 virtual storage::QuotaManager* GetQuotaManager() override { return NULL; }
147 virtual content::AppCacheService* GetAppCacheService() override {
148 return NULL;
150 virtual storage::FileSystemContext* GetFileSystemContext() override {
151 return NULL;
153 virtual storage::DatabaseTracker* GetDatabaseTracker() override {
154 return NULL;
156 virtual content::DOMStorageContext* GetDOMStorageContext() override {
157 return NULL;
159 virtual content::IndexedDBContext* GetIndexedDBContext() override {
160 return NULL;
162 virtual content::ServiceWorkerContext* GetServiceWorkerContext() override {
163 return NULL;
166 virtual void ClearDataForOrigin(uint32 remove_mask,
167 uint32 quota_storage_remove_mask,
168 const GURL& storage_origin,
169 net::URLRequestContextGetter* rq_context,
170 const base::Closure& callback) override {
171 BrowserThread::PostTask(BrowserThread::UI,
172 FROM_HERE,
173 base::Bind(&TestStoragePartition::AsyncRunCallback,
174 base::Unretained(this),
175 callback));
178 virtual void ClearData(uint32 remove_mask,
179 uint32 quota_storage_remove_mask,
180 const GURL& storage_origin,
181 const OriginMatcherFunction& origin_matcher,
182 const base::Time begin,
183 const base::Time end,
184 const base::Closure& callback) override {
185 // Store stuff to verify parameters' correctness later.
186 storage_partition_removal_data_.remove_mask = remove_mask;
187 storage_partition_removal_data_.quota_storage_remove_mask =
188 quota_storage_remove_mask;
189 storage_partition_removal_data_.remove_origin = storage_origin;
190 storage_partition_removal_data_.remove_begin = begin;
191 storage_partition_removal_data_.remove_end = end;
192 storage_partition_removal_data_.origin_matcher = origin_matcher;
194 BrowserThread::PostTask(
195 BrowserThread::UI,
196 FROM_HERE,
197 base::Bind(&TestStoragePartition::AsyncRunCallback,
198 base::Unretained(this), callback));
201 StoragePartitionRemovalData GetStoragePartitionRemovalData() {
202 return storage_partition_removal_data_;
205 private:
206 void AsyncRunCallback(const base::Closure& callback) {
207 callback.Run();
210 StoragePartitionRemovalData storage_partition_removal_data_;
212 DISALLOW_COPY_AND_ASSIGN(TestStoragePartition);
215 } // namespace
217 // Testers -------------------------------------------------------------------
219 class RemoveCookieTester {
220 public:
221 RemoveCookieTester() : get_cookie_success_(false), cookie_store_(NULL) {
224 // Returns true, if the given cookie exists in the cookie store.
225 bool ContainsCookie() {
226 scoped_refptr<content::MessageLoopRunner> message_loop_runner =
227 new content::MessageLoopRunner;
228 quit_closure_ = message_loop_runner->QuitClosure();
229 get_cookie_success_ = false;
230 cookie_store_->GetCookiesWithOptionsAsync(
231 kOrigin1, net::CookieOptions(),
232 base::Bind(&RemoveCookieTester::GetCookieCallback,
233 base::Unretained(this)));
234 message_loop_runner->Run();
235 return get_cookie_success_;
238 void AddCookie() {
239 scoped_refptr<content::MessageLoopRunner> message_loop_runner =
240 new content::MessageLoopRunner;
241 quit_closure_ = message_loop_runner->QuitClosure();
242 cookie_store_->SetCookieWithOptionsAsync(
243 kOrigin1, "A=1", net::CookieOptions(),
244 base::Bind(&RemoveCookieTester::SetCookieCallback,
245 base::Unretained(this)));
246 message_loop_runner->Run();
249 protected:
250 void SetMonster(net::CookieStore* monster) {
251 cookie_store_ = monster;
254 private:
255 void GetCookieCallback(const std::string& cookies) {
256 if (cookies == "A=1") {
257 get_cookie_success_ = true;
258 } else {
259 EXPECT_EQ("", cookies);
260 get_cookie_success_ = false;
262 quit_closure_.Run();
265 void SetCookieCallback(bool result) {
266 ASSERT_TRUE(result);
267 quit_closure_.Run();
270 bool get_cookie_success_;
271 base::Closure quit_closure_;
272 net::CookieStore* cookie_store_;
274 DISALLOW_COPY_AND_ASSIGN(RemoveCookieTester);
277 #if defined(FULL_SAFE_BROWSING) || defined(MOBILE_SAFE_BROWSING)
278 class RemoveSafeBrowsingCookieTester : public RemoveCookieTester {
279 public:
280 RemoveSafeBrowsingCookieTester()
281 : browser_process_(TestingBrowserProcess::GetGlobal()) {
282 scoped_refptr<SafeBrowsingService> sb_service =
283 SafeBrowsingService::CreateSafeBrowsingService();
284 browser_process_->SetSafeBrowsingService(sb_service.get());
285 sb_service->Initialize();
286 base::MessageLoop::current()->RunUntilIdle();
288 // Create a cookiemonster that does not have persistant storage, and replace
289 // the SafeBrowsingService created one with it.
290 net::CookieStore* monster =
291 content::CreateCookieStore(content::CookieStoreConfig());
292 sb_service->url_request_context()->GetURLRequestContext()->
293 set_cookie_store(monster);
294 SetMonster(monster);
297 virtual ~RemoveSafeBrowsingCookieTester() {
298 browser_process_->safe_browsing_service()->ShutDown();
299 base::MessageLoop::current()->RunUntilIdle();
300 browser_process_->SetSafeBrowsingService(NULL);
303 private:
304 TestingBrowserProcess* browser_process_;
306 DISALLOW_COPY_AND_ASSIGN(RemoveSafeBrowsingCookieTester);
308 #endif
310 class RemoveChannelIDTester : public net::SSLConfigService::Observer {
311 public:
312 explicit RemoveChannelIDTester(TestingProfile* profile)
313 : ssl_config_changed_count_(0) {
314 channel_id_service_ = profile->GetRequestContext()->
315 GetURLRequestContext()->channel_id_service();
316 ssl_config_service_ = profile->GetSSLConfigService();
317 ssl_config_service_->AddObserver(this);
320 virtual ~RemoveChannelIDTester() {
321 ssl_config_service_->RemoveObserver(this);
324 int ChannelIDCount() {
325 return channel_id_service_->cert_count();
328 // Add a server bound cert for |server| with specific creation and expiry
329 // times. The cert and key data will be filled with dummy values.
330 void AddChannelIDWithTimes(const std::string& server_identifier,
331 base::Time creation_time,
332 base::Time expiration_time) {
333 GetChannelIDStore()->SetChannelID(server_identifier,
334 creation_time,
335 expiration_time,
336 "a",
337 "b");
340 // Add a server bound cert for |server|, with the current time as the
341 // creation time. The cert and key data will be filled with dummy values.
342 void AddChannelID(const std::string& server_identifier) {
343 base::Time now = base::Time::Now();
344 AddChannelIDWithTimes(server_identifier,
345 now,
346 now + base::TimeDelta::FromDays(1));
349 void GetChannelIDList(net::ChannelIDStore::ChannelIDList* channel_ids) {
350 GetChannelIDStore()->GetAllChannelIDs(
351 base::Bind(&RemoveChannelIDTester::GetAllChannelIDsCallback,
352 channel_ids));
355 net::ChannelIDStore* GetChannelIDStore() {
356 return channel_id_service_->GetChannelIDStore();
359 int ssl_config_changed_count() const {
360 return ssl_config_changed_count_;
363 // net::SSLConfigService::Observer implementation:
364 virtual void OnSSLConfigChanged() override {
365 ssl_config_changed_count_++;
368 private:
369 static void GetAllChannelIDsCallback(
370 net::ChannelIDStore::ChannelIDList* dest,
371 const net::ChannelIDStore::ChannelIDList& result) {
372 *dest = result;
375 net::ChannelIDService* channel_id_service_;
376 scoped_refptr<net::SSLConfigService> ssl_config_service_;
377 int ssl_config_changed_count_;
379 DISALLOW_COPY_AND_ASSIGN(RemoveChannelIDTester);
382 class RemoveHistoryTester {
383 public:
384 RemoveHistoryTester() : query_url_success_(false), history_service_(NULL) {}
386 bool Init(TestingProfile* profile) WARN_UNUSED_RESULT {
387 if (!profile->CreateHistoryService(true, false))
388 return false;
389 history_service_ = HistoryServiceFactory::GetForProfile(
390 profile, Profile::EXPLICIT_ACCESS);
391 return true;
394 // Returns true, if the given URL exists in the history service.
395 bool HistoryContainsURL(const GURL& url) {
396 scoped_refptr<content::MessageLoopRunner> message_loop_runner =
397 new content::MessageLoopRunner;
398 quit_closure_ = message_loop_runner->QuitClosure();
399 history_service_->QueryURL(
400 url,
401 true,
402 base::Bind(&RemoveHistoryTester::SaveResultAndQuit,
403 base::Unretained(this)),
404 &tracker_);
405 message_loop_runner->Run();
406 return query_url_success_;
409 void AddHistory(const GURL& url, base::Time time) {
410 history_service_->AddPage(url, time, NULL, 0, GURL(),
411 history::RedirectList(), ui::PAGE_TRANSITION_LINK,
412 history::SOURCE_BROWSED, false);
415 private:
416 // Callback for HistoryService::QueryURL.
417 void SaveResultAndQuit(bool success,
418 const history::URLRow&,
419 const history::VisitVector&) {
420 query_url_success_ = success;
421 quit_closure_.Run();
424 // For History requests.
425 base::CancelableTaskTracker tracker_;
426 bool query_url_success_;
427 base::Closure quit_closure_;
429 // TestingProfile owns the history service; we shouldn't delete it.
430 HistoryService* history_service_;
432 DISALLOW_COPY_AND_ASSIGN(RemoveHistoryTester);
435 class RemoveAutofillTester : public autofill::PersonalDataManagerObserver {
436 public:
437 explicit RemoveAutofillTester(TestingProfile* profile)
438 : personal_data_manager_(
439 autofill::PersonalDataManagerFactory::GetForProfile(profile)) {
440 autofill::test::DisableSystemServices(profile->GetPrefs());
441 personal_data_manager_->AddObserver(this);
444 virtual ~RemoveAutofillTester() {
445 personal_data_manager_->RemoveObserver(this);
448 // Returns true if there are autofill profiles.
449 bool HasProfile() {
450 return !personal_data_manager_->GetProfiles().empty() &&
451 !personal_data_manager_->GetCreditCards().empty();
454 bool HasOrigin(const std::string& origin) {
455 const std::vector<autofill::AutofillProfile*>& profiles =
456 personal_data_manager_->GetProfiles();
457 for (std::vector<autofill::AutofillProfile*>::const_iterator it =
458 profiles.begin();
459 it != profiles.end(); ++it) {
460 if ((*it)->origin() == origin)
461 return true;
464 const std::vector<autofill::CreditCard*>& credit_cards =
465 personal_data_manager_->GetCreditCards();
466 for (std::vector<autofill::CreditCard*>::const_iterator it =
467 credit_cards.begin();
468 it != credit_cards.end(); ++it) {
469 if ((*it)->origin() == origin)
470 return true;
473 return false;
476 // Add two profiles and two credit cards to the database. In each pair, one
477 // entry has a web origin and the other has a Chrome origin.
478 void AddProfilesAndCards() {
479 std::vector<autofill::AutofillProfile> profiles;
480 autofill::AutofillProfile profile;
481 profile.set_guid(base::GenerateGUID());
482 profile.set_origin(kWebOrigin);
483 profile.SetRawInfo(autofill::NAME_FIRST, base::ASCIIToUTF16("Bob"));
484 profile.SetRawInfo(autofill::NAME_LAST, base::ASCIIToUTF16("Smith"));
485 profile.SetRawInfo(autofill::ADDRESS_HOME_ZIP, base::ASCIIToUTF16("94043"));
486 profile.SetRawInfo(autofill::EMAIL_ADDRESS,
487 base::ASCIIToUTF16("sue@example.com"));
488 profile.SetRawInfo(autofill::COMPANY_NAME, base::ASCIIToUTF16("Company X"));
489 profiles.push_back(profile);
491 profile.set_guid(base::GenerateGUID());
492 profile.set_origin(kChromeOrigin);
493 profiles.push_back(profile);
495 personal_data_manager_->SetProfiles(&profiles);
496 base::MessageLoop::current()->Run();
498 std::vector<autofill::CreditCard> cards;
499 autofill::CreditCard card;
500 card.set_guid(base::GenerateGUID());
501 card.set_origin(kWebOrigin);
502 card.SetRawInfo(autofill::CREDIT_CARD_NUMBER,
503 base::ASCIIToUTF16("1234-5678-9012-3456"));
504 cards.push_back(card);
506 card.set_guid(base::GenerateGUID());
507 card.set_origin(kChromeOrigin);
508 cards.push_back(card);
510 personal_data_manager_->SetCreditCards(&cards);
511 base::MessageLoop::current()->Run();
514 private:
515 virtual void OnPersonalDataChanged() override {
516 base::MessageLoop::current()->Quit();
519 autofill::PersonalDataManager* personal_data_manager_;
520 DISALLOW_COPY_AND_ASSIGN(RemoveAutofillTester);
523 class RemoveLocalStorageTester {
524 public:
525 explicit RemoveLocalStorageTester(TestingProfile* profile)
526 : profile_(profile), dom_storage_context_(NULL) {
527 dom_storage_context_ =
528 content::BrowserContext::GetDefaultStoragePartition(profile)->
529 GetDOMStorageContext();
532 // Returns true, if the given origin URL exists.
533 bool DOMStorageExistsForOrigin(const GURL& origin) {
534 scoped_refptr<content::MessageLoopRunner> message_loop_runner =
535 new content::MessageLoopRunner;
536 quit_closure_ = message_loop_runner->QuitClosure();
537 GetLocalStorageUsage();
538 message_loop_runner->Run();
539 for (size_t i = 0; i < infos_.size(); ++i) {
540 if (origin == infos_[i].origin)
541 return true;
543 return false;
546 void AddDOMStorageTestData() {
547 // Note: This test depends on details of how the dom_storage library
548 // stores data in the host file system.
549 base::FilePath storage_path =
550 profile_->GetPath().AppendASCII("Local Storage");
551 base::CreateDirectory(storage_path);
553 // Write some files.
554 base::WriteFile(storage_path.Append(kDomStorageOrigin1), NULL, 0);
555 base::WriteFile(storage_path.Append(kDomStorageOrigin2), NULL, 0);
556 base::WriteFile(storage_path.Append(kDomStorageOrigin3), NULL, 0);
557 base::WriteFile(storage_path.Append(kDomStorageExt), NULL, 0);
559 // Tweak their dates.
560 base::Time now = base::Time::Now();
561 base::TouchFile(storage_path.Append(kDomStorageOrigin1), now, now);
563 base::Time one_day_ago = now - base::TimeDelta::FromDays(1);
564 base::TouchFile(storage_path.Append(kDomStorageOrigin2),
565 one_day_ago, one_day_ago);
567 base::Time sixty_days_ago = now - base::TimeDelta::FromDays(60);
568 base::TouchFile(storage_path.Append(kDomStorageOrigin3),
569 sixty_days_ago, sixty_days_ago);
571 base::TouchFile(storage_path.Append(kDomStorageExt), now, now);
574 private:
575 void GetLocalStorageUsage() {
576 dom_storage_context_->GetLocalStorageUsage(
577 base::Bind(&RemoveLocalStorageTester::OnGotLocalStorageUsage,
578 base::Unretained(this)));
580 void OnGotLocalStorageUsage(
581 const std::vector<content::LocalStorageUsageInfo>& infos) {
582 infos_ = infos;
583 quit_closure_.Run();
586 // We don't own these pointers.
587 TestingProfile* profile_;
588 content::DOMStorageContext* dom_storage_context_;
590 std::vector<content::LocalStorageUsageInfo> infos_;
591 base::Closure quit_closure_;
593 DISALLOW_COPY_AND_ASSIGN(RemoveLocalStorageTester);
596 class MockDomainReliabilityService : public DomainReliabilityService {
597 public:
598 MockDomainReliabilityService() : clear_count_(0) {}
600 virtual ~MockDomainReliabilityService() {}
602 virtual scoped_ptr<DomainReliabilityMonitor> CreateMonitor(
603 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner)
604 override {
605 NOTREACHED();
606 return scoped_ptr<DomainReliabilityMonitor>();
609 virtual void ClearBrowsingData(DomainReliabilityClearMode clear_mode,
610 const base::Closure& callback) override {
611 clear_count_++;
612 last_clear_mode_ = clear_mode;
613 callback.Run();
616 virtual void GetWebUIData(
617 const base::Callback<void(scoped_ptr<base::Value>)>& callback)
618 const override {
619 NOTREACHED();
622 int clear_count() const { return clear_count_; }
624 DomainReliabilityClearMode last_clear_mode() const {
625 return last_clear_mode_;
628 private:
629 unsigned clear_count_;
630 DomainReliabilityClearMode last_clear_mode_;
633 struct TestingDomainReliabilityServiceFactoryUserData
634 : public base::SupportsUserData::Data {
635 TestingDomainReliabilityServiceFactoryUserData(
636 content::BrowserContext* context,
637 MockDomainReliabilityService* service)
638 : context(context),
639 service(service),
640 attached(false) {}
641 virtual ~TestingDomainReliabilityServiceFactoryUserData() {}
643 content::BrowserContext* const context;
644 MockDomainReliabilityService* const service;
645 bool attached;
647 static const void* kKey;
650 // static
651 const void* TestingDomainReliabilityServiceFactoryUserData::kKey =
652 &TestingDomainReliabilityServiceFactoryUserData::kKey;
654 KeyedService* TestingDomainReliabilityServiceFactoryFunction(
655 content::BrowserContext* context) {
656 const void* kKey = TestingDomainReliabilityServiceFactoryUserData::kKey;
658 TestingDomainReliabilityServiceFactoryUserData* data =
659 static_cast<TestingDomainReliabilityServiceFactoryUserData*>(
660 context->GetUserData(kKey));
661 EXPECT_TRUE(data);
662 EXPECT_EQ(data->context, context);
663 EXPECT_FALSE(data->attached);
665 data->attached = true;
666 return data->service;
669 class ClearDomainReliabilityTester {
670 public:
671 explicit ClearDomainReliabilityTester(TestingProfile* profile) :
672 profile_(profile),
673 mock_service_(new MockDomainReliabilityService()) {
674 AttachService();
677 unsigned clear_count() { return mock_service_->clear_count(); }
679 DomainReliabilityClearMode last_clear_mode() {
680 return mock_service_->last_clear_mode();
683 private:
684 void AttachService() {
685 const void* kKey = TestingDomainReliabilityServiceFactoryUserData::kKey;
687 // Attach kludgey UserData struct to profile.
688 TestingDomainReliabilityServiceFactoryUserData* data =
689 new TestingDomainReliabilityServiceFactoryUserData(profile_,
690 mock_service_);
691 EXPECT_FALSE(profile_->GetUserData(kKey));
692 profile_->SetUserData(kKey, data);
694 // Set and use factory that will attach service stuffed in kludgey struct.
695 DomainReliabilityServiceFactory::GetInstance()->SetTestingFactoryAndUse(
696 profile_,
697 &TestingDomainReliabilityServiceFactoryFunction);
699 // Verify and detach kludgey struct.
700 EXPECT_EQ(data, profile_->GetUserData(kKey));
701 EXPECT_TRUE(data->attached);
702 profile_->RemoveUserData(kKey);
705 TestingProfile* profile_;
706 MockDomainReliabilityService* mock_service_;
709 // Test Class ----------------------------------------------------------------
711 class BrowsingDataRemoverTest : public testing::Test,
712 public content::NotificationObserver {
713 public:
714 BrowsingDataRemoverTest()
715 : profile_(new TestingProfile()) {
716 registrar_.Add(this, chrome::NOTIFICATION_BROWSING_DATA_REMOVED,
717 content::Source<Profile>(profile_.get()));
720 virtual ~BrowsingDataRemoverTest() {
723 virtual void TearDown() {
724 #if defined(ENABLE_EXTENSIONS)
725 mock_policy_ = NULL;
726 #endif
728 // TestingProfile contains a DOMStorageContext. BrowserContext's destructor
729 // posts a message to the WEBKIT thread to delete some of its member
730 // variables. We need to ensure that the profile is destroyed, and that
731 // the message loop is cleared out, before destroying the threads and loop.
732 // Otherwise we leak memory.
733 profile_.reset();
734 base::MessageLoop::current()->RunUntilIdle();
737 void BlockUntilBrowsingDataRemoved(BrowsingDataRemover::TimePeriod period,
738 int remove_mask,
739 bool include_protected_origins) {
740 BrowsingDataRemover* remover = BrowsingDataRemover::CreateForPeriod(
741 profile_.get(), period);
743 TestStoragePartition storage_partition;
744 remover->OverrideStoragePartitionForTesting(&storage_partition);
746 called_with_details_.reset(new BrowsingDataRemover::NotificationDetails());
748 // BrowsingDataRemover deletes itself when it completes.
749 int origin_set_mask = BrowsingDataHelper::UNPROTECTED_WEB;
750 if (include_protected_origins)
751 origin_set_mask |= BrowsingDataHelper::PROTECTED_WEB;
753 BrowsingDataRemoverCompletionObserver completion_observer(remover);
754 remover->Remove(remove_mask, origin_set_mask);
755 completion_observer.BlockUntilCompletion();
757 // Save so we can verify later.
758 storage_partition_removal_data_ =
759 storage_partition.GetStoragePartitionRemovalData();
762 void BlockUntilOriginDataRemoved(BrowsingDataRemover::TimePeriod period,
763 int remove_mask,
764 const GURL& remove_origin) {
765 BrowsingDataRemover* remover = BrowsingDataRemover::CreateForPeriod(
766 profile_.get(), period);
767 TestStoragePartition storage_partition;
768 remover->OverrideStoragePartitionForTesting(&storage_partition);
770 called_with_details_.reset(new BrowsingDataRemover::NotificationDetails());
772 // BrowsingDataRemover deletes itself when it completes.
773 BrowsingDataRemoverCompletionObserver completion_observer(remover);
774 remover->RemoveImpl(remove_mask, remove_origin,
775 BrowsingDataHelper::UNPROTECTED_WEB);
776 completion_observer.BlockUntilCompletion();
778 // Save so we can verify later.
779 storage_partition_removal_data_ =
780 storage_partition.GetStoragePartitionRemovalData();
783 TestingProfile* GetProfile() {
784 return profile_.get();
787 base::Time GetBeginTime() {
788 return called_with_details_->removal_begin;
791 int GetRemovalMask() {
792 return called_with_details_->removal_mask;
795 int GetOriginSetMask() {
796 return called_with_details_->origin_set_mask;
799 StoragePartitionRemovalData GetStoragePartitionRemovalData() {
800 return storage_partition_removal_data_;
803 // content::NotificationObserver implementation.
804 virtual void Observe(int type,
805 const content::NotificationSource& source,
806 const content::NotificationDetails& details) override {
807 DCHECK_EQ(type, chrome::NOTIFICATION_BROWSING_DATA_REMOVED);
809 // We're not taking ownership of the details object, but storing a copy of
810 // it locally.
811 called_with_details_.reset(new BrowsingDataRemover::NotificationDetails(
812 *content::Details<BrowsingDataRemover::NotificationDetails>(
813 details).ptr()));
815 registrar_.RemoveAll();
818 MockExtensionSpecialStoragePolicy* CreateMockPolicy() {
819 #if defined(ENABLE_EXTENSIONS)
820 mock_policy_ = new MockExtensionSpecialStoragePolicy;
821 return mock_policy_.get();
822 #else
823 NOTREACHED();
824 return NULL;
825 #endif
828 storage::SpecialStoragePolicy* mock_policy() {
829 #if defined(ENABLE_EXTENSIONS)
830 return mock_policy_.get();
831 #else
832 return NULL;
833 #endif
836 // If |kOrigin1| is protected when extensions are enabled, the expected
837 // result for tests where the OriginMatcherFunction result is variable.
838 bool ShouldRemoveForProtectedOriginOne() const {
839 #if defined(ENABLE_EXTENSIONS)
840 return false;
841 #else
842 return true;
843 #endif
846 protected:
847 scoped_ptr<BrowsingDataRemover::NotificationDetails> called_with_details_;
849 private:
850 content::NotificationRegistrar registrar_;
852 content::TestBrowserThreadBundle thread_bundle_;
853 scoped_ptr<TestingProfile> profile_;
855 StoragePartitionRemovalData storage_partition_removal_data_;
857 #if defined(ENABLE_EXTENSIONS)
858 scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy_;
859 #endif
861 DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverTest);
864 // Tests ---------------------------------------------------------------------
866 TEST_F(BrowsingDataRemoverTest, RemoveCookieForever) {
867 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
868 BrowsingDataRemover::REMOVE_COOKIES,
869 false);
871 EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask());
872 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
874 // Verify that storage partition was instructed to remove the cookies.
875 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
876 EXPECT_EQ(removal_data.remove_mask,
877 StoragePartition::REMOVE_DATA_MASK_COOKIES);
878 EXPECT_EQ(removal_data.quota_storage_remove_mask,
879 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL);
880 EXPECT_TRUE(removal_data.remove_origin.is_empty());
881 EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
884 TEST_F(BrowsingDataRemoverTest, RemoveCookieLastHour) {
885 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
886 BrowsingDataRemover::REMOVE_COOKIES,
887 false);
889 EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask());
890 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
892 // Verify that storage partition was instructed to remove the cookies.
893 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
894 EXPECT_EQ(removal_data.remove_mask,
895 StoragePartition::REMOVE_DATA_MASK_COOKIES);
896 // Removing with time period other than EVERYTHING should not clear
897 // persistent storage data.
898 EXPECT_EQ(removal_data.quota_storage_remove_mask,
899 ~StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT);
900 EXPECT_TRUE(removal_data.remove_origin.is_empty());
901 EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
904 #if defined(FULL_SAFE_BROWSING) || defined(MOBILE_SAFE_BROWSING)
905 TEST_F(BrowsingDataRemoverTest, RemoveSafeBrowsingCookieForever) {
906 RemoveSafeBrowsingCookieTester tester;
908 tester.AddCookie();
909 ASSERT_TRUE(tester.ContainsCookie());
911 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
912 BrowsingDataRemover::REMOVE_COOKIES, false);
914 EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask());
915 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
916 EXPECT_FALSE(tester.ContainsCookie());
919 TEST_F(BrowsingDataRemoverTest, RemoveSafeBrowsingCookieLastHour) {
920 RemoveSafeBrowsingCookieTester tester;
922 tester.AddCookie();
923 ASSERT_TRUE(tester.ContainsCookie());
925 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
926 BrowsingDataRemover::REMOVE_COOKIES, false);
928 EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask());
929 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
930 // Removing with time period other than EVERYTHING should not clear safe
931 // browsing cookies.
932 EXPECT_TRUE(tester.ContainsCookie());
934 #endif
936 TEST_F(BrowsingDataRemoverTest, RemoveChannelIDForever) {
937 RemoveChannelIDTester tester(GetProfile());
939 tester.AddChannelID(kTestOrigin1);
940 EXPECT_EQ(0, tester.ssl_config_changed_count());
941 EXPECT_EQ(1, tester.ChannelIDCount());
943 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
944 BrowsingDataRemover::REMOVE_CHANNEL_IDS, false);
946 EXPECT_EQ(BrowsingDataRemover::REMOVE_CHANNEL_IDS, GetRemovalMask());
947 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
948 EXPECT_EQ(1, tester.ssl_config_changed_count());
949 EXPECT_EQ(0, tester.ChannelIDCount());
952 TEST_F(BrowsingDataRemoverTest, RemoveChannelIDLastHour) {
953 RemoveChannelIDTester tester(GetProfile());
955 base::Time now = base::Time::Now();
956 tester.AddChannelID(kTestOrigin1);
957 tester.AddChannelIDWithTimes(kTestOrigin2,
958 now - base::TimeDelta::FromHours(2),
959 now);
960 EXPECT_EQ(0, tester.ssl_config_changed_count());
961 EXPECT_EQ(2, tester.ChannelIDCount());
963 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
964 BrowsingDataRemover::REMOVE_CHANNEL_IDS, false);
966 EXPECT_EQ(BrowsingDataRemover::REMOVE_CHANNEL_IDS, GetRemovalMask());
967 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
968 EXPECT_EQ(1, tester.ssl_config_changed_count());
969 ASSERT_EQ(1, tester.ChannelIDCount());
970 net::ChannelIDStore::ChannelIDList channel_ids;
971 tester.GetChannelIDList(&channel_ids);
972 ASSERT_EQ(1U, channel_ids.size());
973 EXPECT_EQ(kTestOrigin2, channel_ids.front().server_identifier());
976 TEST_F(BrowsingDataRemoverTest, RemoveUnprotectedLocalStorageForever) {
977 #if defined(ENABLE_EXTENSIONS)
978 MockExtensionSpecialStoragePolicy* policy = CreateMockPolicy();
979 // Protect kOrigin1.
980 policy->AddProtected(kOrigin1.GetOrigin());
981 #endif
983 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
984 BrowsingDataRemover::REMOVE_LOCAL_STORAGE,
985 false);
987 EXPECT_EQ(BrowsingDataRemover::REMOVE_LOCAL_STORAGE, GetRemovalMask());
988 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
990 // Verify that storage partition was instructed to remove the data correctly.
991 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
992 EXPECT_EQ(removal_data.remove_mask,
993 StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE);
994 EXPECT_EQ(removal_data.quota_storage_remove_mask,
995 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL);
996 EXPECT_TRUE(removal_data.remove_origin.is_empty());
997 EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
999 // Check origin matcher.
1000 EXPECT_EQ(ShouldRemoveForProtectedOriginOne(),
1001 removal_data.origin_matcher.Run(kOrigin1, mock_policy()));
1002 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy()));
1003 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy()));
1004 EXPECT_FALSE(removal_data.origin_matcher.Run(kOriginExt, mock_policy()));
1007 TEST_F(BrowsingDataRemoverTest, RemoveProtectedLocalStorageForever) {
1008 #if defined(ENABLE_EXTENSIONS)
1009 // Protect kOrigin1.
1010 MockExtensionSpecialStoragePolicy* policy = CreateMockPolicy();
1011 policy->AddProtected(kOrigin1.GetOrigin());
1012 #endif
1014 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1015 BrowsingDataRemover::REMOVE_LOCAL_STORAGE,
1016 true);
1018 EXPECT_EQ(BrowsingDataRemover::REMOVE_LOCAL_STORAGE, GetRemovalMask());
1019 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB |
1020 BrowsingDataHelper::PROTECTED_WEB, GetOriginSetMask());
1022 // Verify that storage partition was instructed to remove the data correctly.
1023 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1024 EXPECT_EQ(removal_data.remove_mask,
1025 StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE);
1026 EXPECT_EQ(removal_data.quota_storage_remove_mask,
1027 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL);
1028 EXPECT_TRUE(removal_data.remove_origin.is_empty());
1029 EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
1031 // Check origin matcher all http origin will match since we specified
1032 // both protected and unprotected.
1033 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin1, mock_policy()));
1034 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy()));
1035 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy()));
1036 EXPECT_FALSE(removal_data.origin_matcher.Run(kOriginExt, mock_policy()));
1039 TEST_F(BrowsingDataRemoverTest, RemoveLocalStorageForLastWeek) {
1040 #if defined(ENABLE_EXTENSIONS)
1041 CreateMockPolicy();
1042 #endif
1044 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_WEEK,
1045 BrowsingDataRemover::REMOVE_LOCAL_STORAGE,
1046 false);
1048 EXPECT_EQ(BrowsingDataRemover::REMOVE_LOCAL_STORAGE, GetRemovalMask());
1049 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1051 // Verify that storage partition was instructed to remove the data correctly.
1052 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1053 EXPECT_EQ(removal_data.remove_mask,
1054 StoragePartition::REMOVE_DATA_MASK_LOCAL_STORAGE);
1055 // Persistent storage won't be deleted.
1056 EXPECT_EQ(removal_data.quota_storage_remove_mask,
1057 ~StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT);
1058 EXPECT_TRUE(removal_data.remove_origin.is_empty());
1059 EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
1061 // Check origin matcher.
1062 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin1, mock_policy()));
1063 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy()));
1064 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy()));
1065 EXPECT_FALSE(removal_data.origin_matcher.Run(kOriginExt, mock_policy()));
1068 TEST_F(BrowsingDataRemoverTest, RemoveHistoryForever) {
1069 RemoveHistoryTester tester;
1070 ASSERT_TRUE(tester.Init(GetProfile()));
1072 tester.AddHistory(kOrigin1, base::Time::Now());
1073 ASSERT_TRUE(tester.HistoryContainsURL(kOrigin1));
1075 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1076 BrowsingDataRemover::REMOVE_HISTORY, false);
1078 EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
1079 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1080 EXPECT_FALSE(tester.HistoryContainsURL(kOrigin1));
1083 TEST_F(BrowsingDataRemoverTest, RemoveHistoryForLastHour) {
1084 RemoveHistoryTester tester;
1085 ASSERT_TRUE(tester.Init(GetProfile()));
1087 base::Time two_hours_ago = base::Time::Now() - base::TimeDelta::FromHours(2);
1089 tester.AddHistory(kOrigin1, base::Time::Now());
1090 tester.AddHistory(kOrigin2, two_hours_ago);
1091 ASSERT_TRUE(tester.HistoryContainsURL(kOrigin1));
1092 ASSERT_TRUE(tester.HistoryContainsURL(kOrigin2));
1094 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
1095 BrowsingDataRemover::REMOVE_HISTORY, false);
1097 EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
1098 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1099 EXPECT_FALSE(tester.HistoryContainsURL(kOrigin1));
1100 EXPECT_TRUE(tester.HistoryContainsURL(kOrigin2));
1103 // This should crash (DCHECK) in Debug, but death tests don't work properly
1104 // here.
1105 #if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
1106 TEST_F(BrowsingDataRemoverTest, RemoveHistoryProhibited) {
1107 RemoveHistoryTester tester;
1108 ASSERT_TRUE(tester.Init(GetProfile()));
1109 PrefService* prefs = GetProfile()->GetPrefs();
1110 prefs->SetBoolean(prefs::kAllowDeletingBrowserHistory, false);
1112 base::Time two_hours_ago = base::Time::Now() - base::TimeDelta::FromHours(2);
1114 tester.AddHistory(kOrigin1, base::Time::Now());
1115 tester.AddHistory(kOrigin2, two_hours_ago);
1116 ASSERT_TRUE(tester.HistoryContainsURL(kOrigin1));
1117 ASSERT_TRUE(tester.HistoryContainsURL(kOrigin2));
1119 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
1120 BrowsingDataRemover::REMOVE_HISTORY, false);
1121 EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
1122 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1124 // Nothing should have been deleted.
1125 EXPECT_TRUE(tester.HistoryContainsURL(kOrigin1));
1126 EXPECT_TRUE(tester.HistoryContainsURL(kOrigin2));
1128 #endif
1130 TEST_F(BrowsingDataRemoverTest, RemoveMultipleTypes) {
1131 // Add some history.
1132 RemoveHistoryTester history_tester;
1133 ASSERT_TRUE(history_tester.Init(GetProfile()));
1134 history_tester.AddHistory(kOrigin1, base::Time::Now());
1135 ASSERT_TRUE(history_tester.HistoryContainsURL(kOrigin1));
1137 int removal_mask = BrowsingDataRemover::REMOVE_HISTORY |
1138 BrowsingDataRemover::REMOVE_COOKIES;
1140 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1141 removal_mask, false);
1143 EXPECT_EQ(removal_mask, GetRemovalMask());
1144 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1145 EXPECT_FALSE(history_tester.HistoryContainsURL(kOrigin1));
1147 // The cookie would be deleted throught the StorageParition, check if the
1148 // partition was requested to remove cookie.
1149 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1150 EXPECT_EQ(removal_data.remove_mask,
1151 StoragePartition::REMOVE_DATA_MASK_COOKIES);
1152 EXPECT_EQ(removal_data.quota_storage_remove_mask,
1153 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL);
1156 // This should crash (DCHECK) in Debug, but death tests don't work properly
1157 // here.
1158 #if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
1159 TEST_F(BrowsingDataRemoverTest, RemoveMultipleTypesHistoryProhibited) {
1160 PrefService* prefs = GetProfile()->GetPrefs();
1161 prefs->SetBoolean(prefs::kAllowDeletingBrowserHistory, false);
1163 // Add some history.
1164 RemoveHistoryTester history_tester;
1165 ASSERT_TRUE(history_tester.Init(GetProfile()));
1166 history_tester.AddHistory(kOrigin1, base::Time::Now());
1167 ASSERT_TRUE(history_tester.HistoryContainsURL(kOrigin1));
1169 int removal_mask = BrowsingDataRemover::REMOVE_HISTORY |
1170 BrowsingDataRemover::REMOVE_COOKIES;
1172 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
1173 removal_mask, false);
1174 EXPECT_EQ(removal_mask, GetRemovalMask());
1175 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1177 // 1/2. History should remain.
1178 EXPECT_TRUE(history_tester.HistoryContainsURL(kOrigin1));
1180 // 2/2. The cookie(s) would be deleted throught the StorageParition, check if
1181 // the partition was requested to remove cookie.
1182 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1183 EXPECT_EQ(removal_data.remove_mask,
1184 StoragePartition::REMOVE_DATA_MASK_COOKIES);
1185 // Persistent storage won't be deleted, since EVERYTHING was not specified.
1186 EXPECT_EQ(removal_data.quota_storage_remove_mask,
1187 ~StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT);
1189 #endif
1191 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverBoth) {
1192 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1193 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1194 BrowsingDataRemover::REMOVE_WEBSQL |
1195 BrowsingDataRemover::REMOVE_APPCACHE |
1196 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1197 BrowsingDataRemover::REMOVE_INDEXEDDB,
1198 false);
1200 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1201 BrowsingDataRemover::REMOVE_WEBSQL |
1202 BrowsingDataRemover::REMOVE_APPCACHE |
1203 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1204 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
1205 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1207 // Verify storage partition related stuffs.
1208 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1209 EXPECT_EQ(removal_data.remove_mask,
1210 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1211 StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1212 StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1213 StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS |
1214 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB);
1215 EXPECT_EQ(removal_data.quota_storage_remove_mask,
1216 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL);
1217 EXPECT_TRUE(removal_data.remove_origin.is_empty());
1220 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverOnlyTemporary) {
1221 #if defined(ENABLE_EXTENSIONS)
1222 CreateMockPolicy();
1223 #endif
1225 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1226 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1227 BrowsingDataRemover::REMOVE_WEBSQL |
1228 BrowsingDataRemover::REMOVE_APPCACHE |
1229 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1230 BrowsingDataRemover::REMOVE_INDEXEDDB,
1231 false);
1233 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1234 BrowsingDataRemover::REMOVE_WEBSQL |
1235 BrowsingDataRemover::REMOVE_APPCACHE |
1236 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1237 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
1238 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1240 // Verify storage partition related stuffs.
1241 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1243 EXPECT_EQ(removal_data.remove_mask,
1244 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1245 StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1246 StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1247 StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS |
1248 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB);
1249 EXPECT_EQ(removal_data.quota_storage_remove_mask,
1250 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL);
1251 EXPECT_TRUE(removal_data.remove_origin.is_empty());
1253 // Check that all related origin data would be removed, that is, origin
1254 // matcher would match these origin.
1255 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin1, mock_policy()));
1256 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy()));
1257 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy()));
1260 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverOnlyPersistent) {
1261 #if defined(ENABLE_EXTENSIONS)
1262 CreateMockPolicy();
1263 #endif
1265 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1266 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1267 BrowsingDataRemover::REMOVE_WEBSQL |
1268 BrowsingDataRemover::REMOVE_APPCACHE |
1269 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1270 BrowsingDataRemover::REMOVE_INDEXEDDB,
1271 false);
1273 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1274 BrowsingDataRemover::REMOVE_WEBSQL |
1275 BrowsingDataRemover::REMOVE_APPCACHE |
1276 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1277 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
1278 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1280 // Verify storage partition related stuffs.
1281 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1283 EXPECT_EQ(removal_data.remove_mask,
1284 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1285 StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1286 StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1287 StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS |
1288 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB);
1289 EXPECT_EQ(removal_data.quota_storage_remove_mask,
1290 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL);
1291 EXPECT_TRUE(removal_data.remove_origin.is_empty());
1293 // Check that all related origin data would be removed, that is, origin
1294 // matcher would match these origin.
1295 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin1, mock_policy()));
1296 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy()));
1297 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy()));
1300 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverNeither) {
1301 #if defined(ENABLE_EXTENSIONS)
1302 CreateMockPolicy();
1303 #endif
1306 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1307 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1308 BrowsingDataRemover::REMOVE_WEBSQL |
1309 BrowsingDataRemover::REMOVE_APPCACHE |
1310 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1311 BrowsingDataRemover::REMOVE_INDEXEDDB,
1312 false);
1314 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1315 BrowsingDataRemover::REMOVE_WEBSQL |
1316 BrowsingDataRemover::REMOVE_APPCACHE |
1317 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1318 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
1319 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1321 // Verify storage partition related stuffs.
1322 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1324 EXPECT_EQ(removal_data.remove_mask,
1325 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1326 StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1327 StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1328 StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS |
1329 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB);
1330 EXPECT_EQ(removal_data.quota_storage_remove_mask,
1331 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL);
1332 EXPECT_TRUE(removal_data.remove_origin.is_empty());
1334 // Check that all related origin data would be removed, that is, origin
1335 // matcher would match these origin.
1336 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin1, mock_policy()));
1337 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy()));
1338 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy()));
1341 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverSpecificOrigin) {
1342 // Remove Origin 1.
1343 BlockUntilOriginDataRemoved(BrowsingDataRemover::EVERYTHING,
1344 BrowsingDataRemover::REMOVE_APPCACHE |
1345 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1346 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1347 BrowsingDataRemover::REMOVE_INDEXEDDB |
1348 BrowsingDataRemover::REMOVE_WEBSQL,
1349 kOrigin1);
1351 EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE |
1352 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1353 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1354 BrowsingDataRemover::REMOVE_INDEXEDDB |
1355 BrowsingDataRemover::REMOVE_WEBSQL, GetRemovalMask());
1356 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1358 // Verify storage partition related stuffs.
1359 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1361 EXPECT_EQ(removal_data.remove_mask,
1362 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1363 StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1364 StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1365 StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS |
1366 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB);
1367 EXPECT_EQ(removal_data.quota_storage_remove_mask,
1368 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL);
1369 EXPECT_EQ(removal_data.remove_origin, kOrigin1);
1372 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForLastHour) {
1373 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
1374 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1375 BrowsingDataRemover::REMOVE_WEBSQL |
1376 BrowsingDataRemover::REMOVE_APPCACHE |
1377 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1378 BrowsingDataRemover::REMOVE_INDEXEDDB,
1379 false);
1381 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1382 BrowsingDataRemover::REMOVE_WEBSQL |
1383 BrowsingDataRemover::REMOVE_APPCACHE |
1384 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1385 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
1386 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1388 // Verify storage partition related stuffs.
1389 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1391 EXPECT_EQ(removal_data.remove_mask,
1392 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1393 StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1394 StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1395 StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS |
1396 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB);
1398 // Persistent data would be left out since we are not removing from
1399 // beginning of time.
1400 uint32 expected_quota_mask =
1401 ~StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT;
1402 EXPECT_EQ(removal_data.quota_storage_remove_mask, expected_quota_mask);
1403 EXPECT_TRUE(removal_data.remove_origin.is_empty());
1404 // Check removal begin time.
1405 EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
1408 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForLastWeek) {
1409 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_WEEK,
1410 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1411 BrowsingDataRemover::REMOVE_WEBSQL |
1412 BrowsingDataRemover::REMOVE_APPCACHE |
1413 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1414 BrowsingDataRemover::REMOVE_INDEXEDDB,
1415 false);
1417 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1418 BrowsingDataRemover::REMOVE_WEBSQL |
1419 BrowsingDataRemover::REMOVE_APPCACHE |
1420 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1421 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
1422 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1424 // Verify storage partition related stuffs.
1425 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1427 EXPECT_EQ(removal_data.remove_mask,
1428 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1429 StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1430 StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1431 StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS |
1432 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB);
1434 // Persistent data would be left out since we are not removing from
1435 // beginning of time.
1436 uint32 expected_quota_mask =
1437 ~StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT;
1438 EXPECT_EQ(removal_data.quota_storage_remove_mask, expected_quota_mask);
1439 EXPECT_TRUE(removal_data.remove_origin.is_empty());
1440 // Check removal begin time.
1441 EXPECT_EQ(removal_data.remove_begin, GetBeginTime());
1444 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedUnprotectedOrigins) {
1445 #if defined(ENABLE_EXTENSIONS)
1446 MockExtensionSpecialStoragePolicy* policy = CreateMockPolicy();
1447 // Protect kOrigin1.
1448 policy->AddProtected(kOrigin1.GetOrigin());
1449 #endif
1451 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1452 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1453 BrowsingDataRemover::REMOVE_WEBSQL |
1454 BrowsingDataRemover::REMOVE_APPCACHE |
1455 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1456 BrowsingDataRemover::REMOVE_INDEXEDDB,
1457 false);
1459 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1460 BrowsingDataRemover::REMOVE_WEBSQL |
1461 BrowsingDataRemover::REMOVE_APPCACHE |
1462 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1463 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
1464 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1466 // Verify storage partition related stuffs.
1467 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1469 EXPECT_EQ(removal_data.remove_mask,
1470 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1471 StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1472 StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1473 StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS |
1474 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB);
1475 EXPECT_EQ(removal_data.quota_storage_remove_mask,
1476 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL);
1477 EXPECT_TRUE(removal_data.remove_origin.is_empty());
1479 // Check OriginMatcherFunction.
1480 EXPECT_EQ(ShouldRemoveForProtectedOriginOne(),
1481 removal_data.origin_matcher.Run(kOrigin1, mock_policy()));
1482 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy()));
1483 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy()));
1486 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedProtectedSpecificOrigin) {
1487 #if defined(ENABLE_EXTENSIONS)
1488 MockExtensionSpecialStoragePolicy* policy = CreateMockPolicy();
1489 // Protect kOrigin1.
1490 policy->AddProtected(kOrigin1.GetOrigin());
1491 #endif
1493 // Try to remove kOrigin1. Expect failure.
1494 BlockUntilOriginDataRemoved(BrowsingDataRemover::EVERYTHING,
1495 BrowsingDataRemover::REMOVE_APPCACHE |
1496 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1497 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1498 BrowsingDataRemover::REMOVE_INDEXEDDB |
1499 BrowsingDataRemover::REMOVE_WEBSQL,
1500 kOrigin1);
1502 EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE |
1503 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1504 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1505 BrowsingDataRemover::REMOVE_INDEXEDDB |
1506 BrowsingDataRemover::REMOVE_WEBSQL, GetRemovalMask());
1507 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1509 // Verify storage partition related stuffs.
1510 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1512 EXPECT_EQ(removal_data.remove_mask,
1513 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1514 StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1515 StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1516 StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS |
1517 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB);
1518 EXPECT_EQ(removal_data.quota_storage_remove_mask,
1519 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL);
1520 EXPECT_EQ(removal_data.remove_origin, kOrigin1);
1522 // Check OriginMatcherFunction.
1523 EXPECT_EQ(ShouldRemoveForProtectedOriginOne(),
1524 removal_data.origin_matcher.Run(kOrigin1, mock_policy()));
1525 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy()));
1526 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy()));
1529 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedProtectedOrigins) {
1530 #if defined(ENABLE_EXTENSIONS)
1531 MockExtensionSpecialStoragePolicy* policy = CreateMockPolicy();
1532 // Protect kOrigin1.
1533 policy->AddProtected(kOrigin1.GetOrigin());
1534 #endif
1536 // Try to remove kOrigin1. Expect success.
1537 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1538 BrowsingDataRemover::REMOVE_APPCACHE |
1539 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1540 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1541 BrowsingDataRemover::REMOVE_INDEXEDDB |
1542 BrowsingDataRemover::REMOVE_WEBSQL,
1543 true);
1545 EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE |
1546 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1547 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1548 BrowsingDataRemover::REMOVE_INDEXEDDB |
1549 BrowsingDataRemover::REMOVE_WEBSQL, GetRemovalMask());
1550 EXPECT_EQ(BrowsingDataHelper::PROTECTED_WEB |
1551 BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1553 // Verify storage partition related stuffs.
1554 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1556 EXPECT_EQ(removal_data.remove_mask,
1557 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1558 StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1559 StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1560 StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS |
1561 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB);
1562 EXPECT_EQ(removal_data.quota_storage_remove_mask,
1563 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL);
1564 EXPECT_TRUE(removal_data.remove_origin.is_empty());
1566 // Check OriginMatcherFunction, |kOrigin1| would match mask since we
1567 // would have 'protected' specified in origin_set_mask.
1568 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin1, mock_policy()));
1569 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin2, mock_policy()));
1570 EXPECT_TRUE(removal_data.origin_matcher.Run(kOrigin3, mock_policy()));
1573 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedIgnoreExtensionsAndDevTools) {
1574 #if defined(ENABLE_EXTENSIONS)
1575 CreateMockPolicy();
1576 #endif
1578 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1579 BrowsingDataRemover::REMOVE_APPCACHE |
1580 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1581 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1582 BrowsingDataRemover::REMOVE_INDEXEDDB |
1583 BrowsingDataRemover::REMOVE_WEBSQL,
1584 false);
1586 EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE |
1587 BrowsingDataRemover::REMOVE_SERVICE_WORKERS |
1588 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1589 BrowsingDataRemover::REMOVE_INDEXEDDB |
1590 BrowsingDataRemover::REMOVE_WEBSQL, GetRemovalMask());
1591 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1593 // Verify storage partition related stuffs.
1594 StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
1596 EXPECT_EQ(removal_data.remove_mask,
1597 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
1598 StoragePartition::REMOVE_DATA_MASK_WEBSQL |
1599 StoragePartition::REMOVE_DATA_MASK_APPCACHE |
1600 StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS |
1601 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB);
1602 EXPECT_EQ(removal_data.quota_storage_remove_mask,
1603 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL);
1604 EXPECT_TRUE(removal_data.remove_origin.is_empty());
1606 // Check that extension and devtools data wouldn't be removed, that is,
1607 // origin matcher would not match these origin.
1608 EXPECT_FALSE(removal_data.origin_matcher.Run(kOriginExt, mock_policy()));
1609 EXPECT_FALSE(removal_data.origin_matcher.Run(kOriginDevTools, mock_policy()));
1612 TEST_F(BrowsingDataRemoverTest, OriginBasedHistoryRemoval) {
1613 RemoveHistoryTester tester;
1614 ASSERT_TRUE(tester.Init(GetProfile()));
1616 base::Time two_hours_ago = base::Time::Now() - base::TimeDelta::FromHours(2);
1618 tester.AddHistory(kOrigin1, base::Time::Now());
1619 tester.AddHistory(kOrigin2, two_hours_ago);
1620 ASSERT_TRUE(tester.HistoryContainsURL(kOrigin1));
1621 ASSERT_TRUE(tester.HistoryContainsURL(kOrigin2));
1623 BlockUntilOriginDataRemoved(BrowsingDataRemover::EVERYTHING,
1624 BrowsingDataRemover::REMOVE_HISTORY, kOrigin2);
1626 EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
1627 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1629 // Nothing should have been deleted.
1630 EXPECT_TRUE(tester.HistoryContainsURL(kOrigin1));
1631 EXPECT_FALSE(tester.HistoryContainsURL(kOrigin2));
1634 TEST_F(BrowsingDataRemoverTest, OriginAndTimeBasedHistoryRemoval) {
1635 RemoveHistoryTester tester;
1636 ASSERT_TRUE(tester.Init(GetProfile()));
1638 base::Time two_hours_ago = base::Time::Now() - base::TimeDelta::FromHours(2);
1640 tester.AddHistory(kOrigin1, base::Time::Now());
1641 tester.AddHistory(kOrigin2, two_hours_ago);
1642 ASSERT_TRUE(tester.HistoryContainsURL(kOrigin1));
1643 ASSERT_TRUE(tester.HistoryContainsURL(kOrigin2));
1645 BlockUntilOriginDataRemoved(BrowsingDataRemover::LAST_HOUR,
1646 BrowsingDataRemover::REMOVE_HISTORY, kOrigin2);
1648 EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
1649 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1650 EXPECT_TRUE(tester.HistoryContainsURL(kOrigin1));
1651 EXPECT_TRUE(tester.HistoryContainsURL(kOrigin2));
1654 // Verify that clearing autofill form data works.
1655 TEST_F(BrowsingDataRemoverTest, AutofillRemovalLastHour) {
1656 GetProfile()->CreateWebDataService();
1657 RemoveAutofillTester tester(GetProfile());
1659 ASSERT_FALSE(tester.HasProfile());
1660 tester.AddProfilesAndCards();
1661 ASSERT_TRUE(tester.HasProfile());
1663 BlockUntilBrowsingDataRemoved(
1664 BrowsingDataRemover::LAST_HOUR,
1665 BrowsingDataRemover::REMOVE_FORM_DATA, false);
1667 EXPECT_EQ(BrowsingDataRemover::REMOVE_FORM_DATA, GetRemovalMask());
1668 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1669 ASSERT_FALSE(tester.HasProfile());
1672 TEST_F(BrowsingDataRemoverTest, AutofillRemovalEverything) {
1673 GetProfile()->CreateWebDataService();
1674 RemoveAutofillTester tester(GetProfile());
1676 ASSERT_FALSE(tester.HasProfile());
1677 tester.AddProfilesAndCards();
1678 ASSERT_TRUE(tester.HasProfile());
1680 BlockUntilBrowsingDataRemoved(
1681 BrowsingDataRemover::EVERYTHING,
1682 BrowsingDataRemover::REMOVE_FORM_DATA, false);
1684 EXPECT_EQ(BrowsingDataRemover::REMOVE_FORM_DATA, GetRemovalMask());
1685 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1686 ASSERT_FALSE(tester.HasProfile());
1689 // Verify that clearing autofill form data works.
1690 TEST_F(BrowsingDataRemoverTest, AutofillOriginsRemovedWithHistory) {
1691 GetProfile()->CreateWebDataService();
1692 RemoveAutofillTester tester(GetProfile());
1694 tester.AddProfilesAndCards();
1695 EXPECT_FALSE(tester.HasOrigin(std::string()));
1696 EXPECT_TRUE(tester.HasOrigin(kWebOrigin));
1697 EXPECT_TRUE(tester.HasOrigin(kChromeOrigin));
1699 BlockUntilBrowsingDataRemoved(
1700 BrowsingDataRemover::LAST_HOUR,
1701 BrowsingDataRemover::REMOVE_HISTORY, false);
1703 EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
1704 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1705 EXPECT_TRUE(tester.HasOrigin(std::string()));
1706 EXPECT_FALSE(tester.HasOrigin(kWebOrigin));
1707 EXPECT_TRUE(tester.HasOrigin(kChromeOrigin));
1710 TEST_F(BrowsingDataRemoverTest, CompletionInhibition) {
1711 // The |completion_inhibitor| on the stack should prevent removal sessions
1712 // from completing until after ContinueToCompletion() is called.
1713 BrowsingDataRemoverCompletionInhibitor completion_inhibitor;
1715 called_with_details_.reset(new BrowsingDataRemover::NotificationDetails());
1717 // BrowsingDataRemover deletes itself when it completes.
1718 BrowsingDataRemover* remover = BrowsingDataRemover::CreateForPeriod(
1719 GetProfile(), BrowsingDataRemover::EVERYTHING);
1720 remover->Remove(BrowsingDataRemover::REMOVE_HISTORY,
1721 BrowsingDataHelper::UNPROTECTED_WEB);
1723 // Process messages until the inhibitor is notified, and then some, to make
1724 // sure we do not complete asynchronously before ContinueToCompletion() is
1725 // called.
1726 completion_inhibitor.BlockUntilNearCompletion();
1727 base::RunLoop().RunUntilIdle();
1729 // Verify that the completion notification has not yet been broadcasted.
1730 EXPECT_EQ(-1, GetRemovalMask());
1731 EXPECT_EQ(-1, GetOriginSetMask());
1733 // Now run the removal process until completion, and verify that observers are
1734 // now notified, and the notifications is sent out.
1735 BrowsingDataRemoverCompletionObserver completion_observer(remover);
1736 completion_inhibitor.ContinueToCompletion();
1737 completion_observer.BlockUntilCompletion();
1739 EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
1740 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1743 TEST_F(BrowsingDataRemoverTest, ZeroSuggestCacheClear) {
1744 PrefService* prefs = GetProfile()->GetPrefs();
1745 prefs->SetString(prefs::kZeroSuggestCachedResults,
1746 "[\"\", [\"foo\", \"bar\"]]");
1747 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1748 BrowsingDataRemover::REMOVE_COOKIES,
1749 false);
1751 // Expect the prefs to be cleared when cookies are removed.
1752 EXPECT_TRUE(prefs->GetString(prefs::kZeroSuggestCachedResults).empty());
1753 EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask());
1754 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1757 #if defined(OS_CHROMEOS)
1758 TEST_F(BrowsingDataRemoverTest, ContentProtectionPlatformKeysRemoval) {
1759 chromeos::ScopedTestDeviceSettingsService test_device_settings_service;
1760 chromeos::ScopedTestCrosSettings test_cros_settings;
1761 chromeos::MockUserManager* mock_user_manager =
1762 new testing::NiceMock<chromeos::MockUserManager>();
1763 mock_user_manager->SetActiveUser("test@example.com");
1764 chromeos::ScopedUserManagerEnabler user_manager_enabler(mock_user_manager);
1766 scoped_ptr<chromeos::DBusThreadManagerSetter> dbus_setter =
1767 chromeos::DBusThreadManager::GetSetterForTesting();
1768 chromeos::MockCryptohomeClient* cryptohome_client =
1769 new chromeos::MockCryptohomeClient;
1770 dbus_setter->SetCryptohomeClient(
1771 scoped_ptr<chromeos::CryptohomeClient>(cryptohome_client));
1773 // Expect exactly one call. No calls means no attempt to delete keys and more
1774 // than one call means a significant performance problem.
1775 EXPECT_CALL(*cryptohome_client, TpmAttestationDeleteKeys(_, _, _, _))
1776 .WillOnce(WithArgs<3>(Invoke(FakeDBusCall)));
1778 BlockUntilBrowsingDataRemoved(
1779 BrowsingDataRemover::EVERYTHING,
1780 BrowsingDataRemover::REMOVE_CONTENT_LICENSES, false);
1782 chromeos::DBusThreadManager::Shutdown();
1784 #endif
1786 TEST_F(BrowsingDataRemoverTest, DomainReliability_Null) {
1787 ClearDomainReliabilityTester tester(GetProfile());
1789 EXPECT_EQ(0u, tester.clear_count());
1792 TEST_F(BrowsingDataRemoverTest, DomainReliability_Beacons) {
1793 ClearDomainReliabilityTester tester(GetProfile());
1795 BlockUntilBrowsingDataRemoved(
1796 BrowsingDataRemover::EVERYTHING,
1797 BrowsingDataRemover::REMOVE_HISTORY, false);
1798 EXPECT_EQ(1u, tester.clear_count());
1799 EXPECT_EQ(CLEAR_BEACONS, tester.last_clear_mode());
1802 TEST_F(BrowsingDataRemoverTest, DomainReliability_Contexts) {
1803 ClearDomainReliabilityTester tester(GetProfile());
1805 BlockUntilBrowsingDataRemoved(
1806 BrowsingDataRemover::EVERYTHING,
1807 BrowsingDataRemover::REMOVE_COOKIES, false);
1808 EXPECT_EQ(1u, tester.clear_count());
1809 EXPECT_EQ(CLEAR_CONTEXTS, tester.last_clear_mode());
1812 TEST_F(BrowsingDataRemoverTest, DomainReliability_ContextsWin) {
1813 ClearDomainReliabilityTester tester(GetProfile());
1815 BlockUntilBrowsingDataRemoved(
1816 BrowsingDataRemover::EVERYTHING,
1817 BrowsingDataRemover::REMOVE_HISTORY |
1818 BrowsingDataRemover::REMOVE_COOKIES, false);
1819 EXPECT_EQ(1u, tester.clear_count());
1820 EXPECT_EQ(CLEAR_CONTEXTS, tester.last_clear_mode());
1823 TEST_F(BrowsingDataRemoverTest, DomainReliability_ProtectedOrigins) {
1824 ClearDomainReliabilityTester tester(GetProfile());
1826 BlockUntilBrowsingDataRemoved(
1827 BrowsingDataRemover::EVERYTHING,
1828 BrowsingDataRemover::REMOVE_COOKIES, true);
1829 EXPECT_EQ(1u, tester.clear_count());
1830 EXPECT_EQ(CLEAR_CONTEXTS, tester.last_clear_mode());
1833 TEST_F(BrowsingDataRemoverTest, DomainReliability_NoMonitor) {
1834 BlockUntilBrowsingDataRemoved(
1835 BrowsingDataRemover::EVERYTHING,
1836 BrowsingDataRemover::REMOVE_HISTORY |
1837 BrowsingDataRemover::REMOVE_COOKIES, false);