ladybird/Userland/Services/WebContent/PageHost.h
Andrew Kaster 9077fe15ac WebContent: Tolerate invalid page_ids in ConnectionFromClient
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.
2024-02-13 19:46:10 +01: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;
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 };
};
}