mirror of
https://github.com/RGBCube/serenity
synced 2025-05-14 05:14:59 +00:00

When a tab or nested traversable navigable is closed, there might be messages still in the pipe from the UI process that we need to gracefully drop, rather than crash trying to access an invalid pointer.
43 lines
1.1 KiB
C++
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;
|
|
|
|
Optional<PageClient&> page(u64 index);
|
|
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 };
|
|
};
|
|
|
|
}
|