chromium/chrome/browser/chromeos/extensions/telemetry/api/diagnostics/diagnostics_api.h

// 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_CHROMEOS_EXTENSIONS_TELEMETRY_API_DIAGNOSTICS_DIAGNOSTICS_API_H_
#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_DIAGNOSTICS_DIAGNOSTICS_API_H_

#include <memory>
#include <optional>

#include "build/chromeos_buildflags.h"
#include "chrome/browser/chromeos/extensions/telemetry/api/common/base_telemetry_extension_api_guard_function.h"
#include "chrome/browser/chromeos/extensions/telemetry/api/diagnostics/remote_diagnostics_service_strategy.h"
#include "chromeos/crosapi/mojom/diagnostics_service.mojom.h"
#include "chromeos/crosapi/mojom/telemetry_extension_exception.mojom.h"
#include "extensions/browser/extension_function.h"
#include "extensions/browser/extension_function_histogram_value.h"
#include "mojo/public/cpp/bindings/remote.h"

namespace chromeos {

class DiagnosticsApiFunctionV1AndV2Base
    : public BaseTelemetryExtensionApiGuardFunction {
 protected:
  ~DiagnosticsApiFunctionV1AndV2Base() override = default;

  // Gets the parameters passed to the JavaScript call and tries to convert it
  // to the `Params` type. If the `Params` can't be created, this resolves the
  // corresponding JavaScript call with an error and returns `nullptr`.
  template <class Params>
  std::optional<Params> GetParams();
};

class DiagnosticsApiFunctionBase : public DiagnosticsApiFunctionV1AndV2Base {
 public:
  DiagnosticsApiFunctionBase();

 protected:
  ~DiagnosticsApiFunctionBase() override;

  mojo::Remote<crosapi::mojom::DiagnosticsService>& GetRemoteService();

#if BUILDFLAG(IS_CHROMEOS_LACROS)
  bool IsCrosApiAvailable() override;
#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)

 private:
  std::unique_ptr<RemoteDiagnosticsServiceStrategy>
      remote_diagnostics_service_strategy_;
};

class DiagnosticsApiFunctionBaseV2 : public DiagnosticsApiFunctionV1AndV2Base {
 public:
  DiagnosticsApiFunctionBaseV2() = default;

 protected:
  ~DiagnosticsApiFunctionBaseV2() override = default;

#if BUILDFLAG(IS_CHROMEOS_LACROS)
  bool IsCrosApiAvailable() override;
#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
};

/****************** DIAGNOSTICS API V1 ******************/

class OsDiagnosticsGetAvailableRoutinesFunction
    : public DiagnosticsApiFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.getAvailableRoutines",
                             OS_DIAGNOSTICS_GETAVAILABLEROUTINES)
 private:
  ~OsDiagnosticsGetAvailableRoutinesFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;

  void OnResult(
      const std::vector<crosapi::mojom::DiagnosticsRoutineEnum>& routines);
};

class OsDiagnosticsGetRoutineUpdateFunction
    : public DiagnosticsApiFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.getRoutineUpdate",
                             OS_DIAGNOSTICS_GETROUTINEUPDATE)
 private:
  ~OsDiagnosticsGetRoutineUpdateFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;

  void OnResult(crosapi::mojom::DiagnosticsRoutineUpdatePtr ptr);
};

class DiagnosticsApiRunRoutineFunctionBase : public DiagnosticsApiFunctionBase {
 public:
  void OnResult(crosapi::mojom::DiagnosticsRunRoutineResponsePtr ptr);

 protected:
  ~DiagnosticsApiRunRoutineFunctionBase() override = default;

  // Returns a callback that resolves the corresponding JavaScript call with
  // the response passed to the callback.
  base::OnceCallback<void(crosapi::mojom::DiagnosticsRunRoutineResponsePtr)>
  GetOnResult();
};

class OsDiagnosticsRunAcPowerRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runAcPowerRoutine",
                             OS_DIAGNOSTICS_RUNACPOWERROUTINE)
 private:
  ~OsDiagnosticsRunAcPowerRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunBatteryCapacityRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runBatteryCapacityRoutine",
                             OS_DIAGNOSTICS_RUNBATTERYCAPACITYROUTINE)
 private:
  ~OsDiagnosticsRunBatteryCapacityRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunBatteryChargeRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runBatteryChargeRoutine",
                             OS_DIAGNOSTICS_RUNBATTERYCHARGEROUTINE)
 private:
  ~OsDiagnosticsRunBatteryChargeRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunBatteryDischargeRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runBatteryDischargeRoutine",
                             OS_DIAGNOSTICS_RUNBATTERYDISCHARGEROUTINE)
 private:
  ~OsDiagnosticsRunBatteryDischargeRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunBatteryHealthRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runBatteryHealthRoutine",
                             OS_DIAGNOSTICS_RUNBATTERYHEALTHROUTINE)
 private:
  ~OsDiagnosticsRunBatteryHealthRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunBluetoothDiscoveryRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runBluetoothDiscoveryRoutine",
                             OS_DIAGNOSTICS_RUNBLUETOOTHDISCOVERYROUTINE)
 private:
  ~OsDiagnosticsRunBluetoothDiscoveryRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunBluetoothPairingRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runBluetoothPairingRoutine",
                             OS_DIAGNOSTICS_RUNBLUETOOTHPAIRINGROUTINE)
 private:
  ~OsDiagnosticsRunBluetoothPairingRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunBluetoothPowerRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runBluetoothPowerRoutine",
                             OS_DIAGNOSTICS_RUNBLUETOOTHPOWERROUTINE)
 private:
  ~OsDiagnosticsRunBluetoothPowerRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunBluetoothScanningRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runBluetoothScanningRoutine",
                             OS_DIAGNOSTICS_RUNBLUETOOTHSCANNINGROUTINE)
 private:
  ~OsDiagnosticsRunBluetoothScanningRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunCpuCacheRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runCpuCacheRoutine",
                             OS_DIAGNOSTICS_RUNCPUCACHEROUTINE)
 private:
  ~OsDiagnosticsRunCpuCacheRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunCpuFloatingPointAccuracyRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION(
      "os.diagnostics.runCpuFloatingPointAccuracyRoutine",
      OS_DIAGNOSTICS_RUNCPUFLOATINGPOINTACCURACYROUTINE)
 private:
  ~OsDiagnosticsRunCpuFloatingPointAccuracyRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunCpuPrimeSearchRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runCpuPrimeSearchRoutine",
                             OS_DIAGNOSTICS_RUNCPUPRIMESEARCHROUTINE)
 private:
  ~OsDiagnosticsRunCpuPrimeSearchRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunCpuStressRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runCpuStressRoutine",
                             OS_DIAGNOSTICS_RUNCPUSTRESSROUTINE)
 private:
  ~OsDiagnosticsRunCpuStressRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunDiskReadRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runDiskReadRoutine",
                             OS_DIAGNOSTICS_RUNDISKREADROUTINE)
 private:
  ~OsDiagnosticsRunDiskReadRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunDnsResolutionRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runDnsResolutionRoutine",
                             OS_DIAGNOSTICS_RUNDNSRESOLUTIONROUTINE)
 private:
  ~OsDiagnosticsRunDnsResolutionRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunDnsResolverPresentRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runDnsResolverPresentRoutine",
                             OS_DIAGNOSTICS_RUNDNSRESOLVERPRESENTROUTINE)
 private:
  ~OsDiagnosticsRunDnsResolverPresentRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunFingerprintAliveRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runFingerprintAliveRoutine",
                             OS_DIAGNOSTICS_RUNFINGERPRINTALIVEROUTINE)
 private:
  ~OsDiagnosticsRunFingerprintAliveRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunEmmcLifetimeRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runEmmcLifetimeRoutine",
                             OS_DIAGNOSTICS_RUNEMMCLIFETIMEROUTINE)
 private:
  ~OsDiagnosticsRunEmmcLifetimeRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunGatewayCanBePingedRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runGatewayCanBePingedRoutine",
                             OS_DIAGNOSTICS_RUNGATEWAYCANBEPINGEDROUTINE)
 private:
  ~OsDiagnosticsRunGatewayCanBePingedRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunLanConnectivityRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runLanConnectivityRoutine",
                             OS_DIAGNOSTICS_RUNLANCONNECTIVITYROUTINE)
 private:
  ~OsDiagnosticsRunLanConnectivityRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunMemoryRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runMemoryRoutine",
                             OS_DIAGNOSTICS_RUNMEMORYROUTINE)
 private:
  ~OsDiagnosticsRunMemoryRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunNvmeSelfTestRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runNvmeSelfTestRoutine",
                             OS_DIAGNOSTICS_RUNNVMESELFTESTROUTINE)
 private:
  ~OsDiagnosticsRunNvmeSelfTestRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunSensitiveSensorRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runSensitiveSensorRoutine",
                             OS_DIAGNOSTICS_RUNSENSITIVESENSORROUTINE)
 private:
  ~OsDiagnosticsRunSensitiveSensorRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunSignalStrengthRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runSignalStrengthRoutine",
                             OS_DIAGNOSTICS_RUNSIGNALSTRENGTHROUTINE)
 private:
  ~OsDiagnosticsRunSignalStrengthRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunSmartctlCheckRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runSmartctlCheckRoutine",
                             OS_DIAGNOSTICS_RUNSMARTCTLCHECKROUTINE)
 private:
  ~OsDiagnosticsRunSmartctlCheckRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunUfsLifetimeRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runUfsLifetimeRoutine",
                             OS_DIAGNOSTICS_RUNUFSLIFETIMEROUTINE)
 private:
  ~OsDiagnosticsRunUfsLifetimeRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunPowerButtonRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runPowerButtonRoutine",
                             OS_DIAGNOSTICS_RUNPOWERBUTTONROUTINE)
 private:
  ~OsDiagnosticsRunPowerButtonRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunAudioDriverRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runAudioDriverRoutine",
                             OS_DIAGNOSTICS_RUNAUDIODRIVERROUTINE)
 private:
  ~OsDiagnosticsRunAudioDriverRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsRunFanRoutineFunction
    : public DiagnosticsApiRunRoutineFunctionBase {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.runFanRoutine",
                             OS_DIAGNOSTICS_RUNFANROUTINE)
 private:
  ~OsDiagnosticsRunFanRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

