test_uawidget_scope.js (1842B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 const {NetUtil} = ChromeUtils.importESModule("resource://gre/modules/NetUtil.sys.mjs"); 6 const {TestUtils} = ChromeUtils.importESModule("resource://testing-common/TestUtils.sys.mjs"); 7 8 function getWindowlessBrowser(url) { 9 let ssm = Services.scriptSecurityManager; 10 let uri = NetUtil.newURI(url); 11 let principal = ssm.createContentPrincipal(uri, {}); 12 let webnav = Services.appShell.createWindowlessBrowser(false); 13 14 let docShell = webnav.docShell; 15 docShell.createAboutBlankDocumentViewer(principal, principal); 16 17 let document = webnav.document; 18 let video = document.createElement("video"); 19 document.documentElement.appendChild(video); 20 21 let shadowRoot = video.openOrClosedShadowRoot; 22 ok(shadowRoot, "should have shadowRoot"); 23 ok(shadowRoot.isUAWidget(), "ShadowRoot should be a UAWidget"); 24 equal(Cu.getGlobalForObject(shadowRoot), Cu.getUAWidgetScope(principal), 25 "shadowRoot should be in UAWidget scope"); 26 27 return webnav; 28 } 29 30 function StubPolicy(id) { 31 return new WebExtensionPolicy({ 32 id, 33 mozExtensionHostname: id, 34 baseURL: `file:///{id}`, 35 allowedOrigins: new MatchPatternSet([]), 36 localizeCallback(string) {}, 37 }); 38 } 39 40 // See https://bugzilla.mozilla.org/show_bug.cgi?id=1588356 41 add_task(async function() { 42 let policy = StubPolicy("foo"); 43 policy.active = true; 44 45 let webnav = getWindowlessBrowser("moz-extension://foo/a.html"); 46 webnav.close(); 47 48 // Wrappers are nuked asynchronously, so wait for that to happen. 49 await TestUtils.topicObserved("inner-window-nuked"); 50 51 webnav = getWindowlessBrowser("moz-extension://foo/a.html"); 52 webnav.close(); 53 54 policy.active = false; 55 });