Keep ordinary app launches available while optional policy loads
This commit is contained in:
@@ -49,7 +49,7 @@ export function attachAudioBridge({ parentOrigin, snapshot, actions, unlocked =
|
||||
if (session) send({type:'archipelago:media-state',session,available:false})
|
||||
closed = true; session = null
|
||||
host.removeEventListener('message',message); host.removeEventListener('pageshow',ready); host.removeEventListener('pagehide',leave)
|
||||
actions.pause?.()
|
||||
try { Promise.resolve(actions.pause?.()).catch(() => {}) } catch { /* App teardown still releases the bridge. */ }
|
||||
}
|
||||
function leave(event) { if (!event.persisted) dispose() }
|
||||
host.addEventListener('message',message); host.addEventListener('pageshow',ready); host.addEventListener('pagehide',leave)
|
||||
|
||||
@@ -36,3 +36,10 @@ test('stale queued commands do not control a replacement handshake',async()=>{
|
||||
assert.deepEqual(f.calls,[])
|
||||
f.bridge.dispose()
|
||||
})
|
||||
|
||||
test('dispose releases listeners even if the app pause action rejects',async()=>{
|
||||
const handlers=new Map()
|
||||
const host={parent:{postMessage(){}},addEventListener:(name,fn)=>handlers.set(name,fn),removeEventListener:name=>handlers.delete(name)}
|
||||
const bridge=attachAudioBridge({parentOrigin:'https://node.test',host,snapshot:()=>null,actions:{pause:async()=>{throw Error('player already closed')}}})
|
||||
bridge.dispose();await new Promise(setImmediate);assert.equal(handlers.size,0)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user