15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef COMPONENTS_SYNC_DRIVER_DEVICE_INFO_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define COMPONENTS_SYNC_DRIVER_DEVICE_INFO_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/callback.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/sync.pb.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace base {
15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass DictionaryValue;
16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace sync_driver {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A class that holds information regarding the properties of a device.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DeviceInfo {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DeviceInfo(const std::string& guid,
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch             const std::string& client_name,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             const std::string& chrome_version,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             const std::string& sync_user_agent,
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)             const sync_pb::SyncEnums::DeviceType device_type,
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)             const std::string& signin_scoped_device_id);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~DeviceInfo();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Sync specific unique identifier for the device. Note if a device
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // is wiped and sync is set up again this id WILL be different.
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // The same device might have more than 1 guid if the device has multiple
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // accounts syncing.
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  const std::string& guid() const;
367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // The host name for the client.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& client_name() const;
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Chrome version string.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& chrome_version() const;
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // The user agent is the combination of OS type, chrome version and which
447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // channel of chrome(stable or beta). For more information see
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // |LocalDeviceInfoProviderImpl::MakeUserAgentForSyncApi|.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& sync_user_agent() const;
477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Third party visible id for the device. See |public_id_| for more details.
49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  const std::string& public_id() const;
50a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Device Type.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_pb::SyncEnums::DeviceType device_type() const;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Device_id that is stable until user signs out. This device_id is used for
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // annotating login scoped refresh token.
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const std::string& signin_scoped_device_id() const;
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Gets the OS in string form.
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  std::string GetOSString() const;
6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Gets the device type in string form.
6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  std::string GetDeviceTypeString() const;
6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Compares this object's fields with another's.
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool Equals(const DeviceInfo& other) const;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Apps can set ids for a device that is meaningful to them but
68ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // not unique enough so the user can be tracked. Exposing |guid|
69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // would lead to a stable unique id for a device which can potentially
70ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // be used for tracking.
71a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void set_public_id(std::string id);
72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
73ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Converts the |DeviceInfo| values to a JS friendly DictionaryValue,
74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // which extension APIs can expose to third party apps.
75ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  base::DictionaryValue* ToValue();
76ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  const std::string guid_;
797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string client_name_;
817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string chrome_version_;
837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string sync_user_agent_;
857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const sync_pb::SyncEnums::DeviceType device_type_;
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::string signin_scoped_device_id_;
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
90a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Exposing |guid| would lead to a stable unique id for a device which
91a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // can potentially be used for tracking. Public ids are privacy safe
92a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // ids in that the same device will have different id for different apps
93a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // and they are also reset when app/extension is uninstalled.
94ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  std::string public_id_;
95ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(DeviceInfo);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace sync_driver
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // COMPONENTS_SYNC_DRIVER_DEVICE_INFO_H_
102