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

Unified Diff: content/child/background_sync/background_sync_provider.cc

Issue 1104283002: [Background Sync] Add renderer code to interface between JS API and back-end service (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bgsync-mojo
Patch Set: Make CallbackThreadAdapter own the wrapped callbacks 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 side-by-side diff with in-line comments
Download patch
Index: content/child/background_sync/background_sync_provider.cc
diff --git a/content/child/background_sync/background_sync_provider.cc b/content/child/background_sync/background_sync_provider.cc
new file mode 100644
index 0000000000000000000000000000000000000000..06156420be91410231aa37d2c662a0e62c300af2
--- /dev/null
+++ b/content/child/background_sync/background_sync_provider.cc
@@ -0,0 +1,153 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/child/background_sync/background_sync_provider.h"
+
+#include "base/bind.h"
+#include "base/memory/scoped_ptr.h"
+#include "content/child/background_sync/background_sync_type_converters.h"
+#include "content/child/service_worker/web_service_worker_registration_impl.h"
+#include "content/child/worker_task_runner.h"
+#include "content/public/common/service_registry.h"
+#include "third_party/WebKit/public/platform/modules/background_sync/WebSyncError.h"
+#include "third_party/WebKit/public/platform/modules/background_sync/WebSyncRegistration.h"
+
+namespace content {
+namespace {
+
+// Returns the id of the given |service_worker_registration|, which
+// is only available on the implementation of the interface.
+int64 GetServiceWorkerRegistrationId(
+ blink::WebServiceWorkerRegistration* service_worker_registration) {
+ return static_cast<WebServiceWorkerRegistrationImpl*>(
+ service_worker_registration)->registration_id();
+}
+
+} // namespace
+
+BackgroundSyncProvider::BackgroundSyncProvider(
+ ServiceRegistry* service_registry)
+ : service_registry_(service_registry) {
+ DCHECK(service_registry);
+}
+
+BackgroundSyncProvider::~BackgroundSyncProvider() {
+}
+
+void BackgroundSyncProvider::registerBackgroundSync(
+ const blink::WebSyncRegistration* options,
+ blink::WebServiceWorkerRegistration* service_worker_registration,
+ blink::WebSyncRegistrationCallbacks* callbacks) {
+ DCHECK(options);
+ DCHECK(service_worker_registration);
+ DCHECK(callbacks);
+ int64 service_worker_registration_id =
+ GetServiceWorkerRegistrationId(service_worker_registration);
+
+ GetBackgroundSyncServicePtr()->Register(
+ mojo::ConvertTo<SyncRegistrationPtr>(*options),
+ service_worker_registration_id,
+ base::Bind(&BackgroundSyncProvider::RegisterCallback,
+ base::Unretained(this),callbacks));
+}
+
+void BackgroundSyncProvider::unregisterBackgroundSync(
+ blink::WebSyncRegistration::Periodicity periodicity,
+ int64_t id, const blink::WebString& tag,
+ blink::WebServiceWorkerRegistration* service_worker_registration,
+ blink::WebSyncUnregistrationCallbacks* callbacks) {
+ DCHECK(service_worker_registration);
+ DCHECK(callbacks);
+ int64 service_worker_registration_id =
+ GetServiceWorkerRegistrationId(service_worker_registration);
+
+ GetBackgroundSyncServicePtr()->Unregister(
+ mojo::ConvertTo<BackgroundSyncPeriodicity>(periodicity), id,
+ tag.utf8(), service_worker_registration_id,
+ base::Bind(&BackgroundSyncProvider::UnregisterCallback,
+ base::Unretained(this),callbacks));
+}
+
+void BackgroundSyncProvider::getRegistration(
+ blink::WebSyncRegistration::Periodicity periodicity,
+ const blink::WebString& tag,
+ blink::WebServiceWorkerRegistration* service_worker_registration,
+ blink::WebSyncRegistrationCallbacks* callbacks) {
+ DCHECK(service_worker_registration);
+ DCHECK(callbacks);
+ int64 service_worker_registration_id =
+ GetServiceWorkerRegistrationId(service_worker_registration);
+
+ GetBackgroundSyncServicePtr()->GetRegistration(
+ mojo::ConvertTo<BackgroundSyncPeriodicity>(periodicity),
+ tag.utf8(), service_worker_registration_id,
+ base::Bind(&BackgroundSyncProvider::RegisterCallback,
+ base::Unretained(this),callbacks));
+}
+
+void BackgroundSyncProvider::getRegistrations(
+ blink::WebSyncRegistration::Periodicity periodicity,
+ blink::WebServiceWorkerRegistration* service_worker_registration,
+ blink::WebSyncGetRegistrationsCallbacks* callbacks) {
+ DCHECK(service_worker_registration);
+ DCHECK(callbacks);
+ int64 service_worker_registration_id =
+ GetServiceWorkerRegistrationId(service_worker_registration);
+
+ GetBackgroundSyncServicePtr()->GetRegistrations(
+ mojo::ConvertTo<BackgroundSyncPeriodicity>(periodicity),
+ service_worker_registration_id,
+ base::Bind(&BackgroundSyncProvider::GetRegistrationsCallback,
+ base::Unretained(this),
+ callbacks));
+}
+
+void BackgroundSyncProvider::RegisterCallback(
+ blink::WebSyncRegistrationCallbacks* callbacks,
+ const SyncRegistrationPtr &options) {
+ // TODO(iclelland): Pass through the various errors from the manager to here
+ // and handle them appropriately.
+ scoped_ptr<blink::WebSyncRegistration> result;
+ if (!options.is_null())
+ result = mojo::ConvertTo<scoped_ptr<blink::WebSyncRegistration>>(options);
+
+ callbacks->onSuccess(result.release());
+}
+
+void BackgroundSyncProvider::UnregisterCallback(
+ blink::WebSyncUnregistrationCallbacks *callbacks,
+ bool success) {
+ // TODO(iclelland): Pass through the various errors from the manager to here
+ // and handle them appropriately.
+ if (success) {
+ callbacks->onSuccess(new bool(success));
+ } else {
+ callbacks->onError(new blink::WebSyncError(
+ blink::WebSyncError::ErrorTypeUnknown,
+ "Sync registration does not exist"));
+ }
+}
+
+void BackgroundSyncProvider::GetRegistrationsCallback(
+ blink::WebSyncGetRegistrationsCallbacks* callbacks,
+ const mojo::Array<SyncRegistrationPtr> &registrations) {
+ // TODO(iclelland): Pass through the various errors from the manager to here
+ // and handle them appropriately.
+ blink::WebVector<blink::WebSyncRegistration*>* results =
+ new blink::WebVector<blink::WebSyncRegistration*>(registrations.size());
+ for (size_t i=0; i < registrations.size(); ++i) {
+ (*results)[i] = mojo::ConvertTo<scoped_ptr<blink::WebSyncRegistration>>(
+ registrations[i]).release();
+ }
+ callbacks->onSuccess(results);
+}
+
+BackgroundSyncServicePtr&
+ BackgroundSyncProvider::GetBackgroundSyncServicePtr() {
+ if (!background_sync_service_.get())
+ service_registry_->ConnectToRemoteService(&background_sync_service_);
+ return background_sync_service_;
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698