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