| <!DOCTYPE html> |
| <html> |
| <head> |
| <title> |
| Test AudioContext.close() closes many contexts |
| </title> |
| <script src="../../imported/w3c/web-platform-tests/resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script src="../resources/audit-util.js"></script> |
| <script src="../resources/audit.js"></script> |
| </head> |
| <body> |
| <script id="layout-test-code"> |
| let audit = Audit.createTaskRunner(); |
| |
| let context = null; |
| |
| // The number of contexts we want to create and close. |
| let MAX_ITERATION = 100; |
| let counter = 0; |
| |
| function createContextAndClose(task, should) { |
| // Bypass the first iteration. |
| if (context) { |
| should(context.state, 'context.state for closed context ' + counter) |
| .beEqualTo('closed'); |
| context = null; |
| } |
| // Create new context and close. |
| context = new AudioContext(); |
| if (counter++ < MAX_ITERATION) { |
| // Recursive promise resolution. |
| context.close().then( |
| function() { |
| createContextAndClose(task, should); |
| }, |
| function() { |
| onFailure(should); |
| task.done(); |
| }); |
| } else { |
| context.close().then(function() { |
| // |counter| is one more than MAX_ITERATION if we |
| // succeeded. |
| should( |
| counter - 1, |
| 'Number of contexts successfully created and closed') |
| .beEqualTo(MAX_ITERATION); |
| task.done(); |
| }); |
| } |
| } |
| |
| function onFailure(should) { |
| should(context.state, 'Context ' + counter + 'failed to close') |
| .beEqualTo('closed'); |
| } |
| |
| audit.define( |
| { |
| label: 'test', |
| description: |
| 'Test that closing a context releases the audio HW context' |
| }, |
| function(task, should) { |
| createContextAndClose(task, should); |
| }); |
| |
| audit.run(); |
| </script> |
| </body> |
| </html> |