/****************** DIAGNOSTICS API V2 ******************/

class OsDiagnosticsCreateRoutineFunction : public DiagnosticsApiFunctionBaseV2 {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.createRoutine",
                             OS_DIAGNOSTICS_CREATEROUTINE)
 private:
  ~OsDiagnosticsCreateRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsCreateMemoryRoutineFunction
    : public DiagnosticsApiFunctionBaseV2 {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.createMemoryRoutine",
                             OS_DIAGNOSTICS_CREATEMEMORYROUTINE)
 private:
  ~OsDiagnosticsCreateMemoryRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsCreateVolumeButtonRoutineFunction
    : public DiagnosticsApiFunctionBaseV2 {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.createVolumeButtonRoutine",
                             OS_DIAGNOSTICS_CREATEVOLUMEBUTTONROUTINE)
 private:
  ~OsDiagnosticsCreateVolumeButtonRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsCreateFanRoutineFunction
    : public DiagnosticsApiFunctionBaseV2 {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.createFanRoutine",
                             OS_DIAGNOSTICS_CREATEFANROUTINE)
 private:
  ~OsDiagnosticsCreateFanRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsStartRoutineFunction : public DiagnosticsApiFunctionBaseV2 {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.startRoutine",
                             OS_DIAGNOSTICS_STARTROUTINE)
 private:
  ~OsDiagnosticsStartRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsCancelRoutineFunction : public DiagnosticsApiFunctionBaseV2 {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.cancelRoutine",
                             OS_DIAGNOSTICS_CANCELROUTINE)
 private:
  ~OsDiagnosticsCancelRoutineFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsReplyToRoutineInquiryFunction
    : public DiagnosticsApiFunctionBaseV2 {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.replyToRoutineInquiry",
                             OS_DIAGNOSTICS_REPLYTOROUTINEINQUIRY)
 private:
  ~OsDiagnosticsReplyToRoutineInquiryFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;
};

class OsDiagnosticsIsRoutineArgumentSupportedFunction
    : public DiagnosticsApiFunctionBaseV2 {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.isRoutineArgumentSupported",
                             OS_DIAGNOSTICS_ISROUTINEARGUMENTSUPPORTED)
 private:
  ~OsDiagnosticsIsRoutineArgumentSupportedFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;

  void OnResult(crosapi::mojom::TelemetryExtensionSupportStatusPtr result);
};

class OsDiagnosticsIsMemoryRoutineArgumentSupportedFunction
    : public DiagnosticsApiFunctionBaseV2 {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.isMemoryRoutineArgumentSupported",
                             OS_DIAGNOSTICS_ISMEMORYROUTINEARGUMENTSUPPORTED)
 private:
  ~OsDiagnosticsIsMemoryRoutineArgumentSupportedFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;

  void OnResult(crosapi::mojom::TelemetryExtensionSupportStatusPtr result);
};

class OsDiagnosticsIsVolumeButtonRoutineArgumentSupportedFunction
    : public DiagnosticsApiFunctionBaseV2 {
  DECLARE_EXTENSION_FUNCTION(
      "os.diagnostics.isVolumeButtonRoutineArgumentSupported",
      OS_DIAGNOSTICS_ISVOLUMEBUTTONROUTINEARGUMENTSUPPORTED)
 private:
  ~OsDiagnosticsIsVolumeButtonRoutineArgumentSupportedFunction() override =
      default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;

  void OnResult(crosapi::mojom::TelemetryExtensionSupportStatusPtr result);
};

class OsDiagnosticsIsFanRoutineArgumentSupportedFunction
    : public DiagnosticsApiFunctionBaseV2 {
  DECLARE_EXTENSION_FUNCTION("os.diagnostics.isFanRoutineArgumentSupported",
                             OS_DIAGNOSTICS_ISFANROUTINEARGUMENTSUPPORTED)
 private:
  ~OsDiagnosticsIsFanRoutineArgumentSupportedFunction() override = default;

  // BaseTelemetryExtensionApiGuardFunction:
  void RunIfAllowed() override;

  void OnResult(crosapi::mojom::TelemetryExtensionSupportStatusPtr result);
};

}  // namespace chromeos

#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_DIAGNOSTICS_DIAGNOSTICS_API_H_