| <!DOCTYPE html> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <script src="../http/tests/resources/permissions-helper.js"></script> |
| <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> |
| <script src="file:///gen/media/midi/midi_service.mojom.js"></script> |
| <script src="../http/tests/webmidi/mock-midiservice.js"></script> |
| <script> |
| async_test(t => { |
| let noteOn = [ 0x90, 0x45, 0x7f ]; |
| |
| t.step(() => { |
| Promise.all([ |
| PermissionsHelper.setPermission('midi', 'granted'), |
| ]).then(() => { |
| return navigator.requestMIDIAccess(); |
| }).then(a => { |
| var started = false; |
| var receivedMessages = 0; |
| var receiveMessage = e => { |
| t.step(() => { |
| assert_array_equals( |
| e.data, noteOn, 'received message should be noteOn'); |
| }); |
| if (++receivedMessages != 2) |
| return; |
| t.done(); |
| }; |
| |
| a.onstatechange = e => { |
| // Wait until three outputs and three inputs appear. |
| if (a.inputs.size != 3 || a.outputs.size != 3 || started) |
| return; |
| started = true; |
| |
| // Set an event handler respectively for newly connected ports. |
| var inputs = a.inputs.values(); |
| inputs.next(); |
| inputs.next().value.onmidimessage = receiveMessage; |
| inputs.next().value.onmidimessage = receiveMessage; |
| |
| // Send a message respectively, and see if it is loopbacked. |
| var outputs = a.outputs.values(); |
| outputs.next(); |
| outputs.next().value.send(noteOn); |
| outputs.next().value.send(noteOn); |
| }; |
| |
| output = a.outputs.values().next().value; |
| |
| mockMIDIService.addInputPort(midi.mojom.PortState.CONNECTED); |
| mockMIDIService.addOutputPort(midi.mojom.PortState.CONNECTED); |
| mockMIDIService.addInputPort(midi.mojom.PortState.OPENED); |
| mockMIDIService.addOutputPort(midi.mojom.PortState.OPENED); |
| }).catch(e => assert_unreached(e)); |
| }); |
| }, "Test if newly connected ports work correctly"); |
| </script> |