LibWeb: Implement the LegacyUnforgeable attribute
Some checks are pending
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (macos-14, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run

This fixes the frame-ancestors WPT tests from crashing when an iframe
is blocked from loading. This is because it would get an undefined
location.href from the cross-origin iframe, which causes a crash as it
expects it to be there.
This commit is contained in:
Luke Wilde 2024-12-09 17:04:20 +00:00 committed by Tim Ledbetter
commit c7d25301d3
Notes: github-actions[bot] 2025-03-28 00:10:01 +00:00
15 changed files with 511 additions and 76 deletions

View file

@ -504,7 +504,7 @@ void Parser::parse_stringifier(HashMap<ByteString, ByteString>& extended_attribu
interface.has_stringifier = true;
if (lexer.next_is("attribute"sv) || lexer.next_is("inherit"sv) || lexer.next_is("readonly"sv)) {
parse_attribute(extended_attributes, interface);
interface.stringifier_attribute = interface.attributes.last().name;
interface.stringifier_attribute = interface.attributes.last();
} else {
assert_specific(';');
}

View file

@ -280,7 +280,7 @@ public:
Vector<Function> functions;
Vector<Function> static_functions;
bool has_stringifier { false };
Optional<ByteString> stringifier_attribute;
Optional<Attribute> stringifier_attribute;
bool has_unscopable_member { false };
Optional<NonnullRefPtr<Type const>> value_iterator_type;

View file

@ -483,6 +483,7 @@ void Document::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(Document);
Bindings::DocumentPrototype::define_unforgeable_attributes(realm, *this);
m_selection = realm.create<Selection::Selection>(realm, *this);

View file

@ -57,6 +57,7 @@ void Event::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(Event);
Bindings::EventPrototype::define_unforgeable_attributes(realm, *this);
}
void Event::visit_edges(Visitor& visitor)

View file

@ -43,6 +43,7 @@ void Location::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(Location);
Bindings::LocationPrototype::define_unforgeable_attributes(realm, *this);
auto& vm = this->vm();

View file

@ -731,6 +731,7 @@ WebIDL::ExceptionOr<void> Window::initialize_web_interfaces(Badge<WindowEnvironm
WEB_SET_PROTOTYPE_FOR_INTERFACE(Window);
Bindings::WindowGlobalMixin::initialize(realm, *this);
Bindings::WindowGlobalMixin::define_unforgeable_attributes(realm, *this);
WindowOrWorkerGlobalScopeMixin::initialize(realm);
if (s_internals_object_exposed)