|  | // Copyright 2018 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. | 
|  |  | 
|  | #include "components/cryptauth/device_classifier_util.h" | 
|  |  | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/no_destructor.h" | 
|  | #include "base/sys_info.h" | 
|  | #include "base/version.h" | 
|  | #include "components/version_info/version_info.h" | 
|  |  | 
|  | namespace cryptauth { | 
|  |  | 
|  | namespace device_classifier_util { | 
|  |  | 
|  | const cryptauth::DeviceClassifier& GetDeviceClassifier() { | 
|  | static const base::NoDestructor<cryptauth::DeviceClassifier> classifier([] { | 
|  | cryptauth::DeviceClassifier classifier; | 
|  |  | 
|  | int32_t major_version; | 
|  | int32_t minor_version; | 
|  | int32_t bugfix_version; | 
|  | base::SysInfo::OperatingSystemVersionNumbers(&major_version, &minor_version, | 
|  | &bugfix_version); | 
|  | classifier.set_device_os_version_code(major_version); | 
|  | classifier.set_device_type(cryptauth::CHROME); | 
|  |  | 
|  | const std::vector<uint32_t>& version_components = | 
|  | version_info::GetVersion().components(); | 
|  | if (!version_components.empty()) { | 
|  | classifier.set_device_software_version_code(version_components[0]); | 
|  | } | 
|  |  | 
|  | classifier.set_device_software_package(version_info::GetProductName()); | 
|  |  | 
|  | return classifier; | 
|  | }()); | 
|  |  | 
|  | return *classifier; | 
|  | } | 
|  |  | 
|  | }  // namespace device_classifier_util | 
|  |  | 
|  | }  // namespace cryptauth |