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

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

Issue 10805015: Move browsing_data_helper files into a separate directory. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix chrome_frame build Created 8 years, 5 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 | Annotate | Revision Log
OLDNEW
(Empty)
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.
4
5 #include "chrome/browser/browsing_data_remover.h"
6
7 #include <set>
8 #include <vector>
9
10 #include "base/bind.h"
11 #include "base/bind_helpers.h"
12 #include "base/file_path.h"
13 #include "base/file_util.h"
14 #include "base/message_loop.h"
15 #include "base/platform_file.h"
16 #include "base/utf_string_conversions.h"
17 #include "chrome/browser/browsing_data_helper.h"
18 #include "chrome/browser/extensions/mock_extension_special_storage_policy.h"
19 #include "chrome/browser/history/history.h"
20 #include "chrome/browser/history/history_service_factory.h"
21 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
22 #include "chrome/common/chrome_notification_types.h"
23 #include "chrome/common/pref_names.h"
24 #include "chrome/test/base/testing_browser_process.h"
25 #include "chrome/test/base/testing_pref_service.h"
26 #include "chrome/test/base/testing_profile.h"
27 #include "content/public/browser/dom_storage_context.h"
28 #include "content/public/browser/notification_service.h"
29 #include "content/public/test/test_browser_thread.h"
30 #include "net/base/server_bound_cert_service.h"
31 #include "net/base/server_bound_cert_store.h"
32 #include "net/base/ssl_client_cert_type.h"
33 #include "net/cookies/cookie_monster.h"
34 #include "net/url_request/url_request_context.h"
35 #include "net/url_request/url_request_context_getter.h"
36 #include "testing/gtest/include/gtest/gtest.h"
37 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebCString.h "
38 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
39 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h"
40 #include "webkit/glue/webkit_glue.h"
41 #include "webkit/quota/mock_quota_manager.h"
42 #include "webkit/quota/quota_manager.h"
43 #include "webkit/quota/quota_types.h"
44
45 using content::BrowserThread;
46
47 namespace {
48
49 const char kTestOrigin1[] = "http://host1:1/";
50 const char kTestOrigin2[] = "http://host2:1/";
51 const char kTestOrigin3[] = "http://host3:1/";
52 const char kTestOriginExt[] = "chrome-extension://abcdefghijklmnopqrstuvwxyz/";
53 const char kTestOriginDevTools[] = "chrome-devtools://abcdefghijklmnopqrstuvw/";
54
55 const GURL kOrigin1(kTestOrigin1);
56 const GURL kOrigin2(kTestOrigin2);
57 const GURL kOrigin3(kTestOrigin3);
58 const GURL kOriginExt(kTestOriginExt);
59 const GURL kOriginDevTools(kTestOriginDevTools);
60
61 const FilePath::CharType kDomStorageOrigin1[] =
62 FILE_PATH_LITERAL("http_host1_1.localstorage");
63
64 const FilePath::CharType kDomStorageOrigin2[] =
65 FILE_PATH_LITERAL("http_host2_1.localstorage");
66
67 const FilePath::CharType kDomStorageOrigin3[] =
68 FILE_PATH_LITERAL("http_host3_1.localstorage");
69
70 const FilePath::CharType kDomStorageExt[] = FILE_PATH_LITERAL(
71 "chrome-extension_abcdefghijklmnopqrstuvwxyz_0.localstorage");
72
73 const quota::StorageType kTemporary = quota::kStorageTypeTemporary;
74 const quota::StorageType kPersistent = quota::kStorageTypePersistent;
75
76 const quota::QuotaClient::ID kClientFile = quota::QuotaClient::kFileSystem;
77 const quota::QuotaClient::ID kClientDB = quota::QuotaClient::kIndexedDatabase;
78
79 } // namespace
80
81 class BrowsingDataRemoverTester : public BrowsingDataRemover::Observer {
82 public:
83 BrowsingDataRemoverTester()
84 : start_(false),
85 already_quit_(false) {}
86 virtual ~BrowsingDataRemoverTester() {}
87
88 void BlockUntilNotified() {
89 if (!already_quit_) {
90 DCHECK(!start_);
91 start_ = true;
92 MessageLoop::current()->Run();
93 } else {
94 DCHECK(!start_);
95 already_quit_ = false;
96 }
97 }
98
99 protected:
100 // BrowsingDataRemover::Observer implementation.
101 virtual void OnBrowsingDataRemoverDone() {
102 Notify();
103 }
104
105 void Notify() {
106 if (start_) {
107 DCHECK(!already_quit_);
108 MessageLoop::current()->Quit();
109 start_ = false;
110 } else {
111 DCHECK(!already_quit_);
112 already_quit_ = true;
113 }
114 }
115
116 private:
117 // Helps prevent from running message_loop, if the callback invoked
118 // immediately.
119 bool start_;
120 bool already_quit_;
121
122 DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverTester);
123 };
124
125 // Testers -------------------------------------------------------------------
126
127 class RemoveCookieTester : public BrowsingDataRemoverTester {
128 public:
129 RemoveCookieTester() : get_cookie_success_(false) {
130 }
131
132 // Returns true, if the given cookie exists in the cookie store.
133 bool ContainsCookie() {
134 get_cookie_success_ = false;
135 monster_->GetCookiesWithOptionsAsync(
136 kOrigin1, net::CookieOptions(),
137 base::Bind(&RemoveCookieTester::GetCookieCallback,
138 base::Unretained(this)));
139 BlockUntilNotified();
140 return get_cookie_success_;
141 }
142
143 void AddCookie() {
144 monster_->SetCookieWithOptionsAsync(
145 kOrigin1, "A=1", net::CookieOptions(),
146 base::Bind(&RemoveCookieTester::SetCookieCallback,
147 base::Unretained(this)));
148 BlockUntilNotified();
149 }
150
151 protected:
152 void SetMonster(net::CookieStore* monster) {
153 monster_ = monster;
154 }
155
156 private:
157 void GetCookieCallback(const std::string& cookies) {
158 if (cookies == "A=1") {
159 get_cookie_success_ = true;
160 } else {
161 EXPECT_EQ("", cookies);
162 get_cookie_success_ = false;
163 }
164 Notify();
165 }
166
167 void SetCookieCallback(bool result) {
168 ASSERT_TRUE(result);
169 Notify();
170 }
171
172 bool get_cookie_success_;
173
174 net::CookieStore* monster_;
175
176 DISALLOW_COPY_AND_ASSIGN(RemoveCookieTester);
177 };
178
179 class RemoveProfileCookieTester : public RemoveCookieTester {
180 public:
181 explicit RemoveProfileCookieTester(TestingProfile* profile) {
182 profile->CreateRequestContext();
183 SetMonster(profile->GetRequestContext()->GetURLRequestContext()->
184 cookie_store()->GetCookieMonster());
185 }
186 };
187
188 #if defined(ENABLE_SAFE_BROWSING)
189 class RemoveSafeBrowsingCookieTester : public RemoveCookieTester {
190 public:
191 RemoveSafeBrowsingCookieTester()
192 : browser_process_(
193 static_cast<TestingBrowserProcess*>(g_browser_process)) {
194 scoped_refptr<SafeBrowsingService> sb_service =
195 SafeBrowsingService::CreateSafeBrowsingService();
196 browser_process_->SetSafeBrowsingService(sb_service);
197 sb_service->Initialize();
198 MessageLoop::current()->RunAllPending();
199
200 // Create a cookiemonster that does not have persistant storage, and replace
201 // the SafeBrowsingService created one with it.
202 net::CookieStore* monster = new net::CookieMonster(NULL, NULL);
203 sb_service->url_request_context()->GetURLRequestContext()->
204 set_cookie_store(monster);
205 SetMonster(monster);
206 }
207
208 virtual ~RemoveSafeBrowsingCookieTester() {
209 browser_process_->safe_browsing_service()->ShutDown();
210 MessageLoop::current()->RunAllPending();
211 browser_process_->SetSafeBrowsingService(NULL);
212 }
213
214 private:
215 TestingBrowserProcess* browser_process_;
216
217 DISALLOW_COPY_AND_ASSIGN(RemoveSafeBrowsingCookieTester);
218 };
219 #endif
220
221 class RemoveServerBoundCertTester : public BrowsingDataRemoverTester {
222 public:
223 explicit RemoveServerBoundCertTester(TestingProfile* profile) {
224 profile->CreateRequestContext();
225 server_bound_cert_service_ = profile->GetRequestContext()->
226 GetURLRequestContext()->server_bound_cert_service();
227 }
228
229 int ServerBoundCertCount() {
230 return server_bound_cert_service_->cert_count();
231 }
232
233 // Add a server bound cert for |server| with specific creation and expiry
234 // times. The cert and key data will be filled with dummy values.
235 void AddServerBoundCertWithTimes(const std::string& server_identifier,
236 base::Time creation_time,
237 base::Time expiration_time) {
238 GetCertStore()->SetServerBoundCert(server_identifier,
239 net::CLIENT_CERT_RSA_SIGN, creation_time,
240 expiration_time, "a", "b");
241 }
242
243 // Add a server bound cert for |server|, with the current time as the
244 // creation time. The cert and key data will be filled with dummy values.
245 void AddServerBoundCert(const std::string& server_identifier) {
246 base::Time now = base::Time::Now();
247 AddServerBoundCertWithTimes(server_identifier,
248 now,
249 now + base::TimeDelta::FromDays(1));
250 }
251
252 net::ServerBoundCertStore* GetCertStore() {
253 return server_bound_cert_service_->GetCertStore();
254 }
255
256 private:
257 net::ServerBoundCertService* server_bound_cert_service_;
258
259 net::SSLClientCertType type_;
260 std::string key_;
261 std::string cert_;
262
263 DISALLOW_COPY_AND_ASSIGN(RemoveServerBoundCertTester);
264 };
265
266 class RemoveHistoryTester : public BrowsingDataRemoverTester {
267 public:
268 explicit RemoveHistoryTester(TestingProfile* profile)
269 : query_url_success_(false) {
270 profile->CreateHistoryService(true, false);
271 history_service_ = HistoryServiceFactory::GetForProfile(
272 profile, Profile::EXPLICIT_ACCESS);
273 }
274
275 // Returns true, if the given URL exists in the history service.
276 bool HistoryContainsURL(const GURL& url) {
277 history_service_->QueryURL(
278 url,
279 true,
280 &consumer_,
281 base::Bind(&RemoveHistoryTester::SaveResultAndQuit,
282 base::Unretained(this)));
283 BlockUntilNotified();
284 return query_url_success_;
285 }
286
287 void AddHistory(const GURL& url, base::Time time) {
288 history_service_->AddPage(url, time, NULL, 0, GURL(),
289 content::PAGE_TRANSITION_LINK, history::RedirectList(),
290 history::SOURCE_BROWSED, false);
291 }
292
293 private:
294 // Callback for HistoryService::QueryURL.
295 void SaveResultAndQuit(HistoryService::Handle,
296 bool success,
297 const history::URLRow*,
298 history::VisitVector*) {
299 query_url_success_ = success;
300 Notify();
301 }
302
303
304 // For History requests.
305 CancelableRequestConsumer consumer_;
306 bool query_url_success_;
307
308 // TestingProfile owns the history service; we shouldn't delete it.
309 HistoryService* history_service_;
310
311 DISALLOW_COPY_AND_ASSIGN(RemoveHistoryTester);
312 };
313
314 class RemoveLocalStorageTester : public BrowsingDataRemoverTester {
315 public:
316 explicit RemoveLocalStorageTester(TestingProfile* profile)
317 : profile_(profile), dom_storage_context_(NULL) {
318 dom_storage_context_ =
319 content::BrowserContext::GetDefaultDOMStorageContext(profile);
320 }
321
322 // Returns true, if the given origin URL exists.
323 bool DOMStorageExistsForOrigin(const GURL& origin) {
324 GetUsageInfo();
325 BlockUntilNotified();
326 for (size_t i = 0; i < infos_.size(); ++i) {
327 if (origin == infos_[i].origin)
328 return true;
329 }
330 return false;
331 }
332
333 void AddDOMStorageTestData() {
334 // Note: This test depends on details of how the dom_storage library
335 // stores data in the host file system.
336 FilePath storage_path = profile_->GetPath().AppendASCII("Local Storage");
337 file_util::CreateDirectory(storage_path);
338
339 // Write some files.
340 file_util::WriteFile(storage_path.Append(kDomStorageOrigin1), NULL, 0);
341 file_util::WriteFile(storage_path.Append(kDomStorageOrigin2), NULL, 0);
342 file_util::WriteFile(storage_path.Append(kDomStorageOrigin3), NULL, 0);
343 file_util::WriteFile(storage_path.Append(kDomStorageExt), NULL, 0);
344
345 // Tweak their dates.
346 file_util::SetLastModifiedTime(storage_path.Append(kDomStorageOrigin1),
347 base::Time::Now());
348 file_util::SetLastModifiedTime(storage_path.Append(kDomStorageOrigin2),
349 base::Time::Now() - base::TimeDelta::FromDays(1));
350 file_util::SetLastModifiedTime(storage_path.Append(kDomStorageOrigin3),
351 base::Time::Now() - base::TimeDelta::FromDays(60));
352 file_util::SetLastModifiedTime(storage_path.Append(kDomStorageExt),
353 base::Time::Now());
354 }
355
356 private:
357 void GetUsageInfo() {
358 dom_storage_context_->GetUsageInfo(
359 base::Bind(&RemoveLocalStorageTester::OnGotUsageInfo,
360 base::Unretained(this)));
361 }
362 void OnGotUsageInfo(
363 const std::vector<dom_storage::DomStorageContext::UsageInfo>& infos) {
364 infos_ = infos;
365 Notify();
366 }
367
368 // We don't own these pointers.
369 TestingProfile* profile_;
370 content::DOMStorageContext* dom_storage_context_;
371
372 std::vector<dom_storage::DomStorageContext::UsageInfo> infos_;
373
374 DISALLOW_COPY_AND_ASSIGN(RemoveLocalStorageTester);
375 };
376 class RemoveQuotaManagedDataTester : public BrowsingDataRemoverTester {
377 public:
378 RemoveQuotaManagedDataTester() {}
379 virtual ~RemoveQuotaManagedDataTester() {}
380
381 void PopulateTestQuotaManagedData(quota::MockQuotaManager* manager) {
382 // Set up kOrigin1 with a temporary quota, kOrigin2 with a persistent
383 // quota, and kOrigin3 with both. kOrigin1 is modified now, kOrigin2
384 // is modified at the beginning of time, and kOrigin3 is modified one day
385 // ago.
386 PopulateTestQuotaManagedPersistentData(manager);
387 PopulateTestQuotaManagedTemporaryData(manager);
388 }
389
390 void PopulateTestQuotaManagedNonBrowsingData(
391 quota::MockQuotaManager* manager) {
392 manager->AddOrigin(kOriginDevTools, kTemporary, kClientFile, base::Time());
393 manager->AddOrigin(kOriginDevTools, kPersistent, kClientFile, base::Time());
394 manager->AddOrigin(kOriginExt, kTemporary, kClientFile, base::Time());
395 manager->AddOrigin(kOriginExt, kPersistent, kClientFile, base::Time());
396 }
397
398 void PopulateTestQuotaManagedPersistentData(
399 quota::MockQuotaManager* manager) {
400 manager->AddOrigin(kOrigin2, kPersistent, kClientFile, base::Time());
401 manager->AddOrigin(kOrigin3, kPersistent, kClientFile,
402 base::Time::Now() - base::TimeDelta::FromDays(1));
403
404 EXPECT_FALSE(manager->OriginHasData(kOrigin1, kPersistent, kClientFile));
405 EXPECT_TRUE(manager->OriginHasData(kOrigin2, kPersistent, kClientFile));
406 EXPECT_TRUE(manager->OriginHasData(kOrigin3, kPersistent, kClientFile));
407 }
408
409 void PopulateTestQuotaManagedTemporaryData(quota::MockQuotaManager* manager) {
410 manager->AddOrigin(kOrigin1, kTemporary, kClientFile, base::Time::Now());
411 manager->AddOrigin(kOrigin3, kTemporary, kClientFile,
412 base::Time::Now() - base::TimeDelta::FromDays(1));
413
414 EXPECT_TRUE(manager->OriginHasData(kOrigin1, kTemporary, kClientFile));
415 EXPECT_FALSE(manager->OriginHasData(kOrigin2, kTemporary, kClientFile));
416 EXPECT_TRUE(manager->OriginHasData(kOrigin3, kTemporary, kClientFile));
417 }
418
419 private:
420 DISALLOW_COPY_AND_ASSIGN(RemoveQuotaManagedDataTester);
421 };
422
423 // Test Class ----------------------------------------------------------------
424
425 class BrowsingDataRemoverTest : public testing::Test,
426 public content::NotificationObserver {
427 public:
428 BrowsingDataRemoverTest()
429 : ui_thread_(BrowserThread::UI, &message_loop_),
430 db_thread_(BrowserThread::DB, &message_loop_),
431 webkit_thread_(BrowserThread::WEBKIT_DEPRECATED, &message_loop_),
432 file_thread_(BrowserThread::FILE, &message_loop_),
433 file_user_blocking_thread_(
434 BrowserThread::FILE_USER_BLOCKING, &message_loop_),
435 io_thread_(BrowserThread::IO, &message_loop_),
436 profile_(new TestingProfile()) {
437 registrar_.Add(this, chrome::NOTIFICATION_BROWSING_DATA_REMOVED,
438 content::Source<Profile>(profile_.get()));
439 }
440
441 virtual ~BrowsingDataRemoverTest() {
442 }
443
444 void TearDown() {
445 // TestingProfile contains a DOMStorageContext. BrowserContext's destructor
446 // posts a message to the WEBKIT thread to delete some of its member
447 // variables. We need to ensure that the profile is destroyed, and that
448 // the message loop is cleared out, before destroying the threads and loop.
449 // Otherwise we leak memory.
450 profile_.reset();
451 message_loop_.RunAllPending();
452 }
453
454 void BlockUntilBrowsingDataRemoved(BrowsingDataRemover::TimePeriod period,
455 int remove_mask,
456 bool include_protected_origins,
457 BrowsingDataRemoverTester* tester) {
458 BrowsingDataRemover* remover = new BrowsingDataRemover(
459 profile_.get(), period,
460 base::Time::Now() + base::TimeDelta::FromMilliseconds(10));
461 remover->OverrideQuotaManagerForTesting(GetMockManager());
462 remover->AddObserver(tester);
463
464 called_with_details_.reset(new BrowsingDataRemover::NotificationDetails());
465
466 // BrowsingDataRemover deletes itself when it completes.
467 int origin_set_mask = BrowsingDataHelper::UNPROTECTED_WEB;
468 if (include_protected_origins)
469 origin_set_mask |= BrowsingDataHelper::PROTECTED_WEB;
470 remover->Remove(remove_mask, origin_set_mask);
471 tester->BlockUntilNotified();
472 }
473
474 void BlockUntilOriginDataRemoved(BrowsingDataRemover::TimePeriod period,
475 int remove_mask,
476 const GURL& remove_origin,
477 BrowsingDataRemoverTester* tester) {
478 BrowsingDataRemover* remover = new BrowsingDataRemover(
479 profile_.get(), period,
480 base::Time::Now() + base::TimeDelta::FromMilliseconds(10));
481 remover->OverrideQuotaManagerForTesting(GetMockManager());
482 remover->AddObserver(tester);
483
484 called_with_details_.reset(new BrowsingDataRemover::NotificationDetails());
485
486 // BrowsingDataRemover deletes itself when it completes.
487 remover->RemoveImpl(remove_mask, remove_origin,
488 BrowsingDataHelper::UNPROTECTED_WEB);
489 tester->BlockUntilNotified();
490 }
491
492 TestingProfile* GetProfile() {
493 return profile_.get();
494 }
495
496 base::Time GetBeginTime() {
497 return called_with_details_->removal_begin;
498 }
499
500 int GetRemovalMask() {
501 return called_with_details_->removal_mask;
502 }
503
504 int GetOriginSetMask() {
505 return called_with_details_->origin_set_mask;
506 }
507
508 quota::MockQuotaManager* GetMockManager() {
509 if (!quota_manager_) {
510 quota_manager_ = new quota::MockQuotaManager(
511 profile_->IsOffTheRecord(),
512 profile_->GetPath(),
513 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO),
514 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB),
515 profile_->GetExtensionSpecialStoragePolicy());
516 }
517 return quota_manager_;
518 }
519
520 // content::NotificationObserver implementation.
521 virtual void Observe(int type,
522 const content::NotificationSource& source,
523 const content::NotificationDetails& details) OVERRIDE {
524 DCHECK_EQ(type, chrome::NOTIFICATION_BROWSING_DATA_REMOVED);
525
526 // We're not taking ownership of the details object, but storing a copy of
527 // it locally.
528 called_with_details_.reset(new BrowsingDataRemover::NotificationDetails(
529 *content::Details<BrowsingDataRemover::NotificationDetails>(
530 details).ptr()));
531
532 registrar_.RemoveAll();
533 }
534
535 protected:
536 RemoveQuotaManagedDataTester tester_;
537
538 private:
539 scoped_ptr<BrowsingDataRemover::NotificationDetails> called_with_details_;
540 content::NotificationRegistrar registrar_;
541
542 // message_loop_, as well as all the threads associated with it must be
543 // defined before profile_ to prevent explosions. Oh how I love C++.
544 MessageLoopForUI message_loop_;
545 content::TestBrowserThread ui_thread_;
546 content::TestBrowserThread db_thread_;
547 content::TestBrowserThread webkit_thread_;
548 content::TestBrowserThread file_thread_;
549 content::TestBrowserThread file_user_blocking_thread_;
550 content::TestBrowserThread io_thread_;
551 scoped_ptr<TestingProfile> profile_;
552 scoped_refptr<quota::MockQuotaManager> quota_manager_;
553
554 DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverTest);
555 };
556
557 // Tests ---------------------------------------------------------------------
558
559 TEST_F(BrowsingDataRemoverTest, RemoveCookieForever) {
560 scoped_ptr<RemoveProfileCookieTester> tester(
561 new RemoveProfileCookieTester(GetProfile()));
562
563 tester->AddCookie();
564 ASSERT_TRUE(tester->ContainsCookie());
565
566 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
567 BrowsingDataRemover::REMOVE_COOKIES, false, tester.get());
568
569 EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask());
570 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
571 EXPECT_FALSE(tester->ContainsCookie());
572 }
573
574 TEST_F(BrowsingDataRemoverTest, RemoveCookieLastHour) {
575 scoped_ptr<RemoveProfileCookieTester> tester(
576 new RemoveProfileCookieTester(GetProfile()));
577
578 tester->AddCookie();
579 ASSERT_TRUE(tester->ContainsCookie());
580
581 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
582 BrowsingDataRemover::REMOVE_COOKIES, false, tester.get());
583
584 EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask());
585 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
586 EXPECT_FALSE(tester->ContainsCookie());
587 }
588
589 #if defined(ENABLE_SAFE_BROWSING)
590 TEST_F(BrowsingDataRemoverTest, RemoveSafeBrowsingCookieForever) {
591 scoped_ptr<RemoveSafeBrowsingCookieTester> tester(
592 new RemoveSafeBrowsingCookieTester());
593
594 tester->AddCookie();
595 ASSERT_TRUE(tester->ContainsCookie());
596
597 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
598 BrowsingDataRemover::REMOVE_COOKIES, false, tester.get());
599
600 EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask());
601 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
602 EXPECT_FALSE(tester->ContainsCookie());
603 }
604
605 TEST_F(BrowsingDataRemoverTest, RemoveSafeBrowsingCookieLastHour) {
606 scoped_ptr<RemoveSafeBrowsingCookieTester> tester(
607 new RemoveSafeBrowsingCookieTester());
608
609 tester->AddCookie();
610 ASSERT_TRUE(tester->ContainsCookie());
611
612 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
613 BrowsingDataRemover::REMOVE_COOKIES, false, tester.get());
614
615 EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask());
616 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
617 // Removing with time period other than EVERYTHING should not clear safe
618 // browsing cookies.
619 EXPECT_TRUE(tester->ContainsCookie());
620 }
621 #endif
622
623 TEST_F(BrowsingDataRemoverTest, RemoveServerBoundCertForever) {
624 scoped_ptr<RemoveServerBoundCertTester> tester(
625 new RemoveServerBoundCertTester(GetProfile()));
626
627 tester->AddServerBoundCert(kTestOrigin1);
628 EXPECT_EQ(1, tester->ServerBoundCertCount());
629
630 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
631 BrowsingDataRemover::REMOVE_SERVER_BOUND_CERTS, false, tester.get());
632
633 EXPECT_EQ(BrowsingDataRemover::REMOVE_SERVER_BOUND_CERTS, GetRemovalMask());
634 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
635 EXPECT_EQ(0, tester->ServerBoundCertCount());
636 }
637
638 TEST_F(BrowsingDataRemoverTest, RemoveServerBoundCertLastHour) {
639 scoped_ptr<RemoveServerBoundCertTester> tester(
640 new RemoveServerBoundCertTester(GetProfile()));
641
642 base::Time now = base::Time::Now();
643 tester->AddServerBoundCert(kTestOrigin1);
644 tester->AddServerBoundCertWithTimes(kTestOrigin2,
645 now - base::TimeDelta::FromHours(2),
646 now);
647 EXPECT_EQ(2, tester->ServerBoundCertCount());
648
649 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
650 BrowsingDataRemover::REMOVE_SERVER_BOUND_CERTS, false, tester.get());
651
652 EXPECT_EQ(BrowsingDataRemover::REMOVE_SERVER_BOUND_CERTS, GetRemovalMask());
653 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
654 EXPECT_EQ(1, tester->ServerBoundCertCount());
655 net::ServerBoundCertStore::ServerBoundCertList certs;
656 tester->GetCertStore()->GetAllServerBoundCerts(&certs);
657 EXPECT_EQ(kTestOrigin2, certs.front().server_identifier());
658 }
659
660 TEST_F(BrowsingDataRemoverTest, RemoveUnprotectedLocalStorageForever) {
661 // Protect kOrigin1.
662 scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
663 new MockExtensionSpecialStoragePolicy;
664 mock_policy->AddProtected(kOrigin1.GetOrigin());
665 GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy);
666
667 scoped_ptr<RemoveLocalStorageTester> tester(
668 new RemoveLocalStorageTester(GetProfile()));
669
670 tester->AddDOMStorageTestData();
671 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOrigin1));
672 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOrigin2));
673 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOrigin3));
674 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOriginExt));
675
676 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
677 BrowsingDataRemover::REMOVE_LOCAL_STORAGE, false, &tester_);
678
679 EXPECT_EQ(BrowsingDataRemover::REMOVE_LOCAL_STORAGE, GetRemovalMask());
680 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
681 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOrigin1));
682 EXPECT_FALSE(tester->DOMStorageExistsForOrigin(kOrigin2));
683 EXPECT_FALSE(tester->DOMStorageExistsForOrigin(kOrigin3));
684 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOriginExt));
685 }
686
687 TEST_F(BrowsingDataRemoverTest, RemoveProtectedLocalStorageForever) {
688 // Protect kOrigin1.
689 scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
690 new MockExtensionSpecialStoragePolicy;
691 mock_policy->AddProtected(kOrigin1.GetOrigin());
692 GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy);
693
694 scoped_ptr<RemoveLocalStorageTester> tester(
695 new RemoveLocalStorageTester(GetProfile()));
696
697 tester->AddDOMStorageTestData();
698 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOrigin1));
699 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOrigin2));
700 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOrigin3));
701 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOriginExt));
702
703 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
704 BrowsingDataRemover::REMOVE_LOCAL_STORAGE, true, &tester_);
705
706 EXPECT_EQ(BrowsingDataRemover::REMOVE_LOCAL_STORAGE, GetRemovalMask());
707 EXPECT_EQ(BrowsingDataHelper::PROTECTED_WEB |
708 BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
709 EXPECT_FALSE(tester->DOMStorageExistsForOrigin(kOrigin1));
710 EXPECT_FALSE(tester->DOMStorageExistsForOrigin(kOrigin2));
711 EXPECT_FALSE(tester->DOMStorageExistsForOrigin(kOrigin3));
712 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOriginExt));
713 }
714
715 TEST_F(BrowsingDataRemoverTest, RemoveLocalStorageForLastWeek) {
716 scoped_ptr<RemoveLocalStorageTester> tester(
717 new RemoveLocalStorageTester(GetProfile()));
718
719 tester->AddDOMStorageTestData();
720 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOrigin1));
721 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOrigin2));
722 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOrigin3));
723
724 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_WEEK,
725 BrowsingDataRemover::REMOVE_LOCAL_STORAGE, false, &tester_);
726
727 EXPECT_EQ(BrowsingDataRemover::REMOVE_LOCAL_STORAGE, GetRemovalMask());
728 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
729 EXPECT_FALSE(tester->DOMStorageExistsForOrigin(kOrigin1));
730 EXPECT_FALSE(tester->DOMStorageExistsForOrigin(kOrigin2));
731 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOrigin3));
732 EXPECT_TRUE(tester->DOMStorageExistsForOrigin(kOriginExt));
733 }
734
735 TEST_F(BrowsingDataRemoverTest, RemoveHistoryForever) {
736 scoped_ptr<RemoveHistoryTester> tester(
737 new RemoveHistoryTester(GetProfile()));
738
739 tester->AddHistory(kOrigin1, base::Time::Now());
740 ASSERT_TRUE(tester->HistoryContainsURL(kOrigin1));
741
742 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
743 BrowsingDataRemover::REMOVE_HISTORY, false, tester.get());
744
745 EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
746 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
747 EXPECT_FALSE(tester->HistoryContainsURL(kOrigin1));
748 }
749
750 TEST_F(BrowsingDataRemoverTest, RemoveHistoryForLastHour) {
751 scoped_ptr<RemoveHistoryTester> tester(
752 new RemoveHistoryTester(GetProfile()));
753
754 base::Time two_hours_ago = base::Time::Now() - base::TimeDelta::FromHours(2);
755
756 tester->AddHistory(kOrigin1, base::Time::Now());
757 tester->AddHistory(kOrigin2, two_hours_ago);
758 ASSERT_TRUE(tester->HistoryContainsURL(kOrigin1));
759 ASSERT_TRUE(tester->HistoryContainsURL(kOrigin2));
760
761 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
762 BrowsingDataRemover::REMOVE_HISTORY, false, tester.get());
763
764 EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
765 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
766 EXPECT_FALSE(tester->HistoryContainsURL(kOrigin1));
767 EXPECT_TRUE(tester->HistoryContainsURL(kOrigin2));
768 }
769
770 TEST_F(BrowsingDataRemoverTest, QuotaClientMaskGeneration) {
771 EXPECT_EQ(quota::QuotaClient::kFileSystem,
772 BrowsingDataRemover::GenerateQuotaClientMask(
773 BrowsingDataRemover::REMOVE_FILE_SYSTEMS));
774 EXPECT_EQ(quota::QuotaClient::kDatabase,
775 BrowsingDataRemover::GenerateQuotaClientMask(
776 BrowsingDataRemover::REMOVE_WEBSQL));
777 EXPECT_EQ(quota::QuotaClient::kAppcache,
778 BrowsingDataRemover::GenerateQuotaClientMask(
779 BrowsingDataRemover::REMOVE_APPCACHE));
780 EXPECT_EQ(quota::QuotaClient::kIndexedDatabase,
781 BrowsingDataRemover::GenerateQuotaClientMask(
782 BrowsingDataRemover::REMOVE_INDEXEDDB));
783 EXPECT_EQ(quota::QuotaClient::kFileSystem |
784 quota::QuotaClient::kDatabase |
785 quota::QuotaClient::kAppcache |
786 quota::QuotaClient::kIndexedDatabase,
787 BrowsingDataRemover::GenerateQuotaClientMask(
788 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
789 BrowsingDataRemover::REMOVE_WEBSQL |
790 BrowsingDataRemover::REMOVE_APPCACHE |
791 BrowsingDataRemover::REMOVE_INDEXEDDB));
792 }
793
794 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverBoth) {
795 tester_.PopulateTestQuotaManagedData(GetMockManager());
796 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
797 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
798 BrowsingDataRemover::REMOVE_WEBSQL |
799 BrowsingDataRemover::REMOVE_APPCACHE |
800 BrowsingDataRemover::REMOVE_INDEXEDDB, false, &tester_);
801
802 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
803 BrowsingDataRemover::REMOVE_WEBSQL |
804 BrowsingDataRemover::REMOVE_APPCACHE |
805 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
806 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
807 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
808 kClientFile));
809 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
810 kClientFile));
811 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
812 kClientFile));
813 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
814 kClientFile));
815 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
816 kClientFile));
817 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
818 kClientFile));
819 }
820
821 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverOnlyTemporary) {
822 tester_.PopulateTestQuotaManagedTemporaryData(GetMockManager());
823 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
824 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
825 BrowsingDataRemover::REMOVE_WEBSQL |
826 BrowsingDataRemover::REMOVE_APPCACHE |
827 BrowsingDataRemover::REMOVE_INDEXEDDB, false, &tester_);
828
829 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
830 BrowsingDataRemover::REMOVE_WEBSQL |
831 BrowsingDataRemover::REMOVE_APPCACHE |
832 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
833 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
834 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
835 kClientFile));
836 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
837 kClientFile));
838 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
839 kClientFile));
840 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
841 kClientFile));
842 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
843 kClientFile));
844 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
845 kClientFile));
846 }
847
848 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverOnlyPersistent) {
849 tester_.PopulateTestQuotaManagedPersistentData(GetMockManager());
850 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
851 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
852 BrowsingDataRemover::REMOVE_WEBSQL |
853 BrowsingDataRemover::REMOVE_APPCACHE |
854 BrowsingDataRemover::REMOVE_INDEXEDDB, false, &tester_);
855
856 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
857 BrowsingDataRemover::REMOVE_WEBSQL |
858 BrowsingDataRemover::REMOVE_APPCACHE |
859 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
860 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
861 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
862 kClientFile));
863 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
864 kClientFile));
865 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
866 kClientFile));
867 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
868 kClientFile));
869 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
870 kClientFile));
871 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
872 kClientFile));
873 }
874
875 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverNeither) {
876 GetMockManager(); // Creates the QuotaManager instance.
877 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
878 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
879 BrowsingDataRemover::REMOVE_WEBSQL |
880 BrowsingDataRemover::REMOVE_APPCACHE |
881 BrowsingDataRemover::REMOVE_INDEXEDDB, false, &tester_);
882
883 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
884 BrowsingDataRemover::REMOVE_WEBSQL |
885 BrowsingDataRemover::REMOVE_APPCACHE |
886 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
887 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
888 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
889 kClientFile));
890 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
891 kClientFile));
892 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
893 kClientFile));
894 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
895 kClientFile));
896 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
897 kClientFile));
898 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
899 kClientFile));
900 }
901
902 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForeverSpecificOrigin) {
903 tester_.PopulateTestQuotaManagedData(GetMockManager());
904
905 // Remove Origin 1.
906 BlockUntilOriginDataRemoved(BrowsingDataRemover::EVERYTHING,
907 BrowsingDataRemover::REMOVE_APPCACHE |
908 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
909 BrowsingDataRemover::REMOVE_INDEXEDDB |
910 BrowsingDataRemover::REMOVE_WEBSQL, kOrigin1, &tester_);
911
912 EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE |
913 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
914 BrowsingDataRemover::REMOVE_INDEXEDDB |
915 BrowsingDataRemover::REMOVE_WEBSQL, GetRemovalMask());
916 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
917 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
918 kClientFile));
919 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
920 kClientFile));
921 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
922 kClientFile));
923 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
924 kClientFile));
925 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
926 kClientFile));
927 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
928 kClientFile));
929 }
930
931 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForLastHour) {
932 tester_.PopulateTestQuotaManagedData(GetMockManager());
933
934 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_HOUR,
935 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
936 BrowsingDataRemover::REMOVE_WEBSQL |
937 BrowsingDataRemover::REMOVE_APPCACHE |
938 BrowsingDataRemover::REMOVE_INDEXEDDB, false, &tester_);
939
940 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
941 BrowsingDataRemover::REMOVE_WEBSQL |
942 BrowsingDataRemover::REMOVE_APPCACHE |
943 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
944 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
945 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
946 kClientFile));
947 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
948 kClientFile));
949 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
950 kClientFile));
951 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
952 kClientFile));
953 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
954 kClientFile));
955 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
956 kClientFile));
957 }
958
959 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedDataForLastWeek) {
960 tester_.PopulateTestQuotaManagedData(GetMockManager());
961
962 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::LAST_WEEK,
963 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
964 BrowsingDataRemover::REMOVE_WEBSQL |
965 BrowsingDataRemover::REMOVE_APPCACHE |
966 BrowsingDataRemover::REMOVE_INDEXEDDB, false, &tester_);
967
968 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
969 BrowsingDataRemover::REMOVE_WEBSQL |
970 BrowsingDataRemover::REMOVE_APPCACHE |
971 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
972 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
973 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
974 kClientFile));
975 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
976 kClientFile));
977 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
978 kClientFile));
979 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
980 kClientFile));
981 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
982 kClientFile));
983 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
984 kClientFile));
985 }
986
987 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedUnprotectedOrigins) {
988 // Protect kOrigin1.
989 scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
990 new MockExtensionSpecialStoragePolicy;
991 mock_policy->AddProtected(kOrigin1.GetOrigin());
992 GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy);
993
994 tester_.PopulateTestQuotaManagedData(GetMockManager());
995
996 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
997 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
998 BrowsingDataRemover::REMOVE_WEBSQL |
999 BrowsingDataRemover::REMOVE_APPCACHE |
1000 BrowsingDataRemover::REMOVE_INDEXEDDB, false, &tester_);
1001
1002 EXPECT_EQ(BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1003 BrowsingDataRemover::REMOVE_WEBSQL |
1004 BrowsingDataRemover::REMOVE_APPCACHE |
1005 BrowsingDataRemover::REMOVE_INDEXEDDB, GetRemovalMask());
1006 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1007 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
1008 kClientFile));
1009 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
1010 kClientFile));
1011 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
1012 kClientFile));
1013 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
1014 kClientFile));
1015 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
1016 kClientFile));
1017 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
1018 kClientFile));
1019 }
1020
1021 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedProtectedSpecificOrigin) {
1022 // Protect kOrigin1.
1023 scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
1024 new MockExtensionSpecialStoragePolicy;
1025 mock_policy->AddProtected(kOrigin1.GetOrigin());
1026 GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy);
1027
1028 tester_.PopulateTestQuotaManagedData(GetMockManager());
1029
1030 // Try to remove kOrigin1. Expect failure.
1031 BlockUntilOriginDataRemoved(BrowsingDataRemover::EVERYTHING,
1032 BrowsingDataRemover::REMOVE_APPCACHE |
1033 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1034 BrowsingDataRemover::REMOVE_INDEXEDDB |
1035 BrowsingDataRemover::REMOVE_WEBSQL, kOrigin1, &tester_);
1036
1037 EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE |
1038 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1039 BrowsingDataRemover::REMOVE_INDEXEDDB |
1040 BrowsingDataRemover::REMOVE_WEBSQL, GetRemovalMask());
1041 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1042 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
1043 kClientFile));
1044 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
1045 kClientFile));
1046 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
1047 kClientFile));
1048 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
1049 kClientFile));
1050 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
1051 kClientFile));
1052 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
1053 kClientFile));
1054 }
1055
1056 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedProtectedOrigins) {
1057 // Protect kOrigin1.
1058 scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
1059 new MockExtensionSpecialStoragePolicy;
1060 mock_policy->AddProtected(kOrigin1.GetOrigin());
1061 GetProfile()->SetExtensionSpecialStoragePolicy(mock_policy);
1062
1063 tester_.PopulateTestQuotaManagedData(GetMockManager());
1064
1065 // Try to remove kOrigin1. Expect success.
1066 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1067 BrowsingDataRemover::REMOVE_APPCACHE |
1068 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1069 BrowsingDataRemover::REMOVE_INDEXEDDB |
1070 BrowsingDataRemover::REMOVE_WEBSQL, true, &tester_);
1071
1072 EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE |
1073 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1074 BrowsingDataRemover::REMOVE_INDEXEDDB |
1075 BrowsingDataRemover::REMOVE_WEBSQL, GetRemovalMask());
1076 EXPECT_EQ(BrowsingDataHelper::PROTECTED_WEB |
1077 BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1078 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
1079 kClientFile));
1080 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
1081 kClientFile));
1082 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
1083 kClientFile));
1084 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
1085 kClientFile));
1086 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
1087 kClientFile));
1088 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
1089 kClientFile));
1090 }
1091
1092 TEST_F(BrowsingDataRemoverTest, RemoveQuotaManagedIgnoreExtensionsAndDevTools) {
1093 tester_.PopulateTestQuotaManagedNonBrowsingData(GetMockManager());
1094
1095 BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING,
1096 BrowsingDataRemover::REMOVE_APPCACHE |
1097 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1098 BrowsingDataRemover::REMOVE_INDEXEDDB |
1099 BrowsingDataRemover::REMOVE_WEBSQL, false, &tester_);
1100
1101 EXPECT_EQ(BrowsingDataRemover::REMOVE_APPCACHE |
1102 BrowsingDataRemover::REMOVE_FILE_SYSTEMS |
1103 BrowsingDataRemover::REMOVE_INDEXEDDB |
1104 BrowsingDataRemover::REMOVE_WEBSQL, GetRemovalMask());
1105 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1106
1107 // Check that extension and devtools data isn't removed.
1108 EXPECT_TRUE(GetMockManager()->OriginHasData(kOriginExt, kTemporary,
1109 kClientFile));
1110 EXPECT_TRUE(GetMockManager()->OriginHasData(kOriginExt, kPersistent,
1111 kClientFile));
1112 EXPECT_TRUE(GetMockManager()->OriginHasData(kOriginDevTools, kTemporary,
1113 kClientFile));
1114 EXPECT_TRUE(GetMockManager()->OriginHasData(kOriginDevTools, kPersistent,
1115 kClientFile));
1116 }
1117
1118 TEST_F(BrowsingDataRemoverTest, OriginBasedHistoryRemoval) {
1119 scoped_ptr<RemoveHistoryTester> tester(
1120 new RemoveHistoryTester(GetProfile()));
1121
1122 base::Time two_hours_ago = base::Time::Now() - base::TimeDelta::FromHours(2);
1123
1124 tester->AddHistory(kOrigin1, base::Time::Now());
1125 tester->AddHistory(kOrigin2, two_hours_ago);
1126 ASSERT_TRUE(tester->HistoryContainsURL(kOrigin1));
1127 ASSERT_TRUE(tester->HistoryContainsURL(kOrigin2));
1128
1129 BlockUntilOriginDataRemoved(BrowsingDataRemover::EVERYTHING,
1130 BrowsingDataRemover::REMOVE_HISTORY, kOrigin2, tester.get());
1131
1132 EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
1133 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1134 EXPECT_TRUE(tester->HistoryContainsURL(kOrigin1));
1135 EXPECT_FALSE(tester->HistoryContainsURL(kOrigin2));
1136 }
1137
1138 TEST_F(BrowsingDataRemoverTest, OriginAndTimeBasedHistoryRemoval) {
1139 scoped_ptr<RemoveHistoryTester> tester(
1140 new RemoveHistoryTester(GetProfile()));
1141
1142 base::Time two_hours_ago = base::Time::Now() - base::TimeDelta::FromHours(2);
1143
1144 tester->AddHistory(kOrigin1, base::Time::Now());
1145 tester->AddHistory(kOrigin2, two_hours_ago);
1146 ASSERT_TRUE(tester->HistoryContainsURL(kOrigin1));
1147 ASSERT_TRUE(tester->HistoryContainsURL(kOrigin2));
1148
1149 BlockUntilOriginDataRemoved(BrowsingDataRemover::LAST_HOUR,
1150 BrowsingDataRemover::REMOVE_HISTORY, kOrigin2, tester.get());
1151
1152 EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
1153 EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
1154 EXPECT_TRUE(tester->HistoryContainsURL(kOrigin1));
1155 EXPECT_TRUE(tester->HistoryContainsURL(kOrigin2));
1156 }
OLDNEW
« no previous file with comments | « chrome/browser/browsing_data_remover.cc ('k') | chrome/browser/browsing_data_server_bound_cert_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698