OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/bind_helpers.h" | 6 #include "base/bind_helpers.h" |
7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "base/synchronization/waitable_event.h" | 8 #include "base/synchronization/waitable_event.h" |
9 #include "base/threading/thread.h" | 9 #include "base/threading/thread.h" |
10 #include "content/browser/appcache/appcache_group.h" | 10 #include "content/browser/appcache/appcache_group.h" |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 (*body) = ""; | 190 (*body) = ""; |
191 } | 191 } |
192 } | 192 } |
193 }; | 193 }; |
194 | 194 |
195 class MockHttpServerJobFactory | 195 class MockHttpServerJobFactory |
196 : public net::URLRequestJobFactory::ProtocolHandler { | 196 : public net::URLRequestJobFactory::ProtocolHandler { |
197 public: | 197 public: |
198 virtual net::URLRequestJob* MaybeCreateJob( | 198 virtual net::URLRequestJob* MaybeCreateJob( |
199 net::URLRequest* request, | 199 net::URLRequest* request, |
200 net::NetworkDelegate* network_delegate) const OVERRIDE { | 200 net::NetworkDelegate* network_delegate) const override { |
201 return MockHttpServer::JobFactory(request, network_delegate); | 201 return MockHttpServer::JobFactory(request, network_delegate); |
202 } | 202 } |
203 }; | 203 }; |
204 | 204 |
205 inline bool operator==(const AppCacheNamespace& lhs, | 205 inline bool operator==(const AppCacheNamespace& lhs, |
206 const AppCacheNamespace& rhs) { | 206 const AppCacheNamespace& rhs) { |
207 return lhs.type == rhs.type && | 207 return lhs.type == rhs.type && |
208 lhs.namespace_url == rhs.namespace_url && | 208 lhs.namespace_url == rhs.namespace_url && |
209 lhs.target_url == rhs.target_url; | 209 lhs.target_url == rhs.target_url; |
210 } | 210 } |
211 | 211 |
212 } // namespace | 212 } // namespace |
213 | 213 |
214 class MockFrontend : public AppCacheFrontend { | 214 class MockFrontend : public AppCacheFrontend { |
215 public: | 215 public: |
216 MockFrontend() | 216 MockFrontend() |
217 : ignore_progress_events_(false), verify_progress_events_(false), | 217 : ignore_progress_events_(false), verify_progress_events_(false), |
218 last_progress_total_(-1), last_progress_complete_(-1), | 218 last_progress_total_(-1), last_progress_complete_(-1), |
219 start_update_trigger_(APPCACHE_CHECKING_EVENT), update_(NULL) { | 219 start_update_trigger_(APPCACHE_CHECKING_EVENT), update_(NULL) { |
220 } | 220 } |
221 | 221 |
222 virtual void OnCacheSelected( | 222 virtual void OnCacheSelected( |
223 int host_id, const AppCacheInfo& info) OVERRIDE { | 223 int host_id, const AppCacheInfo& info) override { |
224 } | 224 } |
225 | 225 |
226 virtual void OnStatusChanged(const std::vector<int>& host_ids, | 226 virtual void OnStatusChanged(const std::vector<int>& host_ids, |
227 AppCacheStatus status) OVERRIDE { | 227 AppCacheStatus status) override { |
228 } | 228 } |
229 | 229 |
230 virtual void OnEventRaised(const std::vector<int>& host_ids, | 230 virtual void OnEventRaised(const std::vector<int>& host_ids, |
231 AppCacheEventID event_id) OVERRIDE { | 231 AppCacheEventID event_id) override { |
232 raised_events_.push_back(RaisedEvent(host_ids, event_id)); | 232 raised_events_.push_back(RaisedEvent(host_ids, event_id)); |
233 | 233 |
234 // Trigger additional updates if requested. | 234 // Trigger additional updates if requested. |
235 if (event_id == start_update_trigger_ && update_) { | 235 if (event_id == start_update_trigger_ && update_) { |
236 for (std::vector<AppCacheHost*>::iterator it = update_hosts_.begin(); | 236 for (std::vector<AppCacheHost*>::iterator it = update_hosts_.begin(); |
237 it != update_hosts_.end(); ++it) { | 237 it != update_hosts_.end(); ++it) { |
238 AppCacheHost* host = *it; | 238 AppCacheHost* host = *it; |
239 update_->StartUpdate(host, | 239 update_->StartUpdate(host, |
240 (host ? host->pending_master_entry_url() : GURL())); | 240 (host ? host->pending_master_entry_url() : GURL())); |
241 } | 241 } |
242 update_hosts_.clear(); // only trigger once | 242 update_hosts_.clear(); // only trigger once |
243 } | 243 } |
244 } | 244 } |
245 | 245 |
246 virtual void OnErrorEventRaised(const std::vector<int>& host_ids, | 246 virtual void OnErrorEventRaised(const std::vector<int>& host_ids, |
247 const AppCacheErrorDetails& details) | 247 const AppCacheErrorDetails& details) |
248 OVERRIDE { | 248 override { |
249 error_message_ = details.message; | 249 error_message_ = details.message; |
250 OnEventRaised(host_ids, APPCACHE_ERROR_EVENT); | 250 OnEventRaised(host_ids, APPCACHE_ERROR_EVENT); |
251 } | 251 } |
252 | 252 |
253 virtual void OnProgressEventRaised(const std::vector<int>& host_ids, | 253 virtual void OnProgressEventRaised(const std::vector<int>& host_ids, |
254 const GURL& url, | 254 const GURL& url, |
255 int num_total, | 255 int num_total, |
256 int num_complete) OVERRIDE { | 256 int num_complete) override { |
257 if (!ignore_progress_events_) | 257 if (!ignore_progress_events_) |
258 OnEventRaised(host_ids, APPCACHE_PROGRESS_EVENT); | 258 OnEventRaised(host_ids, APPCACHE_PROGRESS_EVENT); |
259 | 259 |
260 if (verify_progress_events_) { | 260 if (verify_progress_events_) { |
261 EXPECT_GE(num_total, num_complete); | 261 EXPECT_GE(num_total, num_complete); |
262 EXPECT_GE(num_complete, 0); | 262 EXPECT_GE(num_complete, 0); |
263 | 263 |
264 if (last_progress_total_ == -1) { | 264 if (last_progress_total_ == -1) { |
265 // Should start at zero. | 265 // Should start at zero. |
266 EXPECT_EQ(0, num_complete); | 266 EXPECT_EQ(0, num_complete); |
267 } else { | 267 } else { |
268 // Total should be stable and complete should bump up by one at a time. | 268 // Total should be stable and complete should bump up by one at a time. |
269 EXPECT_EQ(last_progress_total_, num_total); | 269 EXPECT_EQ(last_progress_total_, num_total); |
270 EXPECT_EQ(last_progress_complete_ + 1, num_complete); | 270 EXPECT_EQ(last_progress_complete_ + 1, num_complete); |
271 } | 271 } |
272 | 272 |
273 // Url should be valid for all except the 'final' event. | 273 // Url should be valid for all except the 'final' event. |
274 if (num_total == num_complete) | 274 if (num_total == num_complete) |
275 EXPECT_TRUE(url.is_empty()); | 275 EXPECT_TRUE(url.is_empty()); |
276 else | 276 else |
277 EXPECT_TRUE(url.is_valid()); | 277 EXPECT_TRUE(url.is_valid()); |
278 | 278 |
279 last_progress_total_ = num_total; | 279 last_progress_total_ = num_total; |
280 last_progress_complete_ = num_complete; | 280 last_progress_complete_ = num_complete; |
281 } | 281 } |
282 } | 282 } |
283 | 283 |
284 virtual void OnLogMessage(int host_id, | 284 virtual void OnLogMessage(int host_id, |
285 AppCacheLogLevel log_level, | 285 AppCacheLogLevel log_level, |
286 const std::string& message) OVERRIDE { | 286 const std::string& message) override { |
287 } | 287 } |
288 | 288 |
289 virtual void OnContentBlocked(int host_id, | 289 virtual void OnContentBlocked(int host_id, |
290 const GURL& manifest_url) OVERRIDE { | 290 const GURL& manifest_url) override { |
291 } | 291 } |
292 | 292 |
293 void AddExpectedEvent(const std::vector<int>& host_ids, | 293 void AddExpectedEvent(const std::vector<int>& host_ids, |
294 AppCacheEventID event_id) { | 294 AppCacheEventID event_id) { |
295 DCHECK(!ignore_progress_events_ || event_id != APPCACHE_PROGRESS_EVENT); | 295 DCHECK(!ignore_progress_events_ || event_id != APPCACHE_PROGRESS_EVENT); |
296 expected_events_.push_back(RaisedEvent(host_ids, event_id)); | 296 expected_events_.push_back(RaisedEvent(host_ids, event_id)); |
297 } | 297 } |
298 | 298 |
299 void SetIgnoreProgressEvents(bool ignore) { | 299 void SetIgnoreProgressEvents(bool ignore) { |
300 // Some tests involve joining new hosts to an already running update job | 300 // Some tests involve joining new hosts to an already running update job |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 AppCacheEventID start_update_trigger_; | 340 AppCacheEventID start_update_trigger_; |
341 AppCacheUpdateJob* update_; | 341 AppCacheUpdateJob* update_; |
342 std::vector<AppCacheHost*> update_hosts_; | 342 std::vector<AppCacheHost*> update_hosts_; |
343 }; | 343 }; |
344 | 344 |
345 // Helper factories to simulate redirected URL responses for tests. | 345 // Helper factories to simulate redirected URL responses for tests. |
346 class RedirectFactory : public net::URLRequestJobFactory::ProtocolHandler { | 346 class RedirectFactory : public net::URLRequestJobFactory::ProtocolHandler { |
347 public: | 347 public: |
348 virtual net::URLRequestJob* MaybeCreateJob( | 348 virtual net::URLRequestJob* MaybeCreateJob( |
349 net::URLRequest* request, | 349 net::URLRequest* request, |
350 net::NetworkDelegate* network_delegate) const OVERRIDE { | 350 net::NetworkDelegate* network_delegate) const override { |
351 return new net::URLRequestTestJob( | 351 return new net::URLRequestTestJob( |
352 request, | 352 request, |
353 network_delegate, | 353 network_delegate, |
354 net::URLRequestTestJob::test_redirect_headers(), | 354 net::URLRequestTestJob::test_redirect_headers(), |
355 net::URLRequestTestJob::test_data_1(), | 355 net::URLRequestTestJob::test_data_1(), |
356 true); | 356 true); |
357 } | 357 } |
358 }; | 358 }; |
359 | 359 |
360 // Helper class to simulate a URL that returns retry or success. | 360 // Helper class to simulate a URL that returns retry or success. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 return new RetryRequestTestJob( | 392 return new RetryRequestTestJob( |
393 request, network_delegate, RetryRequestTestJob::retry_headers(), 503); | 393 request, network_delegate, RetryRequestTestJob::retry_headers(), 503); |
394 } else { | 394 } else { |
395 return new RetryRequestTestJob( | 395 return new RetryRequestTestJob( |
396 request, | 396 request, |
397 network_delegate, | 397 network_delegate, |
398 RetryRequestTestJob::manifest_headers(), 200); | 398 RetryRequestTestJob::manifest_headers(), 200); |
399 } | 399 } |
400 } | 400 } |
401 | 401 |
402 virtual int GetResponseCode() const OVERRIDE { return response_code_; } | 402 virtual int GetResponseCode() const override { return response_code_; } |
403 | 403 |
404 private: | 404 private: |
405 virtual ~RetryRequestTestJob() {} | 405 virtual ~RetryRequestTestJob() {} |
406 | 406 |
407 static std::string retry_headers() { | 407 static std::string retry_headers() { |
408 const char no_retry_after[] = | 408 const char no_retry_after[] = |
409 "HTTP/1.1 503 BOO HOO\0" | 409 "HTTP/1.1 503 BOO HOO\0" |
410 "\0"; | 410 "\0"; |
411 const char nonzero[] = | 411 const char nonzero[] = |
412 "HTTP/1.1 503 BOO HOO\0" | 412 "HTTP/1.1 503 BOO HOO\0" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
456 static int num_retries_; | 456 static int num_retries_; |
457 static RetryHeader retry_after_; | 457 static RetryHeader retry_after_; |
458 static int expected_requests_; | 458 static int expected_requests_; |
459 }; | 459 }; |
460 | 460 |
461 class RetryRequestTestJobFactory | 461 class RetryRequestTestJobFactory |
462 : public net::URLRequestJobFactory::ProtocolHandler { | 462 : public net::URLRequestJobFactory::ProtocolHandler { |
463 public: | 463 public: |
464 virtual net::URLRequestJob* MaybeCreateJob( | 464 virtual net::URLRequestJob* MaybeCreateJob( |
465 net::URLRequest* request, | 465 net::URLRequest* request, |
466 net::NetworkDelegate* network_delegate) const OVERRIDE { | 466 net::NetworkDelegate* network_delegate) const override { |
467 return RetryRequestTestJob::RetryFactory(request, network_delegate); | 467 return RetryRequestTestJob::RetryFactory(request, network_delegate); |
468 } | 468 } |
469 }; | 469 }; |
470 | 470 |
471 // static | 471 // static |
472 const GURL RetryRequestTestJob::kRetryUrl("http://retry"); | 472 const GURL RetryRequestTestJob::kRetryUrl("http://retry"); |
473 int RetryRequestTestJob::num_requests_ = 0; | 473 int RetryRequestTestJob::num_requests_ = 0; |
474 int RetryRequestTestJob::num_retries_; | 474 int RetryRequestTestJob::num_retries_; |
475 RetryRequestTestJob::RetryHeader RetryRequestTestJob::retry_after_; | 475 RetryRequestTestJob::RetryHeader RetryRequestTestJob::retry_after_; |
476 int RetryRequestTestJob::expected_requests_ = 0; | 476 int RetryRequestTestJob::expected_requests_ = 0; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
536 bool HttpHeadersRequestTestJob::saw_if_modified_since_ = false; | 536 bool HttpHeadersRequestTestJob::saw_if_modified_since_ = false; |
537 std::string HttpHeadersRequestTestJob::expect_if_none_match_; | 537 std::string HttpHeadersRequestTestJob::expect_if_none_match_; |
538 bool HttpHeadersRequestTestJob::saw_if_none_match_ = false; | 538 bool HttpHeadersRequestTestJob::saw_if_none_match_ = false; |
539 bool HttpHeadersRequestTestJob::already_checked_ = false; | 539 bool HttpHeadersRequestTestJob::already_checked_ = false; |
540 | 540 |
541 class IfModifiedSinceJobFactory | 541 class IfModifiedSinceJobFactory |
542 : public net::URLRequestJobFactory::ProtocolHandler { | 542 : public net::URLRequestJobFactory::ProtocolHandler { |
543 public: | 543 public: |
544 virtual net::URLRequestJob* MaybeCreateJob( | 544 virtual net::URLRequestJob* MaybeCreateJob( |
545 net::URLRequest* request, | 545 net::URLRequest* request, |
546 net::NetworkDelegate* network_delegate) const OVERRIDE { | 546 net::NetworkDelegate* network_delegate) const override { |
547 return HttpHeadersRequestTestJob::IfModifiedSinceFactory( | 547 return HttpHeadersRequestTestJob::IfModifiedSinceFactory( |
548 request, network_delegate); | 548 request, network_delegate); |
549 } | 549 } |
550 }; | 550 }; |
551 | 551 |
552 class IOThread : public base::Thread { | 552 class IOThread : public base::Thread { |
553 public: | 553 public: |
554 explicit IOThread(const char* name) | 554 explicit IOThread(const char* name) |
555 : base::Thread(name) { | 555 : base::Thread(name) { |
556 } | 556 } |
557 | 557 |
558 virtual ~IOThread() { | 558 virtual ~IOThread() { |
559 Stop(); | 559 Stop(); |
560 } | 560 } |
561 | 561 |
562 net::URLRequestContext* request_context() { | 562 net::URLRequestContext* request_context() { |
563 return request_context_.get(); | 563 return request_context_.get(); |
564 } | 564 } |
565 | 565 |
566 void SetNewJobFactory(net::URLRequestJobFactory* job_factory) { | 566 void SetNewJobFactory(net::URLRequestJobFactory* job_factory) { |
567 DCHECK(job_factory); | 567 DCHECK(job_factory); |
568 job_factory_.reset(job_factory); | 568 job_factory_.reset(job_factory); |
569 request_context_->set_job_factory(job_factory_.get()); | 569 request_context_->set_job_factory(job_factory_.get()); |
570 } | 570 } |
571 | 571 |
572 virtual void Init() OVERRIDE { | 572 virtual void Init() override { |
573 scoped_ptr<net::URLRequestJobFactoryImpl> factory( | 573 scoped_ptr<net::URLRequestJobFactoryImpl> factory( |
574 new net::URLRequestJobFactoryImpl()); | 574 new net::URLRequestJobFactoryImpl()); |
575 factory->SetProtocolHandler("http", new MockHttpServerJobFactory); | 575 factory->SetProtocolHandler("http", new MockHttpServerJobFactory); |
576 factory->SetProtocolHandler("https", new MockHttpServerJobFactory); | 576 factory->SetProtocolHandler("https", new MockHttpServerJobFactory); |
577 job_factory_ = factory.Pass(); | 577 job_factory_ = factory.Pass(); |
578 request_context_.reset(new net::TestURLRequestContext()); | 578 request_context_.reset(new net::TestURLRequestContext()); |
579 request_context_->set_job_factory(job_factory_.get()); | 579 request_context_->set_job_factory(job_factory_.get()); |
580 } | 580 } |
581 | 581 |
582 virtual void CleanUp() OVERRIDE { | 582 virtual void CleanUp() override { |
583 request_context_.reset(); | 583 request_context_.reset(); |
584 job_factory_.reset(); | 584 job_factory_.reset(); |
585 } | 585 } |
586 | 586 |
587 private: | 587 private: |
588 scoped_ptr<net::URLRequestJobFactory> job_factory_; | 588 scoped_ptr<net::URLRequestJobFactory> job_factory_; |
589 scoped_ptr<net::URLRequestContext> request_context_; | 589 scoped_ptr<net::URLRequestContext> request_context_; |
590 }; | 590 }; |
591 | 591 |
592 class AppCacheUpdateJobTest : public testing::Test, | 592 class AppCacheUpdateJobTest : public testing::Test, |
(...skipping 2417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3010 WaitForUpdateToFinish(); | 3010 WaitForUpdateToFinish(); |
3011 } | 3011 } |
3012 | 3012 |
3013 void WaitForUpdateToFinish() { | 3013 void WaitForUpdateToFinish() { |
3014 if (group_->update_status() == AppCacheGroup::IDLE) | 3014 if (group_->update_status() == AppCacheGroup::IDLE) |
3015 UpdateFinished(); | 3015 UpdateFinished(); |
3016 else | 3016 else |
3017 group_->AddUpdateObserver(this); | 3017 group_->AddUpdateObserver(this); |
3018 } | 3018 } |
3019 | 3019 |
3020 virtual void OnUpdateComplete(AppCacheGroup* group) OVERRIDE { | 3020 virtual void OnUpdateComplete(AppCacheGroup* group) override { |
3021 ASSERT_EQ(group_.get(), group); | 3021 ASSERT_EQ(group_.get(), group); |
3022 protect_newest_cache_ = group->newest_complete_cache(); | 3022 protect_newest_cache_ = group->newest_complete_cache(); |
3023 UpdateFinished(); | 3023 UpdateFinished(); |
3024 } | 3024 } |
3025 | 3025 |
3026 void UpdateFinished() { | 3026 void UpdateFinished() { |
3027 // We unwind the stack prior to finishing up to let stack-based objects | 3027 // We unwind the stack prior to finishing up to let stack-based objects |
3028 // get deleted. | 3028 // get deleted. |
3029 base::MessageLoop::current()->PostTask( | 3029 base::MessageLoop::current()->PostTask( |
3030 FROM_HERE, | 3030 FROM_HERE, |
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3687 | 3687 |
3688 TEST_F(AppCacheUpdateJobTest, CrossOriginHttpsSuccess) { | 3688 TEST_F(AppCacheUpdateJobTest, CrossOriginHttpsSuccess) { |
3689 RunTestOnIOThread(&AppCacheUpdateJobTest::CrossOriginHttpsSuccessTest); | 3689 RunTestOnIOThread(&AppCacheUpdateJobTest::CrossOriginHttpsSuccessTest); |
3690 } | 3690 } |
3691 | 3691 |
3692 TEST_F(AppCacheUpdateJobTest, CrossOriginHttpsDenied) { | 3692 TEST_F(AppCacheUpdateJobTest, CrossOriginHttpsDenied) { |
3693 RunTestOnIOThread(&AppCacheUpdateJobTest::CrossOriginHttpsDeniedTest); | 3693 RunTestOnIOThread(&AppCacheUpdateJobTest::CrossOriginHttpsDeniedTest); |
3694 } | 3694 } |
3695 | 3695 |
3696 } // namespace content | 3696 } // namespace content |
OLD | NEW |