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

#ifndef MOZ_PREPROCESSOR
#include "mozilla/jni/Refs.h"
#endif

namespace mozilla {
namespace java {

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

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

    struct OnAxisChange_t {
        typedef AndroidGamepadManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                mozilla::jni::BooleanArray::Param,
                mozilla::jni::FloatArray::Param> Args;
        static constexpr char name[] = "onAxisChange";
        static constexpr char signature[] =
                "(I[Z[F)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 OnButtonChange_t {
        typedef AndroidGamepadManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                bool,
                float> Args;
        static constexpr char name[] = "onButtonChange";
        static constexpr char signature[] =
                "(IIZF)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 OnGamepadAdded_t {
        typedef AndroidGamepadManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "onGamepadAdded";
        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 OnGamepadAdded(int32_t, int32_t) -> void;

    struct OnGamepadChange_t {
        typedef AndroidGamepadManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                bool> Args;
        static constexpr char name[] = "onGamepadChange";
        static constexpr char signature[] =
                "(IZ)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 Start_t {
        typedef AndroidGamepadManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "start";
        static constexpr char signature[] =
                "(Landroid/content/Context;)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(mozilla::jni::Object::Param) -> void;

    struct Stop_t {
        typedef AndroidGamepadManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "stop";
        static constexpr char signature[] =
                "(Landroid/content/Context;)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(mozilla::jni::Object::Param) -> void;

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

    template<class Impl> class Natives;
};

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

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

    struct ClearText_t {
        typedef Clipboard Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "clearText";
        static constexpr char signature[] =
                "(Landroid/content/Context;)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 ClearText(mozilla::jni::Object::Param) -> void;

    struct GetText_t {
        typedef Clipboard Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "getText";
        static constexpr char signature[] =
                "(Landroid/content/Context;)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 GetText(mozilla::jni::Object::Param) -> mozilla::jni::String::LocalRef;

    struct HasText_t {
        typedef Clipboard Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "hasText";
        static constexpr char signature[] =
                "(Landroid/content/Context;)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 HasText(mozilla::jni::Object::Param) -> bool;

    struct SetText_t {
        typedef Clipboard Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "setText";
        static constexpr char signature[] =
                "(Landroid/content/Context;Ljava/lang/CharSequence;)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 SetText(mozilla::jni::Object::Param, mozilla::jni::String::Param) -> void;

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

};

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

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

    class NativeCallbackDelegate;

    struct DispatchToGecko_t {
        typedef EventDispatcher Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "dispatchToGecko";
        static constexpr char signature[] =
                "(Ljava/lang/String;Lorg/mozilla/gecko/util/GeckoBundle;Lorg/mozilla/gecko/util/EventCallback;)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 DispatchToThreads_t {
        typedef EventDispatcher Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "dispatchToThreads";
        static constexpr char signature[] =
                "(Ljava/lang/String;Lorg/mozilla/gecko/util/GeckoBundle;Lorg/mozilla/gecko/util/EventCallback;)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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto DispatchToThreads(mozilla::jni::String::Param, mozilla::jni::Object::Param, mozilla::jni::Object::Param) const -> bool;

    struct DisposeNative_t {
        typedef EventDispatcher 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::GECKO;
    };

    struct GetInstance_t {
        typedef EventDispatcher Owner;
        typedef EventDispatcher::LocalRef ReturnType;
        typedef EventDispatcher::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getInstance";
        static constexpr char signature[] =
                "()Lorg/mozilla/gecko/EventDispatcher;";
        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 GetInstance() -> EventDispatcher::LocalRef;

    struct HasGeckoListener_t {
        typedef EventDispatcher Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "hasGeckoListener";
        static constexpr char signature[] =
                "(Ljava/lang/String;)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;
    };

    struct SetAttachedToGecko_t {
        typedef EventDispatcher Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "setAttachedToGecko";
        static constexpr char signature[] =
                "(I)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;
    };

    auto SetAttachedToGecko(int32_t) const -> void;

    static const int32_t ATTACHED = 1;

    static const int32_t DETACHED = 0;

    static const int32_t REATTACHING = 2;

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

    template<class Impl> class Natives;
};

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

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

    struct New_t {
        typedef NativeCallbackDelegate Owner;
        typedef NativeCallbackDelegate::LocalRef ReturnType;
        typedef NativeCallbackDelegate::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() -> NativeCallbackDelegate::LocalRef;

    struct Finalize_t {
        typedef NativeCallbackDelegate Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "finalize";
        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::GECKO;
    };

    struct SendError_t {
        typedef NativeCallbackDelegate Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "sendError";
        static constexpr char signature[] =
                "(Ljava/lang/Object;)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::PROXY;
    };

    struct SendSuccess_t {
        typedef NativeCallbackDelegate Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "sendSuccess";
        static constexpr char signature[] =
                "(Ljava/lang/Object;)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::PROXY;
    };

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

    template<class Impl> class Natives;
};

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

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

    class CameraCallback;

    struct CancelVibrate_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "cancelVibrate";
        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 CancelVibrate() -> void;

    struct CloseCamera_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "closeCamera";
        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 CloseCamera() -> void;

    struct CloseNotification_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "closeNotification";
        static constexpr char signature[] =
                "(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 CloseNotification(mozilla::jni::String::Param) -> void;

    struct ConnectionGetMimeType_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "connectionGetMimeType";
        static constexpr char signature[] =
                "(Ljava/net/URLConnection;)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 ConnectionGetMimeType(mozilla::jni::Object::Param) -> mozilla::jni::String::LocalRef;

    struct CreateInputStream_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "createInputStream";
        static constexpr char signature[] =
                "(Ljava/net/URLConnection;)Ljava/io/InputStream;";
        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 CreateInputStream(mozilla::jni::Object::Param) -> mozilla::jni::Object::LocalRef;

    struct DisableBatteryNotifications_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "disableBatteryNotifications";
        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 DisableBatteryNotifications() -> void;

    struct DisableNetworkNotifications_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "disableNetworkNotifications";
        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 DisableNetworkNotifications() -> void;

    struct DisableScreenOrientationNotifications_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "disableScreenOrientationNotifications";
        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 DisableScreenOrientationNotifications() -> void;

    struct DisableSensor_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "disableSensor";
        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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto DisableSensor(int32_t) -> void;

    struct EnableBatteryNotifications_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "enableBatteryNotifications";
        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 EnableBatteryNotifications() -> void;

    struct EnableLocation_t {
        typedef GeckoAppShell Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                bool> Args;
        static constexpr char name[] = "enableLocation";
        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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto EnableLocation(bool) -> bool;

    struct EnableLocationHighAccuracy_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                bool> Args;
        static constexpr char name[] = "enableLocationHighAccuracy";
        static constexpr char signature[] =
                "(Z)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 EnableLocationHighAccuracy(bool) -> void;

    struct EnableNetworkNotifications_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "enableNetworkNotifications";
        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 EnableNetworkNotifications() -> void;

    struct EnableScreenOrientationNotifications_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "enableScreenOrientationNotifications";
        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 EnableScreenOrientationNotifications() -> void;

    struct EnableSensor_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "enableSensor";
        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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto EnableSensor(int32_t) -> void;

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

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

    struct GetApplicationContext_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getApplicationContext";
        static constexpr char signature[] =
                "()Landroid/content/Context;";
        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 GetApplicationContext() -> mozilla::jni::Object::LocalRef;

    struct GetAudioOutputFramesPerBuffer_t {
        typedef GeckoAppShell Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getAudioOutputFramesPerBuffer";
        static constexpr char signature[] =
                "()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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetAudioOutputFramesPerBuffer() -> int32_t;

    struct GetAudioOutputSampleRate_t {
        typedef GeckoAppShell Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getAudioOutputSampleRate";
        static constexpr char signature[] =
                "()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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetAudioOutputSampleRate() -> int32_t;

    struct GetConnection_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "getConnection";
        static constexpr char signature[] =
                "(Ljava/lang/String;)Ljava/net/URLConnection;";
        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 GetConnection(mozilla::jni::String::Param) -> mozilla::jni::Object::LocalRef;

    struct GetCurrentBatteryInformation_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::DoubleArray::LocalRef ReturnType;
        typedef mozilla::jni::DoubleArray::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getCurrentBatteryInformation";
        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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetCurrentBatteryInformation() -> mozilla::jni::DoubleArray::LocalRef;

    struct GetCurrentNetworkInformation_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::DoubleArray::LocalRef ReturnType;
        typedef mozilla::jni::DoubleArray::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getCurrentNetworkInformation";
        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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetCurrentNetworkInformation() -> mozilla::jni::DoubleArray::LocalRef;

    struct GetDefaultLocale_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getDefaultLocale";
        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;
    };

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

