local_device_info_provider_impl.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_SYNC_GLUE_LOCAL_DEVICE_INFO_PROVIDER_IMPL_H_
6#define CHROME_BROWSER_SYNC_GLUE_LOCAL_DEVICE_INFO_PROVIDER_IMPL_H_
7
8#include "base/memory/weak_ptr.h"
9#include "components/sync_driver/device_info.h"
10#include "components/sync_driver/local_device_info_provider.h"
11
12namespace chrome {
13class VersionInfo;
14}
15
16namespace browser_sync {
17
18class LocalDeviceInfoProviderImpl
19    : public sync_driver::LocalDeviceInfoProvider {
20 public:
21  LocalDeviceInfoProviderImpl();
22  virtual ~LocalDeviceInfoProviderImpl();
23
24  // LocalDeviceInfoProvider implementation.
25  virtual const sync_driver::DeviceInfo* GetLocalDeviceInfo() const OVERRIDE;
26  virtual std::string GetLocalSyncCacheGUID() const OVERRIDE;
27  virtual void Initialize(
28      const std::string& cache_guid,
29      const std::string& signin_scoped_device_id) OVERRIDE;
30  virtual scoped_ptr<Subscription> RegisterOnInitializedCallback(
31    const base::Closure& callback) OVERRIDE;
32
33  // Helper to construct a user agent string (ASCII) suitable for use by
34  // the syncapi for any HTTP communication. This string is used by the sync
35  // backend for classifying client types when calculating statistics.
36  static std::string MakeUserAgentForSyncApi(
37      const chrome::VersionInfo& version_info);
38
39 private:
40  void InitializeContinuation(const std::string& guid,
41                              const std::string& signin_scoped_device_id,
42                              const std::string& session_name);
43
44  std::string cache_guid_;
45  scoped_ptr<sync_driver::DeviceInfo> local_device_info_;
46  base::CallbackList<void(void)> callback_list_;
47  base::WeakPtrFactory<LocalDeviceInfoProviderImpl> weak_factory_;
48
49  DISALLOW_COPY_AND_ASSIGN(LocalDeviceInfoProviderImpl);
50};
51
52}  // namespace browser_sync
53
54#endif  // CHROME_BROWSER_SYNC_GLUE_LOCAL_DEVICE_INFO_PROVIDER_IMPL_H_
55