// META: title=StorageManager API and opaque origins function load_iframe(src, sandbox) { return new Promise(resolve => { const iframe = document.createElement('iframe'); iframe.onload = () => { resolve(iframe); }; if (sandbox) iframe.sandbox = sandbox; iframe.srcdoc = src; iframe.style.display = 'none'; document.documentElement.appendChild(iframe); }); } function wait_for_message(iframe) { return new Promise(resolve => { self.addEventListener('message', function listener(e) { if (e.source === iframe.contentWindow && "result" in e.data) { resolve(e.data); self.removeEventListener('message', listener); } }); }); } function make_script(snippet) { return '' + '