DOMException.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Copyright (c) 2022, Andreas Kling <andreas@ladybird.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibWeb/Bindings/DOMExceptionPrototype.h>
  7. #include <LibWeb/Bindings/Intrinsics.h>
  8. #include <LibWeb/HTML/StructuredSerialize.h>
  9. #include <LibWeb/WebIDL/DOMException.h>
  10. namespace Web::WebIDL {
  11. GC_DEFINE_ALLOCATOR(DOMException);
  12. GC::Ref<DOMException> DOMException::create(JS::Realm& realm, FlyString name, String message)
  13. {
  14. return realm.create<DOMException>(realm, move(name), move(message));
  15. }
  16. GC::Ref<DOMException> DOMException::create(JS::Realm& realm)
  17. {
  18. return realm.create<DOMException>(realm);
  19. }
  20. GC::Ref<DOMException> DOMException::construct_impl(JS::Realm& realm, String message, FlyString name)
  21. {
  22. return realm.create<DOMException>(realm, move(name), move(message));
  23. }
  24. DOMException::DOMException(JS::Realm& realm, FlyString name, String message)
  25. : PlatformObject(realm)
  26. , m_name(move(name))
  27. , m_message(move(message))
  28. {
  29. }
  30. DOMException::DOMException(JS::Realm& realm)
  31. : PlatformObject(realm)
  32. {
  33. }
  34. DOMException::~DOMException() = default;
  35. void DOMException::initialize(JS::Realm& realm)
  36. {
  37. Base::initialize(realm);
  38. WEB_SET_PROTOTYPE_FOR_INTERFACE(DOMException);
  39. }
  40. ExceptionOr<void> DOMException::serialization_steps(HTML::SerializationRecord& record, bool, HTML::SerializationMemory&)
  41. {
  42. auto& vm = this->vm();
  43. // 1. Set serialized.[[Name]] to value’s name.
  44. TRY(HTML::serialize_string(vm, record, m_name.to_string()));
  45. // 2. Set serialized.[[Message]] to value’s message.
  46. TRY(HTML::serialize_string(vm, record, m_message.to_string()));
  47. // FIXME: 3. User agents should attach a serialized representation of any interesting accompanying data which are not yet specified, notably the stack property, to serialized.
  48. return {};
  49. }
  50. ExceptionOr<void> DOMException::deserialization_steps(ReadonlySpan<u32> const& record, size_t& position, HTML::DeserializationMemory&)
  51. {
  52. auto& vm = this->vm();
  53. // 1. Set value’s name to serialized.[[Name]].
  54. m_name = TRY(HTML::deserialize_string(vm, record, position));
  55. // 2. Set value’s message to serialized.[[Message]].
  56. m_message = TRY(HTML::deserialize_string(vm, record, position));
  57. // FIXME: 3. If any other data is attached to serialized, then deserialize and attach it to value.
  58. return {};
  59. }
  60. }