OLD | NEW |
| (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 } | |
OLD | NEW |