11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright (c) 2012 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/values.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/sync_driver/device_info.h"
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace sync_driver {
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDeviceInfo::DeviceInfo(const std::string& guid,
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       const std::string& client_name,
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       const std::string& chrome_version,
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       const std::string& sync_user_agent,
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       const sync_pb::SyncEnums::DeviceType device_type,
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       const std::string& signin_scoped_device_id)
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : guid_(guid),
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      client_name_(client_name),
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      chrome_version_(chrome_version),
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      sync_user_agent_(sync_user_agent),
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      device_type_(device_type),
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      signin_scoped_device_id_(signin_scoped_device_id) {
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDeviceInfo::~DeviceInfo() { }
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst std::string& DeviceInfo::guid() const {
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return guid_;
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst std::string& DeviceInfo::client_name() const {
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return client_name_;
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst std::string& DeviceInfo::chrome_version() const {
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return chrome_version_;
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst std::string& DeviceInfo::sync_user_agent() const {
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return sync_user_agent_;
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst std::string& DeviceInfo::public_id() const {
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return public_id_;
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccisync_pb::SyncEnums::DeviceType DeviceInfo::device_type() const {
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return device_type_;
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst std::string& DeviceInfo::signin_scoped_device_id() const {
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return signin_scoped_device_id_;
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::string DeviceInfo::GetOSString() const {
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  switch (device_type_) {
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case sync_pb::SyncEnums_DeviceType_TYPE_WIN:
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return "win";
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case sync_pb::SyncEnums_DeviceType_TYPE_MAC:
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return "mac";
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case sync_pb::SyncEnums_DeviceType_TYPE_LINUX:
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return "linux";
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case sync_pb::SyncEnums_DeviceType_TYPE_CROS:
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return "chrome_os";
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case sync_pb::SyncEnums_DeviceType_TYPE_PHONE:
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case sync_pb::SyncEnums_DeviceType_TYPE_TABLET:
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      // TODO(lipalani): crbug.com/170375. Add support for ios
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      // phones and tablets.
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return "android";
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    default:
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return "unknown";
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::string DeviceInfo::GetDeviceTypeString() const {
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  switch (device_type_) {
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case sync_pb::SyncEnums_DeviceType_TYPE_WIN:
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case sync_pb::SyncEnums_DeviceType_TYPE_MAC:
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case sync_pb::SyncEnums_DeviceType_TYPE_LINUX:
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case sync_pb::SyncEnums_DeviceType_TYPE_CROS:
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return "desktop_or_laptop";
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case sync_pb::SyncEnums_DeviceType_TYPE_PHONE:
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return "phone";
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    case sync_pb::SyncEnums_DeviceType_TYPE_TABLET:
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return "tablet";
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    default:
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return "unknown";
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool DeviceInfo::Equals(const DeviceInfo& other) const {
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return this->guid() == other.guid() &&
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci         this->client_name() == other.client_name() &&
931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci         this->chrome_version() == other.chrome_version() &&
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci         this->sync_user_agent() == other.sync_user_agent() &&
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci         this->device_type() == other.device_type() &&
961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci         this->signin_scoped_device_id() == other.signin_scoped_device_id();
971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibase::DictionaryValue* DeviceInfo::ToValue() {
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::DictionaryValue* value = new base::DictionaryValue();
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  value->SetString("name", client_name_);
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  value->SetString("id", public_id_);
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  value->SetString("os", GetOSString());
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  value->SetString("type", GetDeviceTypeString());
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  value->SetString("chromeVersion", chrome_version_);
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return value;
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DeviceInfo::set_public_id(std::string id) {
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  public_id_ = id;
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace sync_driver
114