| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 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" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 } | 110 } |
| 111 | 111 |
| 112 private: | 112 private: |
| 113 int response_code_; | 113 int response_code_; |
| 114 bool has_response_info_; | 114 bool has_response_info_; |
| 115 net::HttpResponseInfo response_info_; | 115 net::HttpResponseInfo response_info_; |
| 116 }; | 116 }; |
| 117 | 117 |
| 118 class MockURLRequest : public net::URLRequest { | 118 class MockURLRequest : public net::URLRequest { |
| 119 public: | 119 public: |
| 120 explicit MockURLRequest(const GURL& url, net::URLRequestContext* context) : | 120 explicit MockURLRequest( |
| 121 net::URLRequest(url, NULL, context) { | 121 const GURL& url, |
| 122 net::URLRequestContext* context, |
| 123 net::NetworkDelegate* network_delegate) : |
| 124 net::URLRequest(url, NULL, context, network_delegate) { |
| 122 } | 125 } |
| 123 | 126 |
| 124 void SimulateResponseCode(int http_response_code) { | 127 void SimulateResponseCode(int http_response_code) { |
| 125 mock_factory_job_ = new MockURLRequestJob( | 128 mock_factory_job_ = new MockURLRequestJob( |
| 126 this, context()->network_delegate(), http_response_code); | 129 this, network_delegate(), http_response_code); |
| 127 Start(); | 130 Start(); |
| 128 DCHECK(!mock_factory_job_); | 131 DCHECK(!mock_factory_job_); |
| 129 // All our simulation needs to satisfy are the following two DCHECKs | 132 // All our simulation needs to satisfy are the following two DCHECKs |
| 130 DCHECK(status().is_success()); | 133 DCHECK(status().is_success()); |
| 131 DCHECK_EQ(http_response_code, GetResponseCode()); | 134 DCHECK_EQ(http_response_code, GetResponseCode()); |
| 132 } | 135 } |
| 133 | 136 |
| 134 void SimulateResponseInfo(const net::HttpResponseInfo& info) { | 137 void SimulateResponseInfo(const net::HttpResponseInfo& info) { |
| 135 mock_factory_job_ = new MockURLRequestJob( | 138 mock_factory_job_ = new MockURLRequestJob( |
| 136 this, context()->network_delegate(), info); | 139 this, network_delegate(), info); |
| 137 set_delegate(&delegate_); // needed to get the info back out | 140 set_delegate(&delegate_); // needed to get the info back out |
| 138 Start(); | 141 Start(); |
| 139 DCHECK(!mock_factory_job_); | 142 DCHECK(!mock_factory_job_); |
| 140 } | 143 } |
| 141 | 144 |
| 142 MockURLRequestDelegate delegate_; | 145 MockURLRequestDelegate delegate_; |
| 143 }; | 146 }; |
| 144 | 147 |
| 145 static net::URLRequestJob* MockHttpJobFactory( | 148 static net::URLRequestJob* MockHttpJobFactory( |
| 146 net::URLRequest* request, | 149 net::URLRequest* request, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 165 io_thread_->StartWithOptions(options); | 168 io_thread_->StartWithOptions(options); |
| 166 } | 169 } |
| 167 | 170 |
| 168 static void TearDownTestCase() { | 171 static void TearDownTestCase() { |
| 169 io_thread_.reset(NULL); | 172 io_thread_.reset(NULL); |
| 170 } | 173 } |
| 171 | 174 |
| 172 // Test harness -------------------------------------------------- | 175 // Test harness -------------------------------------------------- |
| 173 | 176 |
| 174 AppCacheRequestHandlerTest() | 177 AppCacheRequestHandlerTest() |
| 175 : host_(NULL), orig_http_factory_(NULL) { | 178 : host_(NULL), empty_network_delegate_(NULL), orig_http_factory_(NULL) { |
| 176 } | 179 } |
| 177 | 180 |
| 178 template <class Method> | 181 template <class Method> |
| 179 void RunTestOnIOThread(Method method) { | 182 void RunTestOnIOThread(Method method) { |
| 180 test_finished_event_ .reset(new base::WaitableEvent(false, false)); | 183 test_finished_event_ .reset(new base::WaitableEvent(false, false)); |
| 181 io_thread_->message_loop()->PostTask( | 184 io_thread_->message_loop()->PostTask( |
| 182 FROM_HERE, | 185 FROM_HERE, |
| 183 base::Bind(&AppCacheRequestHandlerTest::MethodWrapper<Method>, | 186 base::Bind(&AppCacheRequestHandlerTest::MethodWrapper<Method>, |
| 184 base::Unretained(this), method)); | 187 base::Unretained(this), method)); |
| 185 test_finished_event_->Wait(); | 188 test_finished_event_->Wait(); |
| 186 } | 189 } |
| 187 | 190 |
| 188 void SetUpTest() { | 191 void SetUpTest() { |
| 189 DCHECK(MessageLoop::current() == io_thread_->message_loop()); | 192 DCHECK(MessageLoop::current() == io_thread_->message_loop()); |
| 190 orig_http_factory_ = net::URLRequest::Deprecated::RegisterProtocolFactory( | 193 orig_http_factory_ = net::URLRequest::Deprecated::RegisterProtocolFactory( |
| 191 "http", MockHttpJobFactory); | 194 "http", MockHttpJobFactory); |
| 192 mock_service_.reset(new MockAppCacheService); | 195 mock_service_.reset(new MockAppCacheService); |
| 193 mock_service_->set_request_context(&empty_context_); | 196 mock_service_->set_request_context(&empty_context_); |
| 194 mock_policy_.reset(new MockAppCachePolicy); | 197 mock_policy_.reset(new MockAppCachePolicy); |
| 195 mock_service_->set_appcache_policy(mock_policy_.get()); | 198 mock_service_->set_appcache_policy(mock_policy_.get()); |
| 196 mock_frontend_.reset(new MockFrontend); | 199 mock_frontend_.reset(new MockFrontend); |
| 197 backend_impl_.reset(new AppCacheBackendImpl); | 200 backend_impl_.reset(new AppCacheBackendImpl); |
| 198 backend_impl_->Initialize(mock_service_.get(), mock_frontend_.get(), | 201 backend_impl_->Initialize(mock_service_.get(), mock_frontend_.get(), |
| 199 kMockProcessId); | 202 kMockProcessId); |
| 200 const int kHostId = 1; | 203 const int kHostId = 1; |
| 201 backend_impl_->RegisterHost(kHostId); | 204 backend_impl_->RegisterHost(kHostId); |
| 202 host_ = backend_impl_->GetHost(kHostId); | 205 host_ = backend_impl_->GetHost(kHostId); |
| 206 empty_network_delegate_ = NULL; |
| 203 } | 207 } |
| 204 | 208 |
| 205 void TearDownTest() { | 209 void TearDownTest() { |
| 206 DCHECK(MessageLoop::current() == io_thread_->message_loop()); | 210 DCHECK(MessageLoop::current() == io_thread_->message_loop()); |
| 207 DCHECK(!mock_factory_job_); | 211 DCHECK(!mock_factory_job_); |
| 208 net::URLRequest::Deprecated::RegisterProtocolFactory( | 212 net::URLRequest::Deprecated::RegisterProtocolFactory( |
| 209 "http", orig_http_factory_); | 213 "http", orig_http_factory_); |
| 210 orig_http_factory_ = NULL; | 214 orig_http_factory_ = NULL; |
| 211 job_ = NULL; | 215 job_ = NULL; |
| 212 handler_.reset(); | 216 handler_.reset(); |
| 213 request_.reset(); | 217 request_.reset(); |
| 214 backend_impl_.reset(); | 218 backend_impl_.reset(); |
| 215 mock_frontend_.reset(); | 219 mock_frontend_.reset(); |
| 216 mock_service_.reset(); | 220 mock_service_.reset(); |
| 217 mock_policy_.reset(); | 221 mock_policy_.reset(); |
| 218 host_ = NULL; | 222 host_ = NULL; |
| 223 empty_network_delegate_ = NULL; |
| 219 } | 224 } |
| 220 | 225 |
| 221 void TestFinished() { | 226 void TestFinished() { |
| 222 // We unwind the stack prior to finishing up to let stack | 227 // We unwind the stack prior to finishing up to let stack |
| 223 // based objects get deleted. | 228 // based objects get deleted. |
| 224 DCHECK(MessageLoop::current() == io_thread_->message_loop()); | 229 DCHECK(MessageLoop::current() == io_thread_->message_loop()); |
| 225 MessageLoop::current()->PostTask( | 230 MessageLoop::current()->PostTask( |
| 226 FROM_HERE, | 231 FROM_HERE, |
| 227 base::Bind(&AppCacheRequestHandlerTest::TestFinishedUnwound, | 232 base::Bind(&AppCacheRequestHandlerTest::TestFinishedUnwound, |
| 228 base::Unretained(this))); | 233 base::Unretained(this))); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 247 task_stack_.pop(); | 252 task_stack_.pop(); |
| 248 } | 253 } |
| 249 | 254 |
| 250 // MainResource_Miss -------------------------------------------------- | 255 // MainResource_Miss -------------------------------------------------- |
| 251 | 256 |
| 252 void MainResource_Miss() { | 257 void MainResource_Miss() { |
| 253 PushNextTask( | 258 PushNextTask( |
| 254 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Miss, | 259 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Miss, |
| 255 base::Unretained(this))); | 260 base::Unretained(this))); |
| 256 | 261 |
| 257 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 262 request_.reset(new MockURLRequest( |
| 263 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 258 handler_.reset(host_->CreateRequestHandler(request_.get(), | 264 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 259 ResourceType::MAIN_FRAME)); | 265 ResourceType::MAIN_FRAME)); |
| 260 EXPECT_TRUE(handler_.get()); | 266 EXPECT_TRUE(handler_.get()); |
| 261 | 267 |
| 262 job_ = handler_->MaybeLoadResource(request_.get(), | 268 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 263 empty_context_.network_delegate()); | |
| 264 EXPECT_TRUE(job_.get()); | 269 EXPECT_TRUE(job_.get()); |
| 265 EXPECT_TRUE(job_->is_waiting()); | 270 EXPECT_TRUE(job_->is_waiting()); |
| 266 | 271 |
| 267 // We have to wait for completion of storage->FindResponseForMainRequest. | 272 // We have to wait for completion of storage->FindResponseForMainRequest. |
| 268 ScheduleNextTask(); | 273 ScheduleNextTask(); |
| 269 } | 274 } |
| 270 | 275 |
| 271 void Verify_MainResource_Miss() { | 276 void Verify_MainResource_Miss() { |
| 272 EXPECT_FALSE(job_->is_waiting()); | 277 EXPECT_FALSE(job_->is_waiting()); |
| 273 EXPECT_TRUE(job_->is_delivering_network_response()); | 278 EXPECT_TRUE(job_->is_delivering_network_response()); |
| 274 | 279 |
| 275 int64 cache_id = kNoCacheId; | 280 int64 cache_id = kNoCacheId; |
| 276 GURL manifest_url; | 281 GURL manifest_url; |
| 277 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); | 282 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); |
| 278 EXPECT_EQ(kNoCacheId, cache_id); | 283 EXPECT_EQ(kNoCacheId, cache_id); |
| 279 EXPECT_EQ(GURL(), manifest_url); | 284 EXPECT_EQ(GURL(), manifest_url); |
| 280 EXPECT_EQ(0, handler_->found_group_id_); | 285 EXPECT_EQ(0, handler_->found_group_id_); |
| 281 | 286 |
| 282 AppCacheURLRequestJob* fallback_job; | 287 AppCacheURLRequestJob* fallback_job; |
| 283 fallback_job = handler_->MaybeLoadFallbackForRedirect( | 288 fallback_job = handler_->MaybeLoadFallbackForRedirect( |
| 284 request_.get(), | 289 request_.get(), |
| 285 request_->context()->network_delegate(), | 290 empty_network_delegate_, |
| 286 GURL("http://blah/redirect")); | 291 GURL("http://blah/redirect")); |
| 287 EXPECT_FALSE(fallback_job); | 292 EXPECT_FALSE(fallback_job); |
| 288 fallback_job = handler_->MaybeLoadFallbackForResponse( | 293 fallback_job = handler_->MaybeLoadFallbackForResponse( |
| 289 request_.get(), request_->context()->network_delegate()); | 294 request_.get(), empty_network_delegate_); |
| 290 EXPECT_FALSE(fallback_job); | 295 EXPECT_FALSE(fallback_job); |
| 291 | 296 |
| 292 EXPECT_TRUE(host_->preferred_manifest_url().is_empty()); | 297 EXPECT_TRUE(host_->preferred_manifest_url().is_empty()); |
| 293 | 298 |
| 294 TestFinished(); | 299 TestFinished(); |
| 295 } | 300 } |
| 296 | 301 |
| 297 // MainResource_Hit -------------------------------------------------- | 302 // MainResource_Hit -------------------------------------------------- |
| 298 | 303 |
| 299 void MainResource_Hit() { | 304 void MainResource_Hit() { |
| 300 PushNextTask( | 305 PushNextTask( |
| 301 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Hit, | 306 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Hit, |
| 302 base::Unretained(this))); | 307 base::Unretained(this))); |
| 303 | 308 |
| 304 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 309 request_.reset(new MockURLRequest( |
| 310 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 305 handler_.reset(host_->CreateRequestHandler(request_.get(), | 311 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 306 ResourceType::MAIN_FRAME)); | 312 ResourceType::MAIN_FRAME)); |
| 307 EXPECT_TRUE(handler_.get()); | 313 EXPECT_TRUE(handler_.get()); |
| 308 | 314 |
| 309 mock_storage()->SimulateFindMainResource( | 315 mock_storage()->SimulateFindMainResource( |
| 310 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), | 316 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), |
| 311 GURL(), AppCacheEntry(), | 317 GURL(), AppCacheEntry(), |
| 312 1, 2, GURL("http://blah/manifest/")); | 318 1, 2, GURL("http://blah/manifest/")); |
| 313 | 319 |
| 314 job_ = handler_->MaybeLoadResource(request_.get(), | 320 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 315 empty_context_.network_delegate()); | |
| 316 EXPECT_TRUE(job_.get()); | 321 EXPECT_TRUE(job_.get()); |
| 317 EXPECT_TRUE(job_->is_waiting()); | 322 EXPECT_TRUE(job_->is_waiting()); |
| 318 | 323 |
| 319 // We have to wait for completion of storage->FindResponseForMainRequest. | 324 // We have to wait for completion of storage->FindResponseForMainRequest. |
| 320 ScheduleNextTask(); | 325 ScheduleNextTask(); |
| 321 } | 326 } |
| 322 | 327 |
| 323 void Verify_MainResource_Hit() { | 328 void Verify_MainResource_Hit() { |
| 324 EXPECT_FALSE(job_->is_waiting()); | 329 EXPECT_FALSE(job_->is_waiting()); |
| 325 EXPECT_TRUE(job_->is_delivering_appcache_response()); | 330 EXPECT_TRUE(job_->is_delivering_appcache_response()); |
| 326 | 331 |
| 327 int64 cache_id = kNoCacheId; | 332 int64 cache_id = kNoCacheId; |
| 328 GURL manifest_url; | 333 GURL manifest_url; |
| 329 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); | 334 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); |
| 330 EXPECT_EQ(1, cache_id); | 335 EXPECT_EQ(1, cache_id); |
| 331 EXPECT_EQ(GURL("http://blah/manifest/"), manifest_url); | 336 EXPECT_EQ(GURL("http://blah/manifest/"), manifest_url); |
| 332 EXPECT_EQ(2, handler_->found_group_id_); | 337 EXPECT_EQ(2, handler_->found_group_id_); |
| 333 | 338 |
| 334 AppCacheURLRequestJob* fallback_job; | 339 AppCacheURLRequestJob* fallback_job; |
| 335 fallback_job = handler_->MaybeLoadFallbackForResponse( | 340 fallback_job = handler_->MaybeLoadFallbackForResponse( |
| 336 request_.get(), request_->context()->network_delegate()); | 341 request_.get(), empty_network_delegate_); |
| 337 EXPECT_FALSE(fallback_job); | 342 EXPECT_FALSE(fallback_job); |
| 338 | 343 |
| 339 EXPECT_EQ(GURL("http://blah/manifest/"), | 344 EXPECT_EQ(GURL("http://blah/manifest/"), |
| 340 host_->preferred_manifest_url()); | 345 host_->preferred_manifest_url()); |
| 341 | 346 |
| 342 TestFinished(); | 347 TestFinished(); |
| 343 } | 348 } |
| 344 | 349 |
| 345 // MainResource_Fallback -------------------------------------------------- | 350 // MainResource_Fallback -------------------------------------------------- |
| 346 | 351 |
| 347 void MainResource_Fallback() { | 352 void MainResource_Fallback() { |
| 348 PushNextTask( | 353 PushNextTask( |
| 349 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Fallback, | 354 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Fallback, |
| 350 base::Unretained(this))); | 355 base::Unretained(this))); |
| 351 | 356 |
| 352 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 357 request_.reset(new MockURLRequest( |
| 358 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 353 handler_.reset(host_->CreateRequestHandler(request_.get(), | 359 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 354 ResourceType::MAIN_FRAME)); | 360 ResourceType::MAIN_FRAME)); |
| 355 EXPECT_TRUE(handler_.get()); | 361 EXPECT_TRUE(handler_.get()); |
| 356 | 362 |
| 357 mock_storage()->SimulateFindMainResource( | 363 mock_storage()->SimulateFindMainResource( |
| 358 AppCacheEntry(), | 364 AppCacheEntry(), |
| 359 GURL("http://blah/fallbackurl"), | 365 GURL("http://blah/fallbackurl"), |
| 360 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), | 366 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), |
| 361 1, 2, GURL("http://blah/manifest/")); | 367 1, 2, GURL("http://blah/manifest/")); |
| 362 | 368 |
| 363 job_ = handler_->MaybeLoadResource(request_.get(), | 369 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 364 empty_context_.network_delegate()); | |
| 365 EXPECT_TRUE(job_.get()); | 370 EXPECT_TRUE(job_.get()); |
| 366 EXPECT_TRUE(job_->is_waiting()); | 371 EXPECT_TRUE(job_->is_waiting()); |
| 367 | 372 |
| 368 // We have to wait for completion of storage->FindResponseForMainRequest. | 373 // We have to wait for completion of storage->FindResponseForMainRequest. |
| 369 ScheduleNextTask(); | 374 ScheduleNextTask(); |
| 370 } | 375 } |
| 371 | 376 |
| 372 void Verify_MainResource_Fallback() { | 377 void Verify_MainResource_Fallback() { |
| 373 EXPECT_FALSE(job_->is_waiting()); | 378 EXPECT_FALSE(job_->is_waiting()); |
| 374 EXPECT_TRUE(job_->is_delivering_network_response()); | 379 EXPECT_TRUE(job_->is_delivering_network_response()); |
| 375 | 380 |
| 376 // When the request is restarted, the existing job is dropped so a | 381 // When the request is restarted, the existing job is dropped so a |
| 377 // real network job gets created. We expect NULL here which will cause | 382 // real network job gets created. We expect NULL here which will cause |
| 378 // the net library to create a real job. | 383 // the net library to create a real job. |
| 379 job_ = handler_->MaybeLoadResource(request_.get(), | 384 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 380 empty_context_.network_delegate()); | |
| 381 EXPECT_FALSE(job_); | 385 EXPECT_FALSE(job_); |
| 382 | 386 |
| 383 // Simulate an http error of the real network job. | 387 // Simulate an http error of the real network job. |
| 384 request_->SimulateResponseCode(500); | 388 request_->SimulateResponseCode(500); |
| 385 | 389 |
| 386 job_ = handler_->MaybeLoadFallbackForResponse( | 390 job_ = handler_->MaybeLoadFallbackForResponse( |
| 387 request_.get(), request_->context()->network_delegate()); | 391 request_.get(), empty_network_delegate_); |
| 388 EXPECT_TRUE(job_); | 392 EXPECT_TRUE(job_); |
| 389 EXPECT_TRUE(job_->is_delivering_appcache_response()); | 393 EXPECT_TRUE(job_->is_delivering_appcache_response()); |
| 390 | 394 |
| 391 int64 cache_id = kNoCacheId; | 395 int64 cache_id = kNoCacheId; |
| 392 GURL manifest_url; | 396 GURL manifest_url; |
| 393 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); | 397 handler_->GetExtraResponseInfo(&cache_id, &manifest_url); |
| 394 EXPECT_EQ(1, cache_id); | 398 EXPECT_EQ(1, cache_id); |
| 395 EXPECT_EQ(GURL("http://blah/manifest/"), manifest_url); | 399 EXPECT_EQ(GURL("http://blah/manifest/"), manifest_url); |
| 396 EXPECT_TRUE(host_->main_resource_was_namespace_entry_); | 400 EXPECT_TRUE(host_->main_resource_was_namespace_entry_); |
| 397 EXPECT_EQ(GURL("http://blah/fallbackurl"), host_->namespace_entry_url_); | 401 EXPECT_EQ(GURL("http://blah/fallbackurl"), host_->namespace_entry_url_); |
| 398 | 402 |
| 399 EXPECT_EQ(GURL("http://blah/manifest/"), | 403 EXPECT_EQ(GURL("http://blah/manifest/"), |
| 400 host_->preferred_manifest_url()); | 404 host_->preferred_manifest_url()); |
| 401 | 405 |
| 402 TestFinished(); | 406 TestFinished(); |
| 403 } | 407 } |
| 404 | 408 |
| 405 // MainResource_FallbackOverride -------------------------------------------- | 409 // MainResource_FallbackOverride -------------------------------------------- |
| 406 | 410 |
| 407 void MainResource_FallbackOverride() { | 411 void MainResource_FallbackOverride() { |
| 408 PushNextTask(base::Bind( | 412 PushNextTask(base::Bind( |
| 409 &AppCacheRequestHandlerTest::Verify_MainResource_FallbackOverride, | 413 &AppCacheRequestHandlerTest::Verify_MainResource_FallbackOverride, |
| 410 base::Unretained(this))); | 414 base::Unretained(this))); |
| 411 | 415 |
| 412 request_.reset(new MockURLRequest(GURL("http://blah/fallback-override"), | 416 request_.reset(new MockURLRequest( |
| 413 &empty_context_)); | 417 GURL("http://blah/fallback-override"), |
| 418 &empty_context_, empty_network_delegate_)); |
| 414 handler_.reset(host_->CreateRequestHandler(request_.get(), | 419 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 415 ResourceType::MAIN_FRAME)); | 420 ResourceType::MAIN_FRAME)); |
| 416 EXPECT_TRUE(handler_.get()); | 421 EXPECT_TRUE(handler_.get()); |
| 417 | 422 |
| 418 mock_storage()->SimulateFindMainResource( | 423 mock_storage()->SimulateFindMainResource( |
| 419 AppCacheEntry(), | 424 AppCacheEntry(), |
| 420 GURL("http://blah/fallbackurl"), | 425 GURL("http://blah/fallbackurl"), |
| 421 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), | 426 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), |
| 422 1, 2, GURL("http://blah/manifest/")); | 427 1, 2, GURL("http://blah/manifest/")); |
| 423 | 428 |
| 424 job_ = handler_->MaybeLoadResource(request_.get(), | 429 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 425 empty_context_.network_delegate()); | |
| 426 EXPECT_TRUE(job_.get()); | 430 EXPECT_TRUE(job_.get()); |
| 427 EXPECT_TRUE(job_->is_waiting()); | 431 EXPECT_TRUE(job_->is_waiting()); |
| 428 | 432 |
| 429 // We have to wait for completion of storage->FindResponseForMainRequest. | 433 // We have to wait for completion of storage->FindResponseForMainRequest. |
| 430 ScheduleNextTask(); | 434 ScheduleNextTask(); |
| 431 } | 435 } |
| 432 | 436 |
| 433 void Verify_MainResource_FallbackOverride() { | 437 void Verify_MainResource_FallbackOverride() { |
| 434 EXPECT_FALSE(job_->is_waiting()); | 438 EXPECT_FALSE(job_->is_waiting()); |
| 435 EXPECT_TRUE(job_->is_delivering_network_response()); | 439 EXPECT_TRUE(job_->is_delivering_network_response()); |
| 436 | 440 |
| 437 // When the request is restarted, the existing job is dropped so a | 441 // When the request is restarted, the existing job is dropped so a |
| 438 // real network job gets created. We expect NULL here which will cause | 442 // real network job gets created. We expect NULL here which will cause |
| 439 // the net library to create a real job. | 443 // the net library to create a real job. |
| 440 job_ = handler_->MaybeLoadResource(request_.get(), | 444 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 441 empty_context_.network_delegate()); | |
| 442 EXPECT_FALSE(job_); | 445 EXPECT_FALSE(job_); |
| 443 | 446 |
| 444 // Simulate an http error of the real network job, but with custom | 447 // Simulate an http error of the real network job, but with custom |
| 445 // headers that override the fallback behavior. | 448 // headers that override the fallback behavior. |
| 446 const char kOverrideHeaders[] = | 449 const char kOverrideHeaders[] = |
| 447 "HTTP/1.1 404 BOO HOO\0" | 450 "HTTP/1.1 404 BOO HOO\0" |
| 448 "x-chromium-appcache-fallback-override: disallow-fallback\0" | 451 "x-chromium-appcache-fallback-override: disallow-fallback\0" |
| 449 "\0"; | 452 "\0"; |
| 450 net::HttpResponseInfo info; | 453 net::HttpResponseInfo info; |
| 451 info.headers = new net::HttpResponseHeaders( | 454 info.headers = new net::HttpResponseHeaders( |
| 452 std::string(kOverrideHeaders, arraysize(kOverrideHeaders))); | 455 std::string(kOverrideHeaders, arraysize(kOverrideHeaders))); |
| 453 request_->SimulateResponseInfo(info); | 456 request_->SimulateResponseInfo(info); |
| 454 | 457 |
| 455 job_ = handler_->MaybeLoadFallbackForResponse( | 458 job_ = handler_->MaybeLoadFallbackForResponse(request_.get(), NULL); |
| 456 request_.get(), request_->context()->network_delegate()); | |
| 457 EXPECT_FALSE(job_); | 459 EXPECT_FALSE(job_); |
| 458 | 460 |
| 459 TestFinished(); | 461 TestFinished(); |
| 460 } | 462 } |
| 461 | 463 |
| 462 // SubResource_Miss_WithNoCacheSelected ---------------------------------- | 464 // SubResource_Miss_WithNoCacheSelected ---------------------------------- |
| 463 | 465 |
| 464 void SubResource_Miss_WithNoCacheSelected() { | 466 void SubResource_Miss_WithNoCacheSelected() { |
| 465 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 467 request_.reset(new MockURLRequest( |
| 468 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 466 handler_.reset(host_->CreateRequestHandler(request_.get(), | 469 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 467 ResourceType::SUB_RESOURCE)); | 470 ResourceType::SUB_RESOURCE)); |
| 468 | 471 |
| 469 // We avoid creating handler when possible, sub-resource requests are not | 472 // We avoid creating handler when possible, sub-resource requests are not |
| 470 // subject to retrieval from an appcache when there's no associated cache. | 473 // subject to retrieval from an appcache when there's no associated cache. |
| 471 EXPECT_FALSE(handler_.get()); | 474 EXPECT_FALSE(handler_.get()); |
| 472 | 475 |
| 473 TestFinished(); | 476 TestFinished(); |
| 474 } | 477 } |
| 475 | 478 |
| 476 // SubResource_Miss_WithCacheSelected ---------------------------------- | 479 // SubResource_Miss_WithCacheSelected ---------------------------------- |
| 477 | 480 |
| 478 void SubResource_Miss_WithCacheSelected() { | 481 void SubResource_Miss_WithCacheSelected() { |
| 479 // A sub-resource load where the resource is not in an appcache, or | 482 // A sub-resource load where the resource is not in an appcache, or |
| 480 // in a network or fallback namespace, should result in a failed request. | 483 // in a network or fallback namespace, should result in a failed request. |
| 481 host_->AssociateCompleteCache(MakeNewCache()); | 484 host_->AssociateCompleteCache(MakeNewCache()); |
| 482 | 485 |
| 483 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 486 request_.reset(new MockURLRequest( |
| 487 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 484 handler_.reset(host_->CreateRequestHandler(request_.get(), | 488 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 485 ResourceType::SUB_RESOURCE)); | 489 ResourceType::SUB_RESOURCE)); |
| 486 EXPECT_TRUE(handler_.get()); | 490 EXPECT_TRUE(handler_.get()); |
| 487 | 491 |
| 488 job_ = handler_->MaybeLoadResource(request_.get(), | 492 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 489 empty_context_.network_delegate()); | |
| 490 EXPECT_TRUE(job_.get()); | 493 EXPECT_TRUE(job_.get()); |
| 491 EXPECT_TRUE(job_->is_delivering_error_response()); | 494 EXPECT_TRUE(job_->is_delivering_error_response()); |
| 492 | 495 |
| 493 AppCacheURLRequestJob* fallback_job; | 496 AppCacheURLRequestJob* fallback_job; |
| 494 fallback_job = handler_->MaybeLoadFallbackForRedirect( | 497 fallback_job = handler_->MaybeLoadFallbackForRedirect( |
| 495 request_.get(), | 498 request_.get(), NULL, GURL("http://blah/redirect")); |
| 496 empty_context_.network_delegate(), | |
| 497 GURL("http://blah/redirect")); | |
| 498 EXPECT_FALSE(fallback_job); | 499 EXPECT_FALSE(fallback_job); |
| 499 fallback_job = handler_->MaybeLoadFallbackForResponse( | 500 fallback_job = handler_->MaybeLoadFallbackForResponse(request_.get(), NULL); |
| 500 request_.get(), empty_context_.network_delegate()); | |
| 501 EXPECT_FALSE(fallback_job); | 501 EXPECT_FALSE(fallback_job); |
| 502 | 502 |
| 503 TestFinished(); | 503 TestFinished(); |
| 504 } | 504 } |
| 505 | 505 |
| 506 // SubResource_Miss_WithWaitForCacheSelection ----------------------------- | 506 // SubResource_Miss_WithWaitForCacheSelection ----------------------------- |
| 507 | 507 |
| 508 void SubResource_Miss_WithWaitForCacheSelection() { | 508 void SubResource_Miss_WithWaitForCacheSelection() { |
| 509 // Precondition, the host is waiting on cache selection. | 509 // Precondition, the host is waiting on cache selection. |
| 510 scoped_refptr<AppCache> cache(MakeNewCache()); | 510 scoped_refptr<AppCache> cache(MakeNewCache()); |
| 511 host_->pending_selected_cache_id_ = cache->cache_id(); | 511 host_->pending_selected_cache_id_ = cache->cache_id(); |
| 512 host_->set_preferred_manifest_url(cache->owning_group()->manifest_url()); | 512 host_->set_preferred_manifest_url(cache->owning_group()->manifest_url()); |
| 513 | 513 |
| 514 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 514 request_.reset(new MockURLRequest( |
| 515 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 515 handler_.reset(host_->CreateRequestHandler(request_.get(), | 516 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 516 ResourceType::SUB_RESOURCE)); | 517 ResourceType::SUB_RESOURCE)); |
| 517 EXPECT_TRUE(handler_.get()); | 518 EXPECT_TRUE(handler_.get()); |
| 518 job_ = handler_->MaybeLoadResource(request_.get(), | 519 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 519 empty_context_.network_delegate()); | |
| 520 EXPECT_TRUE(job_.get()); | 520 EXPECT_TRUE(job_.get()); |
| 521 EXPECT_TRUE(job_->is_waiting()); | 521 EXPECT_TRUE(job_->is_waiting()); |
| 522 | 522 |
| 523 host_->FinishCacheSelection(cache, NULL); | 523 host_->FinishCacheSelection(cache, NULL); |
| 524 EXPECT_FALSE(job_->is_waiting()); | 524 EXPECT_FALSE(job_->is_waiting()); |
| 525 EXPECT_TRUE(job_->is_delivering_error_response()); | 525 EXPECT_TRUE(job_->is_delivering_error_response()); |
| 526 | 526 |
| 527 AppCacheURLRequestJob* fallback_job; | 527 AppCacheURLRequestJob* fallback_job; |
| 528 fallback_job = handler_->MaybeLoadFallbackForRedirect( | 528 fallback_job = handler_->MaybeLoadFallbackForRedirect( |
| 529 request_.get(), | 529 request_.get(), NULL, GURL("http://blah/redirect")); |
| 530 empty_context_.network_delegate(), | |
| 531 GURL("http://blah/redirect")); | |
| 532 EXPECT_FALSE(fallback_job); | 530 EXPECT_FALSE(fallback_job); |
| 533 fallback_job = handler_->MaybeLoadFallbackForResponse( | 531 fallback_job = handler_->MaybeLoadFallbackForResponse(request_.get(), NULL); |
| 534 request_.get(), empty_context_.network_delegate()); | |
| 535 EXPECT_FALSE(fallback_job); | 532 EXPECT_FALSE(fallback_job); |
| 536 | 533 |
| 537 TestFinished(); | 534 TestFinished(); |
| 538 } | 535 } |
| 539 | 536 |
| 540 // SubResource_Hit ----------------------------- | 537 // SubResource_Hit ----------------------------- |
| 541 | 538 |
| 542 void SubResource_Hit() { | 539 void SubResource_Hit() { |
| 543 host_->AssociateCompleteCache(MakeNewCache()); | 540 host_->AssociateCompleteCache(MakeNewCache()); |
| 544 | 541 |
| 545 mock_storage()->SimulateFindSubResource( | 542 mock_storage()->SimulateFindSubResource( |
| 546 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), AppCacheEntry(), false); | 543 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), AppCacheEntry(), false); |
| 547 | 544 |
| 548 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 545 request_.reset(new MockURLRequest( |
| 546 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 549 handler_.reset(host_->CreateRequestHandler(request_.get(), | 547 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 550 ResourceType::SUB_RESOURCE)); | 548 ResourceType::SUB_RESOURCE)); |
| 551 EXPECT_TRUE(handler_.get()); | 549 EXPECT_TRUE(handler_.get()); |
| 552 job_ = handler_->MaybeLoadResource(request_.get(), | 550 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 553 empty_context_.network_delegate()); | |
| 554 EXPECT_TRUE(job_.get()); | 551 EXPECT_TRUE(job_.get()); |
| 555 EXPECT_TRUE(job_->is_delivering_appcache_response()); | 552 EXPECT_TRUE(job_->is_delivering_appcache_response()); |
| 556 | 553 |
| 557 AppCacheURLRequestJob* fallback_job; | 554 AppCacheURLRequestJob* fallback_job; |
| 558 fallback_job = handler_->MaybeLoadFallbackForRedirect( | 555 fallback_job = handler_->MaybeLoadFallbackForRedirect( |
| 559 request_.get(), | 556 request_.get(), NULL, GURL("http://blah/redirect")); |
| 560 empty_context_.network_delegate(), | |
| 561 GURL("http://blah/redirect")); | |
| 562 EXPECT_FALSE(fallback_job); | 557 EXPECT_FALSE(fallback_job); |
| 563 fallback_job = handler_->MaybeLoadFallbackForResponse( | 558 fallback_job = handler_->MaybeLoadFallbackForResponse(request_.get(), NULL); |
| 564 request_.get(), empty_context_.network_delegate()); | |
| 565 EXPECT_FALSE(fallback_job); | 559 EXPECT_FALSE(fallback_job); |
| 566 | 560 |
| 567 TestFinished(); | 561 TestFinished(); |
| 568 } | 562 } |
| 569 | 563 |
| 570 // SubResource_RedirectFallback ----------------------------- | 564 // SubResource_RedirectFallback ----------------------------- |
| 571 | 565 |
| 572 void SubResource_RedirectFallback() { | 566 void SubResource_RedirectFallback() { |
| 573 // Redirects to resources in the a different origin are subject to | 567 // Redirects to resources in the a different origin are subject to |
| 574 // fallback namespaces. | 568 // fallback namespaces. |
| 575 host_->AssociateCompleteCache(MakeNewCache()); | 569 host_->AssociateCompleteCache(MakeNewCache()); |
| 576 | 570 |
| 577 mock_storage()->SimulateFindSubResource( | 571 mock_storage()->SimulateFindSubResource( |
| 578 AppCacheEntry(), AppCacheEntry(AppCacheEntry::EXPLICIT, 1), false); | 572 AppCacheEntry(), AppCacheEntry(AppCacheEntry::EXPLICIT, 1), false); |
| 579 | 573 |
| 580 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 574 request_.reset(new MockURLRequest( |
| 575 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 581 handler_.reset(host_->CreateRequestHandler(request_.get(), | 576 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 582 ResourceType::SUB_RESOURCE)); | 577 ResourceType::SUB_RESOURCE)); |
| 583 EXPECT_TRUE(handler_.get()); | 578 EXPECT_TRUE(handler_.get()); |
| 584 job_ = handler_->MaybeLoadResource(request_.get(), | 579 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 585 empty_context_.network_delegate()); | |
| 586 EXPECT_FALSE(job_.get()); | 580 EXPECT_FALSE(job_.get()); |
| 587 | 581 |
| 588 job_ = handler_->MaybeLoadFallbackForRedirect( | 582 job_ = handler_->MaybeLoadFallbackForRedirect( |
| 589 request_.get(), | 583 request_.get(), NULL, GURL("http://not_blah/redirect")); |
| 590 empty_context_.network_delegate(), | |
| 591 GURL("http://not_blah/redirect")); | |
| 592 EXPECT_TRUE(job_.get()); | 584 EXPECT_TRUE(job_.get()); |
| 593 EXPECT_TRUE(job_->is_delivering_appcache_response()); | 585 EXPECT_TRUE(job_->is_delivering_appcache_response()); |
| 594 | 586 |
| 595 AppCacheURLRequestJob* fallback_job; | 587 AppCacheURLRequestJob* fallback_job; |
| 596 fallback_job = handler_->MaybeLoadFallbackForResponse( | 588 fallback_job = handler_->MaybeLoadFallbackForResponse(request_.get(), NULL); |
| 597 request_.get(), empty_context_.network_delegate()); | |
| 598 EXPECT_FALSE(fallback_job); | 589 EXPECT_FALSE(fallback_job); |
| 599 | 590 |
| 600 TestFinished(); | 591 TestFinished(); |
| 601 } | 592 } |
| 602 | 593 |
| 603 // SubResource_NoRedirectFallback ----------------------------- | 594 // SubResource_NoRedirectFallback ----------------------------- |
| 604 | 595 |
| 605 void SubResource_NoRedirectFallback() { | 596 void SubResource_NoRedirectFallback() { |
| 606 // Redirects to resources in the same-origin are not subject to | 597 // Redirects to resources in the same-origin are not subject to |
| 607 // fallback namespaces. | 598 // fallback namespaces. |
| 608 host_->AssociateCompleteCache(MakeNewCache()); | 599 host_->AssociateCompleteCache(MakeNewCache()); |
| 609 | 600 |
| 610 mock_storage()->SimulateFindSubResource( | 601 mock_storage()->SimulateFindSubResource( |
| 611 AppCacheEntry(), AppCacheEntry(AppCacheEntry::EXPLICIT, 1), false); | 602 AppCacheEntry(), AppCacheEntry(AppCacheEntry::EXPLICIT, 1), false); |
| 612 | 603 |
| 613 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 604 request_.reset(new MockURLRequest( |
| 605 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 614 handler_.reset(host_->CreateRequestHandler(request_.get(), | 606 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 615 ResourceType::SUB_RESOURCE)); | 607 ResourceType::SUB_RESOURCE)); |
| 616 EXPECT_TRUE(handler_.get()); | 608 EXPECT_TRUE(handler_.get()); |
| 617 job_ = handler_->MaybeLoadResource(request_.get(), | 609 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 618 empty_context_.network_delegate()); | |
| 619 EXPECT_FALSE(job_.get()); | 610 EXPECT_FALSE(job_.get()); |
| 620 | 611 |
| 621 AppCacheURLRequestJob* fallback_job; | 612 AppCacheURLRequestJob* fallback_job; |
| 622 fallback_job = handler_->MaybeLoadFallbackForRedirect( | 613 fallback_job = handler_->MaybeLoadFallbackForRedirect( |
| 623 request_.get(), | 614 request_.get(), NULL, GURL("http://blah/redirect")); |
| 624 empty_context_.network_delegate(), | |
| 625 GURL("http://blah/redirect")); | |
| 626 EXPECT_FALSE(fallback_job); | 615 EXPECT_FALSE(fallback_job); |
| 627 | 616 |
| 628 request_->SimulateResponseCode(200); | 617 request_->SimulateResponseCode(200); |
| 629 fallback_job = handler_->MaybeLoadFallbackForResponse( | 618 fallback_job = handler_->MaybeLoadFallbackForResponse(request_.get(), NULL); |
| 630 request_.get(), empty_context_.network_delegate()); | |
| 631 EXPECT_FALSE(fallback_job); | 619 EXPECT_FALSE(fallback_job); |
| 632 | 620 |
| 633 TestFinished(); | 621 TestFinished(); |
| 634 } | 622 } |
| 635 | 623 |
| 636 // SubResource_Network ----------------------------- | 624 // SubResource_Network ----------------------------- |
| 637 | 625 |
| 638 void SubResource_Network() { | 626 void SubResource_Network() { |
| 639 // A sub-resource load where the resource is in a network namespace, | 627 // A sub-resource load where the resource is in a network namespace, |
| 640 // should result in the system using a 'real' job to do the network | 628 // should result in the system using a 'real' job to do the network |
| 641 // retrieval. | 629 // retrieval. |
| 642 host_->AssociateCompleteCache(MakeNewCache()); | 630 host_->AssociateCompleteCache(MakeNewCache()); |
| 643 | 631 |
| 644 mock_storage()->SimulateFindSubResource( | 632 mock_storage()->SimulateFindSubResource( |
| 645 AppCacheEntry(), AppCacheEntry(), true); | 633 AppCacheEntry(), AppCacheEntry(), true); |
| 646 | 634 |
| 647 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 635 request_.reset(new MockURLRequest( |
| 636 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 648 handler_.reset(host_->CreateRequestHandler(request_.get(), | 637 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 649 ResourceType::SUB_RESOURCE)); | 638 ResourceType::SUB_RESOURCE)); |
| 650 EXPECT_TRUE(handler_.get()); | 639 EXPECT_TRUE(handler_.get()); |
| 651 job_ = handler_->MaybeLoadResource(request_.get(), | 640 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 652 empty_context_.network_delegate()); | |
| 653 EXPECT_FALSE(job_.get()); | 641 EXPECT_FALSE(job_.get()); |
| 654 | 642 |
| 655 AppCacheURLRequestJob* fallback_job; | 643 AppCacheURLRequestJob* fallback_job; |
| 656 fallback_job = handler_->MaybeLoadFallbackForRedirect( | 644 fallback_job = handler_->MaybeLoadFallbackForRedirect( |
| 657 request_.get(), | 645 request_.get(), NULL, GURL("http://blah/redirect")); |
| 658 empty_context_.network_delegate(), | |
| 659 GURL("http://blah/redirect")); | |
| 660 EXPECT_FALSE(fallback_job); | 646 EXPECT_FALSE(fallback_job); |
| 661 fallback_job = handler_->MaybeLoadFallbackForResponse( | 647 fallback_job = handler_->MaybeLoadFallbackForResponse(request_.get(), NULL); |
| 662 request_.get(), empty_context_.network_delegate()); | |
| 663 EXPECT_FALSE(fallback_job); | 648 EXPECT_FALSE(fallback_job); |
| 664 | 649 |
| 665 TestFinished(); | 650 TestFinished(); |
| 666 } | 651 } |
| 667 | 652 |
| 668 // DestroyedHost ----------------------------- | 653 // DestroyedHost ----------------------------- |
| 669 | 654 |
| 670 void DestroyedHost() { | 655 void DestroyedHost() { |
| 671 host_->AssociateCompleteCache(MakeNewCache()); | 656 host_->AssociateCompleteCache(MakeNewCache()); |
| 672 | 657 |
| 673 mock_storage()->SimulateFindSubResource( | 658 mock_storage()->SimulateFindSubResource( |
| 674 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), AppCacheEntry(), false); | 659 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), AppCacheEntry(), false); |
| 675 | 660 |
| 676 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 661 request_.reset(new MockURLRequest( |
| 662 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 677 handler_.reset(host_->CreateRequestHandler(request_.get(), | 663 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 678 ResourceType::SUB_RESOURCE)); | 664 ResourceType::SUB_RESOURCE)); |
| 679 EXPECT_TRUE(handler_.get()); | 665 EXPECT_TRUE(handler_.get()); |
| 680 | 666 |
| 681 backend_impl_->UnregisterHost(1); | 667 backend_impl_->UnregisterHost(1); |
| 682 host_ = NULL; | 668 host_ = NULL; |
| 683 | 669 |
| 684 EXPECT_FALSE(handler_->MaybeLoadResource( | 670 EXPECT_FALSE(handler_->MaybeLoadResource(request_.get(), NULL)); |
| 685 request_.get(), empty_context_.network_delegate())); | |
| 686 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( | 671 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( |
| 687 request_.get(), | 672 request_.get(), NULL, GURL("http://blah/redirect"))); |
| 688 empty_context_.network_delegate(), | 673 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse(request_.get(), NULL)); |
| 689 GURL("http://blah/redirect"))); | |
| 690 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( | |
| 691 request_.get(), empty_context_.network_delegate())); | |
| 692 | 674 |
| 693 TestFinished(); | 675 TestFinished(); |
| 694 } | 676 } |
| 695 | 677 |
| 696 // DestroyedHostWithWaitingJob ----------------------------- | 678 // DestroyedHostWithWaitingJob ----------------------------- |
| 697 | 679 |
| 698 void DestroyedHostWithWaitingJob() { | 680 void DestroyedHostWithWaitingJob() { |
| 699 // Precondition, the host is waiting on cache selection. | 681 // Precondition, the host is waiting on cache selection. |
| 700 host_->pending_selected_cache_id_ = 1; | 682 host_->pending_selected_cache_id_ = 1; |
| 701 | 683 |
| 702 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 684 request_.reset(new MockURLRequest( |
| 685 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 703 handler_.reset(host_->CreateRequestHandler(request_.get(), | 686 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 704 ResourceType::SUB_RESOURCE)); | 687 ResourceType::SUB_RESOURCE)); |
| 705 EXPECT_TRUE(handler_.get()); | 688 EXPECT_TRUE(handler_.get()); |
| 706 | 689 |
| 707 job_ = handler_->MaybeLoadResource( | 690 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 708 request_.get(), empty_context_.network_delegate()); | |
| 709 EXPECT_TRUE(job_.get()); | 691 EXPECT_TRUE(job_.get()); |
| 710 EXPECT_TRUE(job_->is_waiting()); | 692 EXPECT_TRUE(job_->is_waiting()); |
| 711 | 693 |
| 712 backend_impl_->UnregisterHost(1); | 694 backend_impl_->UnregisterHost(1); |
| 713 host_ = NULL; | 695 host_ = NULL; |
| 714 EXPECT_TRUE(job_->has_been_killed()); | 696 EXPECT_TRUE(job_->has_been_killed()); |
| 715 | 697 |
| 716 EXPECT_FALSE(handler_->MaybeLoadResource( | 698 EXPECT_FALSE(handler_->MaybeLoadResource(request_.get(), NULL)); |
| 717 request_.get(), empty_context_.network_delegate())); | |
| 718 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( | 699 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( |
| 719 request_.get(), | 700 request_.get(), NULL, GURL("http://blah/redirect"))); |
| 720 empty_context_.network_delegate(), | |
| 721 GURL("http://blah/redirect"))); | |
| 722 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( | 701 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( |
| 723 request_.get(), empty_context_.network_delegate())); | 702 request_.get(), NULL)); |
| 724 | 703 |
| 725 TestFinished(); | 704 TestFinished(); |
| 726 } | 705 } |
| 727 | 706 |
| 728 // UnsupportedScheme ----------------------------- | 707 // UnsupportedScheme ----------------------------- |
| 729 | 708 |
| 730 void UnsupportedScheme() { | 709 void UnsupportedScheme() { |
| 731 // Precondition, the host is waiting on cache selection. | 710 // Precondition, the host is waiting on cache selection. |
| 732 host_->pending_selected_cache_id_ = 1; | 711 host_->pending_selected_cache_id_ = 1; |
| 733 | 712 |
| 734 request_.reset(new MockURLRequest(GURL("ftp://blah/"), &empty_context_)); | 713 request_.reset(new MockURLRequest( |
| 714 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 735 handler_.reset(host_->CreateRequestHandler(request_.get(), | 715 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 736 ResourceType::SUB_RESOURCE)); | 716 ResourceType::SUB_RESOURCE)); |
| 737 EXPECT_TRUE(handler_.get()); // we could redirect to http (conceivably) | 717 EXPECT_TRUE(handler_.get()); // we could redirect to http (conceivably) |
| 738 | 718 |
| 739 EXPECT_FALSE(handler_->MaybeLoadResource( | 719 EXPECT_FALSE(handler_->MaybeLoadResource( |
| 740 request_.get(), empty_context_.network_delegate())); | 720 request_.get(), NULL)); |
| 741 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( | 721 EXPECT_FALSE(handler_->MaybeLoadFallbackForRedirect( |
| 742 request_.get(), | 722 request_.get(), NULL, GURL("ftp://blah/redirect"))); |
| 743 empty_context_.network_delegate(), | |
| 744 GURL("ftp://blah/redirect"))); | |
| 745 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( | 723 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( |
| 746 request_.get(), empty_context_.network_delegate())); | 724 request_.get(), NULL)); |
| 747 | 725 |
| 748 TestFinished(); | 726 TestFinished(); |
| 749 } | 727 } |
| 750 | 728 |
| 751 // CanceledRequest ----------------------------- | 729 // CanceledRequest ----------------------------- |
| 752 | 730 |
| 753 void CanceledRequest() { | 731 void CanceledRequest() { |
| 754 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 732 request_.reset(new MockURLRequest( |
| 733 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 755 handler_.reset(host_->CreateRequestHandler(request_.get(), | 734 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 756 ResourceType::MAIN_FRAME)); | 735 ResourceType::MAIN_FRAME)); |
| 757 EXPECT_TRUE(handler_.get()); | 736 EXPECT_TRUE(handler_.get()); |
| 758 | 737 |
| 759 job_ = handler_->MaybeLoadResource(request_.get(), | 738 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 760 empty_context_.network_delegate()); | |
| 761 EXPECT_TRUE(job_.get()); | 739 EXPECT_TRUE(job_.get()); |
| 762 EXPECT_TRUE(job_->is_waiting()); | 740 EXPECT_TRUE(job_->is_waiting()); |
| 763 EXPECT_FALSE(job_->has_been_started()); | 741 EXPECT_FALSE(job_->has_been_started()); |
| 764 | 742 |
| 765 mock_factory_job_ = job_.get(); | 743 mock_factory_job_ = job_.get(); |
| 766 request_->Start(); | 744 request_->Start(); |
| 767 EXPECT_TRUE(job_->has_been_started()); | 745 EXPECT_TRUE(job_->has_been_started()); |
| 768 | 746 |
| 769 request_->Cancel(); | 747 request_->Cancel(); |
| 770 EXPECT_TRUE(job_->has_been_killed()); | 748 EXPECT_TRUE(job_->has_been_killed()); |
| 771 | 749 |
| 772 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse( | 750 EXPECT_FALSE(handler_->MaybeLoadFallbackForResponse(request_.get(), NULL)); |
| 773 request_.get(), empty_context_.network_delegate())); | |
| 774 | 751 |
| 775 TestFinished(); | 752 TestFinished(); |
| 776 } | 753 } |
| 777 | 754 |
| 778 // WorkerRequest ----------------------------- | 755 // WorkerRequest ----------------------------- |
| 779 | 756 |
| 780 void WorkerRequest() { | 757 void WorkerRequest() { |
| 781 EXPECT_TRUE(AppCacheRequestHandler::IsMainResourceType( | 758 EXPECT_TRUE(AppCacheRequestHandler::IsMainResourceType( |
| 782 ResourceType::MAIN_FRAME)); | 759 ResourceType::MAIN_FRAME)); |
| 783 EXPECT_TRUE(AppCacheRequestHandler::IsMainResourceType( | 760 EXPECT_TRUE(AppCacheRequestHandler::IsMainResourceType( |
| 784 ResourceType::SUB_FRAME)); | 761 ResourceType::SUB_FRAME)); |
| 785 EXPECT_TRUE(AppCacheRequestHandler::IsMainResourceType( | 762 EXPECT_TRUE(AppCacheRequestHandler::IsMainResourceType( |
| 786 ResourceType::SHARED_WORKER)); | 763 ResourceType::SHARED_WORKER)); |
| 787 EXPECT_FALSE(AppCacheRequestHandler::IsMainResourceType( | 764 EXPECT_FALSE(AppCacheRequestHandler::IsMainResourceType( |
| 788 ResourceType::WORKER)); | 765 ResourceType::WORKER)); |
| 789 | 766 |
| 790 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 767 request_.reset(new MockURLRequest( |
| 768 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 791 | 769 |
| 792 const int kParentHostId = host_->host_id(); | 770 const int kParentHostId = host_->host_id(); |
| 793 const int kWorkerHostId = 2; | 771 const int kWorkerHostId = 2; |
| 794 const int kAbandonedWorkerHostId = 3; | 772 const int kAbandonedWorkerHostId = 3; |
| 795 const int kNonExsitingHostId = 700; | 773 const int kNonExsitingHostId = 700; |
| 796 | 774 |
| 797 backend_impl_->RegisterHost(kWorkerHostId); | 775 backend_impl_->RegisterHost(kWorkerHostId); |
| 798 AppCacheHost* worker_host = backend_impl_->GetHost(kWorkerHostId); | 776 AppCacheHost* worker_host = backend_impl_->GetHost(kWorkerHostId); |
| 799 worker_host->SelectCacheForWorker(kParentHostId, kMockProcessId); | 777 worker_host->SelectCacheForWorker(kParentHostId, kMockProcessId); |
| 800 handler_.reset(worker_host->CreateRequestHandler( | 778 handler_.reset(worker_host->CreateRequestHandler( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 817 TestFinished(); | 795 TestFinished(); |
| 818 } | 796 } |
| 819 | 797 |
| 820 // MainResource_Blocked -------------------------------------------------- | 798 // MainResource_Blocked -------------------------------------------------- |
| 821 | 799 |
| 822 void MainResource_Blocked() { | 800 void MainResource_Blocked() { |
| 823 PushNextTask( | 801 PushNextTask( |
| 824 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Blocked, | 802 base::Bind(&AppCacheRequestHandlerTest::Verify_MainResource_Blocked, |
| 825 base::Unretained(this))); | 803 base::Unretained(this))); |
| 826 | 804 |
| 827 request_.reset(new MockURLRequest(GURL("http://blah/"), &empty_context_)); | 805 request_.reset(new MockURLRequest( |
| 806 GURL("http://blah/"), &empty_context_, empty_network_delegate_)); |
| 828 handler_.reset(host_->CreateRequestHandler(request_.get(), | 807 handler_.reset(host_->CreateRequestHandler(request_.get(), |
| 829 ResourceType::MAIN_FRAME)); | 808 ResourceType::MAIN_FRAME)); |
| 830 EXPECT_TRUE(handler_.get()); | 809 EXPECT_TRUE(handler_.get()); |
| 831 | 810 |
| 832 mock_policy_->can_load_return_value_ = false; | 811 mock_policy_->can_load_return_value_ = false; |
| 833 mock_storage()->SimulateFindMainResource( | 812 mock_storage()->SimulateFindMainResource( |
| 834 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), | 813 AppCacheEntry(AppCacheEntry::EXPLICIT, 1), |
| 835 GURL(), AppCacheEntry(), | 814 GURL(), AppCacheEntry(), |
| 836 1, 2, GURL("http://blah/manifest/")); | 815 1, 2, GURL("http://blah/manifest/")); |
| 837 | 816 |
| 838 job_ = handler_->MaybeLoadResource(request_.get(), | 817 job_ = handler_->MaybeLoadResource(request_.get(), NULL); |
| 839 empty_context_.network_delegate()); | |
| 840 EXPECT_TRUE(job_.get()); | 818 EXPECT_TRUE(job_.get()); |
| 841 EXPECT_TRUE(job_->is_waiting()); | 819 EXPECT_TRUE(job_->is_waiting()); |
| 842 | 820 |
| 843 // We have to wait for completion of storage->FindResponseForMainRequest. | 821 // We have to wait for completion of storage->FindResponseForMainRequest. |
| 844 ScheduleNextTask(); | 822 ScheduleNextTask(); |
| 845 } | 823 } |
| 846 | 824 |
| 847 void Verify_MainResource_Blocked() { | 825 void Verify_MainResource_Blocked() { |
| 848 EXPECT_FALSE(job_->is_waiting()); | 826 EXPECT_FALSE(job_->is_waiting()); |
| 849 EXPECT_FALSE(job_->is_delivering_appcache_response()); | 827 EXPECT_FALSE(job_->is_delivering_appcache_response()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 878 // Data members -------------------------------------------------- | 856 // Data members -------------------------------------------------- |
| 879 | 857 |
| 880 scoped_ptr<base::WaitableEvent> test_finished_event_; | 858 scoped_ptr<base::WaitableEvent> test_finished_event_; |
| 881 std::stack<base::Closure> task_stack_; | 859 std::stack<base::Closure> task_stack_; |
| 882 scoped_ptr<MockAppCacheService> mock_service_; | 860 scoped_ptr<MockAppCacheService> mock_service_; |
| 883 scoped_ptr<AppCacheBackendImpl> backend_impl_; | 861 scoped_ptr<AppCacheBackendImpl> backend_impl_; |
| 884 scoped_ptr<MockFrontend> mock_frontend_; | 862 scoped_ptr<MockFrontend> mock_frontend_; |
| 885 scoped_ptr<MockAppCachePolicy> mock_policy_; | 863 scoped_ptr<MockAppCachePolicy> mock_policy_; |
| 886 AppCacheHost* host_; | 864 AppCacheHost* host_; |
| 887 net::URLRequestContext empty_context_; | 865 net::URLRequestContext empty_context_; |
| 866 net::NetworkDelegate* empty_network_delegate_; |
| 888 scoped_ptr<MockURLRequest> request_; | 867 scoped_ptr<MockURLRequest> request_; |
| 889 scoped_ptr<AppCacheRequestHandler> handler_; | 868 scoped_ptr<AppCacheRequestHandler> handler_; |
| 890 scoped_refptr<AppCacheURLRequestJob> job_; | 869 scoped_refptr<AppCacheURLRequestJob> job_; |
| 891 net::URLRequest::ProtocolFactory* orig_http_factory_; | 870 net::URLRequest::ProtocolFactory* orig_http_factory_; |
| 892 | 871 |
| 893 static scoped_ptr<base::Thread> io_thread_; | 872 static scoped_ptr<base::Thread> io_thread_; |
| 894 static net::URLRequestJob* mock_factory_job_; | 873 static net::URLRequestJob* mock_factory_job_; |
| 895 }; | 874 }; |
| 896 | 875 |
| 897 // static | 876 // static |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 966 | 945 |
| 967 TEST_F(AppCacheRequestHandlerTest, WorkerRequest) { | 946 TEST_F(AppCacheRequestHandlerTest, WorkerRequest) { |
| 968 RunTestOnIOThread(&AppCacheRequestHandlerTest::WorkerRequest); | 947 RunTestOnIOThread(&AppCacheRequestHandlerTest::WorkerRequest); |
| 969 } | 948 } |
| 970 | 949 |
| 971 TEST_F(AppCacheRequestHandlerTest, MainResource_Blocked) { | 950 TEST_F(AppCacheRequestHandlerTest, MainResource_Blocked) { |
| 972 RunTestOnIOThread(&AppCacheRequestHandlerTest::MainResource_Blocked); | 951 RunTestOnIOThread(&AppCacheRequestHandlerTest::MainResource_Blocked); |
| 973 } | 952 } |
| 974 | 953 |
| 975 } // namespace appcache | 954 } // namespace appcache |
| OLD | NEW |