mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-28 02:27:19 +02:00
LibWeb/Bindings: Implement 'is exposed' using the InterfaceName enum
This commit is contained in:
committed by
Shannon Booth
parent
76cf230bd6
commit
303f85e8e4
Notes:
github-actions[bot]
2026-02-14 19:36:21 +00:00
Author: https://github.com/shannonbooth Commit: https://github.com/LadybirdBrowser/ladybird/commit/303f85e8e45 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/7518
@@ -859,7 +859,7 @@ public:
|
||||
auto interface_name = m_serialized.decode<Bindings::InterfaceName>();
|
||||
|
||||
// 2. If the interface identified by interfaceName is not exposed in targetRealm, then throw a "DataCloneError" DOMException.
|
||||
if (!is_serializable_interface_exposed_on_target_realm(interface_name, realm))
|
||||
if (!is_exposed(interface_name, realm))
|
||||
return WebIDL::DataCloneError::create(realm, "Unsupported type"_utf16);
|
||||
|
||||
// 3. Set value to a new instance of the interface identified by interfaceName, created in targetRealm.
|
||||
@@ -942,49 +942,6 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
static bool is_serializable_interface_exposed_on_target_realm(Bindings::InterfaceName name, JS::Realm& realm)
|
||||
{
|
||||
auto const& intrinsics = Bindings::host_defined_intrinsics(realm);
|
||||
switch (name) {
|
||||
case Bindings::InterfaceName::Blob:
|
||||
return intrinsics.is_interface_exposed<Bindings::BlobPrototype>(realm);
|
||||
case Bindings::InterfaceName::File:
|
||||
return intrinsics.is_interface_exposed<Bindings::FilePrototype>(realm);
|
||||
case Bindings::InterfaceName::FileList:
|
||||
return intrinsics.is_interface_exposed<Bindings::FileListPrototype>(realm);
|
||||
case Bindings::InterfaceName::DOMException:
|
||||
return intrinsics.is_interface_exposed<Bindings::DOMExceptionPrototype>(realm);
|
||||
case Bindings::InterfaceName::DOMMatrixReadOnly:
|
||||
return intrinsics.is_interface_exposed<Bindings::DOMMatrixReadOnlyPrototype>(realm);
|
||||
case Bindings::InterfaceName::DOMMatrix:
|
||||
return intrinsics.is_interface_exposed<Bindings::DOMMatrixPrototype>(realm);
|
||||
case Bindings::InterfaceName::DOMPointReadOnly:
|
||||
return intrinsics.is_interface_exposed<Bindings::DOMPointReadOnlyPrototype>(realm);
|
||||
case Bindings::InterfaceName::DOMPoint:
|
||||
return intrinsics.is_interface_exposed<Bindings::DOMPointPrototype>(realm);
|
||||
case Bindings::InterfaceName::DOMRectReadOnly:
|
||||
return intrinsics.is_interface_exposed<Bindings::DOMRectReadOnlyPrototype>(realm);
|
||||
case Bindings::InterfaceName::DOMRect:
|
||||
return intrinsics.is_interface_exposed<Bindings::DOMRectPrototype>(realm);
|
||||
case Bindings::InterfaceName::CryptoKey:
|
||||
return intrinsics.is_interface_exposed<Bindings::CryptoKeyPrototype>(realm);
|
||||
case Bindings::InterfaceName::DOMQuad:
|
||||
return intrinsics.is_interface_exposed<Bindings::DOMQuadPrototype>(realm);
|
||||
case Bindings::InterfaceName::ImageData:
|
||||
return intrinsics.is_interface_exposed<Bindings::ImageDataPrototype>(realm);
|
||||
case Bindings::InterfaceName::ImageBitmap:
|
||||
return intrinsics.is_interface_exposed<Bindings::ImageBitmapPrototype>(realm);
|
||||
case Bindings::InterfaceName::QuotaExceededError:
|
||||
return intrinsics.is_interface_exposed<Bindings::QuotaExceededErrorPrototype>(realm);
|
||||
case Bindings::InterfaceName::Unknown:
|
||||
dbgln("Unknown interface type for serialization: {}", to_underlying(name));
|
||||
break;
|
||||
default:
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static GC::Ref<Bindings::PlatformObject> create_serialized_type(Bindings::InterfaceName serialize_type, JS::Realm& realm)
|
||||
{
|
||||
switch (serialize_type) {
|
||||
@@ -1141,18 +1098,17 @@ WebIDL::ExceptionOr<SerializedTransferRecord> structured_serialize_with_transfer
|
||||
|
||||
static bool is_transferable_interface_exposed_on_target_realm(TransferType name, JS::Realm& realm)
|
||||
{
|
||||
auto const& intrinsics = Bindings::host_defined_intrinsics(realm);
|
||||
switch (name) {
|
||||
case TransferType::MessagePort:
|
||||
return intrinsics.is_interface_exposed<Bindings::MessagePortPrototype>(realm);
|
||||
return is_exposed(Bindings::InterfaceName::MessagePort, realm);
|
||||
case TransferType::ReadableStream:
|
||||
return intrinsics.is_interface_exposed<Bindings::ReadableStreamPrototype>(realm);
|
||||
return is_exposed(Bindings::InterfaceName::ReadableStream, realm);
|
||||
case TransferType::WritableStream:
|
||||
return intrinsics.is_interface_exposed<Bindings::WritableStreamPrototype>(realm);
|
||||
return is_exposed(Bindings::InterfaceName::WritableStream, realm);
|
||||
case TransferType::TransformStream:
|
||||
return intrinsics.is_interface_exposed<Bindings::TransformStreamPrototype>(realm);
|
||||
return is_exposed(Bindings::InterfaceName::TransformStream, realm);
|
||||
case TransferType::ImageBitmap:
|
||||
return intrinsics.is_interface_exposed<Bindings::ImageBitmapPrototype>(realm);
|
||||
return is_exposed(Bindings::InterfaceName::ImageBitmap, realm);
|
||||
case TransferType::Unknown:
|
||||
dbgln("Unknown interface type for transfer: {}", to_underlying(name));
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user