summaryrefslogtreecommitdiffstats
path: root/components/sync_driver/local_device_info_provider_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'components/sync_driver/local_device_info_provider_impl.cc')
-rw-r--r--components/sync_driver/local_device_info_provider_impl.cc102
1 files changed, 102 insertions, 0 deletions
diff --git a/components/sync_driver/local_device_info_provider_impl.cc b/components/sync_driver/local_device_info_provider_impl.cc
new file mode 100644
index 0000000..69abc98
--- /dev/null
+++ b/components/sync_driver/local_device_info_provider_impl.cc
@@ -0,0 +1,102 @@
+// Copyright 2014 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 "components/sync_driver/local_device_info_provider_impl.h"
+
+#include "base/bind.h"
+#include "base/task_runner.h"
+#include "components/sync_driver/sync_util.h"
+#include "sync/util/get_session_name.h"
+
+namespace browser_sync {
+
+namespace {
+
+sync_pb::SyncEnums::DeviceType GetLocalDeviceType(bool is_tablet) {
+#if defined(OS_CHROMEOS)
+ return sync_pb::SyncEnums_DeviceType_TYPE_CROS;
+#elif defined(OS_LINUX)
+ return sync_pb::SyncEnums_DeviceType_TYPE_LINUX;
+#elif defined(OS_MACOSX)
+ return sync_pb::SyncEnums_DeviceType_TYPE_MAC;
+#elif defined(OS_WIN)
+ return sync_pb::SyncEnums_DeviceType_TYPE_WIN;
+#elif defined(OS_ANDROID)
+ return is_tablet ? sync_pb::SyncEnums_DeviceType_TYPE_TABLET
+ : sync_pb::SyncEnums_DeviceType_TYPE_PHONE;
+#else
+ return sync_pb::SyncEnums_DeviceType_TYPE_OTHER;
+#endif
+}
+
+} // namespace
+
+LocalDeviceInfoProviderImpl::LocalDeviceInfoProviderImpl(
+ version_info::Channel channel,
+ const std::string& version,
+ bool is_tablet)
+ : channel_(channel),
+ version_(version),
+ is_tablet_(is_tablet),
+ weak_factory_(this) {}
+
+LocalDeviceInfoProviderImpl::~LocalDeviceInfoProviderImpl() {}
+
+const sync_driver::DeviceInfo* LocalDeviceInfoProviderImpl::GetLocalDeviceInfo()
+ const {
+ return local_device_info_.get();
+}
+
+std::string LocalDeviceInfoProviderImpl::GetSyncUserAgent() const {
+#if defined(OS_CHROMEOS)
+ return MakeUserAgentForSync("CROS ", channel_);
+#elif defined(OS_ANDROID)
+ if (is_tablet_) {
+ return MakeUserAgentForSync("ANDROID-TABLET ", channel_);
+ } else {
+ return MakeUserAgentForSync("ANDROID-PHONE ", channel_);
+ }
+#elif !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
+ return MakeDesktopUserAgentForSync(channel_);
+#endif
+}
+
+std::string LocalDeviceInfoProviderImpl::GetLocalSyncCacheGUID() const {
+ return cache_guid_;
+}
+
+scoped_ptr<sync_driver::LocalDeviceInfoProvider::Subscription>
+LocalDeviceInfoProviderImpl::RegisterOnInitializedCallback(
+ const base::Closure& callback) {
+ DCHECK(!local_device_info_.get());
+ return callback_list_.Add(callback);
+}
+
+void LocalDeviceInfoProviderImpl::Initialize(
+ const std::string& cache_guid,
+ const std::string& signin_scoped_device_id,
+ const scoped_refptr<base::TaskRunner>& blocking_task_runner) {
+ DCHECK(!cache_guid.empty());
+ cache_guid_ = cache_guid;
+
+ syncer::GetSessionName(
+ blocking_task_runner,
+ base::Bind(&LocalDeviceInfoProviderImpl::InitializeContinuation,
+ weak_factory_.GetWeakPtr(), cache_guid,
+ signin_scoped_device_id));
+}
+
+void LocalDeviceInfoProviderImpl::InitializeContinuation(
+ const std::string& guid,
+ const std::string& signin_scoped_device_id,
+ const std::string& session_name) {
+ local_device_info_.reset(new sync_driver::DeviceInfo(
+ guid, session_name, version_, GetSyncUserAgent(),
+ GetLocalDeviceType(is_tablet_), signin_scoped_device_id));
+
+ // Notify observers.
+ callback_list_.Notify();
+}
+
+} // namespace browser_sync