// GENERATED CODE
// Generated by the Java program at /build/annotationProcessors at compile time
// from annotations on Java methods. To update, change the annotations on the
// corresponding Java methods and rerun the build. Manually updating this file
// will cause your build to fail.

#ifndef FennecJNIWrappers_h
#define FennecJNIWrappers_h

#include "mozilla/jni/Refs.h"

namespace mozilla {
namespace java {

class ANRReporter : public mozilla::jni::ObjectBase<ANRReporter>
{
public:
    static const char name[];

    explicit ANRReporter(const Context& ctx) : ObjectBase<ANRReporter>(ctx) {}

    struct GetNativeStack_t {
        typedef ANRReporter Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getNativeStack";
        static constexpr char signature[] =
                "()Ljava/lang/String;";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct ReleaseNativeStack_t {
        typedef ANRReporter Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "releaseNativeStack";
        static constexpr char signature[] =
                "()V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct RequestNativeStack_t {
        typedef ANRReporter Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                bool> Args;
        static constexpr char name[] = "requestNativeStack";
        static constexpr char signature[] =
                "(Z)Z";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::ANY;

    template<class Impl> class Natives;
};

class DownloadsIntegration : public mozilla::jni::ObjectBase<DownloadsIntegration>
{
public:
    static const char name[];

    explicit DownloadsIntegration(const Context& ctx) : ObjectBase<DownloadsIntegration>(ctx) {}

    struct GetTemporaryDownloadDirectory_t {
        typedef DownloadsIntegration Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getTemporaryDownloadDirectory";
        static constexpr char signature[] =
                "()Ljava/lang/String;";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetTemporaryDownloadDirectory() -> mozilla::jni::String::LocalRef;

    struct ScanMedia_t {
        typedef DownloadsIntegration Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "scanMedia";
        static constexpr char signature[] =
                "(Ljava/lang/String;Ljava/lang/String;)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto ScanMedia(mozilla::jni::String::Param, mozilla::jni::String::Param) -> void;

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::GECKO;

};

class GeckoJavaSampler : public mozilla::jni::ObjectBase<GeckoJavaSampler>
{
public:
    static const char name[];

    explicit GeckoJavaSampler(const Context& ctx) : ObjectBase<GeckoJavaSampler>(ctx) {}

    struct GetFrameName_t {
        typedef GeckoJavaSampler Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "getFrameName";
        static constexpr char signature[] =
                "(III)Ljava/lang/String;";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetFrameName(int32_t, int32_t, int32_t) -> mozilla::jni::String::LocalRef;

