diff options
Diffstat (limited to 'components/sync_driver/local_device_info_provider_impl.cc')
-rw-r--r-- | components/sync_driver/local_device_info_provider_impl.cc | 102 |
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 |