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