diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp index 0afe2b1391..2489aec6f4 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.cpp +++ b/Userland/Libraries/LibWeb/DOM/Document.cpp @@ -1256,7 +1256,7 @@ WebIDL::ExceptionOr> Document::create_pr JS::NonnullGCPtr Document::create_range() { - return Range::create(*this); + return Range::create(*this).release_value_but_fixme_should_propagate_errors(); } // https://dom.spec.whatwg.org/#dom-document-createevent diff --git a/Userland/Libraries/LibWeb/DOM/Range.cpp b/Userland/Libraries/LibWeb/DOM/Range.cpp index b77d973f4a..4f2a6e35ac 100644 --- a/Userland/Libraries/LibWeb/DOM/Range.cpp +++ b/Userland/Libraries/LibWeb/DOM/Range.cpp @@ -27,24 +27,24 @@ HashTable& Range::live_ranges() return ranges; } -JS::NonnullGCPtr Range::create(HTML::Window& window) +WebIDL::ExceptionOr> Range::create(HTML::Window& window) { return Range::create(window.associated_document()); } -JS::NonnullGCPtr Range::create(Document& document) +WebIDL::ExceptionOr> Range::create(Document& document) { auto& realm = document.realm(); - return realm.heap().allocate(realm, document).release_allocated_value_but_fixme_should_propagate_errors(); + return MUST_OR_THROW_OOM(realm.heap().allocate(realm, document)); } -JS::NonnullGCPtr Range::create(Node& start_container, u32 start_offset, Node& end_container, u32 end_offset) +WebIDL::ExceptionOr> Range::create(Node& start_container, u32 start_offset, Node& end_container, u32 end_offset) { auto& realm = start_container.realm(); - return realm.heap().allocate(realm, start_container, start_offset, end_container, end_offset).release_allocated_value_but_fixme_should_propagate_errors(); + return MUST_OR_THROW_OOM(realm.heap().allocate(realm, start_container, start_offset, end_container, end_offset)); } -JS::NonnullGCPtr Range::construct_impl(JS::Realm& realm) +WebIDL::ExceptionOr> Range::construct_impl(JS::Realm& realm) { auto& window = verify_cast(realm.global_object()); return Range::create(window); @@ -715,7 +715,7 @@ WebIDL::ExceptionOr> Range::extract() TRY(fragment->append_child(clone)); // 3. Let subrange be a new live range whose start is (original start node, original start offset) and whose end is (first partially contained child, first partially contained child’s length). - auto subrange = Range::create(original_start_node, original_start_offset, *first_partially_contained_child, first_partially_contained_child->length()); + auto subrange = TRY(Range::create(original_start_node, original_start_offset, *first_partially_contained_child, first_partially_contained_child->length())); // 4. Let subfragment be the result of extracting subrange. auto subfragment = TRY(subrange->extract()); @@ -753,7 +753,7 @@ WebIDL::ExceptionOr> Range::extract() TRY(fragment->append_child(clone)); // 3. Let subrange be a new live range whose start is (last partially contained child, 0) and whose end is (original end node, original end offset). - auto subrange = Range::create(*last_partially_contained_child, 0, original_end_node, original_end_offset); + auto subrange = TRY(Range::create(*last_partially_contained_child, 0, original_end_node, original_end_offset)); // 4. Let subfragment be the result of extracting subrange. auto subfragment = TRY(subrange->extract()); @@ -1016,7 +1016,7 @@ WebIDL::ExceptionOr> Range::clone_the_content TRY(fragment->append_child(clone)); // 3. Let subrange be a new live range whose start is (original start node, original start offset) and whose end is (first partially contained child, first partially contained child’s length). - auto subrange = Range::create(original_start_node, original_start_offset, *first_partially_contained_child, first_partially_contained_child->length()); + auto subrange = TRY(Range::create(original_start_node, original_start_offset, *first_partially_contained_child, first_partially_contained_child->length())); // 4. Let subfragment be the result of cloning the contents of subrange. auto subfragment = TRY(subrange->clone_the_contents()); @@ -1055,7 +1055,7 @@ WebIDL::ExceptionOr> Range::clone_the_content TRY(fragment->append_child(clone)); // 3. Let subrange be a new live range whose start is (last partially contained child, 0) and whose end is (original end node, original end offset). - auto subrange = Range::create(*last_partially_contained_child, 0, original_end_node, original_end_offset); + auto subrange = TRY(Range::create(*last_partially_contained_child, 0, original_end_node, original_end_offset)); // 4. Let subfragment be the result of cloning the contents of subrange. auto subfragment = TRY(subrange->clone_the_contents()); diff --git a/Userland/Libraries/LibWeb/DOM/Range.h b/Userland/Libraries/LibWeb/DOM/Range.h index 480cdb3a4e..1f046b75e4 100644 --- a/Userland/Libraries/LibWeb/DOM/Range.h +++ b/Userland/Libraries/LibWeb/DOM/Range.h @@ -26,10 +26,10 @@ class Range final : public AbstractRange { WEB_PLATFORM_OBJECT(Range, AbstractRange); public: - static JS::NonnullGCPtr create(Document&); - static JS::NonnullGCPtr create(HTML::Window&); - static JS::NonnullGCPtr create(Node& start_container, u32 start_offset, Node& end_container, u32 end_offset); - static JS::NonnullGCPtr construct_impl(JS::Realm&); + static WebIDL::ExceptionOr> create(Document&); + static WebIDL::ExceptionOr> create(HTML::Window&); + static WebIDL::ExceptionOr> create(Node& start_container, u32 start_offset, Node& end_container, u32 end_offset); + static WebIDL::ExceptionOr> construct_impl(JS::Realm&); virtual ~Range() override; diff --git a/Userland/Libraries/LibWeb/Selection/Selection.cpp b/Userland/Libraries/LibWeb/Selection/Selection.cpp index 45297716f1..77c050a246 100644 --- a/Userland/Libraries/LibWeb/Selection/Selection.cpp +++ b/Userland/Libraries/LibWeb/Selection/Selection.cpp @@ -187,7 +187,7 @@ WebIDL::ExceptionOr Selection::collapse(JS::GCPtr node, unsigne return {}; // 4. Otherwise, let newRange be a new range. - auto new_range = DOM::Range::create(*m_document); + auto new_range = TRY(DOM::Range::create(*m_document)); // 5. Set the start the start and the end of newRange to (node, offset). TRY(new_range->set_start(*node, offset)); @@ -214,7 +214,7 @@ WebIDL::ExceptionOr Selection::collapse_to_start() } // 2. Otherwise, it must create a new range - auto new_range = DOM::Range::create(*m_document); + auto new_range = TRY(DOM::Range::create(*m_document)); // 3. Set the start both its start and end to the start of this's range TRY(new_range->set_start(*anchor_node(), m_range->start_offset())); @@ -234,7 +234,7 @@ WebIDL::ExceptionOr Selection::collapse_to_end() } // 2. Otherwise, it must create a new range - auto new_range = DOM::Range::create(*m_document); + auto new_range = TRY(DOM::Range::create(*m_document)); // 3. Set the start both its start and end to the start of this's range TRY(new_range->set_start(*anchor_node(), m_range->end_offset())); @@ -266,7 +266,7 @@ WebIDL::ExceptionOr Selection::extend(JS::NonnullGCPtr node, un auto new_focus_offset = offset; // 4. Let newRange be a new range. - auto new_range = DOM::Range::create(*m_document); + auto new_range = TRY(DOM::Range::create(*m_document)); // 5. If node's root is not the same as the this's range's root, set the start newRange's start and end to newFocus. if (&node->root() != &m_range->start_container()->root()) { @@ -315,7 +315,7 @@ WebIDL::ExceptionOr Selection::set_base_and_extent(JS::NonnullGCPtr Selection::select_all_children(JS::NonnullGCPtrchild_count(); // 3. Set newRange's start to (node, 0).