blob: ca45ab69c8c572250c1aa85c1f7810f2e73e2a69 [file] [log] [blame]
// 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.
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_SERIAL_SERIAL_PORT_UNDERLYING_SINK_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_SERIAL_SERIAL_PORT_UNDERLYING_SINK_H_
#include "mojo/public/cpp/system/data_pipe.h"
#include "mojo/public/cpp/system/simple_watcher.h"
#include "third_party/blink/renderer/bindings/core/v8/array_buffer_or_array_buffer_view.h"
#include "third_party/blink/renderer/core/streams/underlying_sink_base.h"
namespace blink {
class ExceptionState;
class ScriptPromiseResolver;
class SerialPort;
class SerialPortUnderlyingSink final : public UnderlyingSinkBase {
public:
SerialPortUnderlyingSink(SerialPort*, mojo::ScopedDataPipeProducerHandle);
// UnderlyingSinkBase
ScriptPromise start(ScriptState*,
WritableStreamDefaultController*,
ExceptionState&) override;
ScriptPromise write(ScriptState*,
ScriptValue chunk,
WritableStreamDefaultController*,
ExceptionState&) override;
ScriptPromise close(ScriptState*, ExceptionState&) override;
ScriptPromise abort(ScriptState*,
ScriptValue reason,
ExceptionState&) override;
// After |data_pipe_| has closed calls to write() will return a Promise
// rejected with this DOMException.
void SignalErrorOnClose(DOMException*);
void Trace(Visitor*) const override;
private:
void OnHandleReady(MojoResult, const mojo::HandleSignalsState&);
void OnFlushOrDrain();
void WriteData();
void PipeClosed();
mojo::ScopedDataPipeProducerHandle data_pipe_;
mojo::SimpleWatcher watcher_;
Member<SerialPort> serial_port_;
Member<DOMException> pending_exception_;
ArrayBufferOrArrayBufferView buffer_source_;
uint32_t offset_ = 0;
// Only one outstanding call to write(), close() or abort() is allowed at a
// time. This holds the ScriptPromiseResolver for the Promise returned by any
// of these functions.
Member<ScriptPromiseResolver> pending_operation_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_SERIAL_SERIAL_PORT_UNDERLYING_SINK_H_