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/mock_appcache_service.h" | 10 #include "content/browser/appcache/mock_appcache_service.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 using appcache::AppCacheFrontend; | 25 using appcache::AppCacheFrontend; |
26 using appcache::AppCacheHost; | 26 using appcache::AppCacheHost; |
27 using appcache::AppCacheGroup; | 27 using appcache::AppCacheGroup; |
28 using appcache::AppCacheResponseInfo; | 28 using appcache::AppCacheResponseInfo; |
29 using appcache::AppCacheUpdateJob; | 29 using appcache::AppCacheUpdateJob; |
30 using appcache::AppCacheResponseWriter; | 30 using appcache::AppCacheResponseWriter; |
31 using appcache::CACHED_EVENT; | 31 using appcache::CACHED_EVENT; |
32 using appcache::CHECKING_EVENT; | 32 using appcache::CHECKING_EVENT; |
33 using appcache::DOWNLOADING_EVENT; | 33 using appcache::DOWNLOADING_EVENT; |
34 using appcache::ERROR_EVENT; | 34 using appcache::ERROR_EVENT; |
35 using appcache::EventID; | 35 using appcache::AppCacheEventID; |
36 using appcache::FALLBACK_NAMESPACE; | 36 using appcache::FALLBACK_NAMESPACE; |
37 using appcache::HttpResponseInfoIOBuffer; | 37 using appcache::HttpResponseInfoIOBuffer; |
38 using appcache::kNoCacheId; | 38 using appcache::kNoCacheId; |
39 using appcache::kNoResponseId; | 39 using appcache::kNoResponseId; |
40 using appcache::Namespace; | 40 using appcache::Namespace; |
41 using appcache::NETWORK_NAMESPACE; | 41 using appcache::NETWORK_NAMESPACE; |
42 using appcache::NO_UPDATE_EVENT; | 42 using appcache::NO_UPDATE_EVENT; |
43 using appcache::OBSOLETE_EVENT; | 43 using appcache::OBSOLETE_EVENT; |
44 using appcache::PROGRESS_EVENT; | 44 using appcache::PROGRESS_EVENT; |
45 using appcache::UPDATE_READY_EVENT; | 45 using appcache::UPDATE_READY_EVENT; |
46 using appcache::Status; | 46 using appcache::AppCacheStatus; |
47 | 47 |
48 namespace content { | 48 namespace content { |
49 class AppCacheUpdateJobTest; | 49 class AppCacheUpdateJobTest; |
50 | 50 |
51 namespace { | 51 namespace { |
52 | 52 |
53 const char kManifest1Contents[] = | 53 const char kManifest1Contents[] = |
54 "CACHE MANIFEST\n" | 54 "CACHE MANIFEST\n" |
55 "explicit1\n" | 55 "explicit1\n" |
56 "FALLBACK:\n" | 56 "FALLBACK:\n" |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 : ignore_progress_events_(false), verify_progress_events_(false), | 241 : ignore_progress_events_(false), verify_progress_events_(false), |
242 last_progress_total_(-1), last_progress_complete_(-1), | 242 last_progress_total_(-1), last_progress_complete_(-1), |
243 start_update_trigger_(CHECKING_EVENT), update_(NULL) { | 243 start_update_trigger_(CHECKING_EVENT), update_(NULL) { |
244 } | 244 } |
245 | 245 |
246 virtual void OnCacheSelected( | 246 virtual void OnCacheSelected( |
247 int host_id, const appcache::AppCacheInfo& info) OVERRIDE { | 247 int host_id, const appcache::AppCacheInfo& info) OVERRIDE { |
248 } | 248 } |
249 | 249 |
250 virtual void OnStatusChanged(const std::vector<int>& host_ids, | 250 virtual void OnStatusChanged(const std::vector<int>& host_ids, |
251 Status status) OVERRIDE { | 251 AppCacheStatus status) OVERRIDE { |
252 } | 252 } |
253 | 253 |
254 virtual void OnEventRaised(const std::vector<int>& host_ids, | 254 virtual void OnEventRaised(const std::vector<int>& host_ids, |
255 EventID event_id) OVERRIDE { | 255 AppCacheEventID event_id) OVERRIDE { |
256 raised_events_.push_back(RaisedEvent(host_ids, event_id)); | 256 raised_events_.push_back(RaisedEvent(host_ids, event_id)); |
257 | 257 |
258 // Trigger additional updates if requested. | 258 // Trigger additional updates if requested. |
259 if (event_id == start_update_trigger_ && update_) { | 259 if (event_id == start_update_trigger_ && update_) { |
260 for (std::vector<AppCacheHost*>::iterator it = update_hosts_.begin(); | 260 for (std::vector<AppCacheHost*>::iterator it = update_hosts_.begin(); |
261 it != update_hosts_.end(); ++it) { | 261 it != update_hosts_.end(); ++it) { |
262 AppCacheHost* host = *it; | 262 AppCacheHost* host = *it; |
263 update_->StartUpdate(host, | 263 update_->StartUpdate(host, |
264 (host ? host->pending_master_entry_url() : GURL())); | 264 (host ? host->pending_master_entry_url() : GURL())); |
265 } | 265 } |
266 update_hosts_.clear(); // only trigger once | 266 update_hosts_.clear(); // only trigger once |
267 } | 267 } |
268 } | 268 } |
269 | 269 |
270 virtual void OnErrorEventRaised(const std::vector<int>& host_ids, | 270 virtual void OnErrorEventRaised(const std::vector<int>& host_ids, |
271 const appcache::ErrorDetails& details) | 271 const appcache::AppCacheErrorDetails& details) |
272 OVERRIDE { | 272 OVERRIDE { |
273 error_message_ = details.message; | 273 error_message_ = details.message; |
274 OnEventRaised(host_ids, ERROR_EVENT); | 274 OnEventRaised(host_ids, ERROR_EVENT); |
275 } | 275 } |
276 | 276 |
277 virtual void OnProgressEventRaised(const std::vector<int>& host_ids, | 277 virtual void OnProgressEventRaised(const std::vector<int>& host_ids, |
278 const GURL& url, | 278 const GURL& url, |
279 int num_total, | 279 int num_total, |
280 int num_complete) OVERRIDE { | 280 int num_complete) OVERRIDE { |
281 if (!ignore_progress_events_) | 281 if (!ignore_progress_events_) |
(...skipping 17 matching lines...) Expand all Loading... |
299 EXPECT_TRUE(url.is_empty()); | 299 EXPECT_TRUE(url.is_empty()); |
300 else | 300 else |
301 EXPECT_TRUE(url.is_valid()); | 301 EXPECT_TRUE(url.is_valid()); |
302 | 302 |
303 last_progress_total_ = num_total; | 303 last_progress_total_ = num_total; |
304 last_progress_complete_ = num_complete; | 304 last_progress_complete_ = num_complete; |
305 } | 305 } |
306 } | 306 } |
307 | 307 |
308 virtual void OnLogMessage(int host_id, | 308 virtual void OnLogMessage(int host_id, |
309 appcache::LogLevel log_level, | 309 appcache::AppCacheLogLevel log_level, |
310 const std::string& message) OVERRIDE { | 310 const std::string& message) OVERRIDE { |
311 } | 311 } |
312 | 312 |
313 virtual void OnContentBlocked(int host_id, | 313 virtual void OnContentBlocked(int host_id, |
314 const GURL& manifest_url) OVERRIDE { | 314 const GURL& manifest_url) OVERRIDE { |
315 } | 315 } |
316 | 316 |
317 void AddExpectedEvent(const std::vector<int>& host_ids, EventID event_id) { | 317 void AddExpectedEvent(const std::vector<int>& host_ids, |
| 318 AppCacheEventID event_id) { |
318 DCHECK(!ignore_progress_events_ || event_id != PROGRESS_EVENT); | 319 DCHECK(!ignore_progress_events_ || event_id != PROGRESS_EVENT); |
319 expected_events_.push_back(RaisedEvent(host_ids, event_id)); | 320 expected_events_.push_back(RaisedEvent(host_ids, event_id)); |
320 } | 321 } |
321 | 322 |
322 void SetIgnoreProgressEvents(bool ignore) { | 323 void SetIgnoreProgressEvents(bool ignore) { |
323 // Some tests involve joining new hosts to an already running update job | 324 // Some tests involve joining new hosts to an already running update job |
324 // or intentionally failing. The timing and sequencing of the progress | 325 // or intentionally failing. The timing and sequencing of the progress |
325 // events generated by an update job are dependent on the behavior of | 326 // events generated by an update job are dependent on the behavior of |
326 // an external HTTP server. For jobs that do not run fully till completion, | 327 // an external HTTP server. For jobs that do not run fully till completion, |
327 // due to either joining late or early exit, we skip monitoring the | 328 // due to either joining late or early exit, we skip monitoring the |
328 // progress events to avoid flakiness. | 329 // progress events to avoid flakiness. |
329 ignore_progress_events_ = ignore; | 330 ignore_progress_events_ = ignore; |
330 } | 331 } |
331 | 332 |
332 void SetVerifyProgressEvents(bool verify) { | 333 void SetVerifyProgressEvents(bool verify) { |
333 verify_progress_events_ = verify; | 334 verify_progress_events_ = verify; |
334 } | 335 } |
335 | 336 |
336 void TriggerAdditionalUpdates(EventID trigger_event, | 337 void TriggerAdditionalUpdates(AppCacheEventID trigger_event, |
337 AppCacheUpdateJob* update) { | 338 AppCacheUpdateJob* update) { |
338 start_update_trigger_ = trigger_event; | 339 start_update_trigger_ = trigger_event; |
339 update_ = update; | 340 update_ = update; |
340 } | 341 } |
341 | 342 |
342 void AdditionalUpdateHost(AppCacheHost* host) { | 343 void AdditionalUpdateHost(AppCacheHost* host) { |
343 update_hosts_.push_back(host); | 344 update_hosts_.push_back(host); |
344 } | 345 } |
345 | 346 |
346 typedef std::vector<int> HostIds; | 347 typedef std::vector<int> HostIds; |
347 typedef std::pair<HostIds, EventID> RaisedEvent; | 348 typedef std::pair<HostIds, AppCacheEventID> RaisedEvent; |
348 typedef std::vector<RaisedEvent> RaisedEvents; | 349 typedef std::vector<RaisedEvent> RaisedEvents; |
349 RaisedEvents raised_events_; | 350 RaisedEvents raised_events_; |
350 std::string error_message_; | 351 std::string error_message_; |
351 | 352 |
352 // Set the expected events if verification needs to happen asynchronously. | 353 // Set the expected events if verification needs to happen asynchronously. |
353 RaisedEvents expected_events_; | 354 RaisedEvents expected_events_; |
354 std::string expected_error_message_; | 355 std::string expected_error_message_; |
355 | 356 |
356 bool ignore_progress_events_; | 357 bool ignore_progress_events_; |
357 | 358 |
358 bool verify_progress_events_; | 359 bool verify_progress_events_; |
359 int last_progress_total_; | 360 int last_progress_total_; |
360 int last_progress_complete_; | 361 int last_progress_complete_; |
361 | 362 |
362 // Add ability for frontend to add master entries to an inprogress update. | 363 // Add ability for frontend to add master entries to an inprogress update. |
363 EventID start_update_trigger_; | 364 AppCacheEventID start_update_trigger_; |
364 AppCacheUpdateJob* update_; | 365 AppCacheUpdateJob* update_; |
365 std::vector<AppCacheHost*> update_hosts_; | 366 std::vector<AppCacheHost*> update_hosts_; |
366 }; | 367 }; |
367 | 368 |
368 // Helper factories to simulate redirected URL responses for tests. | 369 // Helper factories to simulate redirected URL responses for tests. |
369 class RedirectFactory : public net::URLRequestJobFactory::ProtocolHandler { | 370 class RedirectFactory : public net::URLRequestJobFactory::ProtocolHandler { |
370 public: | 371 public: |
371 virtual net::URLRequestJob* MaybeCreateJob( | 372 virtual net::URLRequestJob* MaybeCreateJob( |
372 net::URLRequest* request, | 373 net::URLRequest* request, |
373 net::NetworkDelegate* network_delegate) const OVERRIDE { | 374 net::NetworkDelegate* network_delegate) const OVERRIDE { |
(...skipping 3335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3709 | 3710 |
3710 TEST_F(AppCacheUpdateJobTest, CrossOriginHttpsSuccess) { | 3711 TEST_F(AppCacheUpdateJobTest, CrossOriginHttpsSuccess) { |
3711 RunTestOnIOThread(&AppCacheUpdateJobTest::CrossOriginHttpsSuccessTest); | 3712 RunTestOnIOThread(&AppCacheUpdateJobTest::CrossOriginHttpsSuccessTest); |
3712 } | 3713 } |
3713 | 3714 |
3714 TEST_F(AppCacheUpdateJobTest, CrossOriginHttpsDenied) { | 3715 TEST_F(AppCacheUpdateJobTest, CrossOriginHttpsDenied) { |
3715 RunTestOnIOThread(&AppCacheUpdateJobTest::CrossOriginHttpsDeniedTest); | 3716 RunTestOnIOThread(&AppCacheUpdateJobTest::CrossOriginHttpsDeniedTest); |
3716 } | 3717 } |
3717 | 3718 |
3718 } // namespace content | 3719 } // namespace content |
OLD | NEW |