Jelajahi Sumber

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
Luke Wilde 3 tahun lalu
induk
melakukan
e0e41116a4

+ 7 - 0
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

+ 2 - 0
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;