1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-10-31 00:42:44 +00:00
serenity/Userland/Services/WebContent/PageHost.h
Andrew Kaster 36cd2fb7c5 Ladybird+WebContent: Update IPC calls to handle multiple traversables
The IPC layer between chromes and LibWeb now understands that multiple
top level traversables can live in each WebContent process.

This largely mechanical change adds a billion page_id/page_index
arguments to make sure that pages that end up opening new WebViews
through mechanisms like window.open() still work properly with those
extra windows.
2024-02-03 20:51:37 -05:00

43 lines
1.1 KiB
C++

/*
* Copyright (c) 2020-2023, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021-2023, Linus Groh <linusg@serenityos.org>
* Copyright (c) 2023, Andrew Kaster <akaster@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Function.h>
#include <AK/HashMap.h>
#include <AK/NonnullOwnPtr.h>
#include <LibJS/Heap/Handle.h>
#include <WebContent/Forward.h>
namespace WebContent {
class PageHost {
AK_MAKE_NONCOPYABLE(PageHost);
AK_MAKE_NONMOVABLE(PageHost);
public:
static NonnullOwnPtr<PageHost> create(ConnectionFromClient& client) { return adopt_own(*new PageHost(client)); }
virtual ~PageHost();
Function<void(WebDriverConnection&)> on_webdriver_connection;
PageClient& page(u64 index) { return *m_pages.find(index)->value; }
PageClient& create_page();
void remove_page(Badge<PageClient>, u64 index);
ConnectionFromClient& client() const { return m_client; }
private:
explicit PageHost(ConnectionFromClient&);
ConnectionFromClient& m_client;
HashMap<u64, JS::Handle<PageClient>> m_pages;
u64 m_next_id { 0 };
};
}