Summary: | Web Audio continues to play when navigating off the web page via an iframe | ||||||
---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | adam552 | ||||
Component: | Web Audio | Assignee: | Chris Dumez <cdumez> | ||||
Status: | RESOLVED FIXED | ||||||
Severity: | Normal | CC: | ap, cdumez, eric.carlson, ews-watchlist, glenn, jer.noble, philipj, sergio, smoley, webkit-bug-importer | ||||
Priority: | P2 | Keywords: | InRadar | ||||
Version: | Safari 14 | ||||||
Hardware: | Mac | ||||||
OS: | macOS 10.15 | ||||||
Bug Depends on: | |||||||
Bug Blocks: | 212611 | ||||||
Attachments: |
|
Description
adam552
2020-10-22 06:43:10 PDT
Here is what I did: 1. Downloaded test project from GitHub 2. Went to the project folder 3. Did `npm install` 4. Did `npm start` It loaded http://localhost:8080 in Safari and I see the canvas but NO sound. I don't see any errors in the JS console. $ npm start > phaser3-project-template@1.1.0 start /Users/chris/Downloads/phaser3-webaudio-bug-master > webpack-dev-server --config webpack/base.js --open ℹ 「wds」: Project is running at http://localhost:8080/ ℹ 「wds」: webpack output is served from / ℹ 「wds」: Content not from webpack is served from /Users/chris/Downloads/phaser3-webaudio-bug-master ℹ 「wdm」: wait until bundle finished: / Browserslist: caniuse-lite is outdated. Please run next command `npm update` ℹ 「wdm」: Hash: 4ced28bccb3452da59eb Version: webpack 4.41.2 Time: 4986ms Built at: 10/22/2020 8:54:54 AM Asset Size Chunks Chunk Names c4903988d61e23e74f8dffcb10aca802.mp3 833 KiB [emitted] efbfcf3c2043e8a0694698780cb966f9.png 5.25 KiB [emitted] index.html 300 bytes [emitted] main.js 17.1 MiB main [emitted] main Entrypoint main = main.js [0] multi (webpack)-dev-server/client?http://localhost:8080 ./src 40 bytes {main} [built] [./node_modules/ansi-html/index.js] 4.16 KiB {main} [built] [./node_modules/phaser/dist/phaser.js] 5.99 MiB {main} [built] [./node_modules/strip-ansi/index.js] 161 bytes {main} [built] [./node_modules/webpack-dev-server/client/index.js?http://localhost:8080] (webpack)-dev-server/client?http://localhost:8080 4.29 KiB {main} [built] [./node_modules/webpack-dev-server/client/overlay.js] (webpack)-dev-server/client/overlay.js 3.51 KiB {main} [built] [./node_modules/webpack-dev-server/client/socket.js] (webpack)-dev-server/client/socket.js 1.53 KiB {main} [built] [./node_modules/webpack-dev-server/client/utils/createSocketUrl.js] (webpack)-dev-server/client/utils/createSocketUrl.js 2.89 KiB {main} [built] [./node_modules/webpack-dev-server/client/utils/log.js] (webpack)-dev-server/client/utils/log.js 964 bytes {main} [built] [./node_modules/webpack-dev-server/client/utils/reloadApp.js] (webpack)-dev-server/client/utils/reloadApp.js 1.59 KiB {main} [built] [./node_modules/webpack-dev-server/client/utils/sendMessage.js] (webpack)-dev-server/client/utils/sendMessage.js 402 bytes {main} [built] [./node_modules/webpack/hot sync ^\.\/log$] (webpack)/hot sync nonrecursive ^\.\/log$ 170 bytes {main} [built] [./src/assets/oedipus_wizball_highscore.mp3] 82 bytes {main} [built] [./src/assets/wizball.png] 82 bytes {main} [built] [./src/index.js] 626 bytes {main} [built] + 21 hidden modules Child html-webpack-plugin for "index.html": 1 asset Entrypoint undefined = index.html [./node_modules/html-webpack-plugin/lib/loader.js!./index.html] 448 bytes {0} [built] [./node_modules/lodash/lodash.js] 528 KiB {0} [built] [./node_modules/webpack/buildin/global.js] (webpack)/buildin/global.js 472 bytes {0} [built] [./node_modules/webpack/buildin/module.js] (webpack)/buildin/module.js 497 bytes {0} [built] ℹ 「wdm」: Compiled successfully. (In reply to Chris Dumez from comment #1) > Here is what I did: > 1. Downloaded test project from GitHub > 2. Went to the project folder > 3. Did `npm install` > 4. Did `npm start` > > It loaded http://localhost:8080 in Safari and I see the canvas but NO sound. > I don't see any errors in the JS console. I've updated the example now, I had that occur to me in Chrome but not in Safari. Now it should start playing audio after clicking on the image in the canvas. Once audio is playing try clicking the Click here text. (In reply to adam552 from comment #3) > (In reply to Chris Dumez from comment #1) > > Here is what I did: > > 1. Downloaded test project from GitHub > > 2. Went to the project folder > > 3. Did `npm install` > > 4. Did `npm start` > > > > It loaded http://localhost:8080 in Safari and I see the canvas but NO sound. > > I don't see any errors in the JS console. > > I've updated the example now, I had that occur to me in Chrome but not in > Safari. Now it should start playing audio after clicking on the image in the > canvas. Once audio is playing try clicking the Click here text. Ok, I can reproduce now, thanks. Will investigate. Created attachment 412117 [details]
Patch
Committed r268893: <https://trac.webkit.org/changeset/268893> All reviewed patches have been landed. Closing bug and clearing flags on attachment 412117 [details]. Comment on attachment 412117 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=412117&action=review > Source/WebCore/Modules/webaudio/AudioContext.cpp:413 > + m_mediaSession->beginInterruption(PlatformMediaSession::PlaybackSuspended); > + document()->updateIsPlayingMedia(); These calls cannot cause JS execution, can they? Concerned about potentially running JS in page cache. (In reply to Alexey Proskuryakov from comment #8) > Comment on attachment 412117 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=412117&action=review > > > Source/WebCore/Modules/webaudio/AudioContext.cpp:413 > > + m_mediaSession->beginInterruption(PlatformMediaSession::PlaybackSuspended); > > + document()->updateIsPlayingMedia(); > > These calls cannot cause JS execution, can they? Concerned about potentially > running JS in page cache. Via code inspection, this code does not seems to run any script. |