// third_party/blink/public/mojom/mediastream/media_stream.mojom-blink-forward.h is auto generated by mojom_bindings_generator.py, do not edit

// Copyright 2019 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 THIRD_PARTY_BLINK_PUBLIC_MOJOM_MEDIASTREAM_MEDIA_STREAM_MOJOM_BLINK_FORWARD_H_
#define THIRD_PARTY_BLINK_PUBLIC_MOJOM_MEDIASTREAM_MEDIA_STREAM_MOJOM_BLINK_FORWARD_H_

#include <stdint.h>

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

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


#include "mojo/public/interfaces/bindings/native_struct.mojom-forward.h"

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

namespace mojo {
enum class NativeEnum;
}  // namespace mojo
namespace blink {
namespace mojom {

enum class MediaStreamType : int32_t;

enum class MediaStreamRequestResult : int32_t;

enum class StreamSelectionStrategy : int32_t;

enum class MediaStreamStateChange : int32_t;
class MediaStreamDeviceObserverInterfaceBase;
class MediaStreamDispatcherHostInterfaceBase;
class MediaStreamTrackMetricsHostInterfaceBase;
}  // namespace blink
}  // namespace mojom


namespace blink {
namespace mojom {
namespace blink {
// Aliases for definition in the parent namespace.
using MediaStreamType = MediaStreamType;
using MediaStreamRequestResult = MediaStreamRequestResult;
using StreamSelectionStrategy = StreamSelectionStrategy;
using MediaStreamStateChange = MediaStreamStateChange;
using MediaStreamDeviceObserverInterfaceBase = MediaStreamDeviceObserverInterfaceBase;
using MediaStreamDispatcherHostInterfaceBase = MediaStreamDispatcherHostInterfaceBase;
using MediaStreamTrackMetricsHostInterfaceBase = MediaStreamTrackMetricsHostInterfaceBase;
class StreamSelectionInfo;
using StreamSelectionInfoPtr = mojo::StructPtr<StreamSelectionInfo>;

class MediaStreamDevice;
using MediaStreamDevicePtr = mojo::StructPtr<MediaStreamDevice>;

class TrackControls;
using TrackControlsPtr = mojo::InlinedStructPtr<TrackControls>;

class StreamControls;
using StreamControlsPtr = mojo::StructPtr<StreamControls>;

class GetOpenDeviceResponse;
using GetOpenDeviceResponsePtr = mojo::StructPtr<GetOpenDeviceResponse>;

class StreamDevices;
using StreamDevicesPtr = mojo::StructPtr<StreamDevices>;

class StreamDevicesSet;
using StreamDevicesSetPtr = mojo::StructPtr<StreamDevicesSet>;

class MediaStreamDeviceObserver;

class MediaStreamDispatcherHost;

class MediaStreamTrackMetricsHost;




}  // namespace blink
}  // namespace mojom
}  // namespace blink

#endif  // THIRD_PARTY_BLINK_PUBLIC_MOJOM_MEDIASTREAM_MEDIA_STREAM_MOJOM_BLINK_FORWARD_H_