// 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 SERVICES_VIZ_PRIVILEGED_INTERFACES_COMPOSITING_EXTERNAL_BEGIN_FRAME_CONTROLLER_MOJOM_FORWARD_H_
#define SERVICES_VIZ_PRIVILEGED_INTERFACES_COMPOSITING_EXTERNAL_BEGIN_FRAME_CONTROLLER_MOJOM_FORWARD_H_





#include "mojo/public/cpp/bindings/associated_interface_ptr.h"
#include "mojo/public/cpp/bindings/associated_interface_ptr_info.h"
#include "mojo/public/cpp/bindings/associated_interface_request.h"
#include "mojo/public/cpp/bindings/interface_ptr.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
#include "mojo/public/cpp/bindings/pending_associated_remote.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h"



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


namespace viz {
namespace mojom {
class ExternalBeginFrameController;

// @generated_from: viz.mojom.ExternalBeginFrameController
using ExternalBeginFrameControllerPtr = mojo::InterfacePtr<ExternalBeginFrameController>;
using ExternalBeginFrameControllerPtrInfo = mojo::InterfacePtrInfo<ExternalBeginFrameController>;
using ThreadSafeExternalBeginFrameControllerPtr =
    mojo::ThreadSafeInterfacePtr<ExternalBeginFrameController>;

// @generated_from: viz.mojom.ExternalBeginFrameController
using ExternalBeginFrameControllerRequest = mojo::InterfaceRequest<ExternalBeginFrameController>;

// @generated_from: viz.mojom.ExternalBeginFrameController
using ExternalBeginFrameControllerAssociatedPtr =
    mojo::AssociatedInterfacePtr<ExternalBeginFrameController>;
using ThreadSafeExternalBeginFrameControllerAssociatedPtr =
    mojo::ThreadSafeAssociatedInterfacePtr<ExternalBeginFrameController>;
using ExternalBeginFrameControllerAssociatedPtrInfo =
    mojo::AssociatedInterfacePtrInfo<ExternalBeginFrameController>;

// @generated_from: viz.mojom.ExternalBeginFrameController
using ExternalBeginFrameControllerAssociatedRequest =
    mojo::AssociatedInterfaceRequest<ExternalBeginFrameController>;

class ExternalBeginFrameControllerClient;

// @generated_from: viz.mojom.ExternalBeginFrameControllerClient
using ExternalBeginFrameControllerClientPtr = mojo::InterfacePtr<ExternalBeginFrameControllerClient>;
using ExternalBeginFrameControllerClientPtrInfo = mojo::InterfacePtrInfo<ExternalBeginFrameControllerClient>;
using ThreadSafeExternalBeginFrameControllerClientPtr =
    mojo::ThreadSafeInterfacePtr<ExternalBeginFrameControllerClient>;

// @generated_from: viz.mojom.ExternalBeginFrameControllerClient
using ExternalBeginFrameControllerClientRequest = mojo::InterfaceRequest<ExternalBeginFrameControllerClient>;

// @generated_from: viz.mojom.ExternalBeginFrameControllerClient
using ExternalBeginFrameControllerClientAssociatedPtr =
    mojo::AssociatedInterfacePtr<ExternalBeginFrameControllerClient>;
using ThreadSafeExternalBeginFrameControllerClientAssociatedPtr =
    mojo::ThreadSafeAssociatedInterfacePtr<ExternalBeginFrameControllerClient>;
using ExternalBeginFrameControllerClientAssociatedPtrInfo =
    mojo::AssociatedInterfacePtrInfo<ExternalBeginFrameControllerClient>;

// @generated_from: viz.mojom.ExternalBeginFrameControllerClient
using ExternalBeginFrameControllerClientAssociatedRequest =
    mojo::AssociatedInterfaceRequest<ExternalBeginFrameControllerClient>;




}  // namespace mojom
}  // namespace viz

#endif  // SERVICES_VIZ_PRIVILEGED_INTERFACES_COMPOSITING_EXTERNAL_BEGIN_FRAME_CONTROLLER_MOJOM_FORWARD_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMTM2NywgImJlZ2luIjogMTMzNiwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogInZpei5tb2pvbS5FeHRlcm5hbEJlZ2luRnJhbWVDb250
cm9sbGVyIn19LCB7ImVuZCI6IDE3ODcsICJiZWdpbiI6IDE3NTksICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJ2aXoubW9qb20uRXh0ZXJuYWxCZWdpbkZyYW1lQ29u
dHJvbGxlciJ9fSwgeyJlbmQiOiAyNTU0LCAiYmVnaW4iOiAyNTE3LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAidml6Lm1vam9tLkV4dGVybmFsQmVnaW5GcmFtZUNv
bnRyb2xsZXJDbGllbnQifX0sIHsiZW5kIjogMzAyMiwgImJlZ2luIjogMjk4OCwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogInZpei5tb2pvbS5FeHRlcm5hbEJlZ2lu
RnJhbWVDb250cm9sbGVyQ2xpZW50In19XSwgInR5cGUiOiAia3l0aGUwIn0=
*/