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

Side by Side Diff: content/browser/service_worker/service_worker_registration.cc

Issue 360123002: ServiceWorker: some more groundwork in support of the update process (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 unified diff | Download patch | Annotate | Revision Log
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 #include "content/browser/service_worker/service_worker_registration.h" 5 #include "content/browser/service_worker/service_worker_registration.h"
6 6
7 #include "content/browser/service_worker/service_worker_context_core.h" 7 #include "content/browser/service_worker/service_worker_context_core.h"
8 #include "content/browser/service_worker/service_worker_info.h" 8 #include "content/browser/service_worker/service_worker_info.h"
9 #include "content/public/browser/browser_thread.h" 9 #include "content/public/browser/browser_thread.h"
10 10
11 namespace content { 11 namespace content {
12 12
13 namespace {
14
15 ServiceWorkerVersionInfo GetVersionInfo(ServiceWorkerVersion* version) {
16 if (!version)
17 return ServiceWorkerVersionInfo();
18 return version->GetInfo();
19 }
20
21 } // namespace
22
13 ServiceWorkerRegistration::ServiceWorkerRegistration( 23 ServiceWorkerRegistration::ServiceWorkerRegistration(
14 const GURL& pattern, 24 const GURL& pattern,
15 const GURL& script_url, 25 const GURL& script_url,
16 int64 registration_id, 26 int64 registration_id,
17 base::WeakPtr<ServiceWorkerContextCore> context) 27 base::WeakPtr<ServiceWorkerContextCore> context)
18 : pattern_(pattern), 28 : pattern_(pattern),
19 script_url_(script_url), 29 script_url_(script_url),
20 registration_id_(registration_id), 30 registration_id_(registration_id),
21 is_shutdown_(false),
22 context_(context) { 31 context_(context) {
23 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 32 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
24 DCHECK(context_); 33 DCHECK(context_);
25 context_->AddLiveRegistration(this); 34 context_->AddLiveRegistration(this);
26 } 35 }
27 36
28 ServiceWorkerRegistration::~ServiceWorkerRegistration() { 37 ServiceWorkerRegistration::~ServiceWorkerRegistration() {
29 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 38 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
30 if (context_) 39 if (context_)
31 context_->RemoveLiveRegistration(registration_id_); 40 context_->RemoveLiveRegistration(registration_id_);
32 } 41 }
33 42
43 void ServiceWorkerRegistration::AddListener(Listener* listener) {
44 listeners_.AddObserver(listener);
45 }
46
47 void ServiceWorkerRegistration::RemoveListener(Listener* listener) {
48 listeners_.RemoveObserver(listener);
49 }
50
34 ServiceWorkerRegistrationInfo ServiceWorkerRegistration::GetInfo() { 51 ServiceWorkerRegistrationInfo ServiceWorkerRegistration::GetInfo() {
35 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 52 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
36 return ServiceWorkerRegistrationInfo( 53 return ServiceWorkerRegistrationInfo(
37 script_url(), 54 script_url(),
38 pattern(), 55 pattern(),
39 registration_id_, 56 registration_id_,
40 active_version_ ? active_version_->GetInfo() : ServiceWorkerVersionInfo(), 57 GetVersionInfo(active_version_),
41 waiting_version_ ? waiting_version_->GetInfo() 58 GetVersionInfo(waiting_version_),
42 : ServiceWorkerVersionInfo()); 59 GetVersionInfo(installing_version_));
43 } 60 }
44 61
45 ServiceWorkerVersion* ServiceWorkerRegistration::GetNewestVersion() { 62 void ServiceWorkerRegistration::SetActiveVersion(
46 if (active_version()) 63 ServiceWorkerVersion* version) {
47 return active_version(); 64 SetVersionInternal(version, &active_version_,
48 return waiting_version(); 65 ChangedVersionAttributesMask::ACTIVE_VERSION);
49 } 66 }
50 67
51 void ServiceWorkerRegistration::ActivateWaitingVersion() { 68 void ServiceWorkerRegistration::SetWaitingVersion(
52 active_version_->SetStatus(ServiceWorkerVersion::REDUNDANT); 69 ServiceWorkerVersion* version) {
53 active_version_ = waiting_version_; 70 SetVersionInternal(version, &waiting_version_,
54 // TODO(kinuko): This should be set to ACTIVATING until activation finishes. 71 ChangedVersionAttributesMask::WAITING_VERSION);
55 active_version_->SetStatus(ServiceWorkerVersion::ACTIVE);
56 waiting_version_ = NULL;
57 } 72 }
58 73
74 void ServiceWorkerRegistration::SetInstallingVersion(
75 ServiceWorkerVersion* version) {
76 SetVersionInternal(version, &installing_version_,
77 ChangedVersionAttributesMask::INSTALLING_VERSION);
78 }
79
80 void ServiceWorkerRegistration::UnsetVersion(ServiceWorkerVersion* version) {
81 if (!version)
82 return;
83 ChangedVersionAttributesMask mask;
84 UnsetVersionInternal(version, &mask);
85 if (mask.changed()) {
86 ServiceWorkerRegistrationInfo info = GetInfo();
87 FOR_EACH_OBSERVER(Listener, listeners_,
88 OnVersionAttributesChanged(this, mask, info));
89 }
90 }
91
92 void ServiceWorkerRegistration::SetVersionInternal(
93 ServiceWorkerVersion* version,
94 scoped_refptr<ServiceWorkerVersion>* data_member,
95 int change_flag) {
96 if (version == data_member->get())
97 return;
98 scoped_refptr<ServiceWorkerVersion> protect(version);
99 ChangedVersionAttributesMask mask;
100 if (version)
101 UnsetVersionInternal(version, &mask);
102 *data_member = version;
103 mask.add(change_flag);
104 ServiceWorkerRegistrationInfo info = GetInfo();
105 FOR_EACH_OBSERVER(Listener, listeners_,
106 OnVersionAttributesChanged(this, mask, info));
107 }
108
109 void ServiceWorkerRegistration::UnsetVersionInternal(
110 ServiceWorkerVersion* version,
111 ChangedVersionAttributesMask* mask) {
112 DCHECK(version);
113 if (installing_version_ == version) {
114 installing_version_ = NULL;
115 mask->add(ChangedVersionAttributesMask::INSTALLING_VERSION);
116 } else if (waiting_version_ == version) {
117 waiting_version_ = NULL;
118 mask->add(ChangedVersionAttributesMask::WAITING_VERSION);
119 } else if (active_version_ == version) {
120 active_version_ = NULL;
121 mask->add(ChangedVersionAttributesMask::ACTIVE_VERSION);
122 }
123 }
124
125
59 } // namespace content 126 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698