| // Copyright 2021 The Chromium Authors | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef CHROME_BROWSER_ASH_CROSAPI_DEVICE_ATTRIBUTES_ASH_H_ | 
 | #define CHROME_BROWSER_ASH_CROSAPI_DEVICE_ATTRIBUTES_ASH_H_ | 
 |  | 
 | #include "chrome/browser/ash/policy/core/device_attributes.h" | 
 | #include "chromeos/crosapi/mojom/device_attributes.mojom.h" | 
 | #include "mojo/public/cpp/bindings/pending_receiver.h" | 
 | #include "mojo/public/cpp/bindings/receiver_set.h" | 
 |  | 
 | namespace policy { | 
 | class FakeDeviceAttributes; | 
 | } | 
 |  | 
 | namespace crosapi { | 
 |  | 
 | // The ash-chrome implementation of the DeviceAttributes crosapi interface. | 
 | // This class must only be used from the main thread. | 
 | class DeviceAttributesAsh : public mojom::DeviceAttributes { | 
 |  public: | 
 |   DeviceAttributesAsh(); | 
 |   DeviceAttributesAsh(const DeviceAttributesAsh&) = delete; | 
 |   DeviceAttributesAsh& operator=(const DeviceAttributesAsh&) = delete; | 
 |   ~DeviceAttributesAsh() override; | 
 |  | 
 |   void BindReceiver(mojo::PendingReceiver<mojom::DeviceAttributes> receiver); | 
 |  | 
 |   // crosapi::mojom::DeviceAttributes: | 
 |   void GetDirectoryDeviceId(GetDirectoryDeviceIdCallback callback) override; | 
 |   void GetDeviceSerialNumber(GetDeviceSerialNumberCallback callback) override; | 
 |   void GetDeviceAssetId(GetDeviceAssetIdCallback callback) override; | 
 |   void GetDeviceAnnotatedLocation( | 
 |       GetDeviceAnnotatedLocationCallback callback) override; | 
 |   void GetDeviceHostname(GetDeviceHostnameCallback callback) override; | 
 |   void GetDeviceTypeForMetrics( | 
 |       GetDeviceTypeForMetricsCallback callback) override; | 
 |  | 
 |   void SetDeviceAttributesForTesting( | 
 |       std::unique_ptr<policy::FakeDeviceAttributes> attributes); | 
 |  | 
 |  private: | 
 |   using StringResult = mojom::DeviceAttributesStringResult; | 
 |  | 
 |   // This class supports any number of connections. | 
 |   mojo::ReceiverSet<mojom::DeviceAttributes> receivers_; | 
 |  | 
 |   std::unique_ptr<policy::DeviceAttributes> attributes_; | 
 | }; | 
 |  | 
 | }  // namespace crosapi | 
 |  | 
 | #endif  // CHROME_BROWSER_ASH_CROSAPI_DEVICE_ATTRIBUTES_ASH_H_ |