| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <stack> | 5 #include <stack> |
| 6 | 6 |
| 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" |
| 9 #include "base/callback.h" |
| 7 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| 8 #include "base/threading/thread.h" | 11 #include "base/threading/thread.h" |
| 9 #include "base/synchronization/waitable_event.h" | 12 #include "base/synchronization/waitable_event.h" |
| 10 #include "net/base/net_errors.h" | 13 #include "net/base/net_errors.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 12 #include "webkit/appcache/appcache.h" | 15 #include "webkit/appcache/appcache.h" |
| 13 #include "webkit/appcache/appcache_database.h" | 16 #include "webkit/appcache/appcache_database.h" |
| 14 #include "webkit/appcache/appcache_entry.h" | 17 #include "webkit/appcache/appcache_entry.h" |
| 15 #include "webkit/appcache/appcache_group.h" | 18 #include "webkit/appcache/appcache_group.h" |
| 16 #include "webkit/appcache/appcache_service.h" | 19 #include "webkit/appcache/appcache_service.h" |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 db_thread->message_loop_proxy(), | 134 db_thread->message_loop_proxy(), |
| 132 NULL), | 135 NULL), |
| 133 async_(false) {} | 136 async_(false) {} |
| 134 | 137 |
| 135 virtual void GetUsageAndQuota( | 138 virtual void GetUsageAndQuota( |
| 136 const GURL& origin, quota::StorageType type, | 139 const GURL& origin, quota::StorageType type, |
| 137 const GetUsageAndQuotaCallback& callback) OVERRIDE { | 140 const GetUsageAndQuotaCallback& callback) OVERRIDE { |
| 138 EXPECT_EQ(kOrigin, origin); | 141 EXPECT_EQ(kOrigin, origin); |
| 139 EXPECT_EQ(quota::kStorageTypeTemporary, type); | 142 EXPECT_EQ(quota::kStorageTypeTemporary, type); |
| 140 if (async_) { | 143 if (async_) { |
| 141 MessageLoop::current()->PostTask(FROM_HERE, | 144 MessageLoop::current()->PostTask( |
| 142 NewRunnableMethod(this, &MockQuotaManager::CallCallback, | 145 FROM_HERE, base::Bind(&MockQuotaManager::CallCallback, |
| 143 callback)); | 146 base::Unretained(this), callback)); |
| 144 return; | 147 return; |
| 145 } | 148 } |
| 146 CallCallback(callback); | 149 CallCallback(callback); |
| 147 } | 150 } |
| 148 | 151 |
| 149 void CallCallback(const GetUsageAndQuotaCallback& callback) { | 152 void CallCallback(const GetUsageAndQuotaCallback& callback) { |
| 150 callback.Run(quota::kQuotaStatusOk, 0, kMockQuota); | 153 callback.Run(quota::kQuotaStatusOk, 0, kMockQuota); |
| 151 } | 154 } |
| 152 | 155 |
| 153 bool async_; | 156 bool async_; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 | 210 |
| 208 virtual void Run() OVERRIDE { | 211 virtual void Run() OVERRIDE { |
| 209 test_->SetUpTest(); | 212 test_->SetUpTest(); |
| 210 | 213 |
| 211 // Ensure InitTask execution prior to conducting a test. | 214 // Ensure InitTask execution prior to conducting a test. |
| 212 test_->FlushDbThreadTasks(); | 215 test_->FlushDbThreadTasks(); |
| 213 | 216 |
| 214 // We also have to wait for InitTask completion call to be performed | 217 // We also have to wait for InitTask completion call to be performed |
| 215 // on the IO thread prior to running the test. Its guaranteed to be | 218 // on the IO thread prior to running the test. Its guaranteed to be |
| 216 // queued by this time. | 219 // queued by this time. |
| 217 MessageLoop::current()->PostTask(FROM_HERE, | 220 MessageLoop::current()->PostTask( |
| 218 NewRunnableFunction(&RunMethod, test_, method_)); | 221 FROM_HERE, base::Bind(&RunMethod, test_, method_)); |
| 219 } | 222 } |
| 220 | 223 |
| 221 static void RunMethod(AppCacheStorageImplTest* test, Method method) { | 224 static void RunMethod(AppCacheStorageImplTest* test, Method method) { |
| 222 (test->*method)(); | 225 (test->*method)(); |
| 223 } | 226 } |
| 224 | 227 |
| 225 private: | 228 private: |
| 226 AppCacheStorageImplTest* test_; | 229 AppCacheStorageImplTest* test_; |
| 227 Method method_; | 230 Method method_; |
| 228 }; | 231 }; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 mock_quota_manager_proxy_ = NULL; | 276 mock_quota_manager_proxy_ = NULL; |
| 274 delegate_.reset(); | 277 delegate_.reset(); |
| 275 service_.reset(); | 278 service_.reset(); |
| 276 FlushDbThreadTasks(); | 279 FlushDbThreadTasks(); |
| 277 } | 280 } |
| 278 | 281 |
| 279 void TestFinished() { | 282 void TestFinished() { |
| 280 // We unwind the stack prior to finishing up to let stack | 283 // We unwind the stack prior to finishing up to let stack |
| 281 // based objects get deleted. | 284 // based objects get deleted. |
| 282 DCHECK(MessageLoop::current() == io_thread->message_loop()); | 285 DCHECK(MessageLoop::current() == io_thread->message_loop()); |
| 283 MessageLoop::current()->PostTask(FROM_HERE, | 286 MessageLoop::current()->PostTask( |
| 284 NewRunnableMethod(this, &AppCacheStorageImplTest::TestFinishedUnwound)); | 287 FROM_HERE, base::Bind(&AppCacheStorageImplTest::TestFinishedUnwound, |
| 288 base::Unretained(this))); |
| 285 } | 289 } |
| 286 | 290 |
| 287 void TestFinishedUnwound() { | 291 void TestFinishedUnwound() { |
| 288 TearDownTest(); | 292 TearDownTest(); |
| 289 test_finished_event_->Signal(); | 293 test_finished_event_->Signal(); |
| 290 } | 294 } |
| 291 | 295 |
| 292 void PushNextTask(Task* task) { | 296 void PushNextTask(const base::Closure& task) { |
| 293 task_stack_.push(task); | 297 task_stack_.push(task); |
| 294 } | 298 } |
| 295 | 299 |
| 296 void ScheduleNextTask() { | 300 void ScheduleNextTask() { |
| 297 DCHECK(MessageLoop::current() == io_thread->message_loop()); | 301 DCHECK(MessageLoop::current() == io_thread->message_loop()); |
| 298 if (task_stack_.empty()) { | 302 if (task_stack_.empty()) { |
| 299 return; | 303 return; |
| 300 } | 304 } |
| 301 MessageLoop::current()->PostTask(FROM_HERE, task_stack_.top()); | 305 MessageLoop::current()->PostTask(FROM_HERE, task_stack_.top()); |
| 302 task_stack_.pop(); | 306 task_stack_.pop(); |
| 303 } | 307 } |
| 304 | 308 |
| 305 static void SignalEvent(base::WaitableEvent* event) { | 309 static void SignalEvent(base::WaitableEvent* event) { |
| 306 event->Signal(); | 310 event->Signal(); |
| 307 } | 311 } |
| 308 | 312 |
| 309 void FlushDbThreadTasks() { | 313 void FlushDbThreadTasks() { |
| 310 // We pump a task thru the db thread to ensure any tasks previously | 314 // We pump a task thru the db thread to ensure any tasks previously |
| 311 // scheduled on that thread have been performed prior to return. | 315 // scheduled on that thread have been performed prior to return. |
| 312 base::WaitableEvent event(false, false); | 316 base::WaitableEvent event(false, false); |
| 313 db_thread->message_loop()->PostTask(FROM_HERE, | 317 db_thread->message_loop()->PostTask( |
| 314 NewRunnableFunction(&AppCacheStorageImplTest::SignalEvent, | 318 FROM_HERE, base::Bind(&AppCacheStorageImplTest::SignalEvent, &event)); |
| 315 &event)); | |
| 316 event.Wait(); | 319 event.Wait(); |
| 317 } | 320 } |
| 318 | 321 |
| 319 // LoadCache_Miss ---------------------------------------------------- | 322 // LoadCache_Miss ---------------------------------------------------- |
| 320 | 323 |
| 321 void LoadCache_Miss() { | 324 void LoadCache_Miss() { |
| 322 // Attempt to load a cache that doesn't exist. Should | 325 // Attempt to load a cache that doesn't exist. Should |
| 323 // complete asyncly. | 326 // complete asynchronously. |
| 324 PushNextTask(NewRunnableMethod( | 327 PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_LoadCache_Miss, |
| 325 this, &AppCacheStorageImplTest::Verify_LoadCache_Miss)); | 328 base::Unretained(this))); |
| 326 | 329 |
| 327 storage()->LoadCache(111, delegate()); | 330 storage()->LoadCache(111, delegate()); |
| 328 EXPECT_NE(111, delegate()->loaded_cache_id_); | 331 EXPECT_NE(111, delegate()->loaded_cache_id_); |
| 329 } | 332 } |
| 330 | 333 |
| 331 void Verify_LoadCache_Miss() { | 334 void Verify_LoadCache_Miss() { |
| 332 EXPECT_EQ(111, delegate()->loaded_cache_id_); | 335 EXPECT_EQ(111, delegate()->loaded_cache_id_); |
| 333 EXPECT_FALSE(delegate()->loaded_cache_); | 336 EXPECT_FALSE(delegate()->loaded_cache_); |
| 334 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_accessed_count_); | 337 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_accessed_count_); |
| 335 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_modified_count_); | 338 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_modified_count_); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 365 | 368 |
| 366 // Since the origin has no groups, the storage class will respond | 369 // Since the origin has no groups, the storage class will respond |
| 367 // syncly. | 370 // syncly. |
| 368 storage()->LoadOrCreateGroup(kManifestUrl, delegate()); | 371 storage()->LoadOrCreateGroup(kManifestUrl, delegate()); |
| 369 Verify_CreateGroup(); | 372 Verify_CreateGroup(); |
| 370 } | 373 } |
| 371 | 374 |
| 372 void CreateGroupInPopulatedOrigin() { | 375 void CreateGroupInPopulatedOrigin() { |
| 373 // Attempt to load a group that doesn't exist, one should | 376 // Attempt to load a group that doesn't exist, one should |
| 374 // be created for us, but not stored. | 377 // be created for us, but not stored. |
| 375 PushNextTask(NewRunnableMethod( | 378 PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_CreateGroup, |
| 376 this, &AppCacheStorageImplTest::Verify_CreateGroup)); | 379 base::Unretained(this))); |
| 377 | 380 |
| 378 // Since the origin has groups, storage class will have to | 381 // Since the origin has groups, storage class will have to |
| 379 // consult the database and completion will be async. | 382 // consult the database and completion will be async. |
| 380 storage()->usage_map_[kOrigin] = kDefaultEntrySize; | 383 storage()->usage_map_[kOrigin] = kDefaultEntrySize; |
| 381 | 384 |
| 382 storage()->LoadOrCreateGroup(kManifestUrl, delegate()); | 385 storage()->LoadOrCreateGroup(kManifestUrl, delegate()); |
| 383 EXPECT_FALSE(delegate()->loaded_group_.get()); | 386 EXPECT_FALSE(delegate()->loaded_group_.get()); |
| 384 } | 387 } |
| 385 | 388 |
| 386 void Verify_CreateGroup() { | 389 void Verify_CreateGroup() { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 398 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_modified_count_); | 401 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_modified_count_); |
| 399 | 402 |
| 400 TestFinished(); | 403 TestFinished(); |
| 401 } | 404 } |
| 402 | 405 |
| 403 // LoadGroupAndCache_FarHit -------------------------------------- | 406 // LoadGroupAndCache_FarHit -------------------------------------- |
| 404 | 407 |
| 405 void LoadGroupAndCache_FarHit() { | 408 void LoadGroupAndCache_FarHit() { |
| 406 // Attempt to load a cache that is not currently in use | 409 // Attempt to load a cache that is not currently in use |
| 407 // and does require loading from disk. This | 410 // and does require loading from disk. This |
| 408 // load should complete asyncly. | 411 // load should complete asynchronously. |
| 409 PushNextTask(NewRunnableMethod( | 412 PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_LoadCache_Far_Hit, |
| 410 this, &AppCacheStorageImplTest::Verify_LoadCache_Far_Hit)); | 413 base::Unretained(this))); |
| 411 | 414 |
| 412 // Setup some preconditions. Create a group and newest cache that | 415 // Setup some preconditions. Create a group and newest cache that |
| 413 // appear to be "stored" and "not currently in use". | 416 // appear to be "stored" and "not currently in use". |
| 414 MakeCacheAndGroup(kManifestUrl, 1, 1, true); | 417 MakeCacheAndGroup(kManifestUrl, 1, 1, true); |
| 415 group_ = NULL; | 418 group_ = NULL; |
| 416 cache_ = NULL; | 419 cache_ = NULL; |
| 417 | 420 |
| 418 // Conduct the cache load test, completes async | 421 // Conduct the cache load test, completes async |
| 419 storage()->LoadCache(1, delegate()); | 422 storage()->LoadCache(1, delegate()); |
| 420 } | 423 } |
| 421 | 424 |
| 422 void Verify_LoadCache_Far_Hit() { | 425 void Verify_LoadCache_Far_Hit() { |
| 423 EXPECT_TRUE(delegate()->loaded_cache_); | 426 EXPECT_TRUE(delegate()->loaded_cache_); |
| 424 EXPECT_TRUE(delegate()->loaded_cache_->HasOneRef()); | 427 EXPECT_TRUE(delegate()->loaded_cache_->HasOneRef()); |
| 425 EXPECT_EQ(1, delegate()->loaded_cache_id_); | 428 EXPECT_EQ(1, delegate()->loaded_cache_id_); |
| 426 | 429 |
| 427 // The group should also have been loaded. | 430 // The group should also have been loaded. |
| 428 EXPECT_TRUE(delegate()->loaded_cache_->owning_group()); | 431 EXPECT_TRUE(delegate()->loaded_cache_->owning_group()); |
| 429 EXPECT_TRUE(delegate()->loaded_cache_->owning_group()->HasOneRef()); | 432 EXPECT_TRUE(delegate()->loaded_cache_->owning_group()->HasOneRef()); |
| 430 EXPECT_EQ(1, delegate()->loaded_cache_->owning_group()->group_id()); | 433 EXPECT_EQ(1, delegate()->loaded_cache_->owning_group()->group_id()); |
| 431 | 434 |
| 432 EXPECT_EQ(1, mock_quota_manager_proxy_->notify_storage_accessed_count_); | 435 EXPECT_EQ(1, mock_quota_manager_proxy_->notify_storage_accessed_count_); |
| 433 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_modified_count_); | 436 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_modified_count_); |
| 434 | 437 |
| 435 // Drop things from the working set. | 438 // Drop things from the working set. |
| 436 delegate()->loaded_cache_ = NULL; | 439 delegate()->loaded_cache_ = NULL; |
| 437 EXPECT_FALSE(delegate()->loaded_group_); | 440 EXPECT_FALSE(delegate()->loaded_group_); |
| 438 | 441 |
| 439 // Conduct the group load test, also complete asyncly. | 442 // Conduct the group load test, also complete asynchronously. |
| 440 PushNextTask(NewRunnableMethod( | 443 PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_LoadGroup_Far_Hit, |
| 441 this, &AppCacheStorageImplTest::Verify_LoadGroup_Far_Hit)); | 444 base::Unretained(this))); |
| 442 | 445 |
| 443 storage()->LoadOrCreateGroup(kManifestUrl, delegate()); | 446 storage()->LoadOrCreateGroup(kManifestUrl, delegate()); |
| 444 } | 447 } |
| 445 | 448 |
| 446 void Verify_LoadGroup_Far_Hit() { | 449 void Verify_LoadGroup_Far_Hit() { |
| 447 EXPECT_TRUE(delegate()->loaded_group_); | 450 EXPECT_TRUE(delegate()->loaded_group_); |
| 448 EXPECT_EQ(kManifestUrl, delegate()->loaded_manifest_url_); | 451 EXPECT_EQ(kManifestUrl, delegate()->loaded_manifest_url_); |
| 449 EXPECT_TRUE(delegate()->loaded_group_->newest_complete_cache()); | 452 EXPECT_TRUE(delegate()->loaded_group_->newest_complete_cache()); |
| 450 delegate()->loaded_groups_newest_cache_ = NULL; | 453 delegate()->loaded_groups_newest_cache_ = NULL; |
| 451 EXPECT_TRUE(delegate()->loaded_group_->HasOneRef()); | 454 EXPECT_TRUE(delegate()->loaded_group_->HasOneRef()); |
| 452 EXPECT_EQ(2, mock_quota_manager_proxy_->notify_storage_accessed_count_); | 455 EXPECT_EQ(2, mock_quota_manager_proxy_->notify_storage_accessed_count_); |
| 453 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_modified_count_); | 456 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_modified_count_); |
| 454 TestFinished(); | 457 TestFinished(); |
| 455 } | 458 } |
| 456 | 459 |
| 457 // StoreNewGroup -------------------------------------- | 460 // StoreNewGroup -------------------------------------- |
| 458 | 461 |
| 459 void StoreNewGroup() { | 462 void StoreNewGroup() { |
| 460 // Store a group and its newest cache. Should complete asyncly. | 463 // Store a group and its newest cache. Should complete asynchronously. |
| 461 PushNextTask(NewRunnableMethod( | 464 PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_StoreNewGroup, |
| 462 this, &AppCacheStorageImplTest::Verify_StoreNewGroup)); | 465 base::Unretained(this))); |
| 463 | 466 |
| 464 // Setup some preconditions. Create a group and newest cache that | 467 // Setup some preconditions. Create a group and newest cache that |
| 465 // appear to be "unstored". | 468 // appear to be "unstored". |
| 466 group_ = new AppCacheGroup( | 469 group_ = new AppCacheGroup( |
| 467 service(), kManifestUrl, storage()->NewGroupId()); | 470 service(), kManifestUrl, storage()->NewGroupId()); |
| 468 cache_ = new AppCache(service(), storage()->NewCacheId()); | 471 cache_ = new AppCache(service(), storage()->NewCacheId()); |
| 469 cache_->AddEntry(kEntryUrl, AppCacheEntry(AppCacheEntry::EXPLICIT, 1, | 472 cache_->AddEntry(kEntryUrl, AppCacheEntry(AppCacheEntry::EXPLICIT, 1, |
| 470 kDefaultEntrySize)); | 473 kDefaultEntrySize)); |
| 471 // Hold a ref to the cache simulate the UpdateJob holding that ref, | 474 // Hold a ref to the cache simulate the UpdateJob holding that ref, |
| 472 // and hold a ref to the group to simulate the CacheHost holding that ref. | 475 // and hold a ref to the group to simulate the CacheHost holding that ref. |
| 473 | 476 |
| 474 // Have the quota manager retrun asyncly for this test. | 477 // Have the quota manager retrun asynchronously for this test. |
| 475 mock_quota_manager_proxy_->mock_manager_->async_ = true; | 478 mock_quota_manager_proxy_->mock_manager_->async_ = true; |
| 476 | 479 |
| 477 // Conduct the store test. | 480 // Conduct the store test. |
| 478 storage()->StoreGroupAndNewestCache(group_, cache_, delegate()); | 481 storage()->StoreGroupAndNewestCache(group_, cache_, delegate()); |
| 479 EXPECT_FALSE(delegate()->stored_group_success_); | 482 EXPECT_FALSE(delegate()->stored_group_success_); |
| 480 } | 483 } |
| 481 | 484 |
| 482 void Verify_StoreNewGroup() { | 485 void Verify_StoreNewGroup() { |
| 483 EXPECT_TRUE(delegate()->stored_group_success_); | 486 EXPECT_TRUE(delegate()->stored_group_success_); |
| 484 EXPECT_EQ(group_.get(), delegate()->stored_group_.get()); | 487 EXPECT_EQ(group_.get(), delegate()->stored_group_.get()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 496 EXPECT_EQ(1, mock_quota_manager_proxy_->notify_storage_modified_count_); | 499 EXPECT_EQ(1, mock_quota_manager_proxy_->notify_storage_modified_count_); |
| 497 EXPECT_EQ(kOrigin, mock_quota_manager_proxy_->last_origin_); | 500 EXPECT_EQ(kOrigin, mock_quota_manager_proxy_->last_origin_); |
| 498 EXPECT_EQ(kDefaultEntrySize, mock_quota_manager_proxy_->last_delta_); | 501 EXPECT_EQ(kDefaultEntrySize, mock_quota_manager_proxy_->last_delta_); |
| 499 | 502 |
| 500 TestFinished(); | 503 TestFinished(); |
| 501 } | 504 } |
| 502 | 505 |
| 503 // StoreExistingGroup -------------------------------------- | 506 // StoreExistingGroup -------------------------------------- |
| 504 | 507 |
| 505 void StoreExistingGroup() { | 508 void StoreExistingGroup() { |
| 506 // Store a group and its newest cache. Should complete asyncly. | 509 // Store a group and its newest cache. Should complete asynchronously. |
| 507 PushNextTask(NewRunnableMethod( | 510 PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_StoreExistingGroup, |
| 508 this, &AppCacheStorageImplTest::Verify_StoreExistingGroup)); | 511 base::Unretained(this))); |
| 509 | 512 |
| 510 // Setup some preconditions. Create a group and old complete cache | 513 // Setup some preconditions. Create a group and old complete cache |
| 511 // that appear to be "stored" | 514 // that appear to be "stored" |
| 512 MakeCacheAndGroup(kManifestUrl, 1, 1, true); | 515 MakeCacheAndGroup(kManifestUrl, 1, 1, true); |
| 513 EXPECT_EQ(kDefaultEntrySize, storage()->usage_map_[kOrigin]); | 516 EXPECT_EQ(kDefaultEntrySize, storage()->usage_map_[kOrigin]); |
| 514 | 517 |
| 515 // And a newest unstored complete cache. | 518 // And a newest unstored complete cache. |
| 516 cache2_ = new AppCache(service(), 2); | 519 cache2_ = new AppCache(service(), 2); |
| 517 cache2_->AddEntry(kEntryUrl, AppCacheEntry(AppCacheEntry::MASTER, 1, | 520 cache2_->AddEntry(kEntryUrl, AppCacheEntry(AppCacheEntry::MASTER, 1, |
| 518 kDefaultEntrySize + 100)); | 521 kDefaultEntrySize + 100)); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 // Setup some preconditions. Create a group and old complete cache | 559 // Setup some preconditions. Create a group and old complete cache |
| 557 // that appear to be "stored" | 560 // that appear to be "stored" |
| 558 MakeCacheAndGroup(kManifestUrl, 1, 1, true); | 561 MakeCacheAndGroup(kManifestUrl, 1, 1, true); |
| 559 EXPECT_EQ(kDefaultEntrySize, storage()->usage_map_[kOrigin]); | 562 EXPECT_EQ(kDefaultEntrySize, storage()->usage_map_[kOrigin]); |
| 560 | 563 |
| 561 // Change the cache. | 564 // Change the cache. |
| 562 base::Time now = base::Time::Now(); | 565 base::Time now = base::Time::Now(); |
| 563 cache_->AddEntry(kEntryUrl, AppCacheEntry(AppCacheEntry::MASTER, 1, 100)); | 566 cache_->AddEntry(kEntryUrl, AppCacheEntry(AppCacheEntry::MASTER, 1, 100)); |
| 564 cache_->set_update_time(now); | 567 cache_->set_update_time(now); |
| 565 | 568 |
| 566 PushNextTask(NewRunnableMethod( | 569 PushNextTask(base::Bind( |
| 567 this, &AppCacheStorageImplTest::Verify_StoreExistingGroupExistingCache, | 570 &AppCacheStorageImplTest::Verify_StoreExistingGroupExistingCache, |
| 568 now)); | 571 base::Unretained(this), now)); |
| 569 | 572 |
| 570 // Conduct the test. | 573 // Conduct the test. |
| 571 EXPECT_EQ(cache_, group_->newest_complete_cache()); | 574 EXPECT_EQ(cache_, group_->newest_complete_cache()); |
| 572 storage()->StoreGroupAndNewestCache(group_, cache_, delegate()); | 575 storage()->StoreGroupAndNewestCache(group_, cache_, delegate()); |
| 573 EXPECT_FALSE(delegate()->stored_group_success_); | 576 EXPECT_FALSE(delegate()->stored_group_success_); |
| 574 } | 577 } |
| 575 | 578 |
| 576 void Verify_StoreExistingGroupExistingCache( | 579 void Verify_StoreExistingGroupExistingCache( |
| 577 base::Time expected_update_time) { | 580 base::Time expected_update_time) { |
| 578 EXPECT_TRUE(delegate()->stored_group_success_); | 581 EXPECT_TRUE(delegate()->stored_group_success_); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 602 EXPECT_EQ(1, mock_quota_manager_proxy_->notify_storage_modified_count_); | 605 EXPECT_EQ(1, mock_quota_manager_proxy_->notify_storage_modified_count_); |
| 603 EXPECT_EQ(kOrigin, mock_quota_manager_proxy_->last_origin_); | 606 EXPECT_EQ(kOrigin, mock_quota_manager_proxy_->last_origin_); |
| 604 EXPECT_EQ(100, mock_quota_manager_proxy_->last_delta_); | 607 EXPECT_EQ(100, mock_quota_manager_proxy_->last_delta_); |
| 605 | 608 |
| 606 TestFinished(); | 609 TestFinished(); |
| 607 } | 610 } |
| 608 | 611 |
| 609 // FailStoreGroup -------------------------------------- | 612 // FailStoreGroup -------------------------------------- |
| 610 | 613 |
| 611 void FailStoreGroup() { | 614 void FailStoreGroup() { |
| 612 // Store a group and its newest cache. Should complete asyncly. | 615 // Store a group and its newest cache. Should complete asynchronously. |
| 613 PushNextTask(NewRunnableMethod( | 616 PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_FailStoreGroup, |
| 614 this, &AppCacheStorageImplTest::Verify_FailStoreGroup)); | 617 base::Unretained(this))); |
| 615 | 618 |
| 616 // Setup some preconditions. Create a group and newest cache that | 619 // Setup some preconditions. Create a group and newest cache that |
| 617 // appear to be "unstored" and big enough to exceed the 5M limit. | 620 // appear to be "unstored" and big enough to exceed the 5M limit. |
| 618 const int64 kTooBig = 10 * 1024 * 1024; // 10M | 621 const int64 kTooBig = 10 * 1024 * 1024; // 10M |
| 619 group_ = new AppCacheGroup( | 622 group_ = new AppCacheGroup( |
| 620 service(), kManifestUrl, storage()->NewGroupId()); | 623 service(), kManifestUrl, storage()->NewGroupId()); |
| 621 cache_ = new AppCache(service(), storage()->NewCacheId()); | 624 cache_ = new AppCache(service(), storage()->NewCacheId()); |
| 622 cache_->AddEntry(kManifestUrl, | 625 cache_->AddEntry(kManifestUrl, |
| 623 AppCacheEntry(AppCacheEntry::MANIFEST, 1, kTooBig)); | 626 AppCacheEntry(AppCacheEntry::MANIFEST, 1, kTooBig)); |
| 624 // Hold a ref to the cache simulate the UpdateJob holding that ref, | 627 // Hold a ref to the cache simulate the UpdateJob holding that ref, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 641 | 644 |
| 642 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_accessed_count_); | 645 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_accessed_count_); |
| 643 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_modified_count_); | 646 EXPECT_EQ(0, mock_quota_manager_proxy_->notify_storage_modified_count_); |
| 644 | 647 |
| 645 TestFinished(); | 648 TestFinished(); |
| 646 } | 649 } |
| 647 | 650 |
| 648 // MakeGroupObsolete ------------------------------- | 651 // MakeGroupObsolete ------------------------------- |
| 649 | 652 |
| 650 void MakeGroupObsolete() { | 653 void MakeGroupObsolete() { |
| 651 // Make a group obsolete, should complete asyncly. | 654 // Make a group obsolete, should complete asynchronously. |
| 652 PushNextTask(NewRunnableMethod( | 655 PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_MakeGroupObsolete, |
| 653 this, &AppCacheStorageImplTest::Verify_MakeGroupObsolete)); | 656 base::Unretained(this))); |
| 654 | 657 |
| 655 // Setup some preconditions. Create a group and newest cache that | 658 // Setup some preconditions. Create a group and newest cache that |
| 656 // appears to be "stored" and "currently in use". | 659 // appears to be "stored" and "currently in use". |
| 657 MakeCacheAndGroup(kManifestUrl, 1, 1, true); | 660 MakeCacheAndGroup(kManifestUrl, 1, 1, true); |
| 658 EXPECT_EQ(kDefaultEntrySize, storage()->usage_map_[kOrigin]); | 661 EXPECT_EQ(kDefaultEntrySize, storage()->usage_map_[kOrigin]); |
| 659 | 662 |
| 660 // Also insert some related records. | 663 // Also insert some related records. |
| 661 AppCacheDatabase::EntryRecord entry_record; | 664 AppCacheDatabase::EntryRecord entry_record; |
| 662 entry_record.cache_id = 1; | 665 entry_record.cache_id = 1; |
| 663 entry_record.flags = AppCacheEntry::FALLBACK; | 666 entry_record.flags = AppCacheEntry::FALLBACK; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 731 EXPECT_FALSE(cache_->GetEntry(kEntryUrl)->IsForeign()); | 734 EXPECT_FALSE(cache_->GetEntry(kEntryUrl)->IsForeign()); |
| 732 | 735 |
| 733 // Conduct the test. | 736 // Conduct the test. |
| 734 storage()->MarkEntryAsForeign(kEntryUrl, 1); | 737 storage()->MarkEntryAsForeign(kEntryUrl, 1); |
| 735 | 738 |
| 736 // The entry in the working set should have been updated syncly. | 739 // The entry in the working set should have been updated syncly. |
| 737 EXPECT_TRUE(cache_->GetEntry(kEntryUrl)->IsForeign()); | 740 EXPECT_TRUE(cache_->GetEntry(kEntryUrl)->IsForeign()); |
| 738 EXPECT_TRUE(cache_->GetEntry(kEntryUrl)->IsExplicit()); | 741 EXPECT_TRUE(cache_->GetEntry(kEntryUrl)->IsExplicit()); |
| 739 | 742 |
| 740 // And the entry in storage should also be updated, but that | 743 // And the entry in storage should also be updated, but that |
| 741 // happens asyncly on the db thread. | 744 // happens asynchronously on the db thread. |
| 742 FlushDbThreadTasks(); | 745 FlushDbThreadTasks(); |
| 743 AppCacheDatabase::EntryRecord entry_record2; | 746 AppCacheDatabase::EntryRecord entry_record2; |
| 744 EXPECT_TRUE(database()->FindEntry(1, kEntryUrl, &entry_record2)); | 747 EXPECT_TRUE(database()->FindEntry(1, kEntryUrl, &entry_record2)); |
| 745 EXPECT_EQ(AppCacheEntry::EXPLICIT | AppCacheEntry::FOREIGN, | 748 EXPECT_EQ(AppCacheEntry::EXPLICIT | AppCacheEntry::FOREIGN, |
| 746 entry_record2.flags); | 749 entry_record2.flags); |
| 747 TestFinished(); | 750 TestFinished(); |
| 748 } | 751 } |
| 749 | 752 |
| 750 // MarkEntryAsForeignWithLoadInProgress ------------------------------- | 753 // MarkEntryAsForeignWithLoadInProgress ------------------------------- |
| 751 | 754 |
| 752 void MarkEntryAsForeignWithLoadInProgress() { | 755 void MarkEntryAsForeignWithLoadInProgress() { |
| 753 PushNextTask(NewRunnableMethod(this, | 756 PushNextTask(base::Bind( |
| 754 &AppCacheStorageImplTest::Verify_MarkEntryAsForeignWithLoadInProgress)); | 757 &AppCacheStorageImplTest::Verify_MarkEntryAsForeignWithLoadInProgress, |
| 758 base::Unretained(this))); |
| 755 | 759 |
| 756 // Setup some preconditions. Create a cache with an entry | 760 // Setup some preconditions. Create a cache with an entry |
| 757 // in storage, but not in the working set. | 761 // in storage, but not in the working set. |
| 758 MakeCacheAndGroup(kManifestUrl, 1, 1, true); | 762 MakeCacheAndGroup(kManifestUrl, 1, 1, true); |
| 759 cache_->AddEntry(kEntryUrl, AppCacheEntry(AppCacheEntry::EXPLICIT)); | 763 cache_->AddEntry(kEntryUrl, AppCacheEntry(AppCacheEntry::EXPLICIT)); |
| 760 AppCacheDatabase::EntryRecord entry_record; | 764 AppCacheDatabase::EntryRecord entry_record; |
| 761 entry_record.cache_id = 1; | 765 entry_record.cache_id = 1; |
| 762 entry_record.url = kEntryUrl; | 766 entry_record.url = kEntryUrl; |
| 763 entry_record.flags = AppCacheEntry::EXPLICIT; | 767 entry_record.flags = AppCacheEntry::EXPLICIT; |
| 764 entry_record.response_id = 0; | 768 entry_record.response_id = 0; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 787 AppCacheDatabase::EntryRecord entry_record; | 791 AppCacheDatabase::EntryRecord entry_record; |
| 788 EXPECT_TRUE(database()->FindEntry(1, kEntryUrl, &entry_record)); | 792 EXPECT_TRUE(database()->FindEntry(1, kEntryUrl, &entry_record)); |
| 789 EXPECT_EQ(AppCacheEntry::EXPLICIT | AppCacheEntry::FOREIGN, | 793 EXPECT_EQ(AppCacheEntry::EXPLICIT | AppCacheEntry::FOREIGN, |
| 790 entry_record.flags); | 794 entry_record.flags); |
| 791 TestFinished(); | 795 TestFinished(); |
| 792 } | 796 } |
| 793 | 797 |
| 794 // FindNoMainResponse ------------------------------- | 798 // FindNoMainResponse ------------------------------- |
| 795 | 799 |
| 796 void FindNoMainResponse() { | 800 void FindNoMainResponse() { |
| 797 PushNextTask(NewRunnableMethod( | 801 PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_FindNoMainResponse, |
| 798 this, &AppCacheStorageImplTest::Verify_FindNoMainResponse)); | 802 base::Unretained(this))); |
| 799 | 803 |
| 800 // Conduct the test. | 804 // Conduct the test. |
| 801 storage()->FindResponseForMainRequest(kEntryUrl, GURL(), delegate()); | 805 storage()->FindResponseForMainRequest(kEntryUrl, GURL(), delegate()); |
| 802 EXPECT_NE(kEntryUrl, delegate()->found_url_); | 806 EXPECT_NE(kEntryUrl, delegate()->found_url_); |
| 803 } | 807 } |
| 804 | 808 |
| 805 void Verify_FindNoMainResponse() { | 809 void Verify_FindNoMainResponse() { |
| 806 EXPECT_EQ(kEntryUrl, delegate()->found_url_); | 810 EXPECT_EQ(kEntryUrl, delegate()->found_url_); |
| 807 EXPECT_TRUE(delegate()->found_manifest_url_.is_empty()); | 811 EXPECT_TRUE(delegate()->found_manifest_url_.is_empty()); |
| 808 EXPECT_EQ(kNoCacheId, delegate()->found_cache_id_); | 812 EXPECT_EQ(kNoCacheId, delegate()->found_cache_id_); |
| 809 EXPECT_EQ(kNoResponseId, delegate()->found_entry_.response_id()); | 813 EXPECT_EQ(kNoResponseId, delegate()->found_entry_.response_id()); |
| 810 EXPECT_EQ(kNoResponseId, delegate()->found_fallback_entry_.response_id()); | 814 EXPECT_EQ(kNoResponseId, delegate()->found_fallback_entry_.response_id()); |
| 811 EXPECT_TRUE(delegate()->found_fallback_url_.is_empty()); | 815 EXPECT_TRUE(delegate()->found_fallback_url_.is_empty()); |
| 812 EXPECT_EQ(0, delegate()->found_entry_.types()); | 816 EXPECT_EQ(0, delegate()->found_entry_.types()); |
| 813 EXPECT_EQ(0, delegate()->found_fallback_entry_.types()); | 817 EXPECT_EQ(0, delegate()->found_fallback_entry_.types()); |
| 814 TestFinished(); | 818 TestFinished(); |
| 815 } | 819 } |
| 816 | 820 |
| 817 // BasicFindMainResponse ------------------------------- | 821 // BasicFindMainResponse ------------------------------- |
| 818 | 822 |
| 819 void BasicFindMainResponseInDatabase() { | 823 void BasicFindMainResponseInDatabase() { |
| 820 BasicFindMainResponse(true); | 824 BasicFindMainResponse(true); |
| 821 } | 825 } |
| 822 | 826 |
| 823 void BasicFindMainResponseInWorkingSet() { | 827 void BasicFindMainResponseInWorkingSet() { |
| 824 BasicFindMainResponse(false); | 828 BasicFindMainResponse(false); |
| 825 } | 829 } |
| 826 | 830 |
| 827 void BasicFindMainResponse(bool drop_from_working_set) { | 831 void BasicFindMainResponse(bool drop_from_working_set) { |
| 828 PushNextTask(NewRunnableMethod( | 832 PushNextTask(base::Bind( |
| 829 this, &AppCacheStorageImplTest::Verify_BasicFindMainResponse)); | 833 &AppCacheStorageImplTest::Verify_BasicFindMainResponse, |
| 834 base::Unretained(this))); |
| 830 | 835 |
| 831 // Setup some preconditions. Create a complete cache with an entry | 836 // Setup some preconditions. Create a complete cache with an entry |
| 832 // in storage. | 837 // in storage. |
| 833 MakeCacheAndGroup(kManifestUrl, 2, 1, true); | 838 MakeCacheAndGroup(kManifestUrl, 2, 1, true); |
| 834 cache_->AddEntry(kEntryUrl, AppCacheEntry(AppCacheEntry::EXPLICIT, 1)); | 839 cache_->AddEntry(kEntryUrl, AppCacheEntry(AppCacheEntry::EXPLICIT, 1)); |
| 835 AppCacheDatabase::EntryRecord entry_record; | 840 AppCacheDatabase::EntryRecord entry_record; |
| 836 entry_record.cache_id = 1; | 841 entry_record.cache_id = 1; |
| 837 entry_record.url = kEntryUrl; | 842 entry_record.url = kEntryUrl; |
| 838 entry_record.flags = AppCacheEntry::EXPLICIT; | 843 entry_record.flags = AppCacheEntry::EXPLICIT; |
| 839 entry_record.response_id = 1; | 844 entry_record.response_id = 1; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 867 | 872 |
| 868 void BasicFindMainFallbackResponseInDatabase() { | 873 void BasicFindMainFallbackResponseInDatabase() { |
| 869 BasicFindMainFallbackResponse(true); | 874 BasicFindMainFallbackResponse(true); |
| 870 } | 875 } |
| 871 | 876 |
| 872 void BasicFindMainFallbackResponseInWorkingSet() { | 877 void BasicFindMainFallbackResponseInWorkingSet() { |
| 873 BasicFindMainFallbackResponse(false); | 878 BasicFindMainFallbackResponse(false); |
| 874 } | 879 } |
| 875 | 880 |
| 876 void BasicFindMainFallbackResponse(bool drop_from_working_set) { | 881 void BasicFindMainFallbackResponse(bool drop_from_working_set) { |
| 877 PushNextTask(NewRunnableMethod( | 882 PushNextTask(base::Bind( |
| 878 this, &AppCacheStorageImplTest::Verify_BasicFindMainFallbackResponse)); | 883 &AppCacheStorageImplTest::Verify_BasicFindMainFallbackResponse, |
| 884 base::Unretained(this))); |
| 879 | 885 |
| 880 // Setup some preconditions. Create a complete cache with a | 886 // Setup some preconditions. Create a complete cache with a |
| 881 // fallback namespace and entry. | 887 // fallback namespace and entry. |
| 882 MakeCacheAndGroup(kManifestUrl, 2, 1, true); | 888 MakeCacheAndGroup(kManifestUrl, 2, 1, true); |
| 883 cache_->AddEntry(kEntryUrl, AppCacheEntry(AppCacheEntry::FALLBACK, 1)); | 889 cache_->AddEntry(kEntryUrl, AppCacheEntry(AppCacheEntry::FALLBACK, 1)); |
| 884 cache_->AddEntry(kEntryUrl2, AppCacheEntry(AppCacheEntry::FALLBACK, 2)); | 890 cache_->AddEntry(kEntryUrl2, AppCacheEntry(AppCacheEntry::FALLBACK, 2)); |
| 885 cache_->fallback_namespaces_.push_back( | 891 cache_->fallback_namespaces_.push_back( |
| 886 FallbackNamespace(kFallbackNamespace2, kEntryUrl2)); | 892 FallbackNamespace(kFallbackNamespace2, kEntryUrl2)); |
| 887 cache_->fallback_namespaces_.push_back( | 893 cache_->fallback_namespaces_.push_back( |
| 888 FallbackNamespace(kFallbackNamespace, kEntryUrl)); | 894 FallbackNamespace(kFallbackNamespace, kEntryUrl)); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 925 EXPECT_FALSE(delegate()->found_entry_.has_response_id()); | 931 EXPECT_FALSE(delegate()->found_entry_.has_response_id()); |
| 926 EXPECT_EQ(2, delegate()->found_fallback_entry_.response_id()); | 932 EXPECT_EQ(2, delegate()->found_fallback_entry_.response_id()); |
| 927 EXPECT_EQ(kEntryUrl2, delegate()->found_fallback_url_); | 933 EXPECT_EQ(kEntryUrl2, delegate()->found_fallback_url_); |
| 928 EXPECT_TRUE(delegate()->found_fallback_entry_.IsFallback()); | 934 EXPECT_TRUE(delegate()->found_fallback_entry_.IsFallback()); |
| 929 TestFinished(); | 935 TestFinished(); |
| 930 } | 936 } |
| 931 | 937 |
| 932 // FindMainResponseWithMultipleHits ------------------------------- | 938 // FindMainResponseWithMultipleHits ------------------------------- |
| 933 | 939 |
| 934 void FindMainResponseWithMultipleHits() { | 940 void FindMainResponseWithMultipleHits() { |
| 935 PushNextTask(NewRunnableMethod(this, | 941 PushNextTask(base::Bind( |
| 936 &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits)); | 942 &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits, |
| 943 base::Unretained(this))); |
| 937 | 944 |
| 938 // Setup some preconditions, create a few caches with an identical set | 945 // Setup some preconditions, create a few caches with an identical set |
| 939 // of entries and fallback namespaces. Only the last one remains in | 946 // of entries and fallback namespaces. Only the last one remains in |
| 940 // the working set to simulate appearing as "in use". | 947 // the working set to simulate appearing as "in use". |
| 941 MakeMultipleHitCacheAndGroup(kManifestUrl, 1); | 948 MakeMultipleHitCacheAndGroup(kManifestUrl, 1); |
| 942 MakeMultipleHitCacheAndGroup(kManifestUrl2, 2); | 949 MakeMultipleHitCacheAndGroup(kManifestUrl2, 2); |
| 943 MakeMultipleHitCacheAndGroup(kManifestUrl3, 3); | 950 MakeMultipleHitCacheAndGroup(kManifestUrl3, 3); |
| 944 | 951 |
| 945 // Conduct the test, we should find the response from the last cache | 952 // Conduct the test, we should find the response from the last cache |
| 946 // since it's "in use". | 953 // since it's "in use". |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 996 EXPECT_EQ(kEntryUrl, delegate()->found_url_); | 1003 EXPECT_EQ(kEntryUrl, delegate()->found_url_); |
| 997 EXPECT_EQ(kManifestUrl3, delegate()->found_manifest_url_); | 1004 EXPECT_EQ(kManifestUrl3, delegate()->found_manifest_url_); |
| 998 EXPECT_EQ(3, delegate()->found_cache_id_); | 1005 EXPECT_EQ(3, delegate()->found_cache_id_); |
| 999 EXPECT_EQ(3, delegate()->found_group_id_); | 1006 EXPECT_EQ(3, delegate()->found_group_id_); |
| 1000 EXPECT_EQ(3, delegate()->found_entry_.response_id()); | 1007 EXPECT_EQ(3, delegate()->found_entry_.response_id()); |
| 1001 EXPECT_TRUE(delegate()->found_entry_.IsExplicit()); | 1008 EXPECT_TRUE(delegate()->found_entry_.IsExplicit()); |
| 1002 EXPECT_FALSE(delegate()->found_fallback_entry_.has_response_id()); | 1009 EXPECT_FALSE(delegate()->found_fallback_entry_.has_response_id()); |
| 1003 | 1010 |
| 1004 // Conduct another test perferring kManifestUrl | 1011 // Conduct another test perferring kManifestUrl |
| 1005 delegate_.reset(new MockStorageDelegate(this)); | 1012 delegate_.reset(new MockStorageDelegate(this)); |
| 1006 PushNextTask(NewRunnableMethod(this, | 1013 PushNextTask(base::Bind( |
| 1007 &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits2)); | 1014 &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits2, |
| 1015 base::Unretained(this))); |
| 1008 storage()->FindResponseForMainRequest(kEntryUrl, kManifestUrl, delegate()); | 1016 storage()->FindResponseForMainRequest(kEntryUrl, kManifestUrl, delegate()); |
| 1009 EXPECT_NE(kEntryUrl, delegate()->found_url_); | 1017 EXPECT_NE(kEntryUrl, delegate()->found_url_); |
| 1010 } | 1018 } |
| 1011 | 1019 |
| 1012 void Verify_FindMainResponseWithMultipleHits2() { | 1020 void Verify_FindMainResponseWithMultipleHits2() { |
| 1013 EXPECT_EQ(kEntryUrl, delegate()->found_url_); | 1021 EXPECT_EQ(kEntryUrl, delegate()->found_url_); |
| 1014 EXPECT_EQ(kManifestUrl, delegate()->found_manifest_url_); | 1022 EXPECT_EQ(kManifestUrl, delegate()->found_manifest_url_); |
| 1015 EXPECT_EQ(1, delegate()->found_cache_id_); | 1023 EXPECT_EQ(1, delegate()->found_cache_id_); |
| 1016 EXPECT_EQ(1, delegate()->found_group_id_); | 1024 EXPECT_EQ(1, delegate()->found_group_id_); |
| 1017 EXPECT_EQ(1, delegate()->found_entry_.response_id()); | 1025 EXPECT_EQ(1, delegate()->found_entry_.response_id()); |
| 1018 EXPECT_TRUE(delegate()->found_entry_.IsExplicit()); | 1026 EXPECT_TRUE(delegate()->found_entry_.IsExplicit()); |
| 1019 EXPECT_FALSE(delegate()->found_fallback_entry_.has_response_id()); | 1027 EXPECT_FALSE(delegate()->found_fallback_entry_.has_response_id()); |
| 1020 | 1028 |
| 1021 // Conduct the another test perferring kManifestUrl2 | 1029 // Conduct the another test perferring kManifestUrl2 |
| 1022 delegate_.reset(new MockStorageDelegate(this)); | 1030 delegate_.reset(new MockStorageDelegate(this)); |
| 1023 PushNextTask(NewRunnableMethod(this, | 1031 PushNextTask(base::Bind( |
| 1024 &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits3)); | 1032 &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits3, |
| 1033 base::Unretained(this))); |
| 1025 storage()->FindResponseForMainRequest(kEntryUrl, kManifestUrl2, delegate()); | 1034 storage()->FindResponseForMainRequest(kEntryUrl, kManifestUrl2, delegate()); |
| 1026 EXPECT_NE(kEntryUrl, delegate()->found_url_); | 1035 EXPECT_NE(kEntryUrl, delegate()->found_url_); |
| 1027 } | 1036 } |
| 1028 | 1037 |
| 1029 void Verify_FindMainResponseWithMultipleHits3() { | 1038 void Verify_FindMainResponseWithMultipleHits3() { |
| 1030 EXPECT_EQ(kEntryUrl, delegate()->found_url_); | 1039 EXPECT_EQ(kEntryUrl, delegate()->found_url_); |
| 1031 EXPECT_EQ(kManifestUrl2, delegate()->found_manifest_url_); | 1040 EXPECT_EQ(kManifestUrl2, delegate()->found_manifest_url_); |
| 1032 EXPECT_EQ(2, delegate()->found_cache_id_); | 1041 EXPECT_EQ(2, delegate()->found_cache_id_); |
| 1033 EXPECT_EQ(2, delegate()->found_group_id_); | 1042 EXPECT_EQ(2, delegate()->found_group_id_); |
| 1034 EXPECT_EQ(2, delegate()->found_entry_.response_id()); | 1043 EXPECT_EQ(2, delegate()->found_entry_.response_id()); |
| 1035 EXPECT_TRUE(delegate()->found_entry_.IsExplicit()); | 1044 EXPECT_TRUE(delegate()->found_entry_.IsExplicit()); |
| 1036 EXPECT_FALSE(delegate()->found_fallback_entry_.has_response_id()); | 1045 EXPECT_FALSE(delegate()->found_fallback_entry_.has_response_id()); |
| 1037 | 1046 |
| 1038 // Conduct another test with no preferred manifest that hits the fallback. | 1047 // Conduct another test with no preferred manifest that hits the fallback. |
| 1039 delegate_.reset(new MockStorageDelegate(this)); | 1048 delegate_.reset(new MockStorageDelegate(this)); |
| 1040 PushNextTask(NewRunnableMethod(this, | 1049 PushNextTask(base::Bind( |
| 1041 &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits4)); | 1050 &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits4, |
| 1051 base::Unretained(this))); |
| 1042 storage()->FindResponseForMainRequest( | 1052 storage()->FindResponseForMainRequest( |
| 1043 kFallbackTestUrl, GURL(), delegate()); | 1053 kFallbackTestUrl, GURL(), delegate()); |
| 1044 EXPECT_NE(kFallbackTestUrl, delegate()->found_url_); | 1054 EXPECT_NE(kFallbackTestUrl, delegate()->found_url_); |
| 1045 } | 1055 } |
| 1046 | 1056 |
| 1047 void Verify_FindMainResponseWithMultipleHits4() { | 1057 void Verify_FindMainResponseWithMultipleHits4() { |
| 1048 EXPECT_EQ(kFallbackTestUrl, delegate()->found_url_); | 1058 EXPECT_EQ(kFallbackTestUrl, delegate()->found_url_); |
| 1049 EXPECT_EQ(kManifestUrl3, delegate()->found_manifest_url_); | 1059 EXPECT_EQ(kManifestUrl3, delegate()->found_manifest_url_); |
| 1050 EXPECT_EQ(3, delegate()->found_cache_id_); | 1060 EXPECT_EQ(3, delegate()->found_cache_id_); |
| 1051 EXPECT_EQ(3, delegate()->found_group_id_); | 1061 EXPECT_EQ(3, delegate()->found_group_id_); |
| 1052 EXPECT_FALSE(delegate()->found_entry_.has_response_id()); | 1062 EXPECT_FALSE(delegate()->found_entry_.has_response_id()); |
| 1053 EXPECT_EQ(3 + kFallbackEntryIdOffset, | 1063 EXPECT_EQ(3 + kFallbackEntryIdOffset, |
| 1054 delegate()->found_fallback_entry_.response_id()); | 1064 delegate()->found_fallback_entry_.response_id()); |
| 1055 EXPECT_TRUE(delegate()->found_fallback_entry_.IsFallback()); | 1065 EXPECT_TRUE(delegate()->found_fallback_entry_.IsFallback()); |
| 1056 EXPECT_EQ(kEntryUrl2, delegate()->found_fallback_url_); | 1066 EXPECT_EQ(kEntryUrl2, delegate()->found_fallback_url_); |
| 1057 | 1067 |
| 1058 // Conduct another test preferring kManifestUrl2 that hits the fallback. | 1068 // Conduct another test preferring kManifestUrl2 that hits the fallback. |
| 1059 delegate_.reset(new MockStorageDelegate(this)); | 1069 delegate_.reset(new MockStorageDelegate(this)); |
| 1060 PushNextTask(NewRunnableMethod(this, | 1070 PushNextTask(base::Bind( |
| 1061 &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits5)); | 1071 &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits5, |
| 1072 base::Unretained(this))); |
| 1062 storage()->FindResponseForMainRequest( | 1073 storage()->FindResponseForMainRequest( |
| 1063 kFallbackTestUrl, kManifestUrl2, delegate()); | 1074 kFallbackTestUrl, kManifestUrl2, delegate()); |
| 1064 EXPECT_NE(kFallbackTestUrl, delegate()->found_url_); | 1075 EXPECT_NE(kFallbackTestUrl, delegate()->found_url_); |
| 1065 } | 1076 } |
| 1066 | 1077 |
| 1067 void Verify_FindMainResponseWithMultipleHits5() { | 1078 void Verify_FindMainResponseWithMultipleHits5() { |
| 1068 EXPECT_EQ(kFallbackTestUrl, delegate()->found_url_); | 1079 EXPECT_EQ(kFallbackTestUrl, delegate()->found_url_); |
| 1069 EXPECT_EQ(kManifestUrl2, delegate()->found_manifest_url_); | 1080 EXPECT_EQ(kManifestUrl2, delegate()->found_manifest_url_); |
| 1070 EXPECT_EQ(2, delegate()->found_cache_id_); | 1081 EXPECT_EQ(2, delegate()->found_cache_id_); |
| 1071 EXPECT_EQ(2, delegate()->found_group_id_); | 1082 EXPECT_EQ(2, delegate()->found_group_id_); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1122 database()->InsertFallbackNameSpace(&fallback_namespace_record)); | 1133 database()->InsertFallbackNameSpace(&fallback_namespace_record)); |
| 1123 whitelist_record.cache_id = 1; | 1134 whitelist_record.cache_id = 1; |
| 1124 whitelist_record.namespace_url = kOnlineNamespaceWithinFallback; | 1135 whitelist_record.namespace_url = kOnlineNamespaceWithinFallback; |
| 1125 EXPECT_TRUE(database()->InsertOnlineWhiteList(&whitelist_record)); | 1136 EXPECT_TRUE(database()->InsertOnlineWhiteList(&whitelist_record)); |
| 1126 if (drop_from_working_set) { | 1137 if (drop_from_working_set) { |
| 1127 cache_ = NULL; | 1138 cache_ = NULL; |
| 1128 group_ = NULL; | 1139 group_ = NULL; |
| 1129 } | 1140 } |
| 1130 | 1141 |
| 1131 // We should not find anything for the foreign entry. | 1142 // We should not find anything for the foreign entry. |
| 1132 PushNextTask(NewRunnableMethod( | 1143 PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_ExclusionNotFound, |
| 1133 this, &AppCacheStorageImplTest::Verify_ExclusionNotFound, | 1144 base::Unretained(this), kEntryUrl, 1)); |
| 1134 kEntryUrl, 1)); | |
| 1135 storage()->FindResponseForMainRequest(kEntryUrl, GURL(), delegate()); | 1145 storage()->FindResponseForMainRequest(kEntryUrl, GURL(), delegate()); |
| 1136 } | 1146 } |
| 1137 | 1147 |
| 1138 void Verify_ExclusionNotFound(GURL expected_url, int phase) { | 1148 void Verify_ExclusionNotFound(GURL expected_url, int phase) { |
| 1139 EXPECT_EQ(expected_url, delegate()->found_url_); | 1149 EXPECT_EQ(expected_url, delegate()->found_url_); |
| 1140 EXPECT_TRUE(delegate()->found_manifest_url_.is_empty()); | 1150 EXPECT_TRUE(delegate()->found_manifest_url_.is_empty()); |
| 1141 EXPECT_EQ(kNoCacheId, delegate()->found_cache_id_); | 1151 EXPECT_EQ(kNoCacheId, delegate()->found_cache_id_); |
| 1142 EXPECT_EQ(0, delegate()->found_group_id_); | 1152 EXPECT_EQ(0, delegate()->found_group_id_); |
| 1143 EXPECT_EQ(kNoResponseId, delegate()->found_entry_.response_id()); | 1153 EXPECT_EQ(kNoResponseId, delegate()->found_entry_.response_id()); |
| 1144 EXPECT_EQ(kNoResponseId, delegate()->found_fallback_entry_.response_id()); | 1154 EXPECT_EQ(kNoResponseId, delegate()->found_fallback_entry_.response_id()); |
| 1145 EXPECT_TRUE(delegate()->found_fallback_url_.is_empty()); | 1155 EXPECT_TRUE(delegate()->found_fallback_url_.is_empty()); |
| 1146 EXPECT_EQ(0, delegate()->found_entry_.types()); | 1156 EXPECT_EQ(0, delegate()->found_entry_.types()); |
| 1147 EXPECT_EQ(0, delegate()->found_fallback_entry_.types()); | 1157 EXPECT_EQ(0, delegate()->found_fallback_entry_.types()); |
| 1148 | 1158 |
| 1149 if (phase == 1) { | 1159 if (phase == 1) { |
| 1150 // We should not find anything for the online namespace. | 1160 // We should not find anything for the online namespace. |
| 1151 PushNextTask(NewRunnableMethod(this, | 1161 PushNextTask( |
| 1152 &AppCacheStorageImplTest::Verify_ExclusionNotFound, | 1162 base::Bind(&AppCacheStorageImplTest::Verify_ExclusionNotFound, |
| 1153 kOnlineNamespace, 2)); | 1163 base::Unretained(this), kOnlineNamespace, 2)); |
| 1154 storage()->FindResponseForMainRequest( | 1164 storage()->FindResponseForMainRequest( |
| 1155 kOnlineNamespace, GURL(), delegate()); | 1165 kOnlineNamespace, GURL(), delegate()); |
| 1156 return; | 1166 return; |
| 1157 } | 1167 } |
| 1158 if (phase == 2) { | 1168 if (phase == 2) { |
| 1159 // We should not find anything for the online namespace nested within | 1169 // We should not find anything for the online namespace nested within |
| 1160 // the fallback namespace. | 1170 // the fallback namespace. |
| 1161 PushNextTask(NewRunnableMethod(this, | 1171 PushNextTask(base::Bind( |
| 1162 &AppCacheStorageImplTest::Verify_ExclusionNotFound, | 1172 &AppCacheStorageImplTest::Verify_ExclusionNotFound, |
| 1163 kOnlineNamespaceWithinFallback, 3)); | 1173 base::Unretained(this), kOnlineNamespaceWithinFallback, 3)); |
| 1164 storage()->FindResponseForMainRequest( | 1174 storage()->FindResponseForMainRequest( |
| 1165 kOnlineNamespaceWithinFallback, GURL(), delegate()); | 1175 kOnlineNamespaceWithinFallback, GURL(), delegate()); |
| 1166 return; | 1176 return; |
| 1167 } | 1177 } |
| 1168 | 1178 |
| 1169 TestFinished(); | 1179 TestFinished(); |
| 1170 } | 1180 } |
| 1171 | 1181 |
| 1172 // Test case helpers -------------------------------------------------- | 1182 // Test case helpers -------------------------------------------------- |
| 1173 | 1183 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1220 EXPECT_TRUE(database()->InsertEntry(&entry_record)); | 1230 EXPECT_TRUE(database()->InsertEntry(&entry_record)); |
| 1221 | 1231 |
| 1222 storage()->usage_map_[manifest_url.GetOrigin()] = | 1232 storage()->usage_map_[manifest_url.GetOrigin()] = |
| 1223 default_entry.response_size(); | 1233 default_entry.response_size(); |
| 1224 } | 1234 } |
| 1225 } | 1235 } |
| 1226 | 1236 |
| 1227 // Data members -------------------------------------------------- | 1237 // Data members -------------------------------------------------- |
| 1228 | 1238 |
| 1229 scoped_ptr<base::WaitableEvent> test_finished_event_; | 1239 scoped_ptr<base::WaitableEvent> test_finished_event_; |
| 1230 std::stack<Task*> task_stack_; | 1240 std::stack<base::Closure> task_stack_; |
| 1231 scoped_ptr<AppCacheService> service_; | 1241 scoped_ptr<AppCacheService> service_; |
| 1232 scoped_ptr<MockStorageDelegate> delegate_; | 1242 scoped_ptr<MockStorageDelegate> delegate_; |
| 1233 scoped_refptr<MockQuotaManagerProxy> mock_quota_manager_proxy_; | 1243 scoped_refptr<MockQuotaManagerProxy> mock_quota_manager_proxy_; |
| 1234 scoped_refptr<AppCacheGroup> group_; | 1244 scoped_refptr<AppCacheGroup> group_; |
| 1235 scoped_refptr<AppCache> cache_; | 1245 scoped_refptr<AppCache> cache_; |
| 1236 scoped_refptr<AppCache> cache2_; | 1246 scoped_refptr<AppCache> cache2_; |
| 1237 }; | 1247 }; |
| 1238 | 1248 |
| 1239 | 1249 |
| 1240 TEST_F(AppCacheStorageImplTest, LoadCache_Miss) { | 1250 TEST_F(AppCacheStorageImplTest, LoadCache_Miss) { |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1321 } | 1331 } |
| 1322 | 1332 |
| 1323 TEST_F(AppCacheStorageImplTest, FindMainResponseExclusionsInWorkingSet) { | 1333 TEST_F(AppCacheStorageImplTest, FindMainResponseExclusionsInWorkingSet) { |
| 1324 RunTestOnIOThread( | 1334 RunTestOnIOThread( |
| 1325 &AppCacheStorageImplTest::FindMainResponseExclusionsInWorkingSet); | 1335 &AppCacheStorageImplTest::FindMainResponseExclusionsInWorkingSet); |
| 1326 } | 1336 } |
| 1327 | 1337 |
| 1328 // That's all folks! | 1338 // That's all folks! |
| 1329 | 1339 |
| 1330 } // namespace appcache | 1340 } // namespace appcache |
| 1331 | |
| 1332 // AppCacheStorageImplTest is expected to always live longer than the | |
| 1333 // runnable methods. This lets us call NewRunnableMethod on its instances. | |
| 1334 DISABLE_RUNNABLE_METHOD_REFCOUNT(appcache::AppCacheStorageImplTest); | |
| OLD | NEW |