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 |