Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Side by Side Diff: content/browser/service_worker/service_worker_version.h

Issue 1187623006: Service Worker: Update stale workers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix DCHECK Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_VERSION_H_ 5 #ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_VERSION_H_
6 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_VERSION_H_ 6 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_VERSION_H_
7 7
8 #include <map> 8 #include <map>
9 #include <queue> 9 #include <queue>
10 #include <set> 10 #include <set>
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 335
336 private: 336 private:
337 friend class base::RefCounted<ServiceWorkerVersion>; 337 friend class base::RefCounted<ServiceWorkerVersion>;
338 friend class ServiceWorkerURLRequestJobTest; 338 friend class ServiceWorkerURLRequestJobTest;
339 friend class ServiceWorkerVersionBrowserTest; 339 friend class ServiceWorkerVersionBrowserTest;
340 340
341 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerControlleeRequestHandlerTest, 341 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerControlleeRequestHandlerTest,
342 ActivateWaitingVersion); 342 ActivateWaitingVersion);
343 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest, IdleTimeout); 343 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest, IdleTimeout);
344 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest, SetDevToolsAttached); 344 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest, SetDevToolsAttached);
345 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest, StaleUpdate_FreshWorker);
346 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest,
347 StaleUpdate_NonActiveWorker);
348 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest, StaleUpdate_StartWorker);
349 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest, StaleUpdate_RunningWorker);
350 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest,
351 StaleUpdate_DoNotDeferTimer);
345 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerWaitForeverInFetchTest, RequestTimeout); 352 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerWaitForeverInFetchTest, RequestTimeout);
346 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerFailToStartTest, Timeout); 353 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerFailToStartTest, Timeout);
347 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionBrowserTest, 354 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionBrowserTest,
348 TimeoutStartingWorker); 355 TimeoutStartingWorker);
349 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionBrowserTest, 356 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionBrowserTest,
350 TimeoutWorkerInEvent); 357 TimeoutWorkerInEvent);
351 358
352 class Metrics; 359 class Metrics;
353 class PingController; 360 class PingController;
354 361
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 512
506 bool OnRequestTimeout(const RequestInfo& info); 513 bool OnRequestTimeout(const RequestInfo& info);
507 void SetAllRequestTimes(const base::TimeTicks& ticks); 514 void SetAllRequestTimes(const base::TimeTicks& ticks);
508 515
509 // Returns the reason the embedded worker failed to start, using information 516 // Returns the reason the embedded worker failed to start, using information
510 // inaccessible to EmbeddedWorkerInstance. Returns |default_code| if it can't 517 // inaccessible to EmbeddedWorkerInstance. Returns |default_code| if it can't
511 // deduce a reason. 518 // deduce a reason.
512 ServiceWorkerStatusCode DeduceStartWorkerFailureReason( 519 ServiceWorkerStatusCode DeduceStartWorkerFailureReason(
513 ServiceWorkerStatusCode default_code); 520 ServiceWorkerStatusCode default_code);
514 521
522 // Sets |stale_time_| if this worker is stale, causing an update to eventually
523 // occur once the worker stops or is running too long.
524 void MarkIfStale();
525
526 void FoundRegistrationForUpdate(
527 ServiceWorkerStatusCode status,
528 const scoped_refptr<ServiceWorkerRegistration>& registration);
529
515 const int64 version_id_; 530 const int64 version_id_;
516 const int64 registration_id_; 531 const int64 registration_id_;
517 const GURL script_url_; 532 const GURL script_url_;
518 const GURL scope_; 533 const GURL scope_;
519 534
520 Status status_ = NEW; 535 Status status_ = NEW;
521 scoped_ptr<EmbeddedWorkerInstance> embedded_worker_; 536 scoped_ptr<EmbeddedWorkerInstance> embedded_worker_;
522 std::vector<StatusCallback> start_callbacks_; 537 std::vector<StatusCallback> start_callbacks_;
523 std::vector<StatusCallback> stop_callbacks_; 538 std::vector<StatusCallback> stop_callbacks_;
524 std::vector<base::Closure> status_change_callbacks_; 539 std::vector<base::Closure> status_change_callbacks_;
(...skipping 18 matching lines...) Expand all
543 base::ObserverList<Listener> listeners_; 558 base::ObserverList<Listener> listeners_;
544 ServiceWorkerScriptCacheMap script_cache_map_; 559 ServiceWorkerScriptCacheMap script_cache_map_;
545 base::OneShotTimer<ServiceWorkerVersion> update_timer_; 560 base::OneShotTimer<ServiceWorkerVersion> update_timer_;
546 561
547 // Starts running in StartWorker and continues until the worker is stopped. 562 // Starts running in StartWorker and continues until the worker is stopped.
548 base::RepeatingTimer<ServiceWorkerVersion> timeout_timer_; 563 base::RepeatingTimer<ServiceWorkerVersion> timeout_timer_;
549 // Holds the time the worker last started being considered idle. 564 // Holds the time the worker last started being considered idle.
550 base::TimeTicks idle_time_; 565 base::TimeTicks idle_time_;
551 // Holds the time that the outstanding StartWorker() request started. 566 // Holds the time that the outstanding StartWorker() request started.
552 base::TimeTicks start_time_; 567 base::TimeTicks start_time_;
568 // Holds the time the worker was detected as stale and needs updating. We try
569 // to update once the worker stops, but will also update if it stays alive too
570 // long.
571 base::TimeTicks stale_time_;
553 572
554 // New requests are added to |requests_| along with their entry in a callback 573 // New requests are added to |requests_| along with their entry in a callback
555 // map. The timeout timer periodically checks |requests_| for entries that 574 // map. The timeout timer periodically checks |requests_| for entries that
556 // should time out or have already been fulfilled (i.e., removed from the 575 // should time out or have already been fulfilled (i.e., removed from the
557 // callback map). 576 // callback map).
558 std::queue<RequestInfo> requests_; 577 std::queue<RequestInfo> requests_;
559 578
560 bool skip_waiting_ = false; 579 bool skip_waiting_ = false;
561 bool skip_recording_startup_time_ = false; 580 bool skip_recording_startup_time_ = false;
562 bool force_bypass_cache_for_scripts_ = false; 581 bool force_bypass_cache_for_scripts_ = false;
582 bool is_update_scheduled_ = false;
563 583
564 std::vector<int> pending_skip_waiting_requests_; 584 std::vector<int> pending_skip_waiting_requests_;
565 scoped_ptr<net::HttpResponseInfo> main_script_http_info_; 585 scoped_ptr<net::HttpResponseInfo> main_script_http_info_;
566 586
567 // The status when StartWorker was invoked. Used for UMA. 587 // The status when StartWorker was invoked. Used for UMA.
568 Status prestart_status_ = NEW; 588 Status prestart_status_ = NEW;
569 // If not OK, the reason that StartWorker failed. Used for 589 // If not OK, the reason that StartWorker failed. Used for
570 // running |start_callbacks_|. 590 // running |start_callbacks_|.
571 ServiceWorkerStatusCode start_worker_status_ = SERVICE_WORKER_OK; 591 ServiceWorkerStatusCode start_worker_status_ = SERVICE_WORKER_OK;
572 592
573 scoped_ptr<PingController> ping_controller_; 593 scoped_ptr<PingController> ping_controller_;
574 scoped_ptr<Metrics> metrics_; 594 scoped_ptr<Metrics> metrics_;
575 595
576 base::WeakPtrFactory<ServiceWorkerVersion> weak_factory_; 596 base::WeakPtrFactory<ServiceWorkerVersion> weak_factory_;
577 597
578 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersion); 598 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersion);
579 }; 599 };
580 600
581 } // namespace content 601 } // namespace content
582 602
583 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_VERSION_H_ 603 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_VERSION_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698