diff --git a/src/browser/tests/selection.html b/src/browser/tests/selection.html
index 9fd614f0..be7ba464 100644
--- a/src/browser/tests/selection.html
+++ b/src/browser/tests/selection.html
@@ -143,7 +143,7 @@
testing.expectEqual(range2, sel.getRangeAt(0));
// Removing non-existent range does nothing
- sel.removeRange(range1);
+ testing.expectError('NotFoundError', () => { sel.removeRange(range1); });
testing.expectEqual(1, sel.rangeCount);
}
diff --git a/src/browser/webapi/Selection.zig b/src/browser/webapi/Selection.zig
index 36d25eb8..6bc0981b 100644
--- a/src/browser/webapi/Selection.zig
+++ b/src/browser/webapi/Selection.zig
@@ -99,13 +99,15 @@ pub fn addRange(self: *Selection, range: *Range, page: *Page) !void {
return try self._ranges.append(page.arena, range);
}
-pub fn removeRange(self: *Selection, range: *Range) void {
+pub fn removeRange(self: *Selection, range: *Range) !void {
for (self._ranges.items, 0..) |r, i| {
if (r == range) {
_ = self._ranges.orderedRemove(i);
return;
}
}
+
+ return error.NotFound;
}
fn removeAllRangesInner(self: *Selection, reset_direction: bool) void {
@@ -392,7 +394,7 @@ pub const JsApi = struct {
pub const getRangeAt = bridge.function(Selection.getRangeAt, .{ .dom_exception = true });
pub const modify = bridge.function(Selection.modify, .{});
pub const removeAllRanges = bridge.function(Selection.removeAllRanges, .{});
- pub const removeRange = bridge.function(Selection.removeRange, .{});
+ pub const removeRange = bridge.function(Selection.removeRange, .{ .dom_exception = true });
pub const selectAllChildren = bridge.function(Selection.selectAllChildren, .{});
pub const setBaseAndExtent = bridge.function(Selection.setBaseAndExtent, .{ .dom_exception = true });
pub const setPosition = bridge.function(Selection.setPosition, .{});