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

Unified Diff: content/browser/service_worker/service_worker_registration.h

Issue 413063004: Service Worker: in Unregister, wait until after the active worker no longer controls a document (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: delete/restore from storage Created 6 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_registration.h
diff --git a/content/browser/service_worker/service_worker_registration.h b/content/browser/service_worker/service_worker_registration.h
index a8b0fa735a1db61b0e19935dc2d0557737199c6b..ba4076aeb0519779bcfb4e8d9cf965579efe5818 100644
--- a/content/browser/service_worker/service_worker_registration.h
+++ b/content/browser/service_worker/service_worker_registration.h
@@ -26,7 +26,8 @@ class ServiceWorkerVersion;
// being associated with the same registration. The class roughly
// corresponds to navigator.serviceWorker.registgration.
class CONTENT_EXPORT ServiceWorkerRegistration
- : NON_EXPORTED_BASE(public base::RefCounted<ServiceWorkerRegistration>) {
+ : NON_EXPORTED_BASE(public base::RefCounted<ServiceWorkerRegistration>),
+ public ServiceWorkerVersion::Listener {
public:
typedef base::Callback<void(ServiceWorkerStatusCode status)> StatusCallback;
@@ -59,6 +60,8 @@ class CONTENT_EXPORT ServiceWorkerRegistration
return installing_version_.get();
}
+ bool is_uninstalling() const { return is_uninstalling_; }
+
void AddListener(Listener* listener);
void RemoveListener(Listener* listener);
@@ -76,13 +79,26 @@ class CONTENT_EXPORT ServiceWorkerRegistration
// listeners via OnVersionAttributesChanged.
void UnsetVersion(ServiceWorkerVersion* version);
+ virtual void OnNoControllees(ServiceWorkerVersion* version) OVERRIDE;
+
// This method corresponds to the [[Activate]] algorithm described in
// the service worker specification. It's only valid to call this method
// when the registration's active version has no controllees.
void ActivateWaitingVersion(const StatusCallback& completion_callback);
+ // Triggers the [[ClearRegistration]] algorithm when the currently
+ // active version has no controllees. Deletes this registration
+ // from storage immediately.
+ void ClearWhenReady();
+
+ // Restores this registration in storage and cancels the pending
+ // [[ClearRegistration]] algorithm. If the algorithm was already triggered,
+ // does nothing.
+ void AbortPendingClear();
+
private:
- ~ServiceWorkerRegistration();
+ virtual ~ServiceWorkerRegistration();
+ void Clear();
friend class base::RefCounted<ServiceWorkerRegistration>;
void SetVersionInternal(
@@ -100,6 +116,7 @@ class CONTENT_EXPORT ServiceWorkerRegistration
const GURL pattern_;
const GURL script_url_;
const int64 registration_id_;
+ bool is_uninstalling_;
scoped_refptr<ServiceWorkerVersion> active_version_;
scoped_refptr<ServiceWorkerVersion> waiting_version_;
scoped_refptr<ServiceWorkerVersion> installing_version_;
@@ -108,5 +125,7 @@ class CONTENT_EXPORT ServiceWorkerRegistration
DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRegistration);
};
+
} // namespace content
+
#endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_REGISTRATION_H_

Powered by Google App Engine
This is Rietveld 408576698