diff options
Diffstat (limited to 'testing/web-platform/tests/measure-memory/detached.https.window.js')
-rw-r--r-- | testing/web-platform/tests/measure-memory/detached.https.window.js | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/testing/web-platform/tests/measure-memory/detached.https.window.js b/testing/web-platform/tests/measure-memory/detached.https.window.js new file mode 100644 index 0000000000..1fcedef54c --- /dev/null +++ b/testing/web-platform/tests/measure-memory/detached.https.window.js @@ -0,0 +1,198 @@ +// META: script=/common/get-host-info.sub.js +// META: script=./resources/checker.js +// META: script=./resources/common.js +// META: timeout=long +'use strict'; + + +promise_test(async testCase => { + assert_true(self.crossOriginIsolated); + + const {iframes, windows} = await build([ + { + id: 'cross-site-1', + children: [ + { + id: 'same-origin-2', + }, + { + id: 'same-origin-11', + window_open: true, + }, + ], + }, + { + id: 'same-origin-3', + children: [ + { + id: 'same-origin-4', + }, + { + id: 'same-origin-12', + window_open: true, + }, + ], + }, + { + id: 'cross-origin-5', + children: [ + { + id: 'same-origin-6', + }, + { + id: 'same-origin-13', + window_open: true, + }, + ], + }, + { + id: 'same-origin-7', + window_open: true, + children: [ + { + id: 'same-origin-8', + } + ], + }, + { + id: 'cross-origin-9', + window_open: true, + children: [ + { + id: 'same-origin-10', + } + ], + }, + ]); + const expected = [ + { + url: window.location.href, + scope: 'Window', + container: null, + }, + { + url: 'cross-origin-url', + scope: 'cross-origin-aggregated', + container: { + id: 'cross-site-1', + src: iframes['cross-site-1'].src, + }, + }, + { + url: windows['same-origin-2'].location.href, + scope: 'Window', + container: { + id: 'cross-site-1', + src: iframes['cross-site-1'].src, + }, + }, + { + url: windows['same-origin-3'].location.href, + scope: 'Window', + container: { + id: 'same-origin-3', + src: iframes['same-origin-3'].src, + }, + }, + { + url: windows['same-origin-4'].location.href, + scope: 'Window', + container: { + id: 'same-origin-4', + src: iframes['same-origin-4'].src, + }, + }, + { + url: 'cross-origin-url', + scope: 'cross-origin-aggregated', + container: { + id: 'cross-origin-5', + src: iframes['cross-origin-5'].src, + }, + }, + { + url: windows['same-origin-6'].location.href, + scope: 'Window', + container: { + id: 'cross-origin-5', + src: iframes['cross-origin-5'].src, + }, + }, + { + url: windows['same-origin-8'].location.href, + scope: 'Window', + container: { + id: 'same-origin-8', + src: iframes['same-origin-8'].src, + }, + }, + { + url: windows['same-origin-7'].location.href, + scope: 'Window', + container: null, + }, + { + url: windows['same-origin-11'].location.href, + scope: 'Window', + container: null, + }, + { + url: windows['same-origin-12'].location.href, + scope: 'Window', + container: null, + }, + { + url: windows['same-origin-13'].location.href, + scope: 'Window', + container: null, + }, + ]; + const keep = sameOriginContexts(frames).concat(sameOriginContexts(windows)); + // Detach iframes: + // 1) By setting src attribute: + iframes['cross-site-1'].src = + iframes['cross-site-1'].src.replace('iframe.sub', 'iframe.secret.sub'); + // 2) By setting location attribute: + let url = iframes['same-origin-3'].contentWindow.location.href; + url = url.replace('iframe.sub', 'iframe.secret.sub'); + iframes['same-origin-3'].contentWindow.location.href = url; + // 3) By removing from the DOM tree: + iframes['cross-origin-5'].parentNode.removeChild(iframes['cross-origin-5']); + + // Detach windows: + // 1) By setting document.location attribute: + url = windows['same-origin-7'].location.href; + url = url.replace('window.sub', 'window.secret.sub'); + windows['same-origin-7'].location.href = url; + // 2) By closing the window: + windows['same-origin-10'].parent.close(); + + await waitForMessage('cross-site-1'); + await waitForMessage('same-origin-3'); + await waitForMessage('same-origin-7'); + + expected.push({ + url: 'cross-origin-url', + scope: 'cross-origin-aggregated', + container: { + id: 'cross-site-1', + src: iframes['cross-site-1'].src, + }, + }); + + expected.push({ + url: windows['same-origin-3'].location.href, + scope: 'Window', + container: { + id: 'same-origin-3', + src: iframes['same-origin-3'].src, + }, + }); + expected.push({ + url: windows['same-origin-7'].location.href, + scope: 'Window', + container: null, + }); + const result = await performance.measureUserAgentSpecificMemory(); + checkMeasureMemory(result, expected); +}, 'performance.measureUserAgentSpecificMemory URLs within a cross-site iframe.'); |