mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-21 23:20:20 +00:00
LibWeb: Introduce a SyntheticHostDefined class
This class is the host defined field of a synthetic realm created as part of a shadow realm.
This commit is contained in:
parent
5154df020b
commit
b105c06824
Notes:
github-actions[bot]
2024-11-05 17:59:56 +00:00
Author: https://github.com/shannonbooth Commit: https://github.com/LadybirdBrowser/ladybird/commit/b105c06824d Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1993 Reviewed-by: https://github.com/ADKaster ✅
6 changed files with 108 additions and 0 deletions
20
Userland/Libraries/LibWeb/Bindings/SyntheticHostDefined.cpp
Normal file
20
Userland/Libraries/LibWeb/Bindings/SyntheticHostDefined.cpp
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Shannon Booth <shannon@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibJS/Heap/Cell.h>
|
||||
#include <LibJS/Runtime/Realm.h>
|
||||
#include <LibWeb/Bindings/SyntheticHostDefined.h>
|
||||
#include <LibWeb/HTML/Scripting/Environments.h>
|
||||
|
||||
namespace Web::Bindings {
|
||||
|
||||
void SyntheticHostDefined::visit_edges(JS::Cell::Visitor& visitor)
|
||||
{
|
||||
JS::Realm::HostDefined::visit_edges(visitor);
|
||||
synthetic_realm_settings.visit_edges(visitor);
|
||||
}
|
||||
|
||||
}
|
27
Userland/Libraries/LibWeb/Bindings/SyntheticHostDefined.h
Normal file
27
Userland/Libraries/LibWeb/Bindings/SyntheticHostDefined.h
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Shannon Booth <shannon@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibJS/Runtime/Realm.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
#include <LibWeb/HTML/Scripting/SyntheticRealmSettings.h>
|
||||
|
||||
namespace Web::Bindings {
|
||||
|
||||
struct SyntheticHostDefined : public JS::Realm::HostDefined {
|
||||
SyntheticHostDefined(HTML::SyntheticRealmSettings synthetic_realm_settings)
|
||||
: synthetic_realm_settings(move(synthetic_realm_settings))
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~SyntheticHostDefined() override = default;
|
||||
virtual void visit_edges(JS::Cell::Visitor& visitor) override;
|
||||
|
||||
HTML::SyntheticRealmSettings synthetic_realm_settings;
|
||||
};
|
||||
|
||||
}
|
|
@ -23,6 +23,7 @@ set(SOURCES
|
|||
Bindings/OptionConstructor.cpp
|
||||
Bindings/PlatformObject.cpp
|
||||
Bindings/PrincipalHostDefined.cpp
|
||||
Bindings/SyntheticHostDefined.cpp
|
||||
Clipboard/Clipboard.cpp
|
||||
Clipboard/ClipboardEvent.cpp
|
||||
Crypto/Crypto.cpp
|
||||
|
@ -449,6 +450,7 @@ set(SOURCES
|
|||
HTML/Scripting/ModuleMap.cpp
|
||||
HTML/Scripting/ModuleScript.cpp
|
||||
HTML/Scripting/Script.cpp
|
||||
HTML/Scripting/SyntheticRealmSettings.cpp
|
||||
HTML/Scripting/TemporaryExecutionContext.cpp
|
||||
HTML/Scripting/WindowEnvironmentSettingsObject.cpp
|
||||
HTML/Scripting/WorkerEnvironmentSettingsObject.cpp
|
||||
|
|
|
@ -491,6 +491,7 @@ class MessageEvent;
|
|||
class MessagePort;
|
||||
class MimeType;
|
||||
class MimeTypeArray;
|
||||
class ModuleMap;
|
||||
class Navigable;
|
||||
class NavigableContainer;
|
||||
class NavigateEvent;
|
||||
|
@ -555,6 +556,7 @@ struct ScrollOptions;
|
|||
struct ScrollToOptions;
|
||||
struct SerializedFormData;
|
||||
struct StructuredSerializeOptions;
|
||||
struct SyntheticRealmSettings;
|
||||
struct ToggleTaskTracker;
|
||||
struct TransferDataHolder;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Shannon Booth <shannon@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibWeb/HTML/Scripting/ModuleMap.h>
|
||||
#include <LibWeb/HTML/Scripting/SyntheticRealmSettings.h>
|
||||
|
||||
namespace Web::HTML {
|
||||
|
||||
void SyntheticRealmSettings::visit_edges(JS::Cell::Visitor& visitor)
|
||||
{
|
||||
execution_context->visit_edges(visitor);
|
||||
visitor.visit(principal_realm);
|
||||
visitor.visit(underlying_realm);
|
||||
visitor.visit(module_map);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Shannon Booth <shannon@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibJS/Forward.h>
|
||||
#include <LibJS/Heap/GCPtr.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
|
||||
namespace Web::HTML {
|
||||
|
||||
// https://whatpr.org/html/9893/webappapis.html#synthetic-realm-settings-objects
|
||||
// Each synthetic realm has an associated synthetic realm settings object with the following fields:
|
||||
struct SyntheticRealmSettings {
|
||||
// An execution context
|
||||
// The JavaScript execution context for the scripts within this realm.
|
||||
NonnullOwnPtr<JS::ExecutionContext> execution_context;
|
||||
|
||||
// A principal realm
|
||||
// The principal realm which this synthetic realm exists within.
|
||||
JS::NonnullGCPtr<JS::Realm> principal_realm;
|
||||
|
||||
// An underlying realm
|
||||
// The synthetic realm which this settings object represents.
|
||||
JS::NonnullGCPtr<JS::Realm> underlying_realm;
|
||||
|
||||
// A module map
|
||||
// A module map that is used when importing JavaScript modules.
|
||||
JS::NonnullGCPtr<ModuleMap> module_map;
|
||||
|
||||
void visit_edges(JS::Cell::Visitor&);
|
||||
};
|
||||
|
||||
}
|
Loading…
Reference in a new issue