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

Side by Side Diff: content/child/background_sync/background_sync_provider.cc

Issue 1131943005: [Background Sync] Add proper error status to API calls and callbacks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Split RegisterCallback into two methods Created 5 years, 7 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/child/background_sync/background_sync_provider.h" 5 #include "content/child/background_sync/background_sync_provider.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "content/child/background_sync/background_sync_type_converters.h" 9 #include "content/child/background_sync/background_sync_type_converters.h"
10 #include "content/child/service_worker/web_service_worker_registration_impl.h" 10 #include "content/child/service_worker/web_service_worker_registration_impl.h"
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 DCHECK(callbacks); 86 DCHECK(callbacks);
87 int64 service_worker_registration_id = 87 int64 service_worker_registration_id =
88 GetServiceWorkerRegistrationId(service_worker_registration); 88 GetServiceWorkerRegistrationId(service_worker_registration);
89 scoped_ptr<blink::WebSyncRegistrationCallbacks> callbacksPtr(callbacks); 89 scoped_ptr<blink::WebSyncRegistrationCallbacks> callbacksPtr(callbacks);
90 90
91 // base::Unretained is safe here, as the mojo channel will be deleted (and 91 // base::Unretained is safe here, as the mojo channel will be deleted (and
92 // will wipe its callbacks) before 'this' is deleted. 92 // will wipe its callbacks) before 'this' is deleted.
93 GetBackgroundSyncServicePtr()->GetRegistration( 93 GetBackgroundSyncServicePtr()->GetRegistration(
94 mojo::ConvertTo<BackgroundSyncPeriodicity>(periodicity), tag.utf8(), 94 mojo::ConvertTo<BackgroundSyncPeriodicity>(periodicity), tag.utf8(),
95 service_worker_registration_id, 95 service_worker_registration_id,
96 base::Bind(&BackgroundSyncProvider::RegisterCallback, 96 base::Bind(&BackgroundSyncProvider::GetRegistrationCallback,
97 base::Unretained(this), base::Passed(callbacksPtr.Pass()))); 97 base::Unretained(this), base::Passed(callbacksPtr.Pass())));
98 } 98 }
99 99
100 void BackgroundSyncProvider::getRegistrations( 100 void BackgroundSyncProvider::getRegistrations(
101 blink::WebSyncRegistration::Periodicity periodicity, 101 blink::WebSyncRegistration::Periodicity periodicity,
102 blink::WebServiceWorkerRegistration* service_worker_registration, 102 blink::WebServiceWorkerRegistration* service_worker_registration,
103 blink::WebSyncGetRegistrationsCallbacks* callbacks) { 103 blink::WebSyncGetRegistrationsCallbacks* callbacks) {
104 DCHECK(service_worker_registration); 104 DCHECK(service_worker_registration);
105 DCHECK(callbacks); 105 DCHECK(callbacks);
106 int64 service_worker_registration_id = 106 int64 service_worker_registration_id =
107 GetServiceWorkerRegistrationId(service_worker_registration); 107 GetServiceWorkerRegistrationId(service_worker_registration);
108 scoped_ptr<blink::WebSyncGetRegistrationsCallbacks> callbacksPtr(callbacks); 108 scoped_ptr<blink::WebSyncGetRegistrationsCallbacks> callbacksPtr(callbacks);
109 109
110 // base::Unretained is safe here, as the mojo channel will be deleted (and 110 // base::Unretained is safe here, as the mojo channel will be deleted (and
111 // will wipe its callbacks) before 'this' is deleted. 111 // will wipe its callbacks) before 'this' is deleted.
112 GetBackgroundSyncServicePtr()->GetRegistrations( 112 GetBackgroundSyncServicePtr()->GetRegistrations(
113 mojo::ConvertTo<BackgroundSyncPeriodicity>(periodicity), 113 mojo::ConvertTo<BackgroundSyncPeriodicity>(periodicity),
114 service_worker_registration_id, 114 service_worker_registration_id,
115 base::Bind(&BackgroundSyncProvider::GetRegistrationsCallback, 115 base::Bind(&BackgroundSyncProvider::GetRegistrationsCallback,
116 base::Unretained(this), base::Passed(callbacksPtr.Pass()))); 116 base::Unretained(this), base::Passed(callbacksPtr.Pass())));
117 } 117 }
118 118
119 void BackgroundSyncProvider::RegisterCallback( 119 void BackgroundSyncProvider::RegisterCallback(
120 scoped_ptr<blink::WebSyncRegistrationCallbacks> callbacks, 120 scoped_ptr<blink::WebSyncRegistrationCallbacks> callbacks,
121 BackgroundSyncError error,
121 const SyncRegistrationPtr& options) { 122 const SyncRegistrationPtr& options) {
122 // TODO(iclelland): Pass through the various errors from the manager to here 123 // TODO(iclelland): Determine the correct error message to return in each case
123 // and handle them appropriately.
124 scoped_ptr<blink::WebSyncRegistration> result; 124 scoped_ptr<blink::WebSyncRegistration> result;
125 if (!options.is_null()) 125 switch (error) {
126 result = mojo::ConvertTo<scoped_ptr<blink::WebSyncRegistration>>(options); 126 case BACKGROUND_SYNC_ERROR_NONE:
127 127 if (!options.is_null())
128 callbacks->onSuccess(result.release()); 128 result =
129 mojo::ConvertTo<scoped_ptr<blink::WebSyncRegistration>>(options);
130 callbacks->onSuccess(result.release());
131 break;
132 case BACKGROUND_SYNC_ERROR_NOT_FOUND:
133 NOTREACHED();
134 break;
135 case BACKGROUND_SYNC_ERROR_STORAGE:
136 callbacks->onError(
137 new blink::WebSyncError(blink::WebSyncError::ErrorTypeUnknown,
138 "Background Sync is disabled."));
139 break;
140 case BACKGROUND_SYNC_ERROR_NO_SERVICE_WORKER:
141 callbacks->onError(
142 new blink::WebSyncError(blink::WebSyncError::ErrorTypeUnknown,
143 "No service worker is active."));
144 break;
145 }
129 } 146 }
130 147
131 void BackgroundSyncProvider::UnregisterCallback( 148 void BackgroundSyncProvider::UnregisterCallback(
132 scoped_ptr<blink::WebSyncUnregistrationCallbacks> callbacks, 149 scoped_ptr<blink::WebSyncUnregistrationCallbacks> callbacks,
133 bool success) { 150 BackgroundSyncError error) {
134 // TODO(iclelland): Pass through the various errors from the manager to here 151 // TODO(iclelland): Determine the correct error message to return in each case
135 // and handle them appropriately. 152 switch (error) {
136 if (success) { 153 case BACKGROUND_SYNC_ERROR_NONE:
137 callbacks->onSuccess(new bool(success)); 154 callbacks->onSuccess(new bool(true));
138 } else { 155 break;
139 callbacks->onError( 156 case BACKGROUND_SYNC_ERROR_NOT_FOUND:
140 new blink::WebSyncError(blink::WebSyncError::ErrorTypeUnknown, 157 callbacks->onSuccess(new bool(false));
141 "Sync registration does not exist")); 158 break;
159 case BACKGROUND_SYNC_ERROR_STORAGE:
160 callbacks->onError(
161 new blink::WebSyncError(blink::WebSyncError::ErrorTypeUnknown,
162 "Background Sync is disabled."));
163 break;
164 case BACKGROUND_SYNC_ERROR_NO_SERVICE_WORKER:
165 callbacks->onError(
166 new blink::WebSyncError(blink::WebSyncError::ErrorTypeUnknown,
167 "No service worker is active."));
168 break;
169 }
170 }
171
172 void BackgroundSyncProvider::GetRegistrationCallback(
173 scoped_ptr<blink::WebSyncRegistrationCallbacks> callbacks,
174 BackgroundSyncError error,
175 const SyncRegistrationPtr& options) {
176 // TODO(iclelland): Determine the correct error message to return in each case
177 scoped_ptr<blink::WebSyncRegistration> result;
178 switch (error) {
179 case BACKGROUND_SYNC_ERROR_NONE:
180 if (!options.is_null())
181 result =
182 mojo::ConvertTo<scoped_ptr<blink::WebSyncRegistration>>(options);
183 callbacks->onSuccess(result.release());
184 break;
185 case BACKGROUND_SYNC_ERROR_NOT_FOUND:
186 callbacks->onSuccess(nullptr);
187 break;
188 case BACKGROUND_SYNC_ERROR_STORAGE:
189 callbacks->onError(
190 new blink::WebSyncError(blink::WebSyncError::ErrorTypeUnknown,
191 "Background Sync is disabled."));
192 break;
193 case BACKGROUND_SYNC_ERROR_NO_SERVICE_WORKER:
194 callbacks->onError(
195 new blink::WebSyncError(blink::WebSyncError::ErrorTypeUnknown,
196 "No service worker is active."));
197 break;
142 } 198 }
143 } 199 }
144 200
145 void BackgroundSyncProvider::GetRegistrationsCallback( 201 void BackgroundSyncProvider::GetRegistrationsCallback(
146 scoped_ptr<blink::WebSyncGetRegistrationsCallbacks> callbacks, 202 scoped_ptr<blink::WebSyncGetRegistrationsCallbacks> callbacks,
203 BackgroundSyncError error,
147 const mojo::Array<SyncRegistrationPtr>& registrations) { 204 const mojo::Array<SyncRegistrationPtr>& registrations) {
148 // TODO(iclelland): Pass through the various errors from the manager to here 205 // TODO(iclelland): Determine the correct error message to return in each case
149 // and handle them appropriately. 206 blink::WebVector<blink::WebSyncRegistration*>* results;
150 blink::WebVector<blink::WebSyncRegistration*>* results = 207 switch (error) {
151 new blink::WebVector<blink::WebSyncRegistration*>(registrations.size()); 208 case BACKGROUND_SYNC_ERROR_NONE:
152 for (size_t i = 0; i < registrations.size(); ++i) { 209 results = new blink::WebVector<blink::WebSyncRegistration*>(
153 (*results)[i] = mojo::ConvertTo<scoped_ptr<blink::WebSyncRegistration>>( 210 registrations.size());
154 registrations[i]).release(); 211 for (size_t i = 0; i < registrations.size(); ++i) {
212 (*results)[i] = mojo::ConvertTo<scoped_ptr<blink::WebSyncRegistration>>(
213 registrations[i]).release();
214 }
215 callbacks->onSuccess(results);
216 case BACKGROUND_SYNC_ERROR_NOT_FOUND:
217 // This error should never be returned from
218 // BackgroundSyncManager::GetRegistrations
219 NOTREACHED();
220 break;
221 case BACKGROUND_SYNC_ERROR_STORAGE:
222 callbacks->onError(
223 new blink::WebSyncError(blink::WebSyncError::ErrorTypeUnknown,
224 "Background Sync is disabled."));
225 break;
226 case BACKGROUND_SYNC_ERROR_NO_SERVICE_WORKER:
227 callbacks->onError(
228 new blink::WebSyncError(blink::WebSyncError::ErrorTypeUnknown,
229 "No service worker is active."));
230 break;
155 } 231 }
156 callbacks->onSuccess(results);
157 } 232 }
158 233
159 BackgroundSyncServicePtr& 234 BackgroundSyncServicePtr&
160 BackgroundSyncProvider::GetBackgroundSyncServicePtr() { 235 BackgroundSyncProvider::GetBackgroundSyncServicePtr() {
161 if (!background_sync_service_.get()) 236 if (!background_sync_service_.get())
162 service_registry_->ConnectToRemoteService(&background_sync_service_); 237 service_registry_->ConnectToRemoteService(&background_sync_service_);
163 return background_sync_service_; 238 return background_sync_service_;
164 } 239 }
165 240
166 } // namespace content 241 } // namespace content
OLDNEW
« no previous file with comments | « content/child/background_sync/background_sync_provider.h ('k') | content/common/background_sync_service.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698