//
// Automatically generated by ipdlc.
// Edit at your own risk
//

#ifndef PTabContext_h
#define PTabContext_h

#include "mozilla/Attributes.h"
#include "IPCMessageStart.h"
#include "mozilla/RefPtr.h"
#include "nsString.h"
#include "nsTArray.h"
#include "nsTHashtable.h"
#include "mozilla/MozPromise.h"
#include "mozilla/OperatorNewExtensions.h"
#include "mozilla/UniquePtr.h"
#include "mozilla/ipc/ByteBuf.h"
#include "mozilla/ipc/FileDescriptor.h"
#include "mozilla/ipc/IPCForwards.h"
#include "mozilla/ipc/Shmem.h"

// Headers for typedefs
#include "mozilla/ipc/IPDLStructMember.h"
#include "mozilla/ipc/SideVariant.h"

namespace mozilla {
namespace dom {
class PBrowserParent;
} // namespace dom
} // namespace mozilla

namespace mozilla {
namespace dom {
class PBrowserChild;
} // namespace dom
} // namespace mozilla


//-----------------------------------------------------------------------------
// Declaration of the IPDL type |struct PopupIPCTabContext|
//
namespace mozilla {
namespace dom {
class PopupIPCTabContext final
{
private:
    typedef ::mozilla::dom::PBrowserParent PBrowserParent;
    typedef ::mozilla::dom::PBrowserChild PBrowserChild;
    typedef ::uint64_t uint64_t;

public:
#ifdef __clang__
#  pragma clang diagnostic push
#  if __has_warning("-Wdefaulted-function-deleted")
#    pragma clang diagnostic ignored "-Wdefaulted-function-deleted"
#  endif
#endif
    PopupIPCTabContext() = default;
#ifdef __clang__
#  pragma clang diagnostic pop
#endif

    MOZ_IMPLICIT PopupIPCTabContext(
            const mozilla::NotNull<::mozilla::ipc::SideVariant<PBrowserParent*, PBrowserChild*>>& _opener,
            const uint64_t& _chromeOuterWindowID) :
        opener_(_opener),
        chromeOuterWindowID_(_chromeOuterWindowID)
    {
    }

    MOZ_IMPLICIT PopupIPCTabContext(
            mozilla::NotNull<::mozilla::ipc::SideVariant<PBrowserParent*, PBrowserChild*>>&& _opener,
            uint64_t&& _chromeOuterWindowID) :
        opener_(std::move(_opener)),
        chromeOuterWindowID_(std::move(_chromeOuterWindowID))
    {
    }

    mozilla::NotNull<::mozilla::ipc::SideVariant<PBrowserParent*, PBrowserChild*>>&
    opener()
    {
        return opener_;
    }
    const mozilla::NotNull<::mozilla::ipc::SideVariant<PBrowserParent*, PBrowserChild*>>&
    opener() const
    {
        return opener_;
    }

    uint64_t&
    chromeOuterWindowID()
    {
        return chromeOuterWindowID_;
    }
    const uint64_t&
    chromeOuterWindowID() const
    {
        return chromeOuterWindowID_;
    }

private:
    ::mozilla::ipc::IPDLStructMember<mozilla::NotNull<::mozilla::ipc::SideVariant<PBrowserParent*, PBrowserChild*>>> opener_;
    ::mozilla::ipc::IPDLStructMember<uint64_t> chromeOuterWindowID_;
};
} // namespace dom
} // namespace mozilla

namespace IPC {
template<>
struct ParamTraits <::mozilla::dom::PopupIPCTabContext>
{
    typedef ::mozilla::dom::PopupIPCTabContext paramType;
    static void
    Write(
            IPC::MessageWriter* aWriter,
            const paramType& aVar);
    static IPC::ReadResult<paramType>
    Read(IPC::MessageReader* aReader);
};
} // namespace IPC


//-----------------------------------------------------------------------------
// Declaration of the IPDL type |struct FrameIPCTabContext|
//
namespace mozilla {
namespace dom {
class FrameIPCTabContext final
{
private:
    typedef ::uint64_t uint64_t;
    typedef ::uint32_t uint32_t;

public:
#ifdef __clang__
#  pragma clang diagnostic push
#  if __has_warning("-Wdefaulted-function-deleted")
#    pragma clang diagnostic ignored "-Wdefaulted-function-deleted"
#  endif
#endif
    FrameIPCTabContext() = default;
#ifdef __clang__
#  pragma clang diagnostic pop
#endif

    MOZ_IMPLICIT FrameIPCTabContext(
            const uint64_t& _chromeOuterWindowID,
            const uint32_t& _maxTouchPoints) :
        chromeOuterWindowID_(_chromeOuterWindowID),
        maxTouchPoints_(_maxTouchPoints)
    {
    }

    MOZ_IMPLICIT FrameIPCTabContext(
            uint64_t&& _chromeOuterWindowID,
            uint32_t&& _maxTouchPoints) :
        chromeOuterWindowID_(std::move(_chromeOuterWindowID)),
        maxTouchPoints_(std::move(_maxTouchPoints))
    {
    }

    uint64_t&
    chromeOuterWindowID()
    {
        return chromeOuterWindowID_;
    }
    const uint64_t&
    chromeOuterWindowID() const
    {
        return chromeOuterWindowID_;
    }

