1// Copyright (c) 2012 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#include "base/values.h"
6#include "components/sync_driver/device_info.h"
7
8namespace sync_driver {
9
10DeviceInfo::DeviceInfo(const std::string& guid,
11                       const std::string& client_name,
12                       const std::string& chrome_version,
13                       const std::string& sync_user_agent,
14                       const sync_pb::SyncEnums::DeviceType device_type,
15                       const std::string& signin_scoped_device_id)
16    : guid_(guid),
17      client_name_(client_name),
18      chrome_version_(chrome_version),
19      sync_user_agent_(sync_user_agent),
20      device_type_(device_type),
21      signin_scoped_device_id_(signin_scoped_device_id) {
22}
23
24DeviceInfo::~DeviceInfo() { }
25
26const std::string& DeviceInfo::guid() const {
27  return guid_;
28}
29
30const std::string& DeviceInfo::client_name() const {
31  return client_name_;
32}
33
34const std::string& DeviceInfo::chrome_version() const {
35  return chrome_version_;
36}
37
38const std::string& DeviceInfo::sync_user_agent() const {
39  return sync_user_agent_;
40}
41
42const std::string& DeviceInfo::public_id() const {
43  return public_id_;
44}
45
46sync_pb::SyncEnums::DeviceType DeviceInfo::device_type() const {
47  return device_type_;
48}
49
50const std::string& DeviceInfo::signin_scoped_device_id() const {
51  return signin_scoped_device_id_;
52}
53
54std::string DeviceInfo::GetOSString() const {
55  switch (device_type_) {
56    case sync_pb::SyncEnums_DeviceType_TYPE_WIN:
57      return "win";
58    case sync_pb::SyncEnums_DeviceType_TYPE_MAC:
59      return "mac";
60    case sync_pb::SyncEnums_DeviceType_TYPE_LINUX:
61      return "linux";
62    case sync_pb::SyncEnums_DeviceType_TYPE_CROS:
63      return "chrome_os";
64    case sync_pb::SyncEnums_DeviceType_TYPE_PHONE:
65    case sync_pb::SyncEnums_DeviceType_TYPE_TABLET:
66      // TODO(lipalani): crbug.com/170375. Add support for ios
67      // phones and tablets.
68      return "android";
69    default:
70      return "unknown";
71  }
72}
73
74std::string DeviceInfo::GetDeviceTypeString() const {
75  switch (device_type_) {
76    case sync_pb::SyncEnums_DeviceType_TYPE_WIN:
77    case sync_pb::SyncEnums_DeviceType_TYPE_MAC:
78    case sync_pb::SyncEnums_DeviceType_TYPE_LINUX:
79    case sync_pb::SyncEnums_DeviceType_TYPE_CROS:
80      return "desktop_or_laptop";
81    case sync_pb::SyncEnums_DeviceType_TYPE_PHONE:
82      return "phone";
83    case sync_pb::SyncEnums_DeviceType_TYPE_TABLET:
84      return "tablet";
85    default:
86      return "unknown";
87  }
88}
89
90bool DeviceInfo::Equals(const DeviceInfo& other) const {
91  return this->guid() == other.guid() &&
92         this->client_name() == other.client_name() &&
93         this->chrome_version() == other.chrome_version() &&
94         this->sync_user_agent() == other.sync_user_agent() &&
95         this->device_type() == other.device_type() &&
96         this->signin_scoped_device_id() == other.signin_scoped_device_id();
97}
98
99base::DictionaryValue* DeviceInfo::ToValue() {
100  base::DictionaryValue* value = new base::DictionaryValue();
101  value->SetString("name", client_name_);
102  value->SetString("id", public_id_);
103  value->SetString("os", GetOSString());
104  value->SetString("type", GetDeviceTypeString());
105  value->SetString("chromeVersion", chrome_version_);
106  return value;
107}
108
109void DeviceInfo::set_public_id(std::string id) {
110  public_id_ = id;
111}
112
113}  // namespace sync_driver
114