| <!DOCTYPE HTML> |
| <title>Tests that we don't garbage collect audio object while it is still playing.</title> |
| <script src="../resources/gc.js"></script> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <script> |
| // According to http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html, |
| // 4.8.10.8 Playing the media resource, |
| // Media elements must not stop playing just because all references to them have |
| // been removed; only once a media element is in a state where no further audio |
| // could ever be played by that element may the element be garbage collected. |
| // see https://bugs.webkit.org/show_bug.cgi?id=66878, https://bugs.webkit.org/show_bug.cgi?id=70421, |
| // and http://crbug.com/62604 for more details). |
| async_test(function(t) { |
| var audioPlayers = 4; |
| var playedCount = 0; |
| var audioFile = "content/silence.oga"; |
| var audio = new Audio(audioFile); |
| |
| audio.onended = t.step_func(function() { |
| playedCount ++; |
| if (playedCount <= audioPlayers) { |
| audio.currentTime = audio.duration - 0.35; |
| audio.play(); |
| if (playedCount == audioPlayers) { |
| audio = null; |
| gc(); |
| } |
| } else { |
| t.done(); |
| } |
| }); |
| |
| audio.oncanplaythrough = t.step_func(function() { |
| audio.oncanplaythrough = null; |
| audio.currentTime = audio.duration - 0.35; |
| audio.play(); |
| }); |
| }); |
| </script> |