// services/device/public/mojom/wake_lock_provider.mojom-blink-forward.h is auto generated by mojom_bindings_generator.py, do not edit

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

#ifndef SERVICES_DEVICE_PUBLIC_MOJOM_WAKE_LOCK_PROVIDER_MOJOM_BLINK_FORWARD_H_
#define SERVICES_DEVICE_PUBLIC_MOJOM_WAKE_LOCK_PROVIDER_MOJOM_BLINK_FORWARD_H_





#include "mojo/public/cpp/bindings/deprecated_interface_types_forward.h"



#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif



namespace device::mojom {
class WakeLockProviderInterfaceBase;
class WakeLockObserverInterfaceBase;


}  // device::mojom


namespace device::mojom::blink {
// Aliases for definition in the parent namespace.
using WakeLockProviderInterfaceBase = WakeLockProviderInterfaceBase;
using WakeLockObserverInterfaceBase = WakeLockObserverInterfaceBase;
class WakeLockProvider;

class WakeLockObserver;




}  // device::mojom::blink

#endif  // SERVICES_DEVICE_PUBLIC_MOJOM_WAKE_LOCK_PROVIDER_MOJOM_BLINK_FORWARD_H_