mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-24 09:52:31 +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: b105c06824
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/OptionConstructor.cpp
|
||||||
Bindings/PlatformObject.cpp
|
Bindings/PlatformObject.cpp
|
||||||
Bindings/PrincipalHostDefined.cpp
|
Bindings/PrincipalHostDefined.cpp
|
||||||
|
Bindings/SyntheticHostDefined.cpp
|
||||||
Clipboard/Clipboard.cpp
|
Clipboard/Clipboard.cpp
|
||||||
Clipboard/ClipboardEvent.cpp
|
Clipboard/ClipboardEvent.cpp
|
||||||
Crypto/Crypto.cpp
|
Crypto/Crypto.cpp
|
||||||
|
@ -449,6 +450,7 @@ set(SOURCES
|
||||||
HTML/Scripting/ModuleMap.cpp
|
HTML/Scripting/ModuleMap.cpp
|
||||||
HTML/Scripting/ModuleScript.cpp
|
HTML/Scripting/ModuleScript.cpp
|
||||||
HTML/Scripting/Script.cpp
|
HTML/Scripting/Script.cpp
|
||||||
|
HTML/Scripting/SyntheticRealmSettings.cpp
|
||||||
HTML/Scripting/TemporaryExecutionContext.cpp
|
HTML/Scripting/TemporaryExecutionContext.cpp
|
||||||
HTML/Scripting/WindowEnvironmentSettingsObject.cpp
|
HTML/Scripting/WindowEnvironmentSettingsObject.cpp
|
||||||
HTML/Scripting/WorkerEnvironmentSettingsObject.cpp
|
HTML/Scripting/WorkerEnvironmentSettingsObject.cpp
|
||||||
|
|
|
@ -491,6 +491,7 @@ class MessageEvent;
|
||||||
class MessagePort;
|
class MessagePort;
|
||||||
class MimeType;
|
class MimeType;
|
||||||
class MimeTypeArray;
|
class MimeTypeArray;
|
||||||
|
class ModuleMap;
|
||||||
class Navigable;
|
class Navigable;
|
||||||
class NavigableContainer;
|
class NavigableContainer;
|
||||||
class NavigateEvent;
|
class NavigateEvent;
|
||||||
|
@ -555,6 +556,7 @@ struct ScrollOptions;
|
||||||
struct ScrollToOptions;
|
struct ScrollToOptions;
|
||||||
struct SerializedFormData;
|
struct SerializedFormData;
|
||||||
struct StructuredSerializeOptions;
|
struct StructuredSerializeOptions;
|
||||||
|
struct SyntheticRealmSettings;
|
||||||
struct ToggleTaskTracker;
|
struct ToggleTaskTracker;
|
||||||
struct TransferDataHolder;
|
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…
Add table
Add a link
Reference in a new issue