    struct GetDensity_t {
        typedef GeckoAppShell Owner;
        typedef float ReturnType;
        typedef float SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getDensity";
        static constexpr char signature[] =
                "()F";
        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 GetDensity() -> float;

    struct GetDpi_t {
        typedef GeckoAppShell Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getDpi";
        static constexpr char signature[] =
                "()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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetDpi() -> int32_t;

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

    static auto GetExceptionStackTrace(mozilla::jni::Throwable::Param) -> mozilla::jni::String::LocalRef;

    struct GetExtensionFromMimeType_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "getExtensionFromMimeType";
        static constexpr char signature[] =
                "(Ljava/lang/String;)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 GetExtensionFromMimeType(mozilla::jni::String::Param) -> mozilla::jni::String::LocalRef;

    struct GetHWDecoderCapability_t {
        typedef GeckoAppShell Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getHWDecoderCapability";
        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 GetHWDecoderCapability() -> bool;

    struct GetHWEncoderCapability_t {
        typedef GeckoAppShell Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getHWEncoderCapability";
        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 GetHWEncoderCapability() -> bool;

    struct GetHandlersForMimeType_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::ObjectArray::LocalRef ReturnType;
        typedef mozilla::jni::ObjectArray::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "getHandlersForMimeType";
        static constexpr char signature[] =
                "(Ljava/lang/String;Ljava/lang/String;)[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 GetHandlersForMimeType(mozilla::jni::String::Param, mozilla::jni::String::Param) -> mozilla::jni::ObjectArray::LocalRef;

    struct GetHandlersForURL_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::ObjectArray::LocalRef ReturnType;
        typedef mozilla::jni::ObjectArray::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "getHandlersForURL";
        static constexpr char signature[] =
                "(Ljava/lang/String;Ljava/lang/String;)[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 GetHandlersForURL(mozilla::jni::String::Param, mozilla::jni::String::Param) -> mozilla::jni::ObjectArray::LocalRef;

    struct GetIconForExtension_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::ByteArray::LocalRef ReturnType;
        typedef mozilla::jni::ByteArray::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                int32_t> Args;
        static constexpr char name[] = "getIconForExtension";
        static constexpr char signature[] =
                "(Ljava/lang/String;I)[B";
        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 GetIconForExtension(mozilla::jni::String::Param, int32_t) -> mozilla::jni::ByteArray::LocalRef;

    struct GetMaxTouchPoints_t {
        typedef GeckoAppShell Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getMaxTouchPoints";
        static constexpr char signature[] =
                "()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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetMaxTouchPoints() -> int32_t;

    struct GetMimeTypeFromExtensions_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "getMimeTypeFromExtensions";
        static constexpr char signature[] =
                "(Ljava/lang/String;)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 GetMimeTypeFromExtensions(mozilla::jni::String::Param) -> mozilla::jni::String::LocalRef;

    struct GetNetworkLinkType_t {
        typedef GeckoAppShell Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getNetworkLinkType";
        static constexpr char signature[] =
                "()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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetNetworkLinkType() -> int32_t;

    struct GetProxyForURI_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                int32_t> Args;
        static constexpr char name[] = "getProxyForURI";
        static constexpr char signature[] =
                "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

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

    struct GetScreenAngle_t {
        typedef GeckoAppShell Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getScreenAngle";
        static constexpr char signature[] =
                "()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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetScreenAngle() -> int32_t;

    struct GetScreenDepth_t {
        typedef GeckoAppShell Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getScreenDepth";
        static constexpr char signature[] =
                "()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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetScreenDepth() -> int32_t;

    struct GetScreenOrientation_t {
        typedef GeckoAppShell Owner;
        typedef int16_t ReturnType;
        typedef int16_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getScreenOrientation";
        static constexpr char signature[] =
                "()S";
        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 GetScreenOrientation() -> int16_t;

    struct GetScreenSize_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getScreenSize";
        static constexpr char signature[] =
                "()Landroid/graphics/Rect;";
        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 GetScreenSize() -> mozilla::jni::Object::LocalRef;

    struct GetShowPasswordSetting_t {
        typedef GeckoAppShell Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getShowPasswordSetting";
        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 GetShowPasswordSetting() -> bool;

    struct GetSystemColors_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::IntArray::LocalRef ReturnType;
        typedef mozilla::jni::IntArray::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getSystemColors";
        static constexpr char signature[] =
                "()[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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto GetSystemColors() -> mozilla::jni::IntArray::LocalRef;

    struct HandleUncaughtException_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Throwable::Param> Args;
        static constexpr char name[] = "handleUncaughtException";
        static constexpr char signature[] =
                "(Ljava/lang/Throwable;)V";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::IGNORE;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto HandleUncaughtException(mozilla::jni::Throwable::Param) -> void;

    struct HideProgressDialog_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "hideProgressDialog";
        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 HideProgressDialog() -> void;

    struct InitCamera_t {
        typedef GeckoAppShell Owner;
        typedef mozilla::jni::IntArray::LocalRef ReturnType;
        typedef mozilla::jni::IntArray::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                int32_t,
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "initCamera";
        static constexpr char signature[] =
                "(Ljava/lang/String;III)[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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto InitCamera(mozilla::jni::String::Param, int32_t, int32_t, int32_t) -> mozilla::jni::IntArray::LocalRef;

    struct IsNetworkLinkKnown_t {
        typedef GeckoAppShell Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "isNetworkLinkKnown";
        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 IsNetworkLinkKnown() -> bool;

    struct IsNetworkLinkUp_t {
        typedef GeckoAppShell Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "isNetworkLinkUp";
        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 IsNetworkLinkUp() -> bool;

    struct IsTablet_t {
        typedef GeckoAppShell Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "isTablet";
        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 IsTablet() -> bool;

    struct KillAnyZombies_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "killAnyZombies";
        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 KillAnyZombies() -> void;

    struct LockScreenOrientation_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "lockScreenOrientation";
        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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto LockScreenOrientation(int32_t) -> void;

    struct MoveTaskToBack_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "moveTaskToBack";
        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 MoveTaskToBack() -> void;

    struct NotifyObservers_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "nativeNotifyObservers";
        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::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct NotifyAlertListener_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "notifyAlertListener";
        static constexpr char signature[] =
                "(Ljava/lang/String;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::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct NotifyUriVisited_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "notifyUriVisited";
        static constexpr char signature[] =
                "(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::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct NotifyWakeLockChanged_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "notifyWakeLockChanged";
        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 NotifyWakeLockChanged(mozilla::jni::String::Param, mozilla::jni::String::Param) -> void;

    struct OnLocationChanged_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                double,
                double,
                double,
                float,
                float,
                float,
                int64_t> Args;
        static constexpr char name[] = "onLocationChanged";
        static constexpr char signature[] =
                "(DDDFFFJ)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 OnSensorChanged_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                float,
                float,
                float,
                float,
                int32_t,
                int64_t> Args;
        static constexpr char name[] = "onSensorChanged";
        static constexpr char signature[] =
                "(IFFFFIJ)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::GECKO;
    };

    struct OpenUriExternal_t {
        typedef GeckoAppShell Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "openUriExternal";
        static constexpr char signature[] =
                "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

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

    struct PerformHapticFeedback_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                bool> Args;
        static constexpr char name[] = "performHapticFeedback";
        static constexpr char signature[] =
                "(Z)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 PerformHapticFeedback(bool) -> void;

    struct ReportJavaCrash_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Throwable::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "reportJavaCrash";
        static constexpr char signature[] =
                "(Ljava/lang/Throwable;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::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct SetScreenDepthOverride_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "setScreenDepthOverride";
        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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto SetScreenDepthOverride(int32_t) -> void;

    struct ShowNotification_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "showNotification";
        static constexpr char signature[] =
                "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;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 ShowNotification(mozilla::jni::String::Param, mozilla::jni::String::Param, mozilla::jni::String::Param, mozilla::jni::String::Param, mozilla::jni::String::Param, mozilla::jni::String::Param, mozilla::jni::String::Param) -> void;

    struct UnlockProfile_t {
        typedef GeckoAppShell Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "unlockProfile";
        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 UnlockProfile() -> bool;

    struct UnlockScreenOrientation_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "unlockScreenOrientation";
        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 UnlockScreenOrientation() -> void;

    struct Vibrate_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int64_t> Args;
        static constexpr char name[] = "vibrate";
        static constexpr char signature[] =
                "(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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto Vibrate(int64_t) -> void;

    struct Vibrate2_t {
        typedef GeckoAppShell Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::LongArray::Param,
                int32_t> Args;
        static constexpr char name[] = "vibrate";
        static constexpr char signature[] =
                "([JI)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 Vibrate(mozilla::jni::LongArray::Param, int32_t) -> void;

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

    template<class Impl> class Natives;
};

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

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

    struct OnFrameData_t {
        typedef CameraCallback Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                mozilla::jni::ByteArray::Param> Args;
        static constexpr char name[] = "onFrameData";
        static constexpr char signature[] =
                "(I[B)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 const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::GECKO;