    uint32_t&
    maxTouchPoints()
    {
        return maxTouchPoints_;
    }
    const uint32_t&
    maxTouchPoints() const
    {
        return maxTouchPoints_;
    }

private:
    ::mozilla::ipc::IPDLStructMember<uint64_t> chromeOuterWindowID_;
    ::mozilla::ipc::IPDLStructMember<uint32_t> maxTouchPoints_;
};
} // namespace dom
} // namespace mozilla

namespace IPC {
template<>
struct ParamTraits <::mozilla::dom::FrameIPCTabContext>
{
    typedef ::mozilla::dom::FrameIPCTabContext paramType;
    static void
    Write(
            IPC::MessageWriter* aWriter,
            const paramType& aVar);
    static IPC::ReadResult<paramType>
    Read(IPC::MessageReader* aReader);
};
} // namespace IPC


//-----------------------------------------------------------------------------
// Declaration of the IPDL type |union IPCTabContext|
//
namespace mozilla {
namespace dom {
class IPCTabContext final
{
public:
    enum Type {
        T__None,
        TPopupIPCTabContext = 1,
        TFrameIPCTabContext,
        T__Last = TFrameIPCTabContext
    };

private:
    typedef ::mozilla::dom::PopupIPCTabContext PopupIPCTabContext;
    typedef ::mozilla::dom::FrameIPCTabContext FrameIPCTabContext;
    typedef PopupIPCTabContext PopupIPCTabContext__tdef;
    typedef FrameIPCTabContext FrameIPCTabContext__tdef;

    PopupIPCTabContext*
    ptr_PopupIPCTabContext()
    {
        return (&(mVPopupIPCTabContext));
    }
    const PopupIPCTabContext*
    constptr_PopupIPCTabContext() const
    {
        return (&(mVPopupIPCTabContext));
    }
    FrameIPCTabContext*
    ptr_FrameIPCTabContext()
    {
        return (&(mVFrameIPCTabContext));
    }
    const FrameIPCTabContext*
    constptr_FrameIPCTabContext() const
    {
        return (&(mVFrameIPCTabContext));
    }

    void
    MaybeDestroy();

    void
    AssertSanity() const
    {
        MOZ_RELEASE_ASSERT((T__None) <= (mType), "invalid type tag");
        MOZ_RELEASE_ASSERT((mType) <= (T__Last), "invalid type tag");
    }
    void
    AssertSanity(Type aType) const
    {
        AssertSanity();
        MOZ_RELEASE_ASSERT((mType) == (aType), "unexpected type tag");
    }

public:
    MOZ_IMPLICIT IPCTabContext() :
        mType(T__None)
    {
    }

    MOZ_IMPLICIT IPCTabContext(const PopupIPCTabContext& aOther);

    MOZ_IMPLICIT IPCTabContext(PopupIPCTabContext&& aOther);

    MOZ_IMPLICIT IPCTabContext(const FrameIPCTabContext& aOther);

    MOZ_IMPLICIT IPCTabContext(FrameIPCTabContext&& aOther);

    MOZ_IMPLICIT IPCTabContext(const IPCTabContext& aOther);

    MOZ_IMPLICIT IPCTabContext(IPCTabContext&& aOther);

    ~IPCTabContext();

    Type
    type() const
    {
        return mType;
    }

    IPCTabContext&
    operator=(const PopupIPCTabContext& aRhs);

    IPCTabContext&
    operator=(PopupIPCTabContext&& aRhs);

    IPCTabContext&
    operator=(const FrameIPCTabContext& aRhs);

    IPCTabContext&
    operator=(FrameIPCTabContext&& aRhs);

    IPCTabContext&
    operator=(const IPCTabContext& aRhs);

    IPCTabContext&
    operator=(IPCTabContext&& aRhs);

    PopupIPCTabContext&
    get_PopupIPCTabContext()
    {
        AssertSanity(TPopupIPCTabContext);
        return (*(ptr_PopupIPCTabContext()));
    }
    const PopupIPCTabContext&
    get_PopupIPCTabContext() const
    {
        AssertSanity(TPopupIPCTabContext);
        return (*(constptr_PopupIPCTabContext()));
    }
    operator PopupIPCTabContext&()
    {
        return get_PopupIPCTabContext();
    }
    operator const PopupIPCTabContext&() const
    {
        return get_PopupIPCTabContext();
    }

    FrameIPCTabContext&
    get_FrameIPCTabContext()
    {
        AssertSanity(TFrameIPCTabContext);
        return (*(ptr_FrameIPCTabContext()));
    }
    const FrameIPCTabContext&
    get_FrameIPCTabContext() const
    {
        AssertSanity(TFrameIPCTabContext);
        return (*(constptr_FrameIPCTabContext()));
    }
    operator FrameIPCTabContext&()
    {
        return get_FrameIPCTabContext();
    }
    operator const FrameIPCTabContext&() const
    {
        return get_FrameIPCTabContext();
    }

private:
    union {
        PopupIPCTabContext mVPopupIPCTabContext;
        FrameIPCTabContext mVFrameIPCTabContext;
    };
    Type mType;
};
} // namespace dom
} // namespace mozilla

namespace IPC {
template<>
struct ParamTraits <::mozilla::dom::IPCTabContext>
{
    typedef ::mozilla::dom::IPCTabContext paramType;
    static void
    Write(
            IPC::MessageWriter* aWriter,
            const paramType& aVar);
    static IPC::ReadResult<paramType>
    Read(IPC::MessageReader* aReader);
};
} // namespace IPC

#endif // ifndef PTabContext_h
