Skip to content

Commit

Permalink
bindings: Support Web IDL async iterable (3.1 of 4)
Browse files Browse the repository at this point in the history
Moves the iterator kind from AsyncIteratorBase to IterationSourceBase
following the suggestion at https://crrev.com/c/4685044 .

Bug: 1087157
Change-Id: I0c50ef7b9daa3a7ea93581a48b3c1a41e78a7dd5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4805732
Reviewed-by: Raphael Kubo Da Costa <raphael.kubo.da.costa@intel.com>
Commit-Queue: Yuki Shiino <yukishiino@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1187664}
  • Loading branch information
yuki3 authored and Chromium LUCI CQ committed Aug 24, 2023
1 parent d8bcb9d commit eb036d7
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ def make_constructors(cg_context):

decls = ListNode([
CxxFuncDefNode(name=cg_context.class_name,
arg_decls=["IterationSourceBase* source", "Kind kind"],
arg_decls=["IterationSourceBase* source"],
return_type="",
explicit=True,
member_initializer_list=[
"${base_class_name}(source, kind)",
"${base_class_name}(source)",
]),
CxxFuncDeclNode(name="~AsyncIterator",
arg_decls=[],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ namespace blink::bindings {
v8::Local<v8::Promise> AsyncIteratorBase::next(
ScriptState* script_state,
ExceptionState& exception_state) {
return iteration_source_->Next(script_state, kind_, exception_state);
return iteration_source_->Next(script_state, exception_state);
}

v8::Local<v8::Promise> AsyncIteratorBase::returnForBinding(
ScriptState* script_state,
v8::Local<v8::Value> value,
ExceptionState& exception_state) {
return iteration_source_->Return(script_state, kind_, value, exception_state);
return iteration_source_->Return(script_state, value, exception_state);
}

void AsyncIteratorBase::Trace(Visitor* visitor) const {
Expand Down
28 changes: 15 additions & 13 deletions third_party/blink/renderer/platform/bindings/async_iterator_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,31 +21,34 @@ namespace bindings {
// implementation of async iterators.
class PLATFORM_EXPORT AsyncIteratorBase : public ScriptWrappable {
public:
// https://webidl.spec.whatwg.org/#default-asynchronous-iterator-object-kind
enum class Kind {
kKey,
kValue,
kKeyValue,
};

class PLATFORM_EXPORT IterationSourceBase
: public GarbageCollected<IterationSourceBase> {
public:
IterationSourceBase() = default;
// https://webidl.spec.whatwg.org/#default-asynchronous-iterator-object-kind
enum class Kind {
kKey,
kValue,
kKeyValue,
};

explicit IterationSourceBase(Kind kind) : kind_(kind) {}
virtual ~IterationSourceBase() = default;
IterationSourceBase(const IterationSourceBase&) = delete;
IterationSourceBase& operator=(const IterationSourceBase&) = delete;

virtual v8::Local<v8::Promise> Next(ScriptState* script_state,
Kind kind,
ExceptionState& exception_state) = 0;

virtual v8::Local<v8::Promise> Return(ScriptState* script_state,
Kind kind,
v8::Local<v8::Value> value,
ExceptionState& exception_state) = 0;

Kind GetKind() const { return kind_; }

virtual void Trace(Visitor* visitor) const {}

private:
const Kind kind_;
};

~AsyncIteratorBase() override = default;
Expand All @@ -60,11 +63,10 @@ class PLATFORM_EXPORT AsyncIteratorBase : public ScriptWrappable {
void Trace(Visitor* visitor) const override;

protected:
explicit AsyncIteratorBase(IterationSourceBase* iteration_source, Kind kind)
: iteration_source_(iteration_source), kind_(kind) {}
explicit AsyncIteratorBase(IterationSourceBase* iteration_source)
: iteration_source_(iteration_source) {}

const Member<IterationSourceBase> iteration_source_;
const Kind kind_;
};

} // namespace bindings
Expand Down

0 comments on commit eb036d7

Please sign in to comment.