    template<class Impl> class Natives;
};

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

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

    struct OnBatteryChange_t {
        typedef GeckoBatteryManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                double,
                bool,
                double> Args;
        static constexpr char name[] = "onBatteryChange";
        static constexpr char signature[] =
                "(DZD)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::GECKO;
    };

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

    template<class Impl> class Natives;
};

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

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

    struct New_t {
        typedef GeckoEditableChild Owner;
        typedef GeckoEditableChild::LocalRef ReturnType;
        typedef GeckoEditableChild::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "<init>";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/IGeckoEditableParent;)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(mozilla::jni::Object::Param) -> GeckoEditableChild::LocalRef;

    struct NotifyIME_t {
        typedef GeckoEditableChild Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "notifyIME";
        static constexpr char signature[] =
                "(I)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;
    };

    auto NotifyIME(int32_t) const -> void;

    struct NotifyIMEContext_t {
        typedef GeckoEditableChild Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                mozilla::jni::String::Param,
                int32_t> Args;
        static constexpr char name[] = "notifyIMEContext";
        static constexpr char signature[] =
                "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)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;
    };

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

    struct OnDefaultKeyEvent_t {
        typedef GeckoEditableChild Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "onDefaultKeyEvent";
        static constexpr char signature[] =
                "(Landroid/view/KeyEvent;)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;
    };

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

    struct OnImeAddCompositionRange_t {
        typedef GeckoEditableChild Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                bool,
                int32_t,
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "onImeAddCompositionRange";
        static constexpr char signature[] =
                "(IIIIIZIII)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::PROXY;
    };

    struct OnImeReplaceText_t {
        typedef GeckoEditableChild Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "onImeReplaceText";
        static constexpr char signature[] =
                "(IILjava/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::PROXY;
    };

    struct OnImeRequestCursorUpdates_t {
        typedef GeckoEditableChild Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "onImeRequestCursorUpdates";
        static constexpr char signature[] =
                "(I)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::PROXY;
    };

    struct OnImeSynchronize_t {
        typedef GeckoEditableChild Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "onImeSynchronize";
        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::PROXY;
    };

    struct OnImeUpdateComposition_t {
        typedef GeckoEditableChild Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "onImeUpdateComposition";
        static constexpr char signature[] =
                "(III)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::PROXY;
    };

    struct OnKeyEvent_t {
        typedef GeckoEditableChild Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int64_t,
                int32_t,
                int32_t,
                int32_t,
                bool,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "onKeyEvent";
        static constexpr char signature[] =
                "(IIIIIJIIIZLandroid/view/KeyEvent;)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::PROXY;
    };

    struct OnSelectionChange_t {
        typedef GeckoEditableChild Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "onSelectionChange";
        static constexpr char signature[] =
                "(II)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::IGNORE;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto OnSelectionChange(int32_t, int32_t) const -> void;

    struct OnTextChange_t {
        typedef GeckoEditableChild Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                int32_t,
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "onTextChange";
        static constexpr char signature[] =
                "(Ljava/lang/CharSequence;III)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::IGNORE;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

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

    struct UpdateCompositionRects_t {
        typedef GeckoEditableChild Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ObjectArray::Param> Args;
        static constexpr char name[] = "updateCompositionRects";
        static constexpr char signature[] =
                "([Landroid/graphics/RectF;)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;
    };

    auto UpdateCompositionRects(mozilla::jni::ObjectArray::Param) const -> void;

    static const int32_t FLAG_KEEP_CURRENT_COMPOSITION = 1;

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

    template<class Impl> class Natives;
};

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

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

    struct OnConnectionChanged_t {
        typedef GeckoNetworkManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                mozilla::jni::String::Param,
                bool,
                int32_t> Args;
        static constexpr char name[] = "onConnectionChanged";
        static constexpr char signature[] =
                "(ILjava/lang/String;ZI)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 OnStatusChanged_t {
        typedef GeckoNetworkManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "onStatusChanged";
        static constexpr char signature[] =
                "(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::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 GeckoScreenOrientation : public mozilla::jni::ObjectBase<GeckoScreenOrientation>
{
public:
    static const char name[];

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

    struct OnOrientationChange_t {
        typedef GeckoScreenOrientation Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int16_t,
                int16_t> Args;
        static constexpr char name[] = "onOrientationChange";
        static constexpr char signature[] =
                "(SS)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 GeckoSession : public mozilla::jni::ObjectBase<GeckoSession>
{
public:
    static const char name[];

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

    class Window;

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

};

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

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

    struct AttachEditable_t {
        typedef Window Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "attachEditable";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/IGeckoEditableParent;Lorg/mozilla/gecko/GeckoEditableChild;)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::PROXY;
    };

    struct Close_t {
        typedef Window Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "close";
        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::PROXY;
    };

    struct DisposeNative_t {
        typedef Window Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "nativeDisposeNative";
        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::PROXY;
    };

    struct OnReady_t {
        typedef Window Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "onReady";
        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;
    };

    auto OnReady() const -> void;

    struct OnTransfer_t {
        typedef Window Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "onTransfer";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/EventDispatcher;)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;
    };

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

    struct Open_t {
        typedef Window Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                Window::Param,
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param,
                mozilla::jni::String::Param,
                int32_t,
                bool> Args;
        static constexpr char name[] = "open";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/GeckoSession$Window;Lorg/mozilla/gecko/gfx/LayerSession$Compositor;Lorg/mozilla/gecko/EventDispatcher;Lorg/mozilla/gecko/util/GeckoBundle;Ljava/lang/String;IZ)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;
    };

    struct Transfer_t {
        typedef Window Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "transfer";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/gfx/LayerSession$Compositor;Lorg/mozilla/gecko/EventDispatcher;Lorg/mozilla/gecko/util/GeckoBundle;)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::PROXY;
    };

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

    template<class Impl> class Natives;
};

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

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

    class State;

    struct CheckAndSetState_t {
        typedef GeckoThread Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "checkAndSetState";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/GeckoThread$State;Lorg/mozilla/gecko/GeckoThread$State;)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 CheckAndSetState(mozilla::jni::Object::Param, mozilla::jni::Object::Param) -> bool;

    struct ForceQuit_t {
        typedef GeckoThread Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "forceQuit";
        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::GECKO;
    };

    struct IsChildProcess_t {
        typedef GeckoThread Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "isChildProcess";
        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::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto IsChildProcess() -> bool;

    struct CreateServices_t {
        typedef GeckoThread Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "nativeCreateServices";
        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::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct OnPause_t {
        typedef GeckoThread Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "nativeOnPause";
        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::GECKO;
    };

    struct OnResume_t {
        typedef GeckoThread Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "nativeOnResume";
        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::GECKO;
    };

    struct PumpMessageLoop_t {
        typedef GeckoThread Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "pumpMessageLoop";
        static constexpr char signature[] =
                "(Landroid/os/Message;)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 PumpMessageLoop(mozilla::jni::Object::Param) -> bool;

    struct RequestUiThreadCallback_t {
        typedef GeckoThread Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int64_t> Args;
        static constexpr char name[] = "requestUiThreadCallback";
        static constexpr char signature[] =
                "(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::CURRENT;
    };

    static auto RequestUiThreadCallback(int64_t) -> void;

    struct RunUiThreadCallback_t {
        typedef GeckoThread Owner;
        typedef int64_t ReturnType;
        typedef int64_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "runUiThreadCallback";
        static constexpr char signature[] =
                "()J";
        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 SetState_t {
        typedef GeckoThread Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "setState";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/GeckoThread$State;)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 SetState(mozilla::jni::Object::Param) -> void;

