Skip to content

Commit 8074d72

Browse files
committed
TypeError when Stream is locked
1 parent 907ce79 commit 8074d72

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-9
lines changed

src/browser/streams/ReadableStream.zig

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,15 @@ pub fn constructor(underlying: ?UnderlyingSource, strategy: ?QueueingStrategy, p
7575
return stream;
7676
}
7777

78-
pub fn _cancel(self: *const ReadableStream, page: *Page) Env.Promise {
78+
pub fn get_locked(self: *const ReadableStream) bool {
79+
return self.locked;
80+
}
81+
82+
pub fn _cancel(self: *const ReadableStream, page: *Page) !Env.Promise {
83+
if (self.locked) {
84+
return error.TypeError;
85+
}
86+
7987
const resolver = Env.PromiseResolver{
8088
.js_context = page.main_context,
8189
.resolver = self.cancel_resolver.castToPromiseResolver(),
@@ -84,21 +92,28 @@ pub fn _cancel(self: *const ReadableStream, page: *Page) Env.Promise {
8492
return resolver.promise();
8593
}
8694

87-
pub fn get_locked(self: *const ReadableStream) bool {
88-
return self.locked;
89-
}
90-
9195
const GetReaderOptions = struct {
96+
// Mode must equal 'byob' or be undefined. RangeError otherwise.
9297
mode: ?[]const u8 = null,
9398
};
9499

95-
pub fn _getReader(self: *ReadableStream, _options: ?GetReaderOptions, page: *Page) ReadableStreamDefaultReader {
100+
pub fn _getReader(self: *ReadableStream, _options: ?GetReaderOptions, page: *Page) !ReadableStreamDefaultReader {
101+
if (self.locked) {
102+
return error.TypeError;
103+
}
104+
96105
const options = _options orelse GetReaderOptions{};
97106
_ = options;
98107

99108
return ReadableStreamDefaultReader.constructor(self, page);
100109
}
101110

111+
// TODO: pipeThrough (requires TransformStream)
112+
113+
// TODO: pipeTo (requires WritableStream)
114+
115+
// TODO: tee
116+
102117
const testing = @import("../../testing.zig");
103118
test "streams: ReadableStream" {
104119
var runner = try testing.jsRunner(testing.tracking_allocator, .{ .url = "https://lightpanda.io" });

src/browser/streams/ReadableStreamDefaultController.zig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,4 @@ pub fn _enqueue(self: *ReadableStreamDefaultController, chunk: []const u8, page:
5454

5555
pub fn _error(self: *ReadableStreamDefaultController, err: Env.JsObject) void {
5656
self.stream.state = .{ .errored = err };
57-
// set to error.
5857
}

src/browser/streams/ReadableStreamDefaultReader.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ pub fn get_closed(self: *const ReadableStreamDefaultReader) Env.Promise {
4747
return self.closed_resolver.promise();
4848
}
4949

50-
pub fn _cancel(self: *ReadableStreamDefaultReader, page: *Page) Env.Promise {
51-
return self.stream._cancel(page);
50+
pub fn _cancel(self: *ReadableStreamDefaultReader, page: *Page) !Env.Promise {
51+
return try self.stream._cancel(page);
5252
}
5353

5454
pub const ReadableStreamReadResult = struct {

0 commit comments

Comments
 (0)