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 #ifndef CHROME_BROWSER_SYNC_GLUE_DEVICE_INFO_H_ 6 #define CHROME_BROWSER_SYNC_GLUE_DEVICE_INFO_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/bind.h" 12 #include "sync/protocol/sync.pb.h" 13 14 namespace base { 15 class DictionaryValue; 16 } 17 18 namespace chrome { 19 class VersionInfo; 20 } 21 22 namespace browser_sync { 23 24 // A class that holds information regarding the properties of a device. 25 class DeviceInfo { 26 public: 27 DeviceInfo(const std::string& guid, 28 const std::string& client_name, 29 const std::string& chrome_version, 30 const std::string& sync_user_agent, 31 const sync_pb::SyncEnums::DeviceType device_type); 32 ~DeviceInfo(); 33 34 // Sync specific unique identifier for the device. Note if a device 35 // is wiped and sync is set up again this id WILL be different. 36 // The same device might have more than 1 guid if the device has multiple 37 // accounts syncing. 38 const std::string& guid() const; 39 40 // The host name for the client. 41 const std::string& client_name() const; 42 43 // Chrome version string. 44 const std::string& chrome_version() const; 45 46 // The user agent is the combination of OS type, chrome version and which 47 // channel of chrome(stable or beta). For more information see 48 // |DeviceInfo::MakeUserAgentForSyncApi|. 49 const std::string& sync_user_agent() const; 50 51 // Third party visible id for the device. See |public_id_| for more details. 52 const std::string& public_id() const; 53 54 // Device Type. 55 sync_pb::SyncEnums::DeviceType device_type() const; 56 57 // Gets the OS in string form. 58 std::string GetOSString() const; 59 60 // Gets the device type in string form. 61 std::string GetDeviceTypeString() const; 62 63 // Compares this object's fields with another's. 64 bool Equals(const DeviceInfo& other) const; 65 66 // Apps can set ids for a device that is meaningful to them but 67 // not unique enough so the user can be tracked. Exposing |guid| 68 // would lead to a stable unique id for a device which can potentially 69 // be used for tracking. 70 void set_public_id(std::string id); 71 72 // Converts the |DeviceInfo| values to a JS friendly DictionaryValue, 73 // which extension APIs can expose to third party apps. 74 base::DictionaryValue* ToValue(); 75 76 static sync_pb::SyncEnums::DeviceType GetLocalDeviceType(); 77 78 // Creates a |DeviceInfo| object representing the local device and passes 79 // it as parameter to the callback. 80 static void CreateLocalDeviceInfo( 81 const std::string& guid, 82 base::Callback<void(const DeviceInfo& local_info)> callback); 83 84 // Gets the local device name and passes it as a parameter to callback. 85 static void GetClientName( 86 base::Callback<void(const std::string& local_info)> callback); 87 88 // Helper to construct a user agent string (ASCII) suitable for use by 89 // the syncapi for any HTTP communication. This string is used by the sync 90 // backend for classifying client types when calculating statistics. 91 static std::string MakeUserAgentForSyncApi( 92 const chrome::VersionInfo& version_info); 93 94 private: 95 static void GetClientNameContinuation( 96 base::Callback<void(const std::string& local_info)> callback, 97 const std::string& session_name); 98 99 static void CreateLocalDeviceInfoContinuation( 100 const std::string& guid, 101 base::Callback<void(const DeviceInfo& local_info)> callback, 102 const std::string& session_name); 103 104 const std::string guid_; 105 106 const std::string client_name_; 107 108 const std::string chrome_version_; 109 110 const std::string sync_user_agent_; 111 112 const sync_pb::SyncEnums::DeviceType device_type_; 113 114 // Exposing |guid| would lead to a stable unique id for a device which 115 // can potentially be used for tracking. Public ids are privacy safe 116 // ids in that the same device will have different id for different apps 117 // and they are also reset when app/extension is uninstalled. 118 std::string public_id_; 119 120 DISALLOW_COPY_AND_ASSIGN(DeviceInfo); 121 }; 122 123 } // namespace browser_sync 124 125 #endif // CHROME_BROWSER_SYNC_GLUE_DEVICE_INFO_H_ 126