Serenity Operating System
1/*
2 * Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/HashMap.h>
10#include <AK/NonnullRefPtr.h>
11#include <AK/WeakPtr.h>
12#include <LibJS/Heap/Cell.h>
13#include <LibWeb/Forward.h>
14
15namespace Web::HTML {
16
17class BrowsingContextGroup final : public JS::Cell {
18 JS_CELL(BrowsingContextGroup, JS::Cell);
19
20public:
21 static JS::NonnullGCPtr<BrowsingContextGroup> create_a_new_browsing_context_group(Page&);
22 ~BrowsingContextGroup();
23
24 Page* page() { return m_page; }
25 Page const* page() const { return m_page; }
26
27 auto& browsing_context_set() { return m_browsing_context_set; }
28 auto const& browsing_context_set() const { return m_browsing_context_set; }
29
30 void append(BrowsingContext&);
31
32private:
33 explicit BrowsingContextGroup(Web::Page&);
34
35 virtual void visit_edges(Cell::Visitor&) override;
36
37 // https://html.spec.whatwg.org/multipage/browsers.html#browsing-context-group-set
38 OrderedHashTable<BrowsingContext*> m_browsing_context_set;
39
40 WeakPtr<Page> m_page;
41};
42
43}