diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-05-16 09:59:13 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-05-20 10:28:53 +0000 |
commit | 6c11fb357ec39bf087b8b632e2b1e375aef1b38b (patch) | |
tree | c8315530db18a8ee566521c39ab8a6af4f72bc03 /chromium/third_party/blink/renderer/core/streams/stream_promise_resolver.cc | |
parent | 3ffaed019d0772e59d6cdb2d0d32fe4834c31f72 (diff) | |
download | qtwebengine-chromium-6c11fb357ec39bf087b8b632e2b1e375aef1b38b.tar.gz |
BASELINE: Update Chromium to 74.0.3729.159
Change-Id: I8d2497da544c275415aedd94dd25328d555de811
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/third_party/blink/renderer/core/streams/stream_promise_resolver.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/streams/stream_promise_resolver.cc | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/core/streams/stream_promise_resolver.cc b/chromium/third_party/blink/renderer/core/streams/stream_promise_resolver.cc new file mode 100644 index 00000000000..fb089841c19 --- /dev/null +++ b/chromium/third_party/blink/renderer/core/streams/stream_promise_resolver.cc @@ -0,0 +1,102 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/core/streams/stream_promise_resolver.h" + +#include "third_party/blink/renderer/bindings/core/v8/script_promise.h" +#include "third_party/blink/renderer/bindings/core/v8/script_value.h" +#include "third_party/blink/renderer/platform/heap/heap.h" +#include "third_party/blink/renderer/platform/heap/visitor.h" +#include "third_party/blink/renderer/platform/wtf/assertions.h" + +namespace blink { + +StreamPromiseResolver* StreamPromiseResolver::CreateResolved( + ScriptState* script_state, + v8::Local<v8::Value> value) { + auto* promise = MakeGarbageCollected<StreamPromiseResolver>(script_state); + promise->Resolve(script_state, value); + return promise; +} + +StreamPromiseResolver* StreamPromiseResolver::CreateResolvedWithUndefined( + ScriptState* script_state) { + return CreateResolved(script_state, + v8::Undefined(script_state->GetIsolate())); +} + +StreamPromiseResolver* StreamPromiseResolver::CreateRejected( + ScriptState* script_state, + v8::Local<v8::Value> reason) { + auto* promise = MakeGarbageCollected<StreamPromiseResolver>(script_state); + promise->Reject(script_state, reason); + return promise; +} + +// The constructor crashes if a v8::Promise::Resolver object cannot be created. +// TODO(ricea): If necessary change this to make all the methods no-op instead. +StreamPromiseResolver::StreamPromiseResolver(ScriptState* script_state) + : resolver_(script_state->GetIsolate(), + v8::Promise::Resolver::New(script_state->GetContext()) + .ToLocalChecked()) {} + +StreamPromiseResolver::~StreamPromiseResolver() = default; + +void StreamPromiseResolver::Resolve(ScriptState* script_state, + v8::Local<v8::Value> value) { + DCHECK(!resolver_.IsEmpty()); + if (is_settled_) { + return; + } + is_settled_ = true; + auto result = resolver_.NewLocal(script_state->GetIsolate()) + ->Resolve(script_state->GetContext(), value); + if (result.IsNothing()) { + DVLOG(3) << "Assuming JS shutdown and ignoring failed Resolve"; + } +} + +void StreamPromiseResolver::ResolveWithUndefined(ScriptState* script_state) { + Resolve(script_state, v8::Undefined(script_state->GetIsolate())); +} + +void StreamPromiseResolver::Reject(ScriptState* script_state, + v8::Local<v8::Value> reason) { + DCHECK(!resolver_.IsEmpty()); + if (is_settled_) { + return; + } + is_settled_ = true; + auto result = resolver_.NewLocal(script_state->GetIsolate()) + ->Reject(script_state->GetContext(), reason); + if (result.IsNothing()) { + DVLOG(3) << "Assuming JS shutdown and ignoring failed Reject"; + } +} + +ScriptPromise StreamPromiseResolver::GetScriptPromise( + ScriptState* script_state) const { + return ScriptPromise(script_state, V8Promise(script_state->GetIsolate())); +} + +v8::Local<v8::Promise> StreamPromiseResolver::V8Promise( + v8::Isolate* isolate) const { + DCHECK(!resolver_.IsEmpty()); + return resolver_.NewLocal(isolate)->GetPromise(); +} + +void StreamPromiseResolver::MarkAsHandled(v8::Isolate* isolate) { + V8Promise(isolate)->MarkAsHandled(); +} + +v8::Promise::PromiseState StreamPromiseResolver::State( + v8::Isolate* isolate) const { + return V8Promise(isolate)->State(); +} + +void StreamPromiseResolver::Trace(Visitor* visitor) { + visitor->Trace(resolver_); +} + +} // namespace blink |