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)#include "chrome/browser/sync/glue/device_info.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/sequenced_worker_pool.h" 9ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/values.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_version_info.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/util/get_session_name.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/base/device_form_factor.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace browser_sync { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsTabletUI() { 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Converts VersionInfo::Channel to string for user-agent string. 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string ChannelToString(chrome::VersionInfo::Channel channel) { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (channel) { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::VersionInfo::CHANNEL_UNKNOWN: 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "unknown"; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::VersionInfo::CHANNEL_CANARY: 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "canary"; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::VersionInfo::CHANNEL_DEV: 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "dev"; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::VersionInfo::CHANNEL_BETA: 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "beta"; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::VersionInfo::CHANNEL_STABLE: 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "stable"; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "unknown"; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochDeviceInfo::DeviceInfo(const std::string& guid, 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& client_name, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& chrome_version, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& sync_user_agent, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sync_pb::SyncEnums::DeviceType device_type) 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch : guid_(guid), 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch client_name_(client_name), 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_version_(chrome_version), 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_user_agent_(sync_user_agent), 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_type_(device_type) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DeviceInfo::~DeviceInfo() { } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst std::string& DeviceInfo::guid() const { 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return guid_; 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const std::string& DeviceInfo::client_name() const { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return client_name_; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const std::string& DeviceInfo::chrome_version() const { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return chrome_version_; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const std::string& DeviceInfo::sync_user_agent() const { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sync_user_agent_; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 77a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const std::string& DeviceInfo::public_id() const { 78a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return public_id_; 79a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 80a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sync_pb::SyncEnums::DeviceType DeviceInfo::device_type() const { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return device_type_; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)std::string DeviceInfo::GetOSString() const { 8668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) switch (device_type_) { 8768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case sync_pb::SyncEnums_DeviceType_TYPE_WIN: 8868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return "win"; 8968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case sync_pb::SyncEnums_DeviceType_TYPE_MAC: 9068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return "mac"; 9168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case sync_pb::SyncEnums_DeviceType_TYPE_LINUX: 9268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return "linux"; 9368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case sync_pb::SyncEnums_DeviceType_TYPE_CROS: 9468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return "chrome_os"; 9568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case sync_pb::SyncEnums_DeviceType_TYPE_PHONE: 9668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case sync_pb::SyncEnums_DeviceType_TYPE_TABLET: 9768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // TODO(lipalani): crbug.com/170375. Add support for ios 9868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // phones and tablets. 9968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return "android"; 10068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) default: 10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return "unknown"; 10268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 10368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 10468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 10568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)std::string DeviceInfo::GetDeviceTypeString() const { 10668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) switch (device_type_) { 10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case sync_pb::SyncEnums_DeviceType_TYPE_WIN: 10868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case sync_pb::SyncEnums_DeviceType_TYPE_MAC: 10968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case sync_pb::SyncEnums_DeviceType_TYPE_LINUX: 11068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case sync_pb::SyncEnums_DeviceType_TYPE_CROS: 11168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return "desktop_or_laptop"; 11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case sync_pb::SyncEnums_DeviceType_TYPE_PHONE: 11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return "phone"; 11468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case sync_pb::SyncEnums_DeviceType_TYPE_TABLET: 11568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return "tablet"; 11668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) default: 11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return "unknown"; 11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 12068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool DeviceInfo::Equals(const DeviceInfo& other) const { 1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return this->guid() == other.guid() 1237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch && this->client_name() == other.client_name() 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && this->chrome_version() == other.chrome_version() 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && this->sync_user_agent() == other.sync_user_agent() 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && this->device_type() == other.device_type(); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sync_pb::SyncEnums::DeviceType DeviceInfo::GetLocalDeviceType() { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sync_pb::SyncEnums_DeviceType_TYPE_CROS; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_LINUX) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sync_pb::SyncEnums_DeviceType_TYPE_LINUX; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sync_pb::SyncEnums_DeviceType_TYPE_MAC; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sync_pb::SyncEnums_DeviceType_TYPE_WIN; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return IsTabletUI() ? 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::SyncEnums_DeviceType_TYPE_TABLET : 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::SyncEnums_DeviceType_TYPE_PHONE; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sync_pb::SyncEnums_DeviceType_TYPE_OTHER; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string DeviceInfo::MakeUserAgentForSyncApi( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const chrome::VersionInfo& version_info) { 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string user_agent; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_agent = "Chrome "; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_agent += "WIN "; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_CHROMEOS) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_agent += "CROS "; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (IsTabletUI()) 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_agent += "ANDROID-TABLET "; 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) else 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_agent += "ANDROID-PHONE "; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_LINUX) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_agent += "LINUX "; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_FREEBSD) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_agent += "FREEBSD "; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_OPENBSD) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_agent += "OPENBSD "; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_agent += "MAC "; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!version_info.is_valid()) { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG(ERROR) << "Unable to create chrome::VersionInfo object"; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return user_agent; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_agent += version_info.Version(); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_agent += " (" + version_info.LastChange() + ")"; 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!version_info.IsOfficialBuild()) { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_agent += "-devel"; 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_agent += " channel(" + 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChannelToString(version_info.GetChannel()) + ")"; 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return user_agent; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 188ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochbase::DictionaryValue* DeviceInfo::ToValue() { 189ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::DictionaryValue* value = new base::DictionaryValue(); 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) value->SetString("name", client_name_); 191d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) value->SetString("id", public_id_); 19268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) value->SetString("os", GetOSString()); 19368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) value->SetString("type", GetDeviceTypeString()); 194d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) value->SetString("chromeVersion", chrome_version_); 195ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return value; 196ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 197ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 198a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void DeviceInfo::set_public_id(std::string id) { 199ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public_id_ = id; 200ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 201ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceInfo::CreateLocalDeviceInfo( 2047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& guid, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Callback<void(const DeviceInfo& local_info)> callback) { 2067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GetClientName( 2077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&DeviceInfo::CreateLocalDeviceInfoContinuation, 2087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch guid, 2097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch callback)); 2107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// static. 2137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid DeviceInfo::GetClientName( 2147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Callback<void(const std::string& client_name)> callback) { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::GetSessionName( 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserThread::GetBlockingPool(), 2177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&DeviceInfo::GetClientNameContinuation, 2187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch callback)); 2197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid DeviceInfo::GetClientNameContinuation( 2227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Callback<void(const std::string& local_info)> callback, 2237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& session_name) { 2247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch callback.Run(session_name); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static. 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeviceInfo::CreateLocalDeviceInfoContinuation( 2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& guid, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Callback<void(const DeviceInfo& local_info)> callback, 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& session_name) { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::VersionInfo version_info; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceInfo local_info( 2357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch guid, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) session_name, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) version_info.CreateVersionString(), 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeUserAgentForSyncApi(version_info), 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLocalDeviceType()); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(local_info); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace browser_sync 245