aboutsummaryrefslogtreecommitdiffstats
path: root/tests/wpt/tests/shared-storage/resources/util.sub.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/wpt/tests/shared-storage/resources/util.sub.js')
-rw-r--r--tests/wpt/tests/shared-storage/resources/util.sub.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/wpt/tests/shared-storage/resources/util.sub.js b/tests/wpt/tests/shared-storage/resources/util.sub.js
index 970c33b7f25..f147209d609 100644
--- a/tests/wpt/tests/shared-storage/resources/util.sub.js
+++ b/tests/wpt/tests/shared-storage/resources/util.sub.js
@@ -69,3 +69,49 @@ function navigateSharedStorageIframe(data) {
document.body.appendChild(frame);
return promise;
}
+
+async function loadNestedSharedStorageFrameInNewFrame(data) {
+ const SCOPE = '/shared-storage/resources/shared-storage-writ';
+ const INTERMEDIATE_FRAME_SUFFIX =
+ 'able-fetch-request-fallback-to-network-iframe.https.html'
+ const CROSS_ORIGIN = 'https://{{domains[www]}}:{{ports[https][0]}}';
+
+ let {key, value, hasSharedStorageWritableAttribute, isSameOrigin} = data;
+
+ const windowPromise = new Promise((resolve, reject) => {
+ window.addEventListener('message', async function handler(evt) {
+ if (evt.data.msg && evt.data.msg === 'iframe loaded') {
+ window.removeEventListener('message', handler);
+ resolve();
+ }
+ });
+ window.addEventListener('error', () => {
+ reject(new Error('Navigation error'));
+ });
+ });
+
+ const framePromise = new Promise((resolve, reject) => {
+ let frame = document.createElement('iframe');
+ frame.src = SCOPE + INTERMEDIATE_FRAME_SUFFIX;
+ frame.onload = function() {
+ resolve(frame);
+ };
+ frame.onerror = function() {
+ reject(new Error('Iframe load failed'));
+ };
+ document.body.appendChild(frame);
+ });
+ let frame = await framePromise;
+
+ let rawWriteHeader = `set;key=${key};value=${value}`;
+ let writeHeader = encodeURIComponent(rawWriteHeader);
+ const sameOriginNestedSrc = `/shared-storage/resources/` +
+ `shared-storage-write.py?write=${writeHeader}`;
+ const nestedSrc =
+ isSameOrigin ? sameOriginNestedSrc : CROSS_ORIGIN + sameOriginNestedSrc;
+
+ let nestedFrame = frame.contentWindow.loadFrame(
+ nestedSrc, hasSharedStorageWritableAttribute);
+ await windowPromise;
+ return {frame: frame, nestedFrame: nestedFrame, nestedFrameUrl: nestedSrc};
+}