Skip to content

Commit

Permalink
LibWeb: Make Selection APIs throw on DocumentType node inputs
Browse files Browse the repository at this point in the history
This matches the behavior of all major engines, and is covered by
hundreds of subtests in WPT.

Spec PR: w3c/selection-api#342
  • Loading branch information
awesomekling authored and nico-engels committed Nov 23, 2024
1 parent 9213687 commit c267863
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions Libraries/LibWeb/Selection/Selection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,12 @@ WebIDL::ExceptionOr<void> Selection::collapse(GC::Ptr<DOM::Node> node, unsigned
return {};
}

// FIXME: Update this to match the spec once the spec is updated.
// Spec PR: https://github.com/w3c/selection-api/pull/342
if (node->is_document_type()) {
return WebIDL::InvalidNodeTypeError::create(realm(), "Selection.collapse() with DocumentType node"_string);
}

// 2. The method must throw an IndexSizeError exception if offset is longer than node's length and abort these steps.
if (offset > node->length()) {
return WebIDL::IndexSizeError::create(realm(), "Selection.collapse() with offset longer than node's length"_string);
Expand Down Expand Up @@ -361,6 +367,12 @@ WebIDL::ExceptionOr<void> Selection::set_base_and_extent(GC::Ref<DOM::Node> anch
// https://w3c.github.io/selection-api/#dom-selection-selectallchildren
WebIDL::ExceptionOr<void> Selection::select_all_children(GC::Ref<DOM::Node> node)
{
// FIXME: Update this to match the spec once the spec is updated.
// Spec PR: https://github.com/w3c/selection-api/pull/342
if (node->is_document_type()) {
return WebIDL::InvalidNodeTypeError::create(realm(), "Selection.selectAllChildren() with DocumentType node"_string);
}

// 1. If node's root is not the document associated with this, abort these steps.
if (&node->root() != m_document.ptr())
return {};
Expand Down

0 comments on commit c267863

Please sign in to comment.