// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_SYNC_GLUE_DEVICE_INFO_H_ #define CHROME_BROWSER_SYNC_GLUE_DEVICE_INFO_H_ #include <string> #include "base/basictypes.h" #include "base/bind.h" #include "sync/protocol/sync.pb.h" namespace base { class DictionaryValue; } namespace chrome { class VersionInfo; } namespace browser_sync { // A class that holds information regarding the properties of a device. class DeviceInfo { public: DeviceInfo(const std::string& guid, const std::string& client_name, const std::string& chrome_version, const std::string& sync_user_agent, const sync_pb::SyncEnums::DeviceType device_type); ~DeviceInfo(); // Sync specific unique identifier for the device. Note if a device // is wiped and sync is set up again this id WILL be different. // The same device might have more than 1 guid if the device has multiple // accounts syncing. const std::string& guid() const; // The host name for the client. const std::string& client_name() const; // Chrome version string. const std::string& chrome_version() const; // The user agent is the combination of OS type, chrome version and which // channel of chrome(stable or beta). For more information see // |DeviceInfo::MakeUserAgentForSyncApi|. const std::string& sync_user_agent() const; // Third party visible id for the device. See |public_id_| for more details. const std::string& public_id() const; // Device Type. sync_pb::SyncEnums::DeviceType device_type() const; // Gets the OS in string form. std::string GetOSString() const; // Gets the device type in string form. std::string GetDeviceTypeString() const; // Compares this object's fields with another's. bool Equals(const DeviceInfo& other) const; // Apps can set ids for a device that is meaningful to them but // not unique enough so the user can be tracked. Exposing |guid| // would lead to a stable unique id for a device which can potentially // be used for tracking. void set_public_id(std::string id); // Converts the |DeviceInfo| values to a JS friendly DictionaryValue, // which extension APIs can expose to third party apps. base::DictionaryValue* ToValue(); static sync_pb::SyncEnums::DeviceType GetLocalDeviceType(); // Creates a |DeviceInfo| object representing the local device and passes // it as parameter to the callback. static void CreateLocalDeviceInfo( const std::string& guid, base::Callback<void(const DeviceInfo& local_info)> callback); // Gets the local device name and passes it as a parameter to callback. static void GetClientName( base::Callback<void(const std::string& local_info)> callback); // Helper to construct a user agent string (ASCII) suitable for use by // the syncapi for any HTTP communication. This string is used by the sync // backend for classifying client types when calculating statistics. static std::string MakeUserAgentForSyncApi( const chrome::VersionInfo& version_info); private: static void GetClientNameContinuation( base::Callback<void(const std::string& local_info)> callback, const std::string& session_name); static void CreateLocalDeviceInfoContinuation( const std::string& guid, base::Callback<void(const DeviceInfo& local_info)> callback, const std::string& session_name); const std::string guid_; const std::string client_name_; const std::string chrome_version_; const std::string sync_user_agent_; const sync_pb::SyncEnums::DeviceType device_type_; // Exposing |guid| would lead to a stable unique id for a device which // can potentially be used for tracking. Public ids are privacy safe // ids in that the same device will have different id for different apps // and they are also reset when app/extension is uninstalled. std::string public_id_; DISALLOW_COPY_AND_ASSIGN(DeviceInfo); }; } // namespace browser_sync #endif // CHROME_BROWSER_SYNC_GLUE_DEVICE_INFO_H_