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