Bläddra i källkod

LibWeb: Implement some custom JS internal overrides for Location

As required by the spec. Note that this isn't the full suite of
overrides.
Luke Wilde 3 år sedan
förälder
incheckning
ee5bac0891

+ 20 - 2
Userland/Libraries/LibWeb/Bindings/LocationObject.cpp

@@ -11,8 +11,7 @@
 #include <LibWeb/DOM/Document.h>
 #include <LibWeb/DOM/Window.h>
 
-namespace Web {
-namespace Bindings {
+namespace Web::Bindings {
 
 LocationObject::LocationObject(JS::GlobalObject& global_object)
     : Object(*global_object.object_prototype())
@@ -118,6 +117,25 @@ JS_DEFINE_NATIVE_FUNCTION(LocationObject::reload)
     return JS::js_undefined();
 }
 
+// https://html.spec.whatwg.org/multipage/history.html#location-setprototypeof
+bool LocationObject::internal_set_prototype_of(Object* prototype)
+{
+    // 1. Return ! SetImmutablePrototype(this, V).
+    return set_immutable_prototype(prototype);
+}
+
+// https://html.spec.whatwg.org/multipage/history.html#location-isextensible
+bool LocationObject::internal_is_extensible() const
+{
+    // 1. Return true.
+    return true;
+}
+
+// https://html.spec.whatwg.org/multipage/history.html#location-preventextensions
+bool LocationObject::internal_prevent_extensions()
+{
+    // 1. Return false.
+    return false;
 }
 
 }

+ 7 - 0
Userland/Libraries/LibWeb/Bindings/LocationObject.h

@@ -20,6 +20,13 @@ public:
     virtual void initialize(JS::GlobalObject&) override;
     virtual ~LocationObject() override;
 
+    virtual bool internal_set_prototype_of(Object* prototype) override;
+    virtual bool internal_is_extensible() const override;
+    virtual bool internal_prevent_extensions() override;
+
+    // FIXME: There should also be a custom [[GetPrototypeOf]], [[GetOwnProperty]], [[DefineOwnProperty]], [[Get]], [[Set]], [[Delete]] and [[OwnPropertyKeys]],
+    //        but we don't have the infrastructure in place to implement them yet.
+
 private:
     JS_DECLARE_NATIVE_FUNCTION(reload);