blob: b4bb6f7b2c4b364464cae883ec0cc643e055f12f [file] [log] [blame]
// Copyright 2015 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.
#ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_REJECTED_PROMISES_H_
#define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_REJECTED_PROMISES_H_
#include <memory>
#include "third_party/blink/renderer/bindings/core/v8/sanitize_script_errors.h"
#include "third_party/blink/renderer/bindings/core/v8/source_location.h"
#include "third_party/blink/renderer/platform/wtf/forward.h"
#include "third_party/blink/renderer/platform/wtf/ref_counted.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
namespace v8 {
class PromiseRejectMessage;
};
namespace blink {
class ScriptState;
class RejectedPromises final : public RefCounted<RejectedPromises> {
USING_FAST_MALLOC(RejectedPromises);
public:
static scoped_refptr<RejectedPromises> Create() {
return base::AdoptRef(new RejectedPromises());
}
~RejectedPromises();
void Dispose();
void RejectedWithNoHandler(ScriptState*,
v8::PromiseRejectMessage,
const String& error_message,
std::unique_ptr<SourceLocation>,
SanitizeScriptErrors);
void HandlerAdded(v8::PromiseRejectMessage);
void ProcessQueue();
private:
class Message;
RejectedPromises();
using MessageQueue = Vector<std::unique_ptr<Message>>;
void ProcessQueueNow(MessageQueue);
void RevokeNow(std::unique_ptr<Message>);
MessageQueue queue_;
Vector<std::unique_ptr<Message>> reported_as_errors_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_REJECTED_PROMISES_H_