    struct GetProfilerTime_t {
        typedef GeckoJavaSampler Owner;
        typedef double ReturnType;
        typedef double SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getProfilerTime";
        static constexpr char signature[] =
                "()D";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct GetSampleTime_t {
        typedef GeckoJavaSampler Owner;
        typedef double ReturnType;
        typedef double SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "getSampleTime";
        static constexpr char signature[] =
                "(II)D";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetSampleTime(int32_t, int32_t) -> double;

    struct GetThreadName_t {
        typedef GeckoJavaSampler Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "getThreadName";
        static constexpr char signature[] =
                "(I)Ljava/lang/String;";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetThreadName(int32_t) -> mozilla::jni::String::LocalRef;

    struct Pause_t {
        typedef GeckoJavaSampler Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "pause";
        static constexpr char signature[] =
                "()V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto Pause() -> void;

    struct Start_t {
        typedef GeckoJavaSampler Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "start";
        static constexpr char signature[] =
                "(II)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto Start(int32_t, int32_t) -> void;

    struct Stop_t {
        typedef GeckoJavaSampler Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "stop";
        static constexpr char signature[] =
                "()V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto Stop() -> void;

    struct Unpause_t {
        typedef GeckoJavaSampler Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "unpause";
        static constexpr char signature[] =
                "()V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto Unpause() -> void;

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::ANY;

    template<class Impl> class Natives;
};

class MemoryMonitor : public mozilla::jni::ObjectBase<MemoryMonitor>
{
public:
    static const char name[];

    explicit MemoryMonitor(const Context& ctx) : ObjectBase<MemoryMonitor>(ctx) {}

    struct DispatchMemoryPressure_t {
        typedef MemoryMonitor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "dispatchMemoryPressure";
        static constexpr char signature[] =
                "()V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::UI;

    template<class Impl> class Natives;
};

class PresentationMediaPlayerManager : public mozilla::jni::ObjectBase<PresentationMediaPlayerManager>
{
public:
    static const char name[];

    explicit PresentationMediaPlayerManager(const Context& ctx) : ObjectBase<PresentationMediaPlayerManager>(ctx) {}

    struct AddPresentationSurface_t {
        typedef PresentationMediaPlayerManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "addPresentationSurface";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/GeckoView;Landroid/view/Surface;)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct InvalidateAndScheduleComposite_t {
        typedef PresentationMediaPlayerManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "invalidateAndScheduleComposite";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/GeckoView;)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct RemovePresentationSurface_t {
        typedef PresentationMediaPlayerManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "removePresentationSurface";
        static constexpr char signature[] =
                "()V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::UI;

    template<class Impl> class Natives;
};

class ScreenManagerHelper : public mozilla::jni::ObjectBase<ScreenManagerHelper>
{
public:
    static const char name[];

    explicit ScreenManagerHelper(const Context& ctx) : ObjectBase<ScreenManagerHelper>(ctx) {}

    struct AddDisplay_t {
        typedef ScreenManagerHelper Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int32_t,
                float> Args;
        static constexpr char name[] = "addDisplay";
        static constexpr char signature[] =
                "(IIIF)I";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct RemoveDisplay_t {
        typedef ScreenManagerHelper Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "removeDisplay";
        static constexpr char signature[] =
                "(I)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::ANY;

    template<class Impl> class Natives;
};

class Telemetry : public mozilla::jni::ObjectBase<Telemetry>
{
public:
    static const char name[];

    explicit Telemetry(const Context& ctx) : ObjectBase<Telemetry>(ctx) {}

    struct AddHistogram_t {
        typedef Telemetry Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                int32_t> Args;
        static constexpr char name[] = "nativeAddHistogram";
        static constexpr char signature[] =
                "(Ljava/lang/String;I)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct AddKeyedHistogram_t {
        typedef Telemetry Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                int32_t> Args;
        static constexpr char name[] = "nativeAddKeyedHistogram";
        static constexpr char signature[] =
                "(Ljava/lang/String;Ljava/lang/String;I)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct AddUIEvent_t {
        typedef Telemetry Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                int64_t,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "nativeAddUiEvent";
        static constexpr char signature[] =
                "(Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct StartUISession_t {
        typedef Telemetry Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                int64_t> Args;
        static constexpr char name[] = "nativeStartUiSession";
        static constexpr char signature[] =
                "(Ljava/lang/String;J)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct StopUISession_t {
        typedef Telemetry Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                int64_t> Args;
        static constexpr char name[] = "nativeStopUiSession";
        static constexpr char signature[] =
                "(Ljava/lang/String;Ljava/lang/String;J)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::ANY;

    template<class Impl> class Natives;
};

class ThumbnailHelper : public mozilla::jni::ObjectBase<ThumbnailHelper>
{
public:
    static const char name[];

    explicit ThumbnailHelper(const Context& ctx) : ObjectBase<ThumbnailHelper>(ctx) {}

    struct NotifyThumbnail_t {
        typedef ThumbnailHelper Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ByteBuffer::Param,
                mozilla::jni::Object::Param,
                bool,
                bool> Args;
        static constexpr char name[] = "notifyThumbnail";
        static constexpr char signature[] =
                "(Ljava/nio/ByteBuffer;Lorg/mozilla/gecko/Tab;ZZ)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto NotifyThumbnail(mozilla::jni::ByteBuffer::Param, mozilla::jni::Object::Param, bool, bool) -> void;

    struct RequestThumbnail_t {
        typedef ThumbnailHelper Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ByteBuffer::Param,
                mozilla::jni::Object::Param,
                int32_t,
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "requestThumbnailLocked";
        static constexpr char signature[] =
                "(Ljava/nio/ByteBuffer;Lorg/mozilla/gecko/Tab;III)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::PROXY;
    };

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::ANY;

    template<class Impl> class Natives;
};

class ZoomedView : public mozilla::jni::ObjectBase<ZoomedView>
{
public:
    static const char name[];

    explicit ZoomedView(const Context& ctx) : ObjectBase<ZoomedView>(ctx) {}

    struct RequestZoomedViewData_t {
        typedef ZoomedView Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ByteBuffer::Param,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                float> Args;
        static constexpr char name[] = "requestZoomedViewData";
        static constexpr char signature[] =
                "(Ljava/nio/ByteBuffer;IIIIIF)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::ANY;

    template<class Impl> class Natives;
};

class AudioFocusAgent : public mozilla::jni::ObjectBase<AudioFocusAgent>
{
public:
    static const char name[];

    explicit AudioFocusAgent(const Context& ctx) : ObjectBase<AudioFocusAgent>(ctx) {}

    struct NotifyStartedPlaying_t {
        typedef AudioFocusAgent Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "notifyStartedPlaying";
        static constexpr char signature[] =
                "()V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto NotifyStartedPlaying() -> void;

    struct NotifyStoppedPlaying_t {
        typedef AudioFocusAgent Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "notifyStoppedPlaying";
        static constexpr char signature[] =
                "()V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto NotifyStoppedPlaying() -> void;

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::GECKO;

};

class CodecProxy : public mozilla::jni::ObjectBase<CodecProxy>
{
public:
    static const char name[];

    explicit CodecProxy(const Context& ctx) : ObjectBase<CodecProxy>(ctx) {}

    class NativeCallbacks;

    struct Create_t {
        typedef CodecProxy Owner;
        typedef CodecProxy::LocalRef ReturnType;
        typedef CodecProxy::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "create";
        static constexpr char signature[] =
                "(Landroid/media/MediaFormat;Landroid/view/Surface;Lorg/mozilla/gecko/media/CodecProxy$Callbacks;)Lorg/mozilla/gecko/media/CodecProxy;";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto Create(mozilla::jni::Object::Param, mozilla::jni::Object::Param, mozilla::jni::Object::Param) -> CodecProxy::LocalRef;

    struct Flush_t {
        typedef CodecProxy Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "flush";
        static constexpr char signature[] =
                "()Z";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto Flush() const -> bool;

    struct Input_t {
        typedef CodecProxy Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ByteBuffer::Param,
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "input";
        static constexpr char signature[] =
                "(Ljava/nio/ByteBuffer;Landroid/media/MediaCodec$BufferInfo;Landroid/media/MediaCodec$CryptoInfo;)Z";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto Input(mozilla::jni::ByteBuffer::Param, mozilla::jni::Object::Param, mozilla::jni::Object::Param) const -> bool;

    struct Release_t {
        typedef CodecProxy Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "release";
        static constexpr char signature[] =
                "()Z";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto Release() const -> bool;

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::ANY;

};

class CodecProxy::NativeCallbacks : public mozilla::jni::ObjectBase<NativeCallbacks>
{
public:
    static const char name[];

    explicit NativeCallbacks(const Context& ctx) : ObjectBase<NativeCallbacks>(ctx) {}

    struct New_t {
        typedef NativeCallbacks Owner;
        typedef NativeCallbacks::LocalRef ReturnType;
        typedef NativeCallbacks::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "<init>";
        static constexpr char signature[] =
                "()V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto New() -> NativeCallbacks::LocalRef;

    struct DisposeNative_t {
        typedef NativeCallbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "disposeNative";
        static constexpr char signature[] =
                "()V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct OnError_t {
        typedef NativeCallbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                bool> Args;
        static constexpr char name[] = "onError";
        static constexpr char signature[] =
                "(Z)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct OnInputExhausted_t {
        typedef NativeCallbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "onInputExhausted";
        static constexpr char signature[] =
                "()V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct OnOutput_t {
        typedef NativeCallbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "onOutput";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/media/Sample;)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct OnOutputFormatChanged_t {
        typedef NativeCallbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "onOutputFormatChanged";
        static constexpr char signature[] =
                "(Landroid/media/MediaFormat;)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::ANY;

    template<class Impl> class Natives;
};

class MediaDrmProxy : public mozilla::jni::ObjectBase<MediaDrmProxy>
{
public:
    static const char name[];

    explicit MediaDrmProxy(const Context& ctx) : ObjectBase<MediaDrmProxy>(ctx) {}

    class NativeMediaDrmProxyCallbacks;

    struct CanDecode_t {
        typedef MediaDrmProxy Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "CanDecode";
        static constexpr char signature[] =
                "(Ljava/lang/String;)Z";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto CanDecode(mozilla::jni::String::Param) -> bool;

    struct IsCryptoSchemeSupported_t {
        typedef MediaDrmProxy Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "IsCryptoSchemeSupported";
        static constexpr char signature[] =
                "(Ljava/lang/String;Ljava/lang/String;)Z";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto IsCryptoSchemeSupported(mozilla::jni::String::Param, mozilla::jni::String::Param) -> bool;

    struct CloseSession_t {
        typedef MediaDrmProxy Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "closeSession";
        static constexpr char signature[] =
                "(ILjava/lang/String;)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto CloseSession(int32_t, mozilla::jni::String::Param) const -> void;

    struct Create_t {
        typedef MediaDrmProxy Owner;
        typedef MediaDrmProxy::LocalRef ReturnType;
        typedef MediaDrmProxy::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::Object::Param,
                bool> Args;
        static constexpr char name[] = "create";
        static constexpr char signature[] =
                "(Ljava/lang/String;Lorg/mozilla/gecko/media/MediaDrmProxy$Callbacks;Z)Lorg/mozilla/gecko/media/MediaDrmProxy;";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto Create(mozilla::jni::String::Param, mozilla::jni::Object::Param, bool) -> MediaDrmProxy::LocalRef;

    struct CreateSession_t {
        typedef MediaDrmProxy Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                mozilla::jni::String::Param,
                mozilla::jni::ByteArray::Param> Args;
        static constexpr char name[] = "createSession";
        static constexpr char signature[] =
                "(IILjava/lang/String;[B)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto CreateSession(int32_t, int32_t, mozilla::jni::String::Param, mozilla::jni::ByteArray::Param) const -> void;

    struct Destroy_t {
        typedef MediaDrmProxy Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "destroy";
        static constexpr char signature[] =
                "()V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto Destroy() const -> void;

    struct IsSchemeSupported_t {
        typedef MediaDrmProxy Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "isSchemeSupported";
        static constexpr char signature[] =
                "(Ljava/lang/String;)Z";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto IsSchemeSupported(mozilla::jni::String::Param) -> bool;

    struct UpdateSession_t {
        typedef MediaDrmProxy Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                mozilla::jni::String::Param,
                mozilla::jni::ByteArray::Param> Args;
        static constexpr char name[] = "updateSession";
        static constexpr char signature[] =
                "(ILjava/lang/String;[B)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto UpdateSession(int32_t, mozilla::jni::String::Param, mozilla::jni::ByteArray::Param) const -> void;

    static const char16_t AAC[];

    static const char16_t AVC[];

    static const char16_t OPUS[];

    static const char16_t VORBIS[];

    static const char16_t VP8[];

    static const char16_t VP9[];

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::ANY;

};

class MediaDrmProxy::NativeMediaDrmProxyCallbacks : public mozilla::jni::ObjectBase<NativeMediaDrmProxyCallbacks>
{
public:
    static const char name[];

    explicit NativeMediaDrmProxyCallbacks(const Context& ctx) : ObjectBase<NativeMediaDrmProxyCallbacks>(ctx) {}

    struct New_t {
        typedef NativeMediaDrmProxyCallbacks Owner;
        typedef NativeMediaDrmProxyCallbacks::LocalRef ReturnType;
        typedef NativeMediaDrmProxyCallbacks::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "<init>";
        static constexpr char signature[] =
                "()V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto New() -> NativeMediaDrmProxyCallbacks::LocalRef;

    struct OnRejectPromise_t {
        typedef NativeMediaDrmProxyCallbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "onRejectPromise";
        static constexpr char signature[] =
                "(ILjava/lang/String;)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct OnSessionBatchedKeyChanged_t {
        typedef NativeMediaDrmProxyCallbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ByteArray::Param,
                mozilla::jni::ObjectArray::Param> Args;
        static constexpr char name[] = "onSessionBatchedKeyChanged";
        static constexpr char signature[] =
                "([B[Lorg/mozilla/gecko/media/SessionKeyInfo;)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct OnSessionClosed_t {
        typedef NativeMediaDrmProxyCallbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                mozilla::jni::ByteArray::Param> Args;
        static constexpr char name[] = "onSessionClosed";
        static constexpr char signature[] =
                "(I[B)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct OnSessionCreated_t {
        typedef NativeMediaDrmProxyCallbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                mozilla::jni::ByteArray::Param,
                mozilla::jni::ByteArray::Param> Args;
        static constexpr char name[] = "onSessionCreated";
        static constexpr char signature[] =
                "(II[B[B)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct OnSessionError_t {
        typedef NativeMediaDrmProxyCallbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ByteArray::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "onSessionError";
        static constexpr char signature[] =
                "([BLjava/lang/String;)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct OnSessionMessage_t {
        typedef NativeMediaDrmProxyCallbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ByteArray::Param,
                int32_t,
                mozilla::jni::ByteArray::Param> Args;
        static constexpr char name[] = "onSessionMessage";
        static constexpr char signature[] =
                "([BI[B)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct OnSessionUpdated_t {
        typedef NativeMediaDrmProxyCallbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                mozilla::jni::ByteArray::Param> Args;
        static constexpr char name[] = "onSessionUpdated";
        static constexpr char signature[] =
                "(I[B)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::ANY;

    template<class Impl> class Natives;
};

class Sample : public mozilla::jni::ObjectBase<Sample>
{
public:
    static const char name[];

    explicit Sample(const Context& ctx) : ObjectBase<Sample>(ctx) {}

    struct WriteToByteBuffer_t {
        typedef Sample Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ByteBuffer::Param> Args;
        static constexpr char name[] = "writeToByteBuffer";
        static constexpr char signature[] =
                "(Ljava/nio/ByteBuffer;)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto WriteToByteBuffer(mozilla::jni::ByteBuffer::Param) const -> void;

    struct Info_t {
        typedef Sample Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "info";
        static constexpr char signature[] =
                "Landroid/media/MediaCodec$BufferInfo;";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto Info() const -> mozilla::jni::Object::LocalRef;

    auto Info(mozilla::jni::Object::Param) const -> void;

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::ANY;

};

class SessionKeyInfo : public mozilla::jni::ObjectBase<SessionKeyInfo>
{
public:
    static const char name[];

    explicit SessionKeyInfo(const Context& ctx) : ObjectBase<SessionKeyInfo>(ctx) {}

    struct New_t {
        typedef SessionKeyInfo Owner;
        typedef SessionKeyInfo::LocalRef ReturnType;
        typedef SessionKeyInfo::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ByteArray::Param,
                int32_t> Args;
        static constexpr char name[] = "<init>";
        static constexpr char signature[] =
                "([BI)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto New(mozilla::jni::ByteArray::Param, int32_t) -> SessionKeyInfo::LocalRef;

    struct KeyId_t {
        typedef SessionKeyInfo Owner;
        typedef mozilla::jni::ByteArray::LocalRef ReturnType;
        typedef mozilla::jni::ByteArray::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "keyId";
        static constexpr char signature[] =
                "[B";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto KeyId() const -> mozilla::jni::ByteArray::LocalRef;

    auto KeyId(mozilla::jni::ByteArray::Param) const -> void;

    struct Status_t {
        typedef SessionKeyInfo Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "status";
        static constexpr char signature[] =
                "I";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto Status() const -> int32_t;

    auto Status(int32_t) const -> void;

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::ANY;

};

class Restrictions : public mozilla::jni::ObjectBase<Restrictions>
{
public:
    static const char name[];

    explicit Restrictions(const Context& ctx) : ObjectBase<Restrictions>(ctx) {}

    struct IsAllowed_t {
        typedef Restrictions Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "isAllowed";
        static constexpr char signature[] =
                "(ILjava/lang/String;)Z";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto IsAllowed(int32_t, mozilla::jni::String::Param) -> bool;

    struct IsUserRestricted_t {
        typedef Restrictions Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "isUserRestricted";
        static constexpr char signature[] =
                "()Z";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::ABORT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto IsUserRestricted() -> bool;

    static const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::GECKO;

};

} /* java */
} /* mozilla */
#endif // FennecJNIWrappers_h
