From e0e41116a4d3414018b41fa476242f31bee3482d Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Sun, 26 Sep 2021 15:26:30 +0100 Subject: [PATCH] LibWeb: Make WindowObject's prototype immutable While I was implementing IDL special operations, I noticed that for global platform objects (e.g. WindowObject), the IDL spec makes their prototype immutable. https://heycam.github.io/webidl/#platform-object-setprototypeof --- Userland/Libraries/LibWeb/Bindings/WindowObject.cpp | 7 +++++++ Userland/Libraries/LibWeb/Bindings/WindowObject.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/Userland/Libraries/LibWeb/Bindings/WindowObject.cpp b/Userland/Libraries/LibWeb/Bindings/WindowObject.cpp index cf9ae65202..4ee9eea972 100644 --- a/Userland/Libraries/LibWeb/Bindings/WindowObject.cpp +++ b/Userland/Libraries/LibWeb/Bindings/WindowObject.cpp @@ -136,6 +136,13 @@ Origin WindowObject::origin() const return impl().associated_document().origin(); } +// https://heycam.github.io/webidl/#platform-object-setprototypeof +bool WindowObject::internal_set_prototype_of(JS::Object* prototype) +{ + // 1. Return ? SetImmutablePrototype(O, V). + return set_immutable_prototype(prototype); +} + static DOM::Window* impl_from(JS::VM& vm, JS::GlobalObject& global_object) { // Since this is a non built-in function we must treat it as non-strict mode diff --git a/Userland/Libraries/LibWeb/Bindings/WindowObject.h b/Userland/Libraries/LibWeb/Bindings/WindowObject.h index a148d95ee4..eda6c5d72a 100644 --- a/Userland/Libraries/LibWeb/Bindings/WindowObject.h +++ b/Userland/Libraries/LibWeb/Bindings/WindowObject.h @@ -60,6 +60,8 @@ public: return *constructor; } + virtual bool internal_set_prototype_of(JS::Object* prototype) override; + private: virtual void visit_edges(Visitor&) override;