/* * Copyright (c) 2026, Aliaksandr Kalenik * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #if defined(AK_OS_MACOS) # include #else # include #endif namespace Web { class WEB_API SharedBackingStore { AK_MAKE_NONCOPYABLE(SharedBackingStore); public: #if defined(AK_OS_MACOS) explicit SharedBackingStore(Core::MachPort&&); Core::MachPort release_iosurface_port() { return move(m_port); } #else explicit SharedBackingStore(Gfx::ShareableBitmap); Gfx::ShareableBitmap const& bitmap() const { return m_bitmap; } #endif SharedBackingStore(SharedBackingStore&&) = default; SharedBackingStore& operator=(SharedBackingStore&&) = default; ~SharedBackingStore() = default; private: #if defined(AK_OS_MACOS) Core::MachPort m_port; #else Gfx::ShareableBitmap m_bitmap; #endif template friend ErrorOr IPC::encode(IPC::Encoder&, U const&); template friend ErrorOr IPC::decode(IPC::Decoder&); }; } namespace IPC { template<> WEB_API ErrorOr encode(Encoder&, Web::SharedBackingStore const&); template<> WEB_API ErrorOr decode(Decoder&); }