| 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 #include <string> | 6 #include <string> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" |
| 11 #include "base/callback.h" |
| 9 #include "base/message_loop.h" | 12 #include "base/message_loop.h" |
| 13 #include "base/task.h" |
| 10 #include "base/threading/thread.h" | 14 #include "base/threading/thread.h" |
| 11 #include "base/synchronization/waitable_event.h" | 15 #include "base/synchronization/waitable_event.h" |
| 12 #include "net/base/net_errors.h" | 16 #include "net/base/net_errors.h" |
| 13 #include "net/http/http_response_headers.h" | 17 #include "net/http/http_response_headers.h" |
| 14 #include "net/url_request/url_request.h" | 18 #include "net/url_request/url_request.h" |
| 15 #include "net/url_request/url_request_error_job.h" | 19 #include "net/url_request/url_request_error_job.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include "webkit/appcache/appcache.h" | 21 #include "webkit/appcache/appcache.h" |
| 18 #include "webkit/appcache/appcache_backend_impl.h" | 22 #include "webkit/appcache/appcache_backend_impl.h" |
| 19 #include "webkit/appcache/appcache_request_handler.h" | 23 #include "webkit/appcache/appcache_request_handler.h" |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 mock_frontend_.reset(); | 201 mock_frontend_.reset(); |
| 198 mock_service_.reset(); | 202 mock_service_.reset(); |
| 199 mock_policy_.reset(); | 203 mock_policy_.reset(); |
| 200 host_ = NULL; | 204 host_ = NULL; |
| 201 } | 205 } |
| 202 | 206 |
| 203 void TestFinished() { | 207 void TestFinished() { |
| 204 // We unwind the stack prior to finishing up to let stack | 208 // We unwind the stack prior to finishing up to let stack |
| 205 // based objects get deleted. | 209 // based objects get deleted. |
| 206 DCHECK(MessageLoop::current() == io_thread_->message_loop()); | 210 DCHECK(MessageLoop::current() == io_thread_->message_loop()); |
| 207 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( | 211 MessageLoop::current()->PostTask( |
| 208 this, &AppCacheRequestHandlerTest::TestFinishedUnwound)); | 212 FROM_HERE, |
| 213 base::Bind(&AppCacheRequestHandlerTest::TestFinishedUnwound, |
| 214 base::Unretained(this))); |
| 209 } | 215 } |
| 210 | 216 |
| 211 void TestFinishedUnwound() { | 217 void TestFinishedUnwound() { |
| 212 TearDownTest(); | 218 TearDownTest(); |
| 213 test_finished_event_->Signal(); | 219 test_finished_event_->Signal(); |
| 214 } | 220 } |
| 215 | 221 |
| 216 void PushNextTask(Task* task) { | 222 void PushNextTask(const base::Closure& task) { |
| 217 task_stack_.push(task); | 223 task_stack_.push(task); |
| 218 } | 224 } |
| 219 | 225 |
| 220 void ScheduleNextTask() { | 226 void ScheduleNextTask() { |
| 221 DCHECK(MessageLoop::current() == io_thread_->message_loop()); | 227 DCHECK(MessageLoop::current() == io_thread_->message_loop()); |
| 222 if (task_stack_.empty()) { | 228 if (task_stack_.empty()) { |
| 223 TestFinished(); | 229 TestFinished(); |
| 224 return; | 230 return; |
| 225 } | 231 } |
| 226 MessageLoop::current()->PostTask(FROM_HERE, task_stack_.top()); | 232 MessageLoop::current()->PostTask(FROM_HERE, task_stack_.top()); |
| 227 task_stack_.pop(); | 233 task_stack_.pop(); |
| 228 } | 234 } |
| 229 | 235 |
| 230 // MainResource_Miss -------------------------------------------------- | 236 // MainResource_Miss -------------------------------------------------- |
| 231 | 237 |
| 232 void MainResource_Miss() { | 238 void MainResource_Miss() { |
| 233 PushNextTask(NewRunnableMethod( | 239 PushNextTask( |
| 234 this, &AppCacheRequestHandlerTest::Verify_MainResource_Miss)); | 240 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Miss, |
| 241 base::Unretained(this))); |
| 235 | 242 |
| 236 request_.reset(new MockURLRequest(GURL("http://blah/"))); | 243 request_.reset(new MockURLRequest(GURL("http://blah/"))); |
| 237 handler_.reset(host_->CreateRequestHandler(request_.get(), | 244 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 238 ResourceType::MAIN_FRAME)); | 245 ResourceType::MAIN_FRAME)); |
| 239 EXPECT_TRUE(handler_.get()); | 246 EXPECT_TRUE(handler_.get()); |
| 240 | 247 |
| 241 job_ = handler_->MaybeLoadResource(request_.get()); | 248 job_ = handler_->MaybeLoadResource(request_.get()); |
| 242 EXPECT_TRUE(job_.get()); | 249 EXPECT_TRUE(job_.get()); |
| 243 EXPECT_TRUE(job_->is_waiting()); | 250 EXPECT_TRUE(job_->is_waiting()); |
| 244 | 251 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 265 EXPECT_FALSE(fallback_job); | 272 EXPECT_FALSE(fallback_job); |
| 266 | 273 |
| 267 EXPECT_TRUE(host_->preferred_manifest_url().is_empty()); | 274 EXPECT_TRUE(host_->preferred_manifest_url().is_empty()); |
| 268 | 275 |
| 269 TestFinished(); | 276 TestFinished(); |
| 270 } | 277 } |
| 271 | 278 |
| 272 // MainResource_Hit -------------------------------------------------- | 279 // MainResource_Hit -------------------------------------------------- |
| 273 | 280 |
| 274 void MainResource_Hit() { | 281 void MainResource_Hit() { |
| 275 PushNextTask(NewRunnableMethod( | 282 PushNextTask( |
| 276 this, &AppCacheRequestHandlerTest::Verify_MainResource_Hit)); | 283 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Hit, |
| 284 base::Unretained(this))); |
| 277 | 285 |
| 278 request_.reset(new MockURLRequest(GURL("http://blah/"))); | 286 request_.reset(new MockURLRequest(GURL("http://blah/"))); |
| 279 handler_.reset(host_->CreateRequestHandler(request_.get(), | 287 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 280 ResourceType::MAIN_FRAME)); | 288 ResourceType::MAIN_FRAME)); |
| 281 EXPECT_TRUE(handler_.get()); | 289 EXPECT_TRUE(handler_.get()); |
| 282 | 290 |
| 283 mock_storage()->SimulateFindMainResource( | 291 mock_storage()->SimulateFindMainResource( |
| 284 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), | 292 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), |
| 285 GURL(), AppCacheEntry(), | 293 GURL(), AppCacheEntry(), |
| 286 1, 2, GURL("http://blah/manifest/")); | 294 1, 2, GURL("http://blah/manifest/")); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 310 | 318 |
| 311 EXPECT_EQ(GURL("http://blah/manifest/"), | 319 EXPECT_EQ(GURL("http://blah/manifest/"), |
| 312 host_->preferred_manifest_url()); | 320 host_->preferred_manifest_url()); |
| 313 | 321 |
| 314 TestFinished(); | 322 TestFinished(); |
| 315 } | 323 } |
| 316 | 324 |
| 317 // MainResource_Fallback -------------------------------------------------- | 325 // MainResource_Fallback -------------------------------------------------- |
| 318 | 326 |
| 319 void MainResource_Fallback() { | 327 void MainResource_Fallback() { |
| 320 PushNextTask(NewRunnableMethod( | 328 PushNextTask( |
| 321 this, &AppCacheRequestHandlerTest::Verify_MainResource_Fallback)); | 329 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Fallback, |
| 330 base::Unretained(this))); |
| 322 | 331 |
| 323 request_.reset(new MockURLRequest(GURL("http://blah/"))); | 332 request_.reset(new MockURLRequest(GURL("http://blah/"))); |
| 324 handler_.reset(host_->CreateRequestHandler(request_.get(), | 333 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 325 ResourceType::MAIN_FRAME)); | 334 ResourceType::MAIN_FRAME)); |
| 326 EXPECT_TRUE(handler_.get()); | 335 EXPECT_TRUE(handler_.get()); |
| 327 | 336 |
| 328 mock_storage()->SimulateFindMainResource( | 337 mock_storage()->SimulateFindMainResource( |
| 329 AppCacheEntry(), | 338 AppCacheEntry(), |
| 330 GURL("http://blah/fallbackurl"), | 339 GURL("http://blah/fallbackurl"), |
| 331 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), | 340 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 | 375 |
| 367 EXPECT_EQ(GURL("http://blah/manifest/"), | 376 EXPECT_EQ(GURL("http://blah/manifest/"), |
| 368 host_->preferred_manifest_url()); | 377 host_->preferred_manifest_url()); |
| 369 | 378 |
| 370 TestFinished(); | 379 TestFinished(); |
| 371 } | 380 } |
| 372 | 381 |
| 373 // MainResource_FallbackOverride -------------------------------------------- | 382 // MainResource_FallbackOverride -------------------------------------------- |
| 374 | 383 |
| 375 void MainResource_FallbackOverride() { | 384 void MainResource_FallbackOverride() { |
| 376 PushNextTask(NewRunnableMethod( | 385 PushNextTask(base::Bind( |
| 377 this, | 386 &AppCacheRequestHandlerTest::Verify_MainResource_FallbackOverride, |
| 378 &AppCacheRequestHandlerTest::Verify_MainResource_FallbackOverride)); | 387 base::Unretained(this))); |
| 379 | 388 |
| 380 request_.reset(new MockURLRequest(GURL("http://blah/fallback-override"))); | 389 request_.reset(new MockURLRequest(GURL("http://blah/fallback-override"))); |
| 381 handler_.reset(host_->CreateRequestHandler(request_.get(), | 390 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 382 ResourceType::MAIN_FRAME)); | 391 ResourceType::MAIN_FRAME)); |
| 383 EXPECT_TRUE(handler_.get()); | 392 EXPECT_TRUE(handler_.get()); |
| 384 | 393 |
| 385 mock_storage()->SimulateFindMainResource( | 394 mock_storage()->SimulateFindMainResource( |
| 386 AppCacheEntry(), | 395 AppCacheEntry(), |
| 387 GURL("http://blah/fallbackurl"), | 396 GURL("http://blah/fallbackurl"), |
| 388 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), | 397 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), |
| (...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 738 handler_.reset(worker_host->CreateRequestHandler( | 747 handler_.reset(worker_host->CreateRequestHandler( |
| 739 request_.get(), ResourceType::SHARED_WORKER)); | 748 request_.get(), ResourceType::SHARED_WORKER)); |
| 740 EXPECT_FALSE(handler_.get()); | 749 EXPECT_FALSE(handler_.get()); |
| 741 | 750 |
| 742 TestFinished(); | 751 TestFinished(); |
| 743 } | 752 } |
| 744 | 753 |
| 745 // MainResource_Blocked -------------------------------------------------- | 754 // MainResource_Blocked -------------------------------------------------- |
| 746 | 755 |
| 747 void MainResource_Blocked() { | 756 void MainResource_Blocked() { |
| 748 PushNextTask(NewRunnableMethod( | 757 PushNextTask( |
| 749 this, &AppCacheRequestHandlerTest::Verify_MainResource_Blocked)); | 758 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Blocked, |
| 759 base::Unretained(this))); |
| 750 | 760 |
| 751 request_.reset(new MockURLRequest(GURL("http://blah/"))); | 761 request_.reset(new MockURLRequest(GURL("http://blah/"))); |
| 752 handler_.reset(host_->CreateRequestHandler(request_.get(), | 762 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 753 ResourceType::MAIN_FRAME)); | 763 ResourceType::MAIN_FRAME)); |
| 754 EXPECT_TRUE(handler_.get()); | 764 EXPECT_TRUE(handler_.get()); |
| 755 | 765 |
| 756 mock_policy_->can_load_return_value_ = false; | 766 mock_policy_->can_load_return_value_ = false; |
| 757 mock_storage()->SimulateFindMainResource( | 767 mock_storage()->SimulateFindMainResource( |
| 758 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), | 768 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), |
| 759 GURL(), AppCacheEntry(), | 769 GURL(), AppCacheEntry(), |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 794 return cache; | 804 return cache; |
| 795 } | 805 } |
| 796 | 806 |
| 797 MockAppCacheStorage* mock_storage() { | 807 MockAppCacheStorage* mock_storage() { |
| 798 return reinterpret_cast<MockAppCacheStorage*>(mock_service_->storage()); | 808 return reinterpret_cast<MockAppCacheStorage*>(mock_service_->storage()); |
| 799 } | 809 } |
| 800 | 810 |
| 801 // Data members -------------------------------------------------- | 811 // Data members -------------------------------------------------- |
| 802 | 812 |
| 803 scoped_ptr<base::WaitableEvent> test_finished_event_; | 813 scoped_ptr<base::WaitableEvent> test_finished_event_; |
| 804 std::stack<Task*> task_stack_; | 814 std::stack<base::Closure> task_stack_; |
| 805 scoped_ptr<MockAppCacheService> mock_service_; | 815 scoped_ptr<MockAppCacheService> mock_service_; |
| 806 scoped_ptr<AppCacheBackendImpl> backend_impl_; | 816 scoped_ptr<AppCacheBackendImpl> backend_impl_; |
| 807 scoped_ptr<MockFrontend> mock_frontend_; | 817 scoped_ptr<MockFrontend> mock_frontend_; |
| 808 scoped_ptr<MockAppCachePolicy> mock_policy_; | 818 scoped_ptr<MockAppCachePolicy> mock_policy_; |
| 809 AppCacheHost* host_; | 819 AppCacheHost* host_; |
| 810 scoped_ptr<MockURLRequest> request_; | 820 scoped_ptr<MockURLRequest> request_; |
| 811 scoped_ptr<AppCacheRequestHandler> handler_; | 821 scoped_ptr<AppCacheRequestHandler> handler_; |
| 812 scoped_refptr<AppCacheURLRequestJob> job_; | 822 scoped_refptr<AppCacheURLRequestJob> job_; |
| 813 net::URLRequest::ProtocolFactory* orig_http_factory_; | 823 net::URLRequest::ProtocolFactory* orig_http_factory_; |
| 814 | 824 |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 888 | 898 |
| 889 TEST_F(AppCacheRequestHandlerTest, WorkerRequest) { | 899 TEST_F(AppCacheRequestHandlerTest, WorkerRequest) { |
| 890 RunTestOnIOThread(&AppCacheRequestHandlerTest::WorkerRequest); | 900 RunTestOnIOThread(&AppCacheRequestHandlerTest::WorkerRequest); |
| 891 } | 901 } |
| 892 | 902 |
| 893 TEST_F(AppCacheRequestHandlerTest, MainResource_Blocked) { | 903 TEST_F(AppCacheRequestHandlerTest, MainResource_Blocked) { |
| 894 RunTestOnIOThread(&AppCacheRequestHandlerTest::MainResource_Blocked); | 904 RunTestOnIOThread(&AppCacheRequestHandlerTest::MainResource_Blocked); |
| 895 } | 905 } |
| 896 | 906 |
| 897 } // namespace appcache | 907 } // namespace appcache |
| 898 | |
| 899 // AppCacheRequestHandlerTest is expected to always live longer than the | |
| 900 // runnable methods. This lets us call NewRunnableMethod on its instances. | |
| 901 DISABLE_RUNNABLE_METHOD_REFCOUNT(appcache::AppCacheRequestHandlerTest); | |
| OLD | NEW |