text: // Copyright 2021 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_ENTERPRISE_SIGNALS_DEVICE_INFO_FETCHER_H_
  #define CHROME_BROWSER_ENTERPRISE_SIGNALS_DEVICE_INFO_FETCHER_H_
  
  #include <memory>
  #include <string>
  #include <vector>
  
  namespace enterprise_signals {
  
  struct DeviceInfo {
    DeviceInfo();
    ~DeviceInfo();
    DeviceInfo(const DeviceInfo&);
    DeviceInfo(DeviceInfo&&);
  
    enum class SettingValue {
      NONE,
      UNKNOWN,
      DISABLED,
      ENABLED,
    };
  
    std::string os_name;
    std::string os_version;
    std::string device_host_name;
    std::string device_model;
    std::string serial_number;
    SettingValue screen_lock_secured;
    SettingValue disk_encrypted;
  
    std::vector<std::string> mac_addresses;
  };
  
  // Interface used by the chrome.enterprise.reportingPrivate.getDeviceInfo()
  // function that fetches info of the device. Each supported platform has its own
  // subclass implementation.
  class DeviceInfoFetcher {
   public:
    DeviceInfoFetcher();
    virtual ~DeviceInfoFetcher();
  
    DeviceInfoFetcher(const DeviceInfoFetcher&) = delete;
    DeviceInfoFetcher& operator=(const DeviceInfoFetcher&) = delete;
  
    // Returns a platform specific instance of DeviceInfoFetcher.
    static std::unique_ptr<DeviceInfoFetcher> CreateInstance();
  
    // Fetches the device information for the current platform.
    virtual DeviceInfo Fetch() = 0;
  };
  
  }  // namespace enterprise_signals
  
  #endif  // CHROME_BROWSER_ENTERPRISE_SIGNALS_DEVICE_INFO_FETCHER_H_
  