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 |