| Index: Source/modules/webmidi/MIDIPort.cpp
|
| diff --git a/Source/modules/webmidi/MIDIPort.cpp b/Source/modules/webmidi/MIDIPort.cpp
|
| index cfa50060f741af5acd9fb1127ef9f95c04a75cd8..4664eacf578c1c8652d811e0e37333136cf0b25a 100644
|
| --- a/Source/modules/webmidi/MIDIPort.cpp
|
| +++ b/Source/modules/webmidi/MIDIPort.cpp
|
| @@ -99,36 +99,33 @@ String MIDIPort::type() const
|
|
|
| ScriptPromise MIDIPort::open(ScriptState* scriptState)
|
| {
|
| - // TODO(toyoshim): Implement the latest open() algorithm.
|
| - switch (m_state) {
|
| - case PortState::MIDIPortStateDisconnected:
|
| - return reject(scriptState, InvalidStateError, "The port has been disconnected.");
|
| - case PortState::MIDIPortStateConnected:
|
| - // TODO(toyoshim): Add blink API to perform a real open operation.
|
| - setStates(m_state, ConnectionStateOpen);
|
| - return accept(scriptState);
|
| - case PortState::MIDIPortStateOpened:
|
| - // TODO(toyoshim): Remove PortState::MIDIPortStateOpened.
|
| - ASSERT_NOT_REACHED();
|
| + if (m_connection == ConnectionStateClosed) {
|
| + switch (m_state) {
|
| + case PortState::MIDIPortStateDisconnected:
|
| + setStates(m_state, ConnectionStatePending);
|
| + break;
|
| + case PortState::MIDIPortStateConnected:
|
| + // TODO(toyoshim): Add blink API to perform a real open and close
|
| + // operation.
|
| + setStates(m_state, ConnectionStateOpen);
|
| + break;
|
| + case PortState::MIDIPortStateOpened:
|
| + // TODO(toyoshim): Remove PortState::MIDIPortStateOpened.
|
| + ASSERT_NOT_REACHED();
|
| + break;
|
| + }
|
| }
|
| - return reject(scriptState, InvalidStateError, "The port is in unknown state.");
|
| + return accept(scriptState);
|
| }
|
|
|
| ScriptPromise MIDIPort::close(ScriptState* scriptState)
|
| {
|
| - // TODO(toyoshim): Implement the latest close() algorithm.
|
| - switch (m_state) {
|
| - case PortState::MIDIPortStateDisconnected:
|
| - return reject(scriptState, InvalidStateError, "The port has been disconnected.");
|
| - case PortState::MIDIPortStateConnected:
|
| + if (m_connection != ConnectionStateClosed) {
|
| + // TODO(toyoshim): Do clear() operation on MIDIOutput.
|
| // TODO(toyoshim): Add blink API to perform a real close operation.
|
| setStates(m_state, ConnectionStateClosed);
|
| - return accept(scriptState);
|
| - case PortState::MIDIPortStateOpened:
|
| - // TODO(toyoshim): Remove PortState::MIDIPortStateOpened.
|
| - ASSERT_NOT_REACHED();
|
| }
|
| - return reject(scriptState, InvalidStateError, "The port is in unknown state.");
|
| + return accept(scriptState);
|
| }
|
|
|
| void MIDIPort::setState(PortState state)
|
| @@ -164,6 +161,7 @@ void MIDIPort::setStates(PortState state, ConnectionState connection)
|
| m_state = state;
|
| m_connection = connection;
|
| dispatchEvent(MIDIConnectionEvent::create(this));
|
| + m_access->dispatchEvent(MIDIConnectionEvent::create(this));
|
| }
|
|
|
| } // namespace blink
|
|
|