// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Use the <code>chrome.enterprise.deviceAttributes</code> API to read device
// attributes.
// Note: This API is only available to extensions force-installed by enterprise
// policy.
namespace enterprise.deviceAttributes {
  callback GetDirectoryDeviceIdCallback = void (DOMString deviceId);

  callback GetDeviceSerialNumberCallback = void (DOMString serialNumber);

  callback GetDeviceAssetIdCallback = void (DOMString assetId);

  callback GetDeviceAnnotatedLocationCallback = void (DOMString annotatedLocation);

  callback GetDeviceHostnameCallback = void (DOMString hostname);

  interface Functions {
    // Fetches the value of
    // <a href="https://developers.google.com/admin-sdk/directory/v1/guides/manage-chrome-devices">the device identifier of the directory API</a>,
    // that is generated by the server and identifies the cloud record of the
    // device for querying in the cloud directory API.
    // If the current user is not affiliated, returns an empty string.
    // |callback| : Called with the device identifier of the directory API when
    // received.
    void getDirectoryDeviceId(
        GetDirectoryDeviceIdCallback callback);

    // Fetches the device's serial number. Please note the purpose of this API
    // is to administrate the device (e.g. generating Certificate Sign Requests
    // for device-wide certificates). This API may not be used for tracking
    // devices without the consent of the device's administrator.
    // If the current user is not affiliated, returns an empty string.
    // |callback| : Called with the serial number of the device.
    void getDeviceSerialNumber(
        GetDeviceSerialNumberCallback callback);

    // Fetches the administrator-annotated Asset Id.
    // If the current user is not affiliated or no Asset Id has been set by the
    // administrator, returns an empty string.
    // |callback| : Called with the Asset ID of the device.
    void getDeviceAssetId(GetDeviceAssetIdCallback callback);

    // Fetches the administrator-annotated Location.
    // If the current user is not affiliated or no Annotated Location has been
    // set by the administrator, returns an empty string.
    // |callback| : Called with the Annotated Location of the device.
    void getDeviceAnnotatedLocation(
        GetDeviceAnnotatedLocationCallback callback);

    // Fetches the device's hostname as set by DeviceHostnameTemplate policy.
    // If the current user is not affiliated or no hostname has been set by the
    // enterprise policy, returns an empty string.
    // |callback| : Called with hostname of the device.
    void getDeviceHostname(
        GetDeviceHostnameCallback callback);
  };

};
