Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/file_util.h" | |
| 5 #include "base/files/scoped_temp_dir.h" | 6 #include "base/files/scoped_temp_dir.h" |
| 6 #include "base/message_loop/message_loop_proxy.h" | 7 #include "base/message_loop/message_loop_proxy.h" |
| 7 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
| 8 #include "base/threading/thread.h" | 9 #include "base/threading/thread.h" |
| 9 #include "content/browser/browser_thread_impl.h" | 10 #include "content/browser/browser_thread_impl.h" |
| 10 #include "content/browser/gpu/shader_disk_cache.h" | 11 #include "content/browser/gpu/shader_disk_cache.h" |
| 11 #include "content/browser/storage_partition_impl.h" | 12 #include "content/browser/storage_partition_impl.h" |
| 13 #include "content/public/browser/local_storage_usage_info.h" | |
| 12 #include "content/public/browser/storage_partition.h" | 14 #include "content/public/browser/storage_partition.h" |
| 15 #include "content/public/test/test_browser_context.h" | |
| 16 #include "content/public/test/test_browser_thread.h" | |
| 13 #include "content/public/test/test_browser_thread_bundle.h" | 17 #include "content/public/test/test_browser_thread_bundle.h" |
| 14 #include "net/base/test_completion_callback.h" | 18 #include "net/base/test_completion_callback.h" |
| 19 #include "net/cookies/cookie_monster.h" | |
| 20 #include "net/url_request/url_request_context.h" | |
| 21 #include "net/url_request/url_request_context_getter.h" | |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 23 #include "webkit/browser/quota/mock_quota_manager.h" | |
| 24 #include "webkit/browser/quota/mock_special_storage_policy.h" | |
| 25 #include "webkit/browser/quota/quota_manager.h" | |
| 16 | 26 |
| 17 namespace content { | 27 namespace content { |
| 18 namespace { | 28 namespace { |
| 19 | 29 |
| 30 const int kDefaultClientId = 42; | |
| 31 const char kCacheKey[] = "key"; | |
| 32 const char kCacheValue[] = "cached value"; | |
| 33 | |
| 34 const char kTestOrigin1[] = "http://host1:1/"; | |
| 35 const char kTestOrigin2[] = "http://host2:1/"; | |
| 36 const char kTestOrigin3[] = "http://host3:1/"; | |
| 37 const char kTestOriginDevTools[] = "chrome-devtools://abcdefghijklmnopqrstuvw/"; | |
| 38 | |
| 39 const GURL kOrigin1(kTestOrigin1); | |
| 40 const GURL kOrigin2(kTestOrigin2); | |
| 41 const GURL kOrigin3(kTestOrigin3); | |
| 42 const GURL kOriginDevTools(kTestOriginDevTools); | |
| 43 | |
| 44 const base::FilePath::CharType kDomStorageOrigin1[] = | |
| 45 FILE_PATH_LITERAL("http_host1_1.localstorage"); | |
| 46 | |
| 47 const base::FilePath::CharType kDomStorageOrigin2[] = | |
| 48 FILE_PATH_LITERAL("http_host2_1.localstorage"); | |
| 49 | |
| 50 const base::FilePath::CharType kDomStorageOrigin3[] = | |
| 51 FILE_PATH_LITERAL("http_host3_1.localstorage"); | |
| 52 | |
| 53 const quota::StorageType kTemporary = quota::kStorageTypeTemporary; | |
| 54 const quota::StorageType kPersistent = quota::kStorageTypePersistent; | |
| 55 | |
| 56 const quota::QuotaClient::ID kClientFile = quota::QuotaClient::kFileSystem; | |
| 57 | |
| 58 const uint32 kAllQuotaRemoveMask = | |
| 59 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB | | |
| 60 StoragePartition::REMOVE_DATA_MASK_WEBSQL | | |
| 61 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS | | |
| 62 StoragePartition::REMOVE_DATA_MASK_APPCACHE; | |
| 63 | |
| 20 class TestClosureCallback { | 64 class TestClosureCallback { |
| 21 public: | 65 public: |
| 22 TestClosureCallback() | 66 TestClosureCallback() |
| 23 : callback_(base::Bind( | 67 : callback_(base::Bind( |
| 24 &TestClosureCallback::StopWaiting, base::Unretained(this))) { | 68 &TestClosureCallback::StopWaiting, base::Unretained(this))) { |
| 25 } | 69 } |
| 26 | 70 |
| 27 void WaitForResult() { | 71 void WaitForResult() { |
| 28 wait_run_loop_.reset(new base::RunLoop()); | 72 wait_run_loop_.reset(new base::RunLoop()); |
| 29 wait_run_loop_->Run(); | 73 wait_run_loop_->Run(); |
| 30 } | 74 } |
| 31 | 75 |
| 32 const base::Closure& callback() { return callback_; } | 76 const base::Closure& callback() { return callback_; } |
| 33 | 77 |
| 34 private: | 78 private: |
| 35 void StopWaiting() { | 79 void StopWaiting() { |
| 36 wait_run_loop_->Quit(); | 80 wait_run_loop_->Quit(); |
| 37 } | 81 } |
| 38 | 82 |
| 39 base::Closure callback_; | 83 base::Closure callback_; |
| 40 scoped_ptr<base::RunLoop> wait_run_loop_; | 84 scoped_ptr<base::RunLoop> wait_run_loop_; |
| 41 | 85 |
| 42 DISALLOW_COPY_AND_ASSIGN(TestClosureCallback); | 86 DISALLOW_COPY_AND_ASSIGN(TestClosureCallback); |
| 43 }; | 87 }; |
| 44 | 88 |
| 45 const int kDefaultClientId = 42; | 89 class AwaitCompletionHelper { |
| 46 const char kCacheKey[] = "key"; | 90 public: |
| 47 const char kCacheValue[] = "cached value"; | 91 AwaitCompletionHelper() : start_(false), already_quit_(false) {} |
| 92 virtual ~AwaitCompletionHelper() {} | |
| 93 | |
| 94 void BlockUntilNotified() { | |
| 95 if (!already_quit_) { | |
| 96 DCHECK(!start_); | |
| 97 start_ = true; | |
| 98 base::MessageLoop::current()->Run(); | |
| 99 } else { | |
| 100 DCHECK(!start_); | |
| 101 already_quit_ = false; | |
| 102 } | |
| 103 } | |
| 104 | |
| 105 void Notify() { | |
| 106 if (start_) { | |
| 107 DCHECK(!already_quit_); | |
| 108 base::MessageLoop::current()->Quit(); | |
| 109 start_ = false; | |
| 110 } else { | |
| 111 DCHECK(!already_quit_); | |
| 112 already_quit_ = true; | |
| 113 } | |
| 114 } | |
| 115 | |
| 116 // protected: | |
| 117 // // BrowsingDataRemover::Observer implementation. | |
| 118 // virtual void OnBrowsingDataRemoverDone() OVERRIDE { | |
| 119 // Notify(); | |
| 120 // } | |
| 121 // | |
| 122 private: | |
| 123 // Helps prevent from running message_loop, if the callback invoked | |
| 124 // immediately. | |
| 125 bool start_; | |
| 126 bool already_quit_; | |
| 127 | |
| 128 DISALLOW_COPY_AND_ASSIGN(AwaitCompletionHelper); | |
| 129 }; | |
| 130 | |
| 131 class RemoveCookieTester { | |
| 132 public: | |
| 133 explicit RemoveCookieTester(TestBrowserContext* context) | |
| 134 : get_cookie_success_(false), monster_(NULL) { | |
| 135 SetMonster(context->GetRequestContext()->GetURLRequestContext()-> | |
| 136 cookie_store()->GetCookieMonster()); | |
| 137 } | |
| 138 | |
| 139 // Returns true, if the given cookie exists in the cookie store. | |
| 140 bool ContainsCookie() { | |
| 141 get_cookie_success_ = false; | |
| 142 monster_->GetCookiesWithOptionsAsync( | |
| 143 kOrigin1, net::CookieOptions(), | |
| 144 base::Bind(&RemoveCookieTester::GetCookieCallback, | |
| 145 base::Unretained(this))); | |
| 146 await_completion_.BlockUntilNotified(); | |
| 147 return get_cookie_success_; | |
| 148 } | |
| 149 | |
| 150 void AddCookie() { | |
| 151 monster_->SetCookieWithOptionsAsync( | |
| 152 kOrigin1, "A=1", net::CookieOptions(), | |
| 153 base::Bind(&RemoveCookieTester::SetCookieCallback, | |
| 154 base::Unretained(this))); | |
| 155 await_completion_.BlockUntilNotified(); | |
| 156 } | |
| 157 | |
| 158 protected: | |
| 159 void SetMonster(net::CookieStore* monster) { | |
| 160 monster_ = monster; | |
| 161 } | |
| 162 | |
| 163 private: | |
| 164 void GetCookieCallback(const std::string& cookies) { | |
| 165 if (cookies == "A=1") { | |
| 166 get_cookie_success_ = true; | |
| 167 } else { | |
| 168 EXPECT_EQ("", cookies); | |
| 169 get_cookie_success_ = false; | |
| 170 } | |
| 171 await_completion_.Notify(); | |
| 172 } | |
| 173 | |
| 174 void SetCookieCallback(bool result) { | |
| 175 ASSERT_TRUE(result); | |
| 176 await_completion_.Notify(); | |
| 177 } | |
| 178 | |
| 179 bool get_cookie_success_; | |
| 180 AwaitCompletionHelper await_completion_; | |
| 181 net::CookieStore* monster_; | |
| 182 | |
| 183 DISALLOW_COPY_AND_ASSIGN(RemoveCookieTester); | |
| 184 }; | |
| 185 | |
| 186 class RemoveLocalStorageTester { | |
| 187 public: | |
| 188 explicit RemoveLocalStorageTester(TestBrowserContext* profile) | |
| 189 : profile_(profile), dom_storage_context_(NULL) { | |
| 190 dom_storage_context_ = | |
| 191 content::BrowserContext::GetDefaultStoragePartition(profile)-> | |
| 192 GetDOMStorageContext(); | |
| 193 } | |
| 194 | |
| 195 // Returns true, if the given origin URL exists. | |
| 196 bool DOMStorageExistsForOrigin(const GURL& origin) { | |
| 197 GetLocalStorageUsage(); | |
| 198 await_completion_.BlockUntilNotified(); | |
| 199 for (size_t i = 0; i < infos_.size(); ++i) { | |
| 200 if (origin == infos_[i].origin) | |
| 201 return true; | |
| 202 } | |
| 203 return false; | |
| 204 } | |
| 205 | |
| 206 void AddDOMStorageTestData() { | |
| 207 // Note: This test depends on details of how the dom_storage library | |
| 208 // stores data in the host file system. | |
| 209 base::FilePath storage_path = | |
| 210 profile_->GetPath().AppendASCII("Local Storage"); | |
| 211 file_util::CreateDirectory(storage_path); | |
| 212 | |
| 213 // Write some files. | |
| 214 file_util::WriteFile(storage_path.Append(kDomStorageOrigin1), NULL, 0); | |
| 215 file_util::WriteFile(storage_path.Append(kDomStorageOrigin2), NULL, 0); | |
| 216 file_util::WriteFile(storage_path.Append(kDomStorageOrigin3), NULL, 0); | |
| 217 | |
| 218 // Tweak their dates. | |
| 219 file_util::SetLastModifiedTime(storage_path.Append(kDomStorageOrigin1), | |
| 220 base::Time::Now()); | |
| 221 file_util::SetLastModifiedTime(storage_path.Append(kDomStorageOrigin2), | |
| 222 base::Time::Now() - base::TimeDelta::FromDays(1)); | |
| 223 file_util::SetLastModifiedTime(storage_path.Append(kDomStorageOrigin3), | |
| 224 base::Time::Now() - base::TimeDelta::FromDays(60)); | |
| 225 } | |
| 226 | |
| 227 private: | |
| 228 void GetLocalStorageUsage() { | |
| 229 dom_storage_context_->GetLocalStorageUsage( | |
| 230 base::Bind(&RemoveLocalStorageTester::OnGotLocalStorageUsage, | |
| 231 base::Unretained(this))); | |
| 232 } | |
| 233 void OnGotLocalStorageUsage( | |
| 234 const std::vector<content::LocalStorageUsageInfo>& infos) { | |
| 235 infos_ = infos; | |
| 236 await_completion_.Notify(); | |
| 237 } | |
| 238 | |
| 239 // We don't own these pointers. | |
| 240 TestBrowserContext* profile_; | |
| 241 content::DOMStorageContext* dom_storage_context_; | |
| 242 | |
| 243 std::vector<content::LocalStorageUsageInfo> infos_; | |
| 244 | |
| 245 AwaitCompletionHelper await_completion_; | |
| 246 | |
| 247 DISALLOW_COPY_AND_ASSIGN(RemoveLocalStorageTester); | |
| 248 }; | |
| 249 | |
| 250 bool IsWebSafeSchemeForTest(const std::string& scheme) { | |
| 251 return scheme == "http"; | |
| 252 } | |
| 253 | |
| 254 bool DoesOriginMatchForUnprotectedWeb( | |
| 255 const GURL& origin, | |
| 256 quota::SpecialStoragePolicy* special_storage_policy) { | |
| 257 // if (IsWebSafeSchemeForTest(origin.scheme())) { | |
|
Nico
2013/11/07 20:01:30
Did you intentionally land this code commented out
lazyboy
2013/11/07 20:17:18
Mistake from me. Uncommenting them in other CL.
| |
| 258 return !special_storage_policy->IsStorageProtected(origin.GetOrigin()); | |
| 259 | |
| 260 // } | |
| 261 // return false; | |
| 262 } | |
| 263 | |
| 264 bool DoesOriginMatchForBothProtectedAndUnprotectedWeb( | |
| 265 const GURL& origin, | |
| 266 quota::SpecialStoragePolicy* special_storage_policy) { | |
| 267 return true; | |
| 268 } | |
| 269 | |
| 270 bool DoesOriginMatchUnprotected( | |
| 271 const GURL& origin, | |
| 272 quota::SpecialStoragePolicy* special_storage_policy) { | |
| 273 return origin.GetOrigin().scheme() != kOriginDevTools.scheme(); | |
| 274 } | |
| 275 | |
| 276 void ClearQuotaData(content::StoragePartition* storage_partition, | |
| 277 const base::Closure& cb) { | |
| 278 storage_partition->ClearData( | |
| 279 kAllQuotaRemoveMask, | |
| 280 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, | |
| 281 NULL, StoragePartition::OriginMatcherFunction(), | |
| 282 base::Time(), base::Time::Max(), cb); | |
| 283 } | |
| 284 | |
| 285 void ClearQuotaDataWithOriginMatcher( | |
| 286 content::StoragePartition* storage_partition, | |
| 287 const GURL& remove_origin, | |
| 288 const StoragePartition::OriginMatcherFunction& origin_matcher, | |
| 289 const base::Time delete_begin, | |
| 290 const base::Closure& cb) { | |
| 291 storage_partition->ClearData(kAllQuotaRemoveMask, | |
| 292 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, | |
| 293 &remove_origin, origin_matcher, delete_begin, | |
| 294 base::Time::Max(), cb); | |
| 295 } | |
| 296 | |
| 297 void ClearQuotaDataForOrigin( | |
| 298 content::StoragePartition* storage_partition, | |
| 299 const GURL& remove_origin, | |
| 300 const base::Time delete_begin, | |
| 301 const base::Closure& cb) { | |
| 302 ClearQuotaDataWithOriginMatcher( | |
| 303 storage_partition, remove_origin, | |
| 304 StoragePartition::OriginMatcherFunction(), delete_begin, cb); | |
| 305 } | |
| 306 | |
| 307 void ClearQuotaDataForNonPersistent( | |
| 308 content::StoragePartition* storage_partition, | |
| 309 const base::Time delete_begin, | |
| 310 const base::Closure& cb) { | |
| 311 uint32 quota_storage_remove_mask_no_persistent = | |
| 312 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL & | |
| 313 ~StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT; | |
| 314 storage_partition->ClearData( | |
| 315 kAllQuotaRemoveMask, quota_storage_remove_mask_no_persistent, | |
| 316 NULL, StoragePartition::OriginMatcherFunction(), | |
| 317 delete_begin, base::Time::Max(), cb); | |
| 318 } | |
| 319 | |
| 320 void ClearCookies(content::StoragePartition* storage_partition, | |
| 321 const base::Time delete_begin, | |
| 322 const base::Time delete_end, | |
| 323 const base::Closure& cb) { | |
| 324 storage_partition->ClearData( | |
| 325 StoragePartition::REMOVE_DATA_MASK_COOKIES, | |
| 326 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, | |
| 327 NULL, StoragePartition::OriginMatcherFunction(), | |
| 328 delete_begin, delete_end, cb); | |
| 329 } | |
| 330 | |
| 331 void ClearStuff(uint32 remove_mask, | |
| 332 content::StoragePartition* storage_partition, | |
| 333 const base::Time delete_begin, | |
| 334 const base::Time delete_end, | |
| 335 const StoragePartition::OriginMatcherFunction& origin_matcher, | |
| 336 const base::Closure& cb) { | |
| 337 storage_partition->ClearData( | |
| 338 remove_mask, StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, | |
| 339 NULL, origin_matcher, delete_begin, delete_end, cb); | |
| 340 } | |
| 48 | 341 |
| 49 } // namespace | 342 } // namespace |
| 50 | 343 |
| 344 class StoragePartitionImplTest : public testing::Test { | |
| 345 public: | |
| 346 StoragePartitionImplTest() | |
| 347 : browser_context_(new TestBrowserContext()), | |
| 348 thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) { | |
| 349 } | |
| 350 virtual ~StoragePartitionImplTest() {} | |
| 351 | |
| 352 quota::MockQuotaManager* GetMockManager() { | |
| 353 if (!quota_manager_.get()) { | |
| 354 quota_manager_ = new quota::MockQuotaManager( | |
| 355 browser_context_->IsOffTheRecord(), | |
| 356 browser_context_->GetPath(), | |
| 357 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO).get(), | |
| 358 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB).get(), | |
| 359 browser_context_->GetSpecialStoragePolicy()); | |
| 360 } | |
| 361 return quota_manager_.get(); | |
| 362 } | |
| 363 | |
| 364 TestBrowserContext* GetBrowserContext() { | |
| 365 return browser_context_.get(); | |
| 366 } | |
| 367 | |
| 368 private: | |
| 369 scoped_ptr<TestBrowserContext> browser_context_; | |
| 370 scoped_refptr<quota::MockQuotaManager> quota_manager_; | |
| 371 content::TestBrowserThreadBundle thread_bundle_; | |
| 372 | |
| 373 DISALLOW_COPY_AND_ASSIGN(StoragePartitionImplTest); | |
| 374 }; | |
| 375 | |
| 51 class StoragePartitionShaderClearTest : public testing::Test { | 376 class StoragePartitionShaderClearTest : public testing::Test { |
| 52 public: | 377 public: |
| 53 StoragePartitionShaderClearTest() | 378 StoragePartitionShaderClearTest() |
| 54 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) { | 379 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) { |
| 55 } | 380 } |
| 56 | 381 |
| 57 virtual ~StoragePartitionShaderClearTest() {} | 382 virtual ~StoragePartitionShaderClearTest() {} |
| 58 | 383 |
| 59 const base::FilePath& cache_path() { return temp_dir_.path(); } | 384 const base::FilePath& cache_path() { return temp_dir_.path(); } |
| 60 | 385 |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 91 | 416 |
| 92 base::ScopedTempDir temp_dir_; | 417 base::ScopedTempDir temp_dir_; |
| 93 content::TestBrowserThreadBundle thread_bundle_; | 418 content::TestBrowserThreadBundle thread_bundle_; |
| 94 | 419 |
| 95 scoped_refptr<ShaderDiskCache> cache_; | 420 scoped_refptr<ShaderDiskCache> cache_; |
| 96 }; | 421 }; |
| 97 | 422 |
| 98 void ClearData(content::StoragePartitionImpl* sp, | 423 void ClearData(content::StoragePartitionImpl* sp, |
| 99 const base::Closure& cb) { | 424 const base::Closure& cb) { |
| 100 base::Time time; | 425 base::Time time; |
| 101 sp->ClearDataForRange( | 426 sp->ClearData( |
| 102 StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE, | 427 StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE, |
| 103 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, | 428 StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, |
| 429 NULL, StoragePartition::OriginMatcherFunction(), | |
| 104 time, time, cb); | 430 time, time, cb); |
| 105 } | 431 } |
| 106 | 432 |
| 433 // Tests --------------------------------------------------------------------- | |
| 434 | |
| 107 TEST_F(StoragePartitionShaderClearTest, ClearShaderCache) { | 435 TEST_F(StoragePartitionShaderClearTest, ClearShaderCache) { |
| 108 InitCache(); | 436 InitCache(); |
| 109 EXPECT_EQ(1u, Size()); | 437 EXPECT_EQ(1u, Size()); |
| 110 | 438 |
| 111 TestClosureCallback clear_cb; | 439 TestClosureCallback clear_cb; |
| 112 StoragePartitionImpl sp( | 440 StoragePartitionImpl storage_partition( |
| 113 cache_path(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | 441 cache_path(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); |
| 114 base::MessageLoop::current()->PostTask( | 442 base::MessageLoop::current()->PostTask( |
| 115 FROM_HERE, base::Bind(&ClearData, &sp, clear_cb.callback())); | 443 FROM_HERE, base::Bind(&ClearData, &storage_partition, |
| 444 clear_cb.callback())); | |
| 116 clear_cb.WaitForResult(); | 445 clear_cb.WaitForResult(); |
| 117 EXPECT_EQ(0u, Size()); | 446 EXPECT_EQ(0u, Size()); |
| 118 } | 447 } |
| 119 | 448 |
| 449 TEST_F(StoragePartitionImplTest, QuotaClientMaskGeneration) { | |
| 450 EXPECT_EQ(quota::QuotaClient::kFileSystem, | |
| 451 StoragePartitionImpl::GenerateQuotaClientMask( | |
| 452 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS)); | |
| 453 EXPECT_EQ(quota::QuotaClient::kDatabase, | |
| 454 StoragePartitionImpl::GenerateQuotaClientMask( | |
| 455 StoragePartition::REMOVE_DATA_MASK_WEBSQL)); | |
| 456 EXPECT_EQ(quota::QuotaClient::kAppcache, | |
| 457 StoragePartitionImpl::GenerateQuotaClientMask( | |
| 458 StoragePartition::REMOVE_DATA_MASK_APPCACHE)); | |
| 459 EXPECT_EQ(quota::QuotaClient::kIndexedDatabase, | |
| 460 StoragePartitionImpl::GenerateQuotaClientMask( | |
| 461 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB)); | |
| 462 EXPECT_EQ(quota::QuotaClient::kFileSystem | | |
| 463 quota::QuotaClient::kDatabase | | |
| 464 quota::QuotaClient::kAppcache | | |
| 465 quota::QuotaClient::kIndexedDatabase, | |
| 466 StoragePartitionImpl::GenerateQuotaClientMask( | |
| 467 StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS | | |
| 468 StoragePartition::REMOVE_DATA_MASK_WEBSQL | | |
| 469 StoragePartition::REMOVE_DATA_MASK_APPCACHE | | |
| 470 StoragePartition::REMOVE_DATA_MASK_INDEXEDDB)); | |
| 471 } | |
| 472 | |
| 473 void PopulateTestQuotaManagedPersistentData(quota::MockQuotaManager* manager) { | |
| 474 manager->AddOrigin(kOrigin2, kPersistent, kClientFile, base::Time()); | |
| 475 manager->AddOrigin(kOrigin3, kPersistent, kClientFile, | |
| 476 base::Time::Now() - base::TimeDelta::FromDays(1)); | |
| 477 | |
| 478 EXPECT_FALSE(manager->OriginHasData(kOrigin1, kPersistent, kClientFile)); | |
| 479 EXPECT_TRUE(manager->OriginHasData(kOrigin2, kPersistent, kClientFile)); | |
| 480 EXPECT_TRUE(manager->OriginHasData(kOrigin3, kPersistent, kClientFile)); | |
| 481 } | |
| 482 | |
| 483 void PopulateTestQuotaManagedTemporaryData(quota::MockQuotaManager* manager) { | |
| 484 manager->AddOrigin(kOrigin1, kTemporary, kClientFile, base::Time::Now()); | |
| 485 manager->AddOrigin(kOrigin3, kTemporary, kClientFile, | |
| 486 base::Time::Now() - base::TimeDelta::FromDays(1)); | |
| 487 | |
| 488 EXPECT_TRUE(manager->OriginHasData(kOrigin1, kTemporary, kClientFile)); | |
| 489 EXPECT_FALSE(manager->OriginHasData(kOrigin2, kTemporary, kClientFile)); | |
| 490 EXPECT_TRUE(manager->OriginHasData(kOrigin3, kTemporary, kClientFile)); | |
| 491 } | |
| 492 | |
| 493 void PopulateTestQuotaManagedData(quota::MockQuotaManager* manager) { | |
| 494 // Set up kOrigin1 with a temporary quota, kOrigin2 with a persistent | |
| 495 // quota, and kOrigin3 with both. kOrigin1 is modified now, kOrigin2 | |
| 496 // is modified at the beginning of time, and kOrigin3 is modified one day | |
| 497 // ago. | |
| 498 PopulateTestQuotaManagedPersistentData(manager); | |
| 499 PopulateTestQuotaManagedTemporaryData(manager); | |
| 500 } | |
| 501 | |
| 502 void PopulateTestQuotaManagedNonBrowsingData(quota::MockQuotaManager* manager) { | |
| 503 manager->AddOrigin(kOriginDevTools, kTemporary, kClientFile, base::Time()); | |
| 504 manager->AddOrigin(kOriginDevTools, kPersistent, kClientFile, base::Time()); | |
| 505 } | |
| 506 | |
| 507 TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForeverBoth) { | |
| 508 PopulateTestQuotaManagedData(GetMockManager()); | |
| 509 | |
| 510 TestClosureCallback clear_cb; | |
| 511 StoragePartitionImpl sp( | |
| 512 base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
| 513 static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting( | |
| 514 GetMockManager()); | |
| 515 base::MessageLoop::current()->PostTask( | |
| 516 FROM_HERE, base::Bind(&ClearQuotaData, &sp, clear_cb.callback())); | |
| 517 clear_cb.WaitForResult(); | |
| 518 | |
| 519 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary, | |
| 520 kClientFile)); | |
| 521 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary, | |
| 522 kClientFile)); | |
| 523 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary, | |
| 524 kClientFile)); | |
| 525 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent, | |
| 526 kClientFile)); | |
| 527 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent, | |
| 528 kClientFile)); | |
| 529 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent, | |
| 530 kClientFile)); | |
| 531 } | |
| 532 | |
| 533 TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForeverOnlyTemporary) { | |
| 534 PopulateTestQuotaManagedTemporaryData(GetMockManager()); | |
| 535 | |
| 536 TestClosureCallback clear_cb; | |
| 537 StoragePartitionImpl sp( | |
| 538 base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
| 539 static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting( | |
| 540 GetMockManager()); | |
| 541 base::MessageLoop::current()->PostTask( | |
| 542 FROM_HERE, base::Bind(&ClearQuotaData, &sp, clear_cb.callback())); | |
| 543 clear_cb.WaitForResult(); | |
| 544 | |
| 545 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary, | |
| 546 kClientFile)); | |
| 547 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary, | |
| 548 kClientFile)); | |
| 549 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary, | |
| 550 kClientFile)); | |
| 551 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent, | |
| 552 kClientFile)); | |
| 553 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent, | |
| 554 kClientFile)); | |
| 555 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent, | |
| 556 kClientFile)); | |
| 557 } | |
| 558 | |
| 559 TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForeverOnlyPersistent) { | |
| 560 PopulateTestQuotaManagedPersistentData(GetMockManager()); | |
| 561 | |
| 562 TestClosureCallback clear_cb; | |
| 563 StoragePartitionImpl sp( | |
| 564 base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
| 565 static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting( | |
| 566 GetMockManager()); | |
| 567 base::MessageLoop::current()->PostTask( | |
| 568 FROM_HERE, base::Bind(&ClearQuotaData, &sp, clear_cb.callback())); | |
| 569 clear_cb.WaitForResult(); | |
| 570 | |
| 571 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary, | |
| 572 kClientFile)); | |
| 573 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary, | |
| 574 kClientFile)); | |
| 575 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary, | |
| 576 kClientFile)); | |
| 577 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent, | |
| 578 kClientFile)); | |
| 579 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent, | |
| 580 kClientFile)); | |
| 581 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent, | |
| 582 kClientFile)); | |
| 583 } | |
| 584 | |
| 585 TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForeverNeither) { | |
| 586 TestClosureCallback clear_cb; | |
| 587 StoragePartitionImpl sp( | |
| 588 base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
| 589 static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting( | |
| 590 GetMockManager()); | |
| 591 base::MessageLoop::current()->PostTask( | |
| 592 FROM_HERE, base::Bind(&ClearQuotaData, &sp, clear_cb.callback())); | |
| 593 clear_cb.WaitForResult(); | |
| 594 | |
| 595 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary, | |
| 596 kClientFile)); | |
| 597 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary, | |
| 598 kClientFile)); | |
| 599 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary, | |
| 600 kClientFile)); | |
| 601 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent, | |
| 602 kClientFile)); | |
| 603 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent, | |
| 604 kClientFile)); | |
| 605 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent, | |
| 606 kClientFile)); | |
| 607 } | |
| 608 | |
| 609 TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForeverSpecificOrigin) { | |
| 610 PopulateTestQuotaManagedData(GetMockManager()); | |
| 611 | |
| 612 TestClosureCallback clear_cb; | |
| 613 StoragePartitionImpl sp( | |
| 614 base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
| 615 static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting( | |
| 616 GetMockManager()); | |
| 617 base::MessageLoop::current()->PostTask( | |
| 618 FROM_HERE, base::Bind(&ClearQuotaDataForOrigin, | |
| 619 &sp, kOrigin1, base::Time(), clear_cb.callback())); | |
| 620 clear_cb.WaitForResult(); | |
| 621 | |
| 622 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary, | |
| 623 kClientFile)); | |
| 624 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary, | |
| 625 kClientFile)); | |
| 626 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kTemporary, | |
| 627 kClientFile)); | |
| 628 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent, | |
| 629 kClientFile)); | |
| 630 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin2, kPersistent, | |
| 631 kClientFile)); | |
| 632 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kPersistent, | |
| 633 kClientFile)); | |
| 634 } | |
| 635 | |
| 636 TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForLastHour) { | |
| 637 PopulateTestQuotaManagedData(GetMockManager()); | |
| 638 | |
| 639 TestClosureCallback clear_cb; | |
| 640 StoragePartitionImpl sp( | |
| 641 base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
| 642 static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting( | |
| 643 GetMockManager()); | |
| 644 base::MessageLoop::current()->PostTask( | |
| 645 FROM_HERE, base::Bind(&ClearQuotaDataForOrigin, | |
| 646 &sp, GURL(), | |
| 647 base::Time::Now() - base::TimeDelta::FromHours(1), | |
| 648 clear_cb.callback())); | |
| 649 clear_cb.WaitForResult(); | |
| 650 | |
| 651 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary, | |
| 652 kClientFile)); | |
| 653 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary, | |
| 654 kClientFile)); | |
| 655 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kTemporary, | |
| 656 kClientFile)); | |
| 657 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent, | |
| 658 kClientFile)); | |
| 659 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin2, kPersistent, | |
| 660 kClientFile)); | |
| 661 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kPersistent, | |
| 662 kClientFile)); | |
| 663 } | |
| 664 | |
| 665 TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForLastWeek) { | |
| 666 PopulateTestQuotaManagedData(GetMockManager()); | |
| 667 | |
| 668 TestClosureCallback clear_cb; | |
| 669 StoragePartitionImpl sp( | |
| 670 base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
| 671 static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting( | |
| 672 GetMockManager()); | |
| 673 base::MessageLoop::current()->PostTask( | |
| 674 FROM_HERE, base::Bind(&ClearQuotaDataForNonPersistent, | |
| 675 &sp, | |
| 676 base::Time::Now() - base::TimeDelta::FromDays(7), | |
| 677 clear_cb.callback())); | |
| 678 clear_cb.WaitForResult(); | |
| 679 | |
| 680 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary, | |
| 681 kClientFile)); | |
| 682 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary, | |
| 683 kClientFile)); | |
| 684 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary, | |
| 685 kClientFile)); | |
| 686 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent, | |
| 687 kClientFile)); | |
| 688 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin2, kPersistent, | |
| 689 kClientFile)); | |
| 690 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kPersistent, | |
| 691 kClientFile)); | |
| 692 } | |
| 693 | |
| 694 TEST_F(StoragePartitionImplTest, RemoveQuotaManagedUnprotectedOrigins) { | |
| 695 // Protect kOrigin1. | |
| 696 scoped_refptr<quota::MockSpecialStoragePolicy> mock_policy = | |
| 697 new quota::MockSpecialStoragePolicy; | |
| 698 mock_policy->AddProtected(kOrigin1.GetOrigin()); | |
| 699 | |
| 700 PopulateTestQuotaManagedData(GetMockManager()); | |
| 701 | |
| 702 TestClosureCallback clear_cb; | |
| 703 StoragePartitionImpl sp( | |
| 704 base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
| 705 static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting( | |
| 706 GetMockManager()); | |
| 707 static_cast<StoragePartitionImpl*>( | |
| 708 &sp)->OverrideSpecialStoragePolicyForTesting(mock_policy); | |
| 709 base::MessageLoop::current()->PostTask( | |
| 710 FROM_HERE, base::Bind(&ClearQuotaDataWithOriginMatcher, | |
| 711 &sp, GURL(), | |
| 712 base::Bind(&DoesOriginMatchForUnprotectedWeb), | |
| 713 base::Time(), clear_cb.callback())); | |
| 714 clear_cb.WaitForResult(); | |
| 715 | |
| 716 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin1, kTemporary, | |
| 717 kClientFile)); | |
| 718 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary, | |
| 719 kClientFile)); | |
| 720 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary, | |
| 721 kClientFile)); | |
| 722 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent, | |
| 723 kClientFile)); | |
| 724 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent, | |
| 725 kClientFile)); | |
| 726 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent, | |
| 727 kClientFile)); | |
| 728 } | |
| 729 | |
| 730 TEST_F(StoragePartitionImplTest, RemoveQuotaManagedProtectedSpecificOrigin) { | |
| 731 // Protect kOrigin1. | |
| 732 scoped_refptr<quota::MockSpecialStoragePolicy> mock_policy = | |
| 733 new quota::MockSpecialStoragePolicy; | |
| 734 mock_policy->AddProtected(kOrigin1.GetOrigin()); | |
| 735 | |
| 736 PopulateTestQuotaManagedData(GetMockManager()); | |
| 737 | |
| 738 TestClosureCallback clear_cb; | |
| 739 StoragePartitionImpl sp( | |
| 740 base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
| 741 static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting( | |
| 742 GetMockManager()); | |
| 743 static_cast<StoragePartitionImpl*>( | |
| 744 &sp)->OverrideSpecialStoragePolicyForTesting(mock_policy); | |
| 745 | |
| 746 // Try to remove kOrigin1. Expect failure. | |
| 747 base::MessageLoop::current()->PostTask( | |
| 748 FROM_HERE, base::Bind(&ClearQuotaDataWithOriginMatcher, | |
| 749 &sp, kOrigin1, | |
| 750 base::Bind(&DoesOriginMatchForUnprotectedWeb), | |
| 751 base::Time(), clear_cb.callback())); | |
| 752 clear_cb.WaitForResult(); | |
| 753 | |
| 754 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin1, kTemporary, | |
| 755 kClientFile)); | |
| 756 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary, | |
| 757 kClientFile)); | |
| 758 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kTemporary, | |
| 759 kClientFile)); | |
| 760 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent, | |
| 761 kClientFile)); | |
| 762 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin2, kPersistent, | |
| 763 kClientFile)); | |
| 764 EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kPersistent, | |
| 765 kClientFile)); | |
| 766 } | |
| 767 | |
| 768 TEST_F(StoragePartitionImplTest, RemoveQuotaManagedProtectedOrigins) { | |
| 769 // Protect kOrigin1. | |
| 770 scoped_refptr<quota::MockSpecialStoragePolicy> mock_policy = | |
| 771 new quota::MockSpecialStoragePolicy; | |
| 772 mock_policy->AddProtected(kOrigin1.GetOrigin()); | |
| 773 | |
| 774 PopulateTestQuotaManagedData(GetMockManager()); | |
| 775 | |
| 776 // Try to remove kOrigin1. Expect success. | |
| 777 TestClosureCallback clear_cb; | |
| 778 StoragePartitionImpl sp( | |
| 779 base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
| 780 static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting( | |
| 781 GetMockManager()); | |
| 782 static_cast<StoragePartitionImpl*>( | |
| 783 &sp)->OverrideSpecialStoragePolicyForTesting(mock_policy); | |
| 784 base::MessageLoop::current()->PostTask( | |
| 785 FROM_HERE, | |
| 786 base::Bind(&ClearQuotaDataWithOriginMatcher, | |
| 787 &sp, GURL(), | |
| 788 base::Bind(&DoesOriginMatchForBothProtectedAndUnprotectedWeb), | |
| 789 base::Time(), clear_cb.callback())); | |
| 790 clear_cb.WaitForResult(); | |
| 791 | |
| 792 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary, | |
| 793 kClientFile)); | |
| 794 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary, | |
| 795 kClientFile)); | |
| 796 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary, | |
| 797 kClientFile)); | |
| 798 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent, | |
| 799 kClientFile)); | |
| 800 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent, | |
| 801 kClientFile)); | |
| 802 EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent, | |
| 803 kClientFile)); | |
| 804 } | |
| 805 | |
| 806 TEST_F(StoragePartitionImplTest, RemoveQuotaManagedIgnoreDevTools) { | |
| 807 PopulateTestQuotaManagedNonBrowsingData(GetMockManager()); | |
| 808 | |
| 809 TestClosureCallback clear_cb; | |
| 810 StoragePartitionImpl sp( | |
| 811 base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
| 812 static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting( | |
| 813 GetMockManager()); | |
| 814 base::MessageLoop::current()->PostTask( | |
| 815 FROM_HERE, base::Bind(&ClearQuotaDataWithOriginMatcher, | |
| 816 &sp, GURL(), | |
| 817 base::Bind(&DoesOriginMatchUnprotected), | |
| 818 base::Time(), clear_cb.callback())); | |
| 819 clear_cb.WaitForResult(); | |
| 820 | |
| 821 // Check that devtools data isn't removed. | |
| 822 EXPECT_TRUE(GetMockManager()->OriginHasData(kOriginDevTools, kTemporary, | |
| 823 kClientFile)); | |
| 824 EXPECT_TRUE(GetMockManager()->OriginHasData(kOriginDevTools, kPersistent, | |
| 825 kClientFile)); | |
| 826 } | |
| 827 | |
| 828 TEST_F(StoragePartitionImplTest, RemoveCookieForever) { | |
| 829 RemoveCookieTester tester(GetBrowserContext()); | |
| 830 | |
| 831 tester.AddCookie(); | |
| 832 ASSERT_TRUE(tester.ContainsCookie()); | |
| 833 | |
| 834 TestClosureCallback clear_cb; | |
| 835 StoragePartitionImpl sp( | |
| 836 base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
| 837 sp.SetURLRequestContext(GetBrowserContext()->GetRequestContext()); | |
| 838 base::MessageLoop::current()->PostTask( | |
| 839 FROM_HERE, base::Bind(&ClearCookies, | |
| 840 &sp, base::Time(), base::Time::Max(), | |
| 841 clear_cb.callback())); | |
| 842 clear_cb.WaitForResult(); | |
| 843 | |
| 844 EXPECT_FALSE(tester.ContainsCookie()); | |
| 845 } | |
| 846 | |
| 847 TEST_F(StoragePartitionImplTest, RemoveCookieLastHour) { | |
| 848 RemoveCookieTester tester(GetBrowserContext()); | |
| 849 | |
| 850 tester.AddCookie(); | |
| 851 ASSERT_TRUE(tester.ContainsCookie()); | |
| 852 | |
| 853 TestClosureCallback clear_cb; | |
| 854 StoragePartitionImpl sp( | |
| 855 base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); | |
| 856 base::Time an_hour_ago = base::Time::Now() - base::TimeDelta::FromHours(1); | |
| 857 sp.SetURLRequestContext(GetBrowserContext()->GetRequestContext()); | |
| 858 base::MessageLoop::current()->PostTask( | |
| 859 FROM_HERE, base::Bind(&ClearCookies, | |
| 860 &sp, an_hour_ago, base::Time::Max(), | |
| 861 clear_cb.callback())); | |
| 862 clear_cb.WaitForResult(); | |
| 863 | |
| 864 EXPECT_FALSE(tester.ContainsCookie()); | |
| 865 } | |
| 866 | |
| 867 TEST_F(StoragePartitionImplTest, RemoveUnprotectedLocalStorageForever) { | |
| 868 // Protect kOrigin1. | |
| 869 scoped_refptr<quota::MockSpecialStoragePolicy> mock_policy = | |
| 870 new quota::MockSpecialStoragePolicy; | |
| 871 mock_policy->AddProtected(kOrigin1.GetOrigin()); | |
| 872 | |
| 873 RemoveLocalStorageTester tester(GetBrowserContext()); | |
| 874 | |
| 875 tester.AddDOMStorageTestData(); | |
| 876 EXPECT_TRUE(tester.DOMStorageExistsForOrigin(kOrigin1)); | |
| 877 EXPECT_TRUE(tester.DOMStorageExistsForOrigin(kOrigin2)); | |
| 878 EXPECT_TRUE(tester.DOMStorageExistsForOrigin(kOrigin3)); | |
| 879 | |
| 880 TestClosureCallback clear_cb; | |
| 881 DOMStorageContextWrapper* dom_storage_context = | |
| 882 static_cast<DOMStorageContextWrapper*>( | |
| 883 content::BrowserContext::GetDefaultStoragePartition( | |
| 884 GetBrowserContext())->GetDOMStorageContext()); | |
| 885 StoragePartitionImpl sp(base::FilePath(), NULL, NULL, NULL, NULL, | |
| 886 dom_storage_context, NULL, NULL, NULL, NULL); | |
| 887 static_cast<StoragePartitionImpl*>( | |
| 888 &sp)->OverrideSpecialStoragePolicyForTesting(mock_policy); | |
| 889 base::MessageLoop::current()->PostTask( | |
| 890 FROM_HERE, | |
| 891 base::Bind(&ClearStuff, | |
| 892 StoragePartitionImpl::REMOVE_DATA_MASK_LOCAL_STORAGE, | |
| 893 &sp, base::Time(), base::Time::Max(), | |
| 894 base::Bind(&DoesOriginMatchForUnprotectedWeb), | |
| 895 clear_cb.callback())); | |
| 896 clear_cb.WaitForResult(); | |
| 897 | |
| 898 EXPECT_TRUE(tester.DOMStorageExistsForOrigin(kOrigin1)); | |
| 899 EXPECT_FALSE(tester.DOMStorageExistsForOrigin(kOrigin2)); | |
| 900 EXPECT_FALSE(tester.DOMStorageExistsForOrigin(kOrigin3)); | |
| 901 } | |
| 902 | |
| 903 TEST_F(StoragePartitionImplTest, RemoveProtectedLocalStorageForever) { | |
| 904 // Protect kOrigin1. | |
| 905 scoped_refptr<quota::MockSpecialStoragePolicy> mock_policy = | |
| 906 new quota::MockSpecialStoragePolicy; | |
| 907 mock_policy->AddProtected(kOrigin1.GetOrigin()); | |
| 908 | |
| 909 RemoveLocalStorageTester tester(GetBrowserContext()); | |
| 910 | |
| 911 tester.AddDOMStorageTestData(); | |
| 912 EXPECT_TRUE(tester.DOMStorageExistsForOrigin(kOrigin1)); | |
| 913 EXPECT_TRUE(tester.DOMStorageExistsForOrigin(kOrigin2)); | |
| 914 EXPECT_TRUE(tester.DOMStorageExistsForOrigin(kOrigin3)); | |
| 915 | |
| 916 TestClosureCallback clear_cb; | |
| 917 DOMStorageContextWrapper* dom_storage_context = | |
| 918 static_cast<DOMStorageContextWrapper*>( | |
| 919 content::BrowserContext::GetDefaultStoragePartition( | |
| 920 GetBrowserContext())->GetDOMStorageContext()); | |
| 921 StoragePartitionImpl sp(base::FilePath(), NULL, NULL, NULL, NULL, | |
| 922 dom_storage_context, NULL, NULL, NULL, NULL); | |
| 923 static_cast<StoragePartitionImpl*>( | |
| 924 &sp)->OverrideSpecialStoragePolicyForTesting(mock_policy); | |
| 925 base::MessageLoop::current()->PostTask( | |
| 926 FROM_HERE, | |
| 927 base::Bind(&ClearStuff, | |
| 928 StoragePartitionImpl::REMOVE_DATA_MASK_LOCAL_STORAGE, | |
| 929 &sp, base::Time(), base::Time::Max(), | |
| 930 base::Bind(&DoesOriginMatchForBothProtectedAndUnprotectedWeb), | |
| 931 clear_cb.callback())); | |
| 932 clear_cb.WaitForResult(); | |
| 933 | |
| 934 // Even if kOrigin1 is protected, it will be deleted since we specify | |
| 935 // ClearData to delete protected data. | |
| 936 EXPECT_FALSE(tester.DOMStorageExistsForOrigin(kOrigin1)); | |
| 937 EXPECT_FALSE(tester.DOMStorageExistsForOrigin(kOrigin2)); | |
| 938 EXPECT_FALSE(tester.DOMStorageExistsForOrigin(kOrigin3)); | |
| 939 } | |
| 940 | |
| 941 TEST_F(StoragePartitionImplTest, RemoveLocalStorageForLastWeek) { | |
| 942 RemoveLocalStorageTester tester(GetBrowserContext()); | |
| 943 | |
| 944 tester.AddDOMStorageTestData(); | |
| 945 EXPECT_TRUE(tester.DOMStorageExistsForOrigin(kOrigin1)); | |
| 946 EXPECT_TRUE(tester.DOMStorageExistsForOrigin(kOrigin2)); | |
| 947 EXPECT_TRUE(tester.DOMStorageExistsForOrigin(kOrigin3)); | |
| 948 | |
| 949 TestClosureCallback clear_cb; | |
| 950 DOMStorageContextWrapper* dom_storage_context = | |
| 951 static_cast<DOMStorageContextWrapper*>( | |
| 952 content::BrowserContext::GetDefaultStoragePartition( | |
| 953 GetBrowserContext())->GetDOMStorageContext()); | |
| 954 StoragePartitionImpl sp(base::FilePath(), NULL, NULL, NULL, NULL, | |
| 955 dom_storage_context, NULL, NULL, NULL, NULL); | |
| 956 base::Time a_week_ago = base::Time::Now() - base::TimeDelta::FromDays(7); | |
| 957 base::MessageLoop::current()->PostTask( | |
| 958 FROM_HERE, | |
| 959 base::Bind(&ClearStuff, | |
| 960 StoragePartitionImpl::REMOVE_DATA_MASK_LOCAL_STORAGE, | |
| 961 &sp, a_week_ago, base::Time::Max(), | |
| 962 base::Bind(&DoesOriginMatchForBothProtectedAndUnprotectedWeb), | |
| 963 clear_cb.callback())); | |
| 964 clear_cb.WaitForResult(); | |
| 965 | |
| 966 // kOrigin1 and kOrigin2 do not have age more than a week. | |
| 967 EXPECT_FALSE(tester.DOMStorageExistsForOrigin(kOrigin1)); | |
| 968 EXPECT_FALSE(tester.DOMStorageExistsForOrigin(kOrigin2)); | |
| 969 EXPECT_TRUE(tester.DOMStorageExistsForOrigin(kOrigin3)); | |
| 970 } | |
| 971 | |
| 120 } // namespace content | 972 } // namespace content |
| OLD | NEW |