    struct SpeculativeConnect_t {
        typedef GeckoThread Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "speculativeConnectNative";
        static constexpr char signature[] =
                "(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::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct WaitOnGecko_t {
        typedef GeckoThread Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "waitOnGecko";
        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 ClsLoader_t {
        typedef GeckoThread Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "clsLoader";
        static constexpr char signature[] =
                "Ljava/lang/ClassLoader;";
        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 ClsLoader() -> mozilla::jni::Object::LocalRef;

    struct MsgQueue_t {
        typedef GeckoThread Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "msgQueue";
        static constexpr char signature[] =
                "Landroid/os/MessageQueue;";
        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 MsgQueue() -> mozilla::jni::Object::LocalRef;

    static auto MsgQueue(mozilla::jni::Object::Param) -> void;

    struct UiThreadId_t {
        typedef GeckoThread Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "uiThreadId";
        static constexpr char signature[] =
                "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;
    };

    static auto UiThreadId() -> int32_t;

    static auto UiThreadId(int32_t) -> void;

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

    template<class Impl> class Natives;
};

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

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

    struct EXITED_t {
        typedef State Owner;
        typedef State::LocalRef ReturnType;
        typedef State::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "EXITED";
        static constexpr char signature[] =
                "Lorg/mozilla/gecko/GeckoThread$State;";
        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 EXITED() -> State::LocalRef;

    struct EXITING_t {
        typedef State Owner;
        typedef State::LocalRef ReturnType;
        typedef State::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "EXITING";
        static constexpr char signature[] =
                "Lorg/mozilla/gecko/GeckoThread$State;";
        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 EXITING() -> State::LocalRef;

    struct INITIAL_t {
        typedef State Owner;
        typedef State::LocalRef ReturnType;
        typedef State::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "INITIAL";
        static constexpr char signature[] =
                "Lorg/mozilla/gecko/GeckoThread$State;";
        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 INITIAL() -> State::LocalRef;

    struct JNI_READY_t {
        typedef State Owner;
        typedef State::LocalRef ReturnType;
        typedef State::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "JNI_READY";
        static constexpr char signature[] =
                "Lorg/mozilla/gecko/GeckoThread$State;";
        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 JNI_READY() -> State::LocalRef;

    struct LAUNCHED_t {
        typedef State Owner;
        typedef State::LocalRef ReturnType;
        typedef State::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "LAUNCHED";
        static constexpr char signature[] =
                "Lorg/mozilla/gecko/GeckoThread$State;";
        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 LAUNCHED() -> State::LocalRef;

    struct LIBS_READY_t {
        typedef State Owner;
        typedef State::LocalRef ReturnType;
        typedef State::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "LIBS_READY";
        static constexpr char signature[] =
                "Lorg/mozilla/gecko/GeckoThread$State;";
        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 LIBS_READY() -> State::LocalRef;

    struct MOZGLUE_READY_t {
        typedef State Owner;
        typedef State::LocalRef ReturnType;
        typedef State::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "MOZGLUE_READY";
        static constexpr char signature[] =
                "Lorg/mozilla/gecko/GeckoThread$State;";
        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 MOZGLUE_READY() -> State::LocalRef;

    struct PROFILE_READY_t {
        typedef State Owner;
        typedef State::LocalRef ReturnType;
        typedef State::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "PROFILE_READY";
        static constexpr char signature[] =
                "Lorg/mozilla/gecko/GeckoThread$State;";
        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 PROFILE_READY() -> State::LocalRef;

    struct RESTARTING_t {
        typedef State Owner;
        typedef State::LocalRef ReturnType;
        typedef State::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "RESTARTING";
        static constexpr char signature[] =
                "Lorg/mozilla/gecko/GeckoThread$State;";
        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 RESTARTING() -> State::LocalRef;

    struct RUNNING_t {
        typedef State Owner;
        typedef State::LocalRef ReturnType;
        typedef State::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "RUNNING";
        static constexpr char signature[] =
                "Lorg/mozilla/gecko/GeckoThread$State;";
        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 RUNNING() -> State::LocalRef;

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

};

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

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

    struct CleanupGVRNonPresentingContext_t {
        typedef GeckoVRManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "cleanupGVRNonPresentingContext";
        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;
    };

    struct CreateGVRNonPresentingContext_t {
        typedef GeckoVRManager Owner;
        typedef int64_t ReturnType;
        typedef int64_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "createGVRNonPresentingContext";
        static constexpr char signature[] =
                "()J";
        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 CreateGVRNonPresentingContext() -> int64_t;

    struct DestroyGVRNonPresentingContext_t {
        typedef GeckoVRManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "destroyGVRNonPresentingContext";
        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 DestroyGVRNonPresentingContext() -> void;

    struct DisableVRMode_t {
        typedef GeckoVRManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "disableVRMode";
        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 DisableVRMode() -> void;

    struct EnableVRMode_t {
        typedef GeckoVRManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "enableVRMode";
        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 EnableVRMode() -> void;

    struct IsGVRPresent_t {
        typedef GeckoVRManager Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "isGVRPresent";
        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::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto IsGVRPresent() -> bool;

    struct SetGVRPaused_t {
        typedef GeckoVRManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                bool> Args;
        static constexpr char name[] = "setGVRPaused";
        static constexpr char signature[] =
                "(Z)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 SetGVRPresentingContext_t {
        typedef GeckoVRManager Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int64_t> Args;
        static constexpr char name[] = "setGVRPresentingContext";
        static constexpr char signature[] =
                "(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::UI;
        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 PrefsHelper : public mozilla::jni::ObjectBase<PrefsHelper>
{
public:
    static const char name[];

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

    struct CallPrefHandler_t {
        typedef PrefsHelper Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param,
                int32_t,
                mozilla::jni::String::Param,
                bool,
                int32_t,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "callPrefHandler";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/PrefsHelper$PrefHandler;ILjava/lang/String;ZILjava/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 CallPrefHandler(mozilla::jni::Object::Param, int32_t, mozilla::jni::String::Param, bool, int32_t, mozilla::jni::String::Param) -> void;

    struct AddObserver_t {
        typedef PrefsHelper Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ObjectArray::Param,
                mozilla::jni::Object::Param,
                mozilla::jni::ObjectArray::Param> Args;
        static constexpr char name[] = "nativeAddObserver";
        static constexpr char signature[] =
                "([Ljava/lang/String;Lorg/mozilla/gecko/PrefsHelper$PrefHandler;[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::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct GetPrefs_t {
        typedef PrefsHelper Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ObjectArray::Param,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "nativeGetPrefs";
        static constexpr char signature[] =
                "([Ljava/lang/String;Lorg/mozilla/gecko/PrefsHelper$PrefHandler;)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 RemoveObserver_t {
        typedef PrefsHelper Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ObjectArray::Param> Args;
        static constexpr char name[] = "nativeRemoveObserver";
        static constexpr char signature[] =
                "([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::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct SetPref_t {
        typedef PrefsHelper Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                bool,
                int32_t,
                bool,
                int32_t,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "nativeSetPref";
        static constexpr char signature[] =
                "(Ljava/lang/String;ZIZILjava/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 OnPrefChange_t {
        typedef PrefsHelper Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                int32_t,
                bool,
                int32_t,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "onPrefChange";
        static constexpr char signature[] =
                "(Ljava/lang/String;IZILjava/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 OnPrefChange(mozilla::jni::String::Param, int32_t, bool, int32_t, mozilla::jni::String::Param) -> void;

    static const int32_t PREF_BOOL = 1;

    static const int32_t PREF_FINISH = 0;

    static const int32_t PREF_INT = 2;

    static const int32_t PREF_INVALID = -1;

    static const int32_t PREF_STRING = 3;

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

    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 SurfaceTextureListener : public mozilla::jni::ObjectBase<SurfaceTextureListener>
{
public:
    static const char name[];

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

    struct New_t {
        typedef SurfaceTextureListener Owner;
        typedef SurfaceTextureListener::LocalRef ReturnType;
        typedef SurfaceTextureListener::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() -> SurfaceTextureListener::LocalRef;

    struct DisposeNative_t {
        typedef SurfaceTextureListener 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::GECKO;
    };

    struct OnFrameAvailable_t {
        typedef SurfaceTextureListener Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "nativeOnFrameAvailable";
        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 const mozilla::jni::CallingThread callingThread =
            mozilla::jni::CallingThread::ANY;

    template<class Impl> class Natives;
};

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

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

    class EditableClient;
    class EditableListener;

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

};

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

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

    static const int32_t END_MONITOR = 3;

    static const int32_t ONE_SHOT = 1;

    static const int32_t START_MONITOR = 2;

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

};

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

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

    static const int32_t IME_FLAG_PRIVATE_BROWSING = 1;

    static const int32_t IME_FLAG_USER_ACTION = 2;

    static const int32_t NOTIFY_IME_OF_BLUR = 2;

    static const int32_t NOTIFY_IME_OF_FOCUS = 1;

    static const int32_t NOTIFY_IME_OF_TOKEN = -3;

    static const int32_t NOTIFY_IME_OPEN_VKB = -2;

    static const int32_t NOTIFY_IME_REPLY_EVENT = -1;

    static const int32_t NOTIFY_IME_TO_CANCEL_COMPOSITION = 9;

    static const int32_t NOTIFY_IME_TO_COMMIT_COMPOSITION = 8;

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

};

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

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

    struct New_t {
        typedef GeckoSurface Owner;
        typedef GeckoSurface::LocalRef ReturnType;
        typedef GeckoSurface::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "<init>";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/gfx/GeckoSurfaceTexture;)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        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::Object::Param, GeckoSurface::LocalRef*) -> nsresult;

    struct GetAvailable_t {
        typedef GeckoSurface Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getAvailable";
        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 GetAvailable() const -> bool;

    struct GetHandle_t {
        typedef GeckoSurface Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getHandle";
        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 GetHandle() const -> int32_t;

    struct SetAvailable_t {
        typedef GeckoSurface Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                bool> Args;
        static constexpr char name[] = "setAvailable";
        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;
    };

    auto SetAvailable(bool) const -> void;

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

};

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

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

    struct AttachToGLContext_t {
        typedef GeckoSurfaceTexture Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int64_t,
                int32_t> Args;
        static constexpr char name[] = "attachToGLContext";
        static constexpr char signature[] =
                "(JI)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto AttachToGLContext(int64_t, int32_t) const -> nsresult;

    struct DecrementUse_t {
        typedef GeckoSurfaceTexture Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "decrementUse";
        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 DecrementUse() const -> void;

    struct DestroyUnused_t {
        typedef GeckoSurfaceTexture Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int64_t> Args;
        static constexpr char name[] = "destroyUnused";
        static constexpr char signature[] =
                "(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::CURRENT;
    };

    static auto DestroyUnused(int64_t) -> void;

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

    auto DetachFromGLContext() const -> nsresult;

    struct GetHandle_t {
        typedef GeckoSurfaceTexture Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getHandle";
        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 GetHandle() const -> int32_t;

    struct GetTexName_t {
        typedef GeckoSurfaceTexture Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getTexName";
        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 GetTexName() const -> int32_t;

    struct IncrementUse_t {
        typedef GeckoSurfaceTexture Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "incrementUse";
        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 IncrementUse() const -> void;

    struct IsAttachedToGLContext_t {
        typedef GeckoSurfaceTexture Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                int64_t> Args;
        static constexpr char name[] = "isAttachedToGLContext";
        static constexpr char signature[] =
                "(J)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 IsAttachedToGLContext(int64_t) const -> bool;

    struct IsSingleBuffer_t {
        typedef GeckoSurfaceTexture Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "isSingleBuffer";
        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 IsSingleBuffer() const -> bool;

    struct IsSingleBufferSupported_t {
        typedef GeckoSurfaceTexture Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "isSingleBufferSupported";
        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::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto IsSingleBufferSupported() -> bool;

    struct Lookup_t {
        typedef GeckoSurfaceTexture Owner;
        typedef GeckoSurfaceTexture::LocalRef ReturnType;
        typedef GeckoSurfaceTexture::Param SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "lookup";
        static constexpr char signature[] =
                "(I)Lorg/mozilla/gecko/gfx/GeckoSurfaceTexture;";
        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 Lookup(int32_t) -> GeckoSurfaceTexture::LocalRef;

    struct ReleaseTexImage_t {
        typedef GeckoSurfaceTexture Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "releaseTexImage";
        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 ReleaseTexImage() const -> void;

    struct UpdateTexImage_t {
        typedef GeckoSurfaceTexture Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "updateTexImage";
        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 UpdateTexImage() const -> void;

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

};

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

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

    class Compositor;

    struct GetCompositor_t {
        typedef LayerSession Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getCompositorFromNative";
        static constexpr char signature[] =
                "()Ljava/lang/Object;";
        static const bool isStatic = false;
        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;
    };

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

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

};

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

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

    struct AttachNPZC_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "attachNPZC";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/gfx/NativePanZoomController;)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 CreateCompositor_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "createCompositor";
        static constexpr char signature[] =
                "(IILjava/lang/Object;)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::PROXY;
    };

    struct DisposeNative_t {
        typedef Compositor 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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct EnableLayerUpdateNotifications_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                bool> Args;
        static constexpr char name[] = "enableLayerUpdateNotifications";
        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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct OnBoundsChanged_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "onBoundsChanged";
        static constexpr char signature[] =
                "(IIII)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct OnCompositorAttached_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "onCompositorAttached";
        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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto OnCompositorAttached() const -> void;

    struct OnCompositorDetached_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "onCompositorDetached";
        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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto OnCompositorDetached() const -> void;

    struct OnSelectionCaretDrag_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                bool> Args;
        static constexpr char name[] = "onSelectionCaretDrag";
        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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto OnSelectionCaretDrag(bool) const -> void;

    struct RecvScreenPixels_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                mozilla::jni::IntArray::Param> Args;
        static constexpr char name[] = "recvScreenPixels";
        static constexpr char signature[] =
                "(II[I)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto RecvScreenPixels(int32_t, int32_t, mozilla::jni::IntArray::Param) const -> void;

    struct RecvToolbarAnimatorMessage_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "recvToolbarAnimatorMessage";
        static constexpr char signature[] =
                "(I)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto RecvToolbarAnimatorMessage(int32_t) const -> void;

    struct RequestScreenPixels_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "requestScreenPixels";
        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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct SendToolbarAnimatorMessage_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "sendToolbarAnimatorMessage";
        static constexpr char signature[] =
                "(I)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct SendToolbarPixelsToCompositor_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                mozilla::jni::IntArray::Param> Args;
        static constexpr char name[] = "sendToolbarPixelsToCompositor";
        static constexpr char signature[] =
                "(II[I)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct SetDefaultClearColor_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "setDefaultClearColor";
        static constexpr char signature[] =
                "(I)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct SetMaxToolbarHeight_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "setMaxToolbarHeight";
        static constexpr char signature[] =
                "(I)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct SetPinned_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                bool,
                int32_t> Args;
        static constexpr char name[] = "setPinned";
        static constexpr char signature[] =
                "(ZI)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct SyncPauseCompositor_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "syncPauseCompositor";
        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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct SyncResumeResizeCompositor_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "syncResumeResizeCompositor";
        static constexpr char signature[] =
                "(IILjava/lang/Object;)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct UpdateOverscrollOffset_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                float,
                float> Args;
        static constexpr char name[] = "updateOverscrollOffset";
        static constexpr char signature[] =
                "(FF)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto UpdateOverscrollOffset(float, float) const -> void;

    struct UpdateOverscrollVelocity_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                float,
                float> Args;
        static constexpr char name[] = "updateOverscrollVelocity";
        static constexpr char signature[] =
                "(FF)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto UpdateOverscrollVelocity(float, float) const -> void;

    struct UpdateRootFrameMetrics_t {
        typedef Compositor Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                float,
                float,
                float> Args;
        static constexpr char name[] = "updateRootFrameMetrics";
        static constexpr char signature[] =
                "(FFF)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto UpdateRootFrameMetrics(float, float, float) const -> void;

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

    template<class Impl> class Natives;
};

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

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

    struct DisposeNative_t {
        typedef NativePanZoomController 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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::GECKO;
    };

    struct HandleMotionEvent_t {
        typedef NativePanZoomController Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int64_t,
                int32_t,
                mozilla::jni::IntArray::Param,
                mozilla::jni::FloatArray::Param,
                mozilla::jni::FloatArray::Param,
                mozilla::jni::FloatArray::Param,
                mozilla::jni::FloatArray::Param,
                mozilla::jni::FloatArray::Param,
                mozilla::jni::FloatArray::Param> Args;
        static constexpr char name[] = "handleMotionEvent";
        static constexpr char signature[] =
                "(IIJI[I[F[F[F[F[F[F)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct HandleMouseEvent_t {
        typedef NativePanZoomController Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int64_t,
                int32_t,
                float,
                float,
                int32_t> Args;
        static constexpr char name[] = "handleMouseEvent";
        static constexpr char signature[] =
                "(IJIFFI)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct HandleScrollEvent_t {
        typedef NativePanZoomController Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                int64_t,
                int32_t,
                float,
                float,
                float,
                float> Args;
        static constexpr char name[] = "handleScrollEvent";
        static constexpr char signature[] =
                "(JIFFFF)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    struct SetIsLongpressEnabled_t {
        typedef NativePanZoomController Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                bool> Args;
        static constexpr char name[] = "nativeSetIsLongpressEnabled";
        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 SetAttached_t {
        typedef NativePanZoomController Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                bool> Args;
        static constexpr char name[] = "setAttached";
        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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto SetAttached(bool) const -> void;

    struct SynthesizeNativeMouseEvent_t {
        typedef NativePanZoomController Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "synthesizeNativeMouseEvent";
        static constexpr char signature[] =
                "(III)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto SynthesizeNativeMouseEvent(int32_t, int32_t, int32_t) const -> void;

    struct SynthesizeNativeTouchPoint_t {
        typedef NativePanZoomController Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                double,
                int32_t> Args;
        static constexpr char name[] = "synthesizeNativeTouchPoint";
        static constexpr char signature[] =
                "(IIIIDI)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::UI;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto SynthesizeNativeTouchPoint(int32_t, int32_t, int32_t, int32_t, double, int32_t) const -> void;

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

    template<class Impl> class Natives;
};

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

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

    struct New_t {
        typedef StackScroller Owner;
        typedef StackScroller::LocalRef ReturnType;
        typedef StackScroller::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "<init>";
        static constexpr char signature[] =
                "(Landroid/content/Context;)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        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::Object::Param, StackScroller::LocalRef*) -> nsresult;

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

    auto AbortAnimation() const -> nsresult;

    struct ComputeScrollOffset_t {
        typedef StackScroller Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                int64_t> Args;
        static constexpr char name[] = "computeScrollOffset";
        static constexpr char signature[] =
                "(J)Z";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto ComputeScrollOffset(int64_t, bool*) const -> nsresult;

    struct Fling_t {
        typedef StackScroller Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int64_t> Args;
        static constexpr char name[] = "fling";
        static constexpr char signature[] =
                "(IIIIIIIIIIJ)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto Fling(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int64_t) const -> nsresult;

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

    auto ForceFinished(bool) const -> nsresult;

    struct GetCurrSpeedX_t {
        typedef StackScroller Owner;
        typedef float ReturnType;
        typedef float SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getCurrSpeedX";
        static constexpr char signature[] =
                "()F";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto GetCurrSpeedX(float*) const -> nsresult;

    struct GetCurrSpeedY_t {
        typedef StackScroller Owner;
        typedef float ReturnType;
        typedef float SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getCurrSpeedY";
        static constexpr char signature[] =
                "()F";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto GetCurrSpeedY(float*) const -> nsresult;

    struct GetCurrX_t {
        typedef StackScroller Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getCurrX";
        static constexpr char signature[] =
                "()I";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto GetCurrX(int32_t*) const -> nsresult;

    struct GetCurrY_t {
        typedef StackScroller Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getCurrY";
        static constexpr char signature[] =
                "()I";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto GetCurrY(int32_t*) const -> nsresult;

    struct GetFinalX_t {
        typedef StackScroller Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getFinalX";
        static constexpr char signature[] =
                "()I";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto GetFinalX(int32_t*) const -> nsresult;

    struct GetFinalY_t {
        typedef StackScroller Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getFinalY";
        static constexpr char signature[] =
                "()I";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto GetFinalY(int32_t*) const -> nsresult;

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

    static auto InitContants() -> nsresult;

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

    auto IsFinished(bool*) const -> nsresult;

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

    auto SetFinalX(int32_t) const -> nsresult;

    struct SpringBack_t {
        typedef StackScroller Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int64_t> Args;
        static constexpr char name[] = "springBack";
        static constexpr char signature[] =
                "(IIIIIIJ)Z";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto SpringBack(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int64_t, bool*) const -> nsresult;

    struct StartScroll_t {
        typedef StackScroller Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int64_t,
                int32_t> Args;
        static constexpr char name[] = "startScroll";
        static constexpr char signature[] =
                "(IIIIJI)V";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto StartScroll(int32_t, int32_t, int32_t, int32_t, int64_t, int32_t) const -> nsresult;

    struct ViscousFluid_t {
        typedef StackScroller Owner;
        typedef float ReturnType;
        typedef float SetterType;
        typedef mozilla::jni::Args<
                float> Args;
        static constexpr char name[] = "viscousFluid";
        static constexpr char signature[] =
                "(F)F";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto ViscousFluid(float, float*) -> nsresult;

    static const int32_t FLING_MODE = 1;

    static const int32_t SCROLL_MODE = 0;

    struct MFlywheel_t {
        typedef StackScroller Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "mFlywheel";
        static constexpr char signature[] =
                "Z";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto MFlywheel(bool*) const -> nsresult;

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

    auto MMode(int32_t*) const -> nsresult;

    auto MMode(int32_t) const -> nsresult;

    struct MScrollerX_t {
        typedef StackScroller Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "mScrollerX";
        static constexpr char signature[] =
                "Lorg/mozilla/gecko/gfx/StackScroller$SplineStackScroller;";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto MScrollerX(mozilla::jni::Object::LocalRef*) const -> nsresult;

    struct MScrollerY_t {
        typedef StackScroller Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "mScrollerY";
        static constexpr char signature[] =
                "Lorg/mozilla/gecko/gfx/StackScroller$SplineStackScroller;";
        static const bool isStatic = false;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto MScrollerY(mozilla::jni::Object::LocalRef*) const -> nsresult;

    struct SViscousFluidNormalize_t {
        typedef StackScroller Owner;
        typedef float ReturnType;
        typedef float SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "sViscousFluidNormalize";
        static constexpr char signature[] =
                "F";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto SViscousFluidNormalize(float*) -> nsresult;

    static auto SViscousFluidNormalize(float) -> nsresult;

    struct SViscousFluidScale_t {
        typedef StackScroller Owner;
        typedef float ReturnType;
        typedef float SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "sViscousFluidScale";
        static constexpr char signature[] =
                "F";
        static const bool isStatic = true;
        static const mozilla::jni::ExceptionMode exceptionMode =
                mozilla::jni::ExceptionMode::NSRESULT;
        static const mozilla::jni::CallingThread callingThread =
                mozilla::jni::CallingThread::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto SViscousFluidScale(float*) -> nsresult;

    static auto SViscousFluidScale(float) -> nsresult;

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

};

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

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

    struct AcquireSurface_t {
        typedef SurfaceAllocator Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                bool> Args;
        static constexpr char name[] = "acquireSurface";
        static constexpr char signature[] =
                "(IIZ)Lorg/mozilla/gecko/gfx/GeckoSurface;";
        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 AcquireSurface(int32_t, int32_t, bool) -> mozilla::jni::Object::LocalRef;

    struct DisposeSurface_t {
        typedef SurfaceAllocator Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "disposeSurface";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/gfx/GeckoSurface;)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 DisposeSurface(mozilla::jni::Object::Param) -> void;

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

};

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

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

    struct GetRefreshRate_t {
        typedef VsyncSource Owner;
        typedef float ReturnType;
        typedef float SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getRefreshRate";
        static constexpr char signature[] =
                "()F";
        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 GetRefreshRate() const -> float;

    struct NotifyVsync_t {
        typedef VsyncSource Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "nativeNotifyVsync";
        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 ObserveVsync_t {
        typedef VsyncSource Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                bool> Args;
        static constexpr char name[] = "observeVsync";
        static constexpr char signature[] =
                "(Z)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 ObserveVsync(bool) const -> bool;

    struct INSTANCE_t {
        typedef VsyncSource Owner;
        typedef VsyncSource::LocalRef ReturnType;
        typedef VsyncSource::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "INSTANCE";
        static constexpr char signature[] =
                "Lorg/mozilla/gecko/gfx/VsyncSource;";
        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 INSTANCE() -> VsyncSource::LocalRef;

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

    template<class Impl> class Natives;
};

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<
                bool,
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param,
                mozilla::jni::Object::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "create";
        static constexpr char signature[] =
                "(ZLandroid/media/MediaFormat;Lorg/mozilla/gecko/gfx/GeckoSurface;Lorg/mozilla/gecko/media/CodecProxy$Callbacks;Ljava/lang/String;)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(bool, mozilla::jni::Object::Param, mozilla::jni::Object::Param, mozilla::jni::Object::Param, mozilla::jni::String::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 IsAdaptivePlaybackSupported_t {
        typedef CodecProxy Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "isAdaptivePlaybackSupported";
        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 IsAdaptivePlaybackSupported() const -> bool;

    struct IsTunneledPlaybackSupported_t {
        typedef CodecProxy Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "isTunneledPlaybackSupported";
        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 IsTunneledPlaybackSupported() 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;

    struct ReleaseOutput_t {
        typedef CodecProxy Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param,
                bool> Args;
        static constexpr char name[] = "releaseOutput";
        static constexpr char signature[] =
                "(Lorg/mozilla/gecko/media/Sample;Z)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 ReleaseOutput(mozilla::jni::Object::Param, bool) const -> bool;

    struct SetRates_t {
        typedef CodecProxy Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "setRates";
        static constexpr char signature[] =
                "(I)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 SetRates(int32_t) 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;
    };

    auto DisposeNative() const -> void;

    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 OnInputStatus_t {
        typedef NativeCallbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int64_t,
                bool> Args;
        static constexpr char name[] = "onInputStatus";
        static constexpr char signature[] =
                "(JZ)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 GeckoAudioInfo : public mozilla::jni::ObjectBase<GeckoAudioInfo>
{
public:
    static const char name[];

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

    struct New_t {
        typedef GeckoAudioInfo Owner;
        typedef GeckoAudioInfo::LocalRef ReturnType;
        typedef GeckoAudioInfo::Param SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int64_t,
                mozilla::jni::String::Param,
                mozilla::jni::ByteArray::Param> Args;
        static constexpr char name[] = "<init>";
        static constexpr char signature[] =
                "(IIIIJLjava/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;
    };

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

    struct BitDepth_t {
        typedef GeckoAudioInfo Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "bitDepth";
        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 BitDepth() const -> int32_t;

    struct Channels_t {
        typedef GeckoAudioInfo Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "channels";
        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 Channels() const -> int32_t;

    struct CodecSpecificData_t {
        typedef GeckoAudioInfo Owner;
        typedef mozilla::jni::ByteArray::LocalRef ReturnType;
        typedef mozilla::jni::ByteArray::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "codecSpecificData";
        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 CodecSpecificData() const -> mozilla::jni::ByteArray::LocalRef;

    struct Duration_t {
        typedef GeckoAudioInfo Owner;
        typedef int64_t ReturnType;
        typedef int64_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "duration";
        static constexpr char signature[] =
                "J";
        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 Duration() const -> int64_t;

    struct MimeType_t {
        typedef GeckoAudioInfo Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "mimeType";
        static constexpr char signature[] =
                "Ljava/lang/String;";
        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 MimeType() const -> mozilla::jni::String::LocalRef;

    struct Profile_t {
        typedef GeckoAudioInfo Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "profile";
        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 Profile() const -> int32_t;

    struct Rate_t {
        typedef GeckoAudioInfo Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "rate";
        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 Rate() const -> int32_t;

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

};

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

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

    class Callbacks;

    struct Create_t {
        typedef GeckoHLSDemuxerWrapper Owner;
        typedef GeckoHLSDemuxerWrapper::LocalRef ReturnType;
        typedef GeckoHLSDemuxerWrapper::Param SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "create";
        static constexpr char signature[] =
                "(ILorg/mozilla/gecko/media/BaseHlsPlayer$DemuxerCallbacks;)Lorg/mozilla/gecko/media/GeckoHLSDemuxerWrapper;";
        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(int32_t, mozilla::jni::Object::Param) -> GeckoHLSDemuxerWrapper::LocalRef;

    struct Destroy_t {
        typedef GeckoHLSDemuxerWrapper 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 GetAudioInfo_t {
        typedef GeckoHLSDemuxerWrapper Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "getAudioInfo";
        static constexpr char signature[] =
                "(I)Lorg/mozilla/gecko/media/GeckoAudioInfo;";
        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 GetAudioInfo(int32_t) const -> mozilla::jni::Object::LocalRef;

    struct GetBuffered_t {
        typedef GeckoHLSDemuxerWrapper Owner;
        typedef int64_t ReturnType;
        typedef int64_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getBuffered";
        static constexpr char signature[] =
                "()J";
        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 GetBuffered() const -> int64_t;

    struct GetNextKeyFrameTime_t {
        typedef GeckoHLSDemuxerWrapper Owner;
        typedef int64_t ReturnType;
        typedef int64_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getNextKeyFrameTime";
        static constexpr char signature[] =
                "()J";
        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 GetNextKeyFrameTime() const -> int64_t;

    struct GetNumberOfTracks_t {
        typedef GeckoHLSDemuxerWrapper Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "getNumberOfTracks";
        static constexpr char signature[] =
                "(I)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 GetNumberOfTracks(int32_t) const -> int32_t;

    struct GetSamples_t {
        typedef GeckoHLSDemuxerWrapper Owner;
        typedef mozilla::jni::ObjectArray::LocalRef ReturnType;
        typedef mozilla::jni::ObjectArray::Param SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "getSamples";
        static constexpr char signature[] =
                "(II)[Lorg/mozilla/gecko/media/GeckoHLSSample;";
        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 GetSamples(int32_t, int32_t) const -> mozilla::jni::ObjectArray::LocalRef;

    struct GetVideoInfo_t {
        typedef GeckoHLSDemuxerWrapper Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "getVideoInfo";
        static constexpr char signature[] =
                "(I)Lorg/mozilla/gecko/media/GeckoVideoInfo;";
        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 GetVideoInfo(int32_t) const -> mozilla::jni::Object::LocalRef;

    struct IsLiveStream_t {
        typedef GeckoHLSDemuxerWrapper Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "isLiveStream";
        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 IsLiveStream() const -> bool;

    struct Seek_t {
        typedef GeckoHLSDemuxerWrapper Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                int64_t> Args;
        static constexpr char name[] = "seek";
        static constexpr char signature[] =
                "(J)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 Seek(int64_t) const -> bool;

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

};

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

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

    struct New_t {
        typedef Callbacks Owner;
        typedef Callbacks::LocalRef ReturnType;
        typedef Callbacks::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() -> Callbacks::LocalRef;

    struct OnError_t {
        typedef Callbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "onError";
        static constexpr char signature[] =
                "(I)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 OnInitialized_t {
        typedef Callbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                bool,
                bool> Args;
        static constexpr char name[] = "onInitialized";
        static constexpr char signature[] =
                "(ZZ)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 GeckoHLSResourceWrapper : public mozilla::jni::ObjectBase<GeckoHLSResourceWrapper>
{
public:
    static const char name[];

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

    class Callbacks;

    struct Create_t {
        typedef GeckoHLSResourceWrapper Owner;
        typedef GeckoHLSResourceWrapper::LocalRef ReturnType;
        typedef GeckoHLSResourceWrapper::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "create";
        static constexpr char signature[] =
                "(Ljava/lang/String;Lorg/mozilla/gecko/media/BaseHlsPlayer$ResourceCallbacks;)Lorg/mozilla/gecko/media/GeckoHLSResourceWrapper;";
        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) -> GeckoHLSResourceWrapper::LocalRef;

    struct Destroy_t {
        typedef GeckoHLSResourceWrapper 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 GetPlayerId_t {
        typedef GeckoHLSResourceWrapper Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getPlayerId";
        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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    auto GetPlayerId() const -> int32_t;

    struct Pause_t {
        typedef GeckoHLSResourceWrapper 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 = 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;
    };

    auto Pause() const -> void;

    struct Play_t {
        typedef GeckoHLSResourceWrapper Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "play";
        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;
    };

    auto Play() const -> void;

    struct Resume_t {
        typedef GeckoHLSResourceWrapper Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "resume";
        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;
    };

    auto Resume() const -> void;

    struct Suspend_t {
        typedef GeckoHLSResourceWrapper Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "suspend";
        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;
    };

    auto Suspend() const -> void;

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

};

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

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

    struct New_t {
        typedef Callbacks Owner;
        typedef Callbacks::LocalRef ReturnType;
        typedef Callbacks::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() -> Callbacks::LocalRef;

    struct OnDataArrived_t {
        typedef Callbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "onDataArrived";
        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 Callbacks Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "onError";
        static constexpr char signature[] =
                "(I)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 GeckoHLSSample : public mozilla::jni::ObjectBase<GeckoHLSSample>
{
public:
    static const char name[];

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

    struct IsEOS_t {
        typedef GeckoHLSSample Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "isEOS";
        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 IsEOS() const -> bool;

    struct IsKeyFrame_t {
        typedef GeckoHLSSample Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "isKeyFrame";
        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 IsKeyFrame() const -> bool;

    struct WriteToByteBuffer_t {
        typedef GeckoHLSSample 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 CryptoInfo_t {
        typedef GeckoHLSSample Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "cryptoInfo";
        static constexpr char signature[] =
                "Landroid/media/MediaCodec$CryptoInfo;";
        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 CryptoInfo() const -> mozilla::jni::Object::LocalRef;

    struct Duration_t {
        typedef GeckoHLSSample Owner;
        typedef int64_t ReturnType;
        typedef int64_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "duration";
        static constexpr char signature[] =
                "J";
        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 Duration() const -> int64_t;

    auto Duration(int64_t) const -> void;

    struct FormatIndex_t {
        typedef GeckoHLSSample Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "formatIndex";
        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 FormatIndex() const -> int32_t;

    struct Info_t {
        typedef GeckoHLSSample 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;

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

};

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

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

    struct New_t {
        typedef GeckoVideoInfo Owner;
        typedef GeckoVideoInfo::LocalRef ReturnType;
        typedef GeckoVideoInfo::Param SetterType;
        typedef mozilla::jni::Args<
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int32_t,
                int64_t,
                mozilla::jni::String::Param,
                mozilla::jni::ByteArray::Param,
                mozilla::jni::ByteArray::Param> Args;
        static constexpr char name[] = "<init>";
        static constexpr char signature[] =
                "(IIIIIIJLjava/lang/String;[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::CURRENT;
    };

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

    struct CodecSpecificData_t {
        typedef GeckoVideoInfo Owner;
        typedef mozilla::jni::ByteArray::LocalRef ReturnType;
        typedef mozilla::jni::ByteArray::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "codecSpecificData";
        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 CodecSpecificData() const -> mozilla::jni::ByteArray::LocalRef;

    struct DisplayHeight_t {
        typedef GeckoVideoInfo Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "displayHeight";
        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 DisplayHeight() const -> int32_t;

    struct DisplayWidth_t {
        typedef GeckoVideoInfo Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "displayWidth";
        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 DisplayWidth() const -> int32_t;

    struct Duration_t {
        typedef GeckoVideoInfo Owner;
        typedef int64_t ReturnType;
        typedef int64_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "duration";
        static constexpr char signature[] =
                "J";
        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 Duration() const -> int64_t;

    struct ExtraData_t {
        typedef GeckoVideoInfo Owner;
        typedef mozilla::jni::ByteArray::LocalRef ReturnType;
        typedef mozilla::jni::ByteArray::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "extraData";
        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 ExtraData() const -> mozilla::jni::ByteArray::LocalRef;

    struct MimeType_t {
        typedef GeckoVideoInfo Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "mimeType";
        static constexpr char signature[] =
                "Ljava/lang/String;";
        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 MimeType() const -> mozilla::jni::String::LocalRef;

    struct PictureHeight_t {
        typedef GeckoVideoInfo Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "pictureHeight";
        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 PictureHeight() const -> int32_t;

    struct PictureWidth_t {
        typedef GeckoVideoInfo Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "pictureWidth";
        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 PictureWidth() const -> int32_t;

    struct Rotation_t {
        typedef GeckoVideoInfo Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "rotation";
        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 Rotation() const -> int32_t;

    struct StereoMode_t {
        typedef GeckoVideoInfo Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "stereoMode";
        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 StereoMode() const -> int32_t;

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

};

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> Args;
        static constexpr char name[] = "create";
        static constexpr char signature[] =
                "(Ljava/lang/String;Lorg/mozilla/gecko/media/MediaDrmProxy$Callbacks;)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) -> 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 GetMediaCrypto_t {
        typedef MediaDrmProxy Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "getMediaCrypto";
        static constexpr char signature[] =
                "(Ljava/lang/String;)Landroid/media/MediaCrypto;";
        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 GetMediaCrypto(mozilla::jni::String::Param) -> mozilla::jni::Object::LocalRef;

    struct GetStubId_t {
        typedef MediaDrmProxy Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "getStubId";
        static constexpr char signature[] =
                "()Ljava/lang/String;";
        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;
    };

    auto GetStubId() const -> mozilla::jni::String::LocalRef;

    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 GeckoProcessManager : public mozilla::jni::ObjectBase<GeckoProcessManager>
{
public:
    static const char name[];

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

    struct GetEditableParent_t {
        typedef GeckoProcessManager Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<
                int64_t,
                int64_t> Args;
        static constexpr char name[] = "nativeGetEditableParent";
        static constexpr char signature[] =
                "(JJ)Lorg/mozilla/gecko/IGeckoEditableParent;";
        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 Start_t {
        typedef GeckoProcessManager Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param,
                mozilla::jni::ObjectArray::Param,
                int32_t,
                int32_t> Args;
        static constexpr char name[] = "start";
        static constexpr char signature[] =
                "(Ljava/lang/String;[Ljava/lang/String;II)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;
    };

    static auto Start(mozilla::jni::String::Param, mozilla::jni::ObjectArray::Param, int32_t, int32_t) -> int32_t;

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

    template<class Impl> class Natives;
};

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

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

    struct GetEditableParent_t {
        typedef GeckoServiceChildProcess Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<
                int64_t,
                int64_t> Args;
        static constexpr char name[] = "getEditableParent";
        static constexpr char signature[] =
                "(JJ)Lorg/mozilla/gecko/IGeckoEditableParent;";
        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 GetEditableParent(int64_t, int64_t) -> mozilla::jni::Object::LocalRef;

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

};

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

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

    struct SendError_t {
        typedef EventCallback Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "sendError";
        static constexpr char signature[] =
                "(Ljava/lang/Object;)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;
    };

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

    struct SendSuccess_t {
        typedef EventCallback Owner;
        typedef void ReturnType;
        typedef void SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "sendSuccess";
        static constexpr char signature[] =
                "(Ljava/lang/Object;)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;
    };

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

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

};

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

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

    struct New_t {
        typedef GeckoBundle Owner;
        typedef GeckoBundle::LocalRef ReturnType;
        typedef GeckoBundle::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::ObjectArray::Param,
                mozilla::jni::ObjectArray::Param> Args;
        static constexpr char name[] = "<init>";
        static constexpr char signature[] =
                "([Ljava/lang/String;[Ljava/lang/Object;)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(mozilla::jni::ObjectArray::Param, mozilla::jni::ObjectArray::Param) -> GeckoBundle::LocalRef;

    struct Box_t {
        typedef GeckoBundle Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<
                double> Args;
        static constexpr char name[] = "box";
        static constexpr char signature[] =
                "(D)Ljava/lang/Object;";
        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 Box(double) -> mozilla::jni::Object::LocalRef;

    struct Box2_t {
        typedef GeckoBundle Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<
                int32_t> Args;
        static constexpr char name[] = "box";
        static constexpr char signature[] =
                "(I)Ljava/lang/Object;";
        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 Box(int32_t) -> mozilla::jni::Object::LocalRef;

    struct Box3_t {
        typedef GeckoBundle Owner;
        typedef mozilla::jni::Object::LocalRef ReturnType;
        typedef mozilla::jni::Object::Param SetterType;
        typedef mozilla::jni::Args<
                bool> Args;
        static constexpr char name[] = "box";
        static constexpr char signature[] =
                "(Z)Ljava/lang/Object;";
        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 Box(bool) -> mozilla::jni::Object::LocalRef;

    struct Keys_t {
        typedef GeckoBundle Owner;
        typedef mozilla::jni::ObjectArray::LocalRef ReturnType;
        typedef mozilla::jni::ObjectArray::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "keys";
        static constexpr char signature[] =
                "()[Ljava/lang/String;";
        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;
    };

    auto Keys() const -> mozilla::jni::ObjectArray::LocalRef;

    struct UnboxBoolean_t {
        typedef GeckoBundle Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "unboxBoolean";
        static constexpr char signature[] =
                "(Ljava/lang/Boolean;)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 UnboxBoolean(mozilla::jni::Object::Param) -> bool;

    struct UnboxDouble_t {
        typedef GeckoBundle Owner;
        typedef double ReturnType;
        typedef double SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "unboxDouble";
        static constexpr char signature[] =
                "(Ljava/lang/Number;)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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto UnboxDouble(mozilla::jni::Object::Param) -> double;

    struct UnboxInteger_t {
        typedef GeckoBundle Owner;
        typedef int32_t ReturnType;
        typedef int32_t SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "unboxInteger";
        static constexpr char signature[] =
                "(Ljava/lang/Number;)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::GECKO;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto UnboxInteger(mozilla::jni::Object::Param) -> int32_t;

    struct UnboxString_t {
        typedef GeckoBundle Owner;
        typedef mozilla::jni::String::LocalRef ReturnType;
        typedef mozilla::jni::String::Param SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param> Args;
        static constexpr char name[] = "unboxString";
        static constexpr char signature[] =
                "(Ljava/lang/Object;)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 UnboxString(mozilla::jni::Object::Param) -> mozilla::jni::String::LocalRef;

    struct Values_t {
        typedef GeckoBundle Owner;
        typedef mozilla::jni::ObjectArray::LocalRef ReturnType;
        typedef mozilla::jni::ObjectArray::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "values";
        static constexpr char signature[] =
                "()[Ljava/lang/Object;";
        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;
    };

    auto Values() const -> mozilla::jni::ObjectArray::LocalRef;

    struct EMPTY_BOOLEAN_ARRAY_t {
        typedef GeckoBundle Owner;
        typedef mozilla::jni::BooleanArray::LocalRef ReturnType;
        typedef mozilla::jni::BooleanArray::Param SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "EMPTY_BOOLEAN_ARRAY";
        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 EMPTY_BOOLEAN_ARRAY() -> mozilla::jni::BooleanArray::LocalRef;

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

};

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

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

    struct HasHWVP9_t {
        typedef HardwareCodecCapabilityUtils Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<> Args;
        static constexpr char name[] = "HasHWVP9";
        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::ANY;
        static const mozilla::jni::DispatchTarget dispatchTarget =
                mozilla::jni::DispatchTarget::CURRENT;
    };

    static auto HasHWVP9() -> bool;

    struct CheckSupportsAdaptivePlayback_t {
        typedef HardwareCodecCapabilityUtils Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::Object::Param,
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "checkSupportsAdaptivePlayback";
        static constexpr char signature[] =
                "(Landroid/media/MediaCodec;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 CheckSupportsAdaptivePlayback(mozilla::jni::Object::Param, mozilla::jni::String::Param) -> bool;

    struct FindDecoderCodecInfoForMimeType_t {
        typedef HardwareCodecCapabilityUtils Owner;
        typedef bool ReturnType;
        typedef bool SetterType;
        typedef mozilla::jni::Args<
                mozilla::jni::String::Param> Args;
        static constexpr char name[] = "findDecoderCodecInfoForMimeType";
        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 FindDecoderCodecInfoForMimeType(mozilla::jni::String::Param) -> bool;

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

};

} /* java */
} /* mozilla */
#endif // GeneratedJNIWrappers_h
