/* * Copyright (c) 2023, stelar7 * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include namespace Web::Bindings { JS_DEFINE_ALLOCATOR(KeyAlgorithm); JS::NonnullGCPtr KeyAlgorithm::create(JS::Realm& realm) { return realm.heap().allocate(realm, realm); } KeyAlgorithm::KeyAlgorithm(JS::Realm& realm) : Object(ConstructWithPrototypeTag::Tag, realm.intrinsics().object_prototype()) { } void KeyAlgorithm::initialize(JS::Realm& realm) { define_native_accessor(realm, "name", name_getter, {}, JS::Attribute::Enumerable | JS::Attribute::Configurable); Base::initialize(realm); } static JS::ThrowCompletionOr impl_from(JS::VM& vm) { auto this_value = vm.this_value(); JS::Object* this_object = nullptr; if (this_value.is_nullish()) this_object = &vm.current_realm()->global_object(); else this_object = TRY(this_value.to_object(vm)); if (!is(this_object)) return vm.throw_completion(JS::ErrorType::NotAnObjectOfType, "KeyAlgorithm"); return static_cast(this_object); } JS_DEFINE_NATIVE_FUNCTION(KeyAlgorithm::name_getter) { auto* impl = TRY(impl_from(vm)); auto name = TRY(throw_dom_exception_if_needed(vm, [&] { return impl->name(); })); return JS::PrimitiveString::create(vm, name); } }