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 |