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

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

Issue 2119143002: service worker: Wait for inflight requests before activating (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: reg Created 4 years, 5 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 <stdint.h> 8 #include <stdint.h>
9 9
10 #include <functional> 10 #include <functional>
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 int source_identifier, 102 int source_identifier,
103 int message_level, 103 int message_level,
104 const base::string16& message, 104 const base::string16& message,
105 int line_number, 105 int line_number,
106 const GURL& source_url) {} 106 const GURL& source_url) {}
107 virtual void OnControlleeAdded(ServiceWorkerVersion* version, 107 virtual void OnControlleeAdded(ServiceWorkerVersion* version,
108 ServiceWorkerProviderHost* provider_host) {} 108 ServiceWorkerProviderHost* provider_host) {}
109 virtual void OnControlleeRemoved(ServiceWorkerVersion* version, 109 virtual void OnControlleeRemoved(ServiceWorkerVersion* version,
110 ServiceWorkerProviderHost* provider_host) { 110 ServiceWorkerProviderHost* provider_host) {
111 } 111 }
112 // Fires when a version transitions from having a controllee to not.
113 virtual void OnNoControllees(ServiceWorkerVersion* version) {} 112 virtual void OnNoControllees(ServiceWorkerVersion* version) {}
113 virtual void OnNoWork(ServiceWorkerVersion* version) {}
114 virtual void OnCachedMetadataUpdated(ServiceWorkerVersion* version) {} 114 virtual void OnCachedMetadataUpdated(ServiceWorkerVersion* version) {}
115 115
116 protected: 116 protected:
117 virtual ~Listener() {} 117 virtual ~Listener() {}
118 }; 118 };
119 119
120 ServiceWorkerVersion(ServiceWorkerRegistration* registration, 120 ServiceWorkerVersion(ServiceWorkerRegistration* registration,
121 const GURL& script_url, 121 const GURL& script_url,
122 int64_t version_id, 122 int64_t version_id,
123 base::WeakPtr<ServiceWorkerContextCore> context); 123 base::WeakPtr<ServiceWorkerContextCore> context);
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 // RegisterRequestCallback/DispatchEvent is not needed, this method can be 267 // RegisterRequestCallback/DispatchEvent is not needed, this method can be
268 // used instead. The ResponseMessage must consist 268 // used instead. The ResponseMessage must consist
269 // of just a request_id and a blink::WebServiceWorkerEventResult field. The 269 // of just a request_id and a blink::WebServiceWorkerEventResult field. The
270 // result is converted to a ServiceWorkerStatusCode and passed to the error 270 // result is converted to a ServiceWorkerStatusCode and passed to the error
271 // handler associated with the request. Additionally this methods calls 271 // handler associated with the request. Additionally this methods calls
272 // FinishRequest before passing the reply to the callback. 272 // FinishRequest before passing the reply to the callback.
273 template <typename ResponseMessage> 273 template <typename ResponseMessage>
274 void DispatchSimpleEvent(int request_id, const IPC::Message& message); 274 void DispatchSimpleEvent(int request_id, const IPC::Message& message);
275 275
276 // Adds and removes |provider_host| as a controllee of this ServiceWorker. 276 // Adds and removes |provider_host| as a controllee of this ServiceWorker.
277 // A potential controllee is a host having the version as its .installing
278 // or .waiting version.
279 void AddControllee(ServiceWorkerProviderHost* provider_host); 277 void AddControllee(ServiceWorkerProviderHost* provider_host);
280 void RemoveControllee(ServiceWorkerProviderHost* provider_host); 278 void RemoveControllee(ServiceWorkerProviderHost* provider_host);
281 279
282 // Returns if it has controllee. 280 // Returns if it has controllee.
283 bool HasControllee() const { return !controllee_map_.empty(); } 281 bool HasControllee() const { return !controllee_map_.empty(); }
284 std::map<std::string, ServiceWorkerProviderHost*> controllee_map() { 282 std::map<std::string, ServiceWorkerProviderHost*> controllee_map() {
285 return controllee_map_; 283 return controllee_map_;
286 } 284 }
287 285
288 base::WeakPtr<ServiceWorkerContextCore> context() const { return context_; } 286 base::WeakPtr<ServiceWorkerContextCore> context() const { return context_; }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 // Sets the HttpResponseInfo used to load the main script. 335 // Sets the HttpResponseInfo used to load the main script.
338 // This HttpResponseInfo will be used for all responses sent back from the 336 // This HttpResponseInfo will be used for all responses sent back from the
339 // service worker, as the effective security of these responses is equivalent 337 // service worker, as the effective security of these responses is equivalent
340 // to that of the ServiceWorker. 338 // to that of the ServiceWorker.
341 void SetMainScriptHttpResponseInfo(const net::HttpResponseInfo& http_info); 339 void SetMainScriptHttpResponseInfo(const net::HttpResponseInfo& http_info);
342 const net::HttpResponseInfo* GetMainScriptHttpResponseInfo(); 340 const net::HttpResponseInfo* GetMainScriptHttpResponseInfo();
343 341
344 // Simulate ping timeout. Should be used for tests-only. 342 // Simulate ping timeout. Should be used for tests-only.
345 void SimulatePingTimeoutForTesting(); 343 void SimulatePingTimeoutForTesting();
346 344
345 // Returns true if the service worker has work to do: it has pending
346 // requests, in-progress streaming URLRequestJobs, or pending start callbacks.
347 bool HasWork() const;
348
347 private: 349 private:
348 friend class base::RefCounted<ServiceWorkerVersion>; 350 friend class base::RefCounted<ServiceWorkerVersion>;
349 friend class ServiceWorkerMetrics; 351 friend class ServiceWorkerMetrics;
350 friend class ServiceWorkerReadFromCacheJobTest; 352 friend class ServiceWorkerReadFromCacheJobTest;
351 friend class ServiceWorkerStallInStoppingTest; 353 friend class ServiceWorkerStallInStoppingTest;
352 friend class ServiceWorkerURLRequestJobTest; 354 friend class ServiceWorkerURLRequestJobTest;
353 friend class ServiceWorkerVersionBrowserTest; 355 friend class ServiceWorkerVersionBrowserTest;
354 friend class ServiceWorkerVersionTest; 356 friend class ServiceWorkerVersionTest;
355 357
356 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerControlleeRequestHandlerTest, 358 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerControlleeRequestHandlerTest,
(...skipping 18 matching lines...) Expand all
375 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerStallInStoppingTest, DetachThenStart); 377 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerStallInStoppingTest, DetachThenStart);
376 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerStallInStoppingTest, DetachThenRestart); 378 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerStallInStoppingTest, DetachThenRestart);
377 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest, 379 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest,
378 RegisterForeignFetchScopes); 380 RegisterForeignFetchScopes);
379 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest, RequestCustomizedTimeout); 381 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest, RequestCustomizedTimeout);
380 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest, 382 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest,
381 RequestCustomizedTimeoutKill); 383 RequestCustomizedTimeoutKill);
382 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest, MixedRequestTimeouts); 384 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerVersionTest, MixedRequestTimeouts);
383 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerURLRequestJobTest, EarlyResponse); 385 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerURLRequestJobTest, EarlyResponse);
384 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerURLRequestJobTest, CancelRequest); 386 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerURLRequestJobTest, CancelRequest);
387 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerActivationTest, SkipWaiting);
388 FRIEND_TEST_ALL_PREFIXES(ServiceWorkerActivationTest,
389 SkipWaitingWithInflightRequest);
385 390
386 class Metrics; 391 class Metrics;
387 class PingController; 392 class PingController;
388 393
389 struct RequestInfo { 394 struct RequestInfo {
390 RequestInfo(int id, 395 RequestInfo(int id,
391 ServiceWorkerMetrics::EventType event_type, 396 ServiceWorkerMetrics::EventType event_type,
392 const base::TimeTicks& expiration, 397 const base::TimeTicks& expiration,
393 TimeoutBehavior timeout_behavior); 398 TimeoutBehavior timeout_behavior);
394 ~RequestInfo(); 399 ~RequestInfo();
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 void OnTimeoutTimer(); 599 void OnTimeoutTimer();
595 void SetTimeoutTimerInterval(base::TimeDelta interval); 600 void SetTimeoutTimerInterval(base::TimeDelta interval);
596 601
597 // Called by PingController for ping protocol. 602 // Called by PingController for ping protocol.
598 ServiceWorkerStatusCode PingWorker(); 603 ServiceWorkerStatusCode PingWorker();
599 void OnPingTimeout(); 604 void OnPingTimeout();
600 605
601 // Stops the worker if it is idle (has no in-flight requests) or timed out 606 // Stops the worker if it is idle (has no in-flight requests) or timed out
602 // ping. 607 // ping.
603 void StopWorkerIfIdle(); 608 void StopWorkerIfIdle();
604 bool HasInflightRequests() const;
605 609
606 // RecordStartWorkerResult is added as a start callback by StartTimeoutTimer 610 // RecordStartWorkerResult is added as a start callback by StartTimeoutTimer
607 // and records metrics about startup. 611 // and records metrics about startup.
608 void RecordStartWorkerResult(ServiceWorkerMetrics::EventType purpose, 612 void RecordStartWorkerResult(ServiceWorkerMetrics::EventType purpose,
609 Status prestart_status, 613 Status prestart_status,
610 int trace_id, 614 int trace_id,
611 bool is_browser_startup_complete, 615 bool is_browser_startup_complete,
612 ServiceWorkerStatusCode status); 616 ServiceWorkerStatusCode status);
613 617
614 bool MaybeTimeOutRequest(const RequestInfo& info); 618 bool MaybeTimeOutRequest(const RequestInfo& info);
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 794
791 // At this point |this| can have been deleted, so don't do anything other 795 // At this point |this| can have been deleted, so don't do anything other
792 // than returning. 796 // than returning.
793 797
794 return true; 798 return true;
795 } 799 }
796 800
797 } // namespace content 801 } // namespace content
798 802
799 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_VERSION_H_ 803 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_VERSION_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698