| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../resources/js-test.js"></script> |
| <script src="../http/tests/resources/permissions-helper.js"></script> |
| <script src="state-check-utils.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> |
| </head> |
| <body> |
| <script> |
| description("Tests MIDIPort implicit open."); |
| |
| shouldBeDefined("PermissionsHelper.setPermission"); |
| |
| function resetInputDevice(port) { |
| debug("- reset input device"); |
| // Reset event handlers so that close() does not cause check failures. |
| port.onstatechange = null; |
| access.onstatechange = null; |
| return port.close(); |
| } |
| |
| function successAccessCallback(a) { |
| window.access = a; |
| testPassed("requestMIDIAccess() succeeded with access " + access + "."); |
| |
| var inputPort = access.inputs.values().next().value; |
| var outputPort = access.outputs.values().next().value; |
| |
| checkStateTransition({ |
| port: inputPort, |
| method: "setonmidimessage", |
| initialconnection: "closed", |
| finalconnection: "open" } |
| ).then(resetInputDevice.bind(undefined, inputPort |
| )).then(checkStateTransition.bind(undefined, { |
| port: inputPort, |
| method: "addeventlistener", |
| initialconnection: "closed", |
| finalconnection: "open" } |
| )).then(checkStateTransition.bind(undefined, { |
| port: outputPort, |
| method: "send", |
| initialconnection: "closed", |
| finalconnection: "open" } |
| )).then(finishJSTest, finishJSTest); |
| } |
| |
| function errorAccessCallback(error) { |
| testFailed("requestMIDIAccess() error callback should not be called when requesting basic access."); |
| finishJSTest(); |
| } |
| |
| window.jsTestIsAsync = true; |
| |
| // Set default permission behavior that grants non-sysex requests. |
| PermissionsHelper.setPermission('midi', 'granted').then(function() { |
| // Test MIDIPort state transition by send() and onmidimessage handler. |
| navigator.requestMIDIAccess().then(successAccessCallback, errorAccessCallback); |
| }); |
| |
| </script> |
| </body> |
| </html> |