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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_SYNC_GLUE_DEVICE_INFO_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_SYNC_GLUE_DEVICE_INFO_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/sync.pb.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace base { 15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass DictionaryValue; 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VersionInfo; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace browser_sync { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A class that holds information regarding the properties of a device. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DeviceInfo { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DeviceInfo(const std::string& guid, 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& client_name, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& chrome_version, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& sync_user_agent, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sync_pb::SyncEnums::DeviceType device_type); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~DeviceInfo(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Sync specific unique identifier for the device. Note if a device 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // is wiped and sync is set up again this id WILL be different. 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // The same device might have more than 1 guid if the device has multiple 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // accounts syncing. 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& guid() const; 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // The host name for the client. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& client_name() const; 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Chrome version string. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& chrome_version() const; 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // The user agent is the combination of OS type, chrome version and which 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // channel of chrome(stable or beta). For more information see 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // |DeviceInfo::MakeUserAgentForSyncApi|. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& sync_user_agent() const; 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Third party visible id for the device. See |public_id_| for more details. 52a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const std::string& public_id() const; 53a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Device Type. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::SyncEnums::DeviceType device_type() const; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Compares this object's fields with another's. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Equals(const DeviceInfo& other) const; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 60ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Apps can set ids for a device that is meaningful to them but 61ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // not unique enough so the user can be tracked. Exposing |guid| 62ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // would lead to a stable unique id for a device which can potentially 63ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // be used for tracking. 64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) void set_public_id(std::string id); 65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 66ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Converts the |DeviceInfo| values to a JS friendly DictionaryValue, 67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // which extension APIs can expose to third party apps. 68ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::DictionaryValue* ToValue(); 69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static sync_pb::SyncEnums::DeviceType GetLocalDeviceType(); 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Creates a |DeviceInfo| object representing the local device and passes 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // it as parameter to the callback. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void CreateLocalDeviceInfo( 757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& guid, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Callback<void(const DeviceInfo& local_info)> callback); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Gets the local device name and passes it as a parameter to callback. 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static void GetClientName( 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Callback<void(const std::string& local_info)> callback); 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper to construct a user agent string (ASCII) suitable for use by 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the syncapi for any HTTP communication. This string is used by the sync 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // backend for classifying client types when calculating statistics. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string MakeUserAgentForSyncApi( 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const chrome::VersionInfo& version_info); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static void GetClientNameContinuation( 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Callback<void(const std::string& local_info)> callback, 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& session_name); 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void CreateLocalDeviceInfoContinuation( 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& guid, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Callback<void(const DeviceInfo& local_info)> callback, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& session_name); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string guid_; 997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string client_name_; 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string chrome_version_; 1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string sync_user_agent_; 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sync_pb::SyncEnums::DeviceType device_type_; 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 108a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Exposing |guid| would lead to a stable unique id for a device which 109a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // can potentially be used for tracking. Public ids are privacy safe 110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // ids in that the same device will have different id for different apps 111a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // and they are also reset when app/extension is uninstalled. 112ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string public_id_; 113ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DeviceInfo); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace browser_sync 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_SYNC_GLUE_DEVICE_INFO_H_ 120