Serenity Operating System
1/*
2 * Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/Forward.h>
10#include <LibJS/Forward.h>
11#include <LibJS/Heap/GCPtr.h>
12#include <LibJS/Runtime/Object.h>
13#include <LibWeb/Forward.h>
14
15namespace Web::HTML {
16
17class WindowProxy final : public JS::Object {
18 JS_OBJECT(WindowProxy, JS::Object);
19
20public:
21 virtual ~WindowProxy() override = default;
22
23 virtual JS::ThrowCompletionOr<JS::Object*> internal_get_prototype_of() const override;
24 virtual JS::ThrowCompletionOr<bool> internal_set_prototype_of(Object* prototype) override;
25 virtual JS::ThrowCompletionOr<bool> internal_is_extensible() const override;
26 virtual JS::ThrowCompletionOr<bool> internal_prevent_extensions() override;
27 virtual JS::ThrowCompletionOr<Optional<JS::PropertyDescriptor>> internal_get_own_property(JS::PropertyKey const&) const override;
28 virtual JS::ThrowCompletionOr<bool> internal_define_own_property(JS::PropertyKey const&, JS::PropertyDescriptor const&) override;
29 virtual JS::ThrowCompletionOr<JS::Value> internal_get(JS::PropertyKey const&, JS::Value receiver) const override;
30 virtual JS::ThrowCompletionOr<bool> internal_set(JS::PropertyKey const&, JS::Value value, JS::Value receiver) override;
31 virtual JS::ThrowCompletionOr<bool> internal_delete(JS::PropertyKey const&) override;
32 virtual JS::ThrowCompletionOr<JS::MarkedVector<JS::Value>> internal_own_property_keys() const override;
33
34 JS::GCPtr<Window> window() const { return m_window; }
35 void set_window(Badge<BrowsingContext>, JS::NonnullGCPtr<Window>);
36
37private:
38 explicit WindowProxy(JS::Realm&);
39
40 virtual void visit_edges(JS::Cell::Visitor&) override;
41
42 // [[Window]], https://html.spec.whatwg.org/multipage/window-object.html#concept-windowproxy-window
43 JS::GCPtr<Window> m_window;
44};
45
46}