LocationObject.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/URL.h>
  9. #include <LibJS/Forward.h>
  10. #include <LibJS/Runtime/Completion.h>
  11. #include <LibWeb/Bindings/PlatformObject.h>
  12. #include <LibWeb/Forward.h>
  13. #include <LibWeb/HTML/CrossOrigin/CrossOriginPropertyDescriptorMap.h>
  14. namespace Web {
  15. namespace Bindings {
  16. class LocationObject final : public Bindings::PlatformObject {
  17. JS_OBJECT(LocationObject, Bindings::PlatformObject);
  18. public:
  19. virtual ~LocationObject() override;
  20. virtual JS::ThrowCompletionOr<JS::Object*> internal_get_prototype_of() const override;
  21. virtual JS::ThrowCompletionOr<bool> internal_set_prototype_of(Object* prototype) override;
  22. virtual JS::ThrowCompletionOr<bool> internal_is_extensible() const override;
  23. virtual JS::ThrowCompletionOr<bool> internal_prevent_extensions() override;
  24. virtual JS::ThrowCompletionOr<Optional<JS::PropertyDescriptor>> internal_get_own_property(JS::PropertyKey const&) const override;
  25. virtual JS::ThrowCompletionOr<bool> internal_define_own_property(JS::PropertyKey const&, JS::PropertyDescriptor const&) override;
  26. virtual JS::ThrowCompletionOr<JS::Value> internal_get(JS::PropertyKey const&, JS::Value receiver) const override;
  27. virtual JS::ThrowCompletionOr<bool> internal_set(JS::PropertyKey const&, JS::Value value, JS::Value receiver) override;
  28. virtual JS::ThrowCompletionOr<bool> internal_delete(JS::PropertyKey const&) override;
  29. virtual JS::ThrowCompletionOr<JS::MarkedVector<JS::Value>> internal_own_property_keys() const override;
  30. HTML::CrossOriginPropertyDescriptorMap const& cross_origin_property_descriptor_map() const { return m_cross_origin_property_descriptor_map; }
  31. HTML::CrossOriginPropertyDescriptorMap& cross_origin_property_descriptor_map() { return m_cross_origin_property_descriptor_map; }
  32. private:
  33. explicit LocationObject(JS::Realm&);
  34. virtual void initialize(JS::Realm&) override;
  35. virtual void visit_edges(Cell::Visitor&) override;
  36. DOM::Document const* relevant_document() const;
  37. AK::URL url() const;
  38. JS_DECLARE_NATIVE_FUNCTION(reload);
  39. JS_DECLARE_NATIVE_FUNCTION(replace);
  40. JS_DECLARE_NATIVE_FUNCTION(href_getter);
  41. JS_DECLARE_NATIVE_FUNCTION(href_setter);
  42. JS_DECLARE_NATIVE_FUNCTION(host_getter);
  43. JS_DECLARE_NATIVE_FUNCTION(hostname_getter);
  44. JS_DECLARE_NATIVE_FUNCTION(pathname_getter);
  45. JS_DECLARE_NATIVE_FUNCTION(hash_getter);
  46. JS_DECLARE_NATIVE_FUNCTION(search_getter);
  47. JS_DECLARE_NATIVE_FUNCTION(protocol_getter);
  48. JS_DECLARE_NATIVE_FUNCTION(port_getter);
  49. // [[CrossOriginPropertyDescriptorMap]], https://html.spec.whatwg.org/multipage/browsers.html#crossoriginpropertydescriptormap
  50. HTML::CrossOriginPropertyDescriptorMap m_cross_origin_property_descriptor_map;
  51. // [[DefaultProperties]], https://html.spec.whatwg.org/multipage/history.html#defaultproperties
  52. Vector<JS::Value> m_default_properties;
  53. };
  54. }
  55. }