From 5dabdcccf72006de333612ff4f2cb8f5ea7e9b6d Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Sat, 5 Mar 2022 23:05:04 +0100 Subject: [PATCH] LibWeb: Implement the CrossOriginOwnPropertyKeys AO --- .../CrossOriginAbstractOperations.cpp | 21 +++++++++++++++++++ .../Bindings/CrossOriginAbstractOperations.h | 1 + 2 files changed, 22 insertions(+) diff --git a/Userland/Libraries/LibWeb/Bindings/CrossOriginAbstractOperations.cpp b/Userland/Libraries/LibWeb/Bindings/CrossOriginAbstractOperations.cpp index 5baf8ca8a1..764716621f 100644 --- a/Userland/Libraries/LibWeb/Bindings/CrossOriginAbstractOperations.cpp +++ b/Userland/Libraries/LibWeb/Bindings/CrossOriginAbstractOperations.cpp @@ -220,4 +220,25 @@ JS::ThrowCompletionOr cross_origin_set(JS::GlobalObject& global_object, JS return vm.throw_completion(global_object, DOM::SecurityError::create(String::formatted("Can't set property '{}' on cross-origin object", property_key))); } +// 7.2.3.7 CrossOriginOwnPropertyKeys ( O ), https://html.spec.whatwg.org/multipage/browsers.html#crossoriginownpropertykeys-(-o-) +JS::MarkedVector cross_origin_own_property_keys(Variant const& object) +{ + auto& event_loop = HTML::main_thread_event_loop(); + auto& vm = event_loop.vm(); + + // 1. Let keys be a new empty List. + auto keys = JS::MarkedVector { vm.heap() }; + + // 2. For each e of CrossOriginProperties(O), append e.[[Property]] to keys. + for (auto& entry : cross_origin_properties(object)) + keys.append(JS::js_string(vm, move(entry.property))); + + // 3. Return the concatenation of keys and « "then", @@toStringTag, @@hasInstance, @@isConcatSpreadable ». + keys.append(JS::js_string(vm, vm.names.then.as_string())); + keys.append(vm.well_known_symbol_to_string_tag()); + keys.append(vm.well_known_symbol_has_instance()); + keys.append(vm.well_known_symbol_is_concat_spreadable()); + return keys; +} + } diff --git a/Userland/Libraries/LibWeb/Bindings/CrossOriginAbstractOperations.h b/Userland/Libraries/LibWeb/Bindings/CrossOriginAbstractOperations.h index c92d114a3d..fab6a14993 100644 --- a/Userland/Libraries/LibWeb/Bindings/CrossOriginAbstractOperations.h +++ b/Userland/Libraries/LibWeb/Bindings/CrossOriginAbstractOperations.h @@ -33,6 +33,7 @@ bool is_platform_object_same_origin(JS::Object const&); Optional cross_origin_get_own_property_helper(Variant const&, JS::PropertyKey const&); JS::ThrowCompletionOr cross_origin_get(JS::GlobalObject&, JS::Object const&, JS::PropertyKey const&, JS::Value receiver); JS::ThrowCompletionOr cross_origin_set(JS::GlobalObject&, JS::Object&, JS::PropertyKey const&, JS::Value, JS::Value receiver); +JS::MarkedVector cross_origin_own_property_keys(Variant const&); }