Skip to content

Commit

Permalink
Fenced frames: Flesh out storage partitioning WPTs
Browse files Browse the repository at this point in the history
Bug: 1123606
Change-Id: Ica07abf663063c4679f4728fd362e3d50c06c0d3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4475985
Commit-Queue: Garrett Tanzer <[email protected]>
Reviewed-by: Dominic Farolino <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1136691}
  • Loading branch information
Garrett Tanzer authored and chromium-wpt-export-bot committed Apr 27, 2023
1 parent 1979ad3 commit 4d07bf6
Showing 1 changed file with 103 additions and 3 deletions.
106 changes: 103 additions & 3 deletions fenced-frame/storage-partitioning.https.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<title>Test storage partitioning in fenced frames</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
Expand All @@ -17,8 +18,8 @@
const inner_value = "inner";

// Set the value in the top-level frame, and check that it worked.
setter(key, outer_value);
assert_equals(getter(key), outer_value,
await setter(key, outer_value);
assert_equals(await getter(key), outer_value,
"Stored the value in the top-level frame.");

// Attach a fenced frame.
Expand All @@ -36,7 +37,7 @@
"Stored the value in the fenced frame.");

// Check that the inner value isn't visible in the top-level frame.
assert_equals(getter(key), outer_value,
assert_equals(await getter(key), outer_value,
"The inner value isn't visible outside the fenced frame.");

// Perform an embedder-initiated navigation that will fail.
Expand Down Expand Up @@ -84,5 +85,104 @@
);
}, 'localStorage');

promise_test(async () => {
return runTest(
(key) => { return sessionStorage.getItem(key); },
(key, value) => { return sessionStorage.setItem(key, value); }
);
}, 'sessionStorage');

promise_test(async () => {
return runTest(
async (key) => {
const newCache = await caches.open('test-cache');
const response = await newCache.match(key);
if (!response) {
return null;
}
return response.text();
},
async (key, value) => {
const newCache = await caches.open('test-cache');
return newCache.put(key, new Response(value));
}
);
}, 'Cache API');

promise_test(async () => {
return runTest(
async (key) => {
const root = await navigator.storage.getDirectory();
const draftHandle = await root.getFileHandle(key, { create: true });
const file = await draftHandle.getFile();
const text = await file.text();
return text || null;
},
async (key, value) => {
const root = await navigator.storage.getDirectory();
const draftHandle = await root.getFileHandle(key, { create: true });
const writable = await draftHandle.createWritable()
await writable.truncate(0);
await writable.write(value);
await writable.close();
}
);
}, 'File System Access API');

promise_test(async () => {
return runTest(
async (key) => {
const openRequest = indexedDB.open('test-db', 2);
const db = await new Promise((resolve) => {
openRequest.onsuccess = (event) => {
resolve(event.target.result);
};
openRequest.onupgradeneeded = (event) => {
const db = event.target.result;
const objStore = db.createObjectStore('test-tbl', {keyPath: 'key'});
objStore.transaction.oncomplete = (event) => {
resolve(db);
};
};
});
const readRequest = db.transaction(['test-tbl'])
.objectStore('test-tbl')
.get(key);
return new Promise((resolve) => {
readRequest.onsuccess = (event) => {
if (!event.target.result) {
resolve(null);
} else {
resolve(event.target.result['value']);
}
};
});
},
async (key, value) => {
const openRequest = indexedDB.open('test-db', 2);
const db = await new Promise((resolve) => {
openRequest.onsuccess = (event) => {
resolve(event.target.result);
};
openRequest.onupgradeneeded = (event) => {
const db = event.target.result;
const objStore = db.createObjectStore('test-tbl', {keyPath: 'key'});
objStore.transaction.oncomplete = (event) => {
resolve(db);
};
};
});
const writeRequest = db.transaction(['test-tbl'], 'readwrite')
.objectStore('test-tbl')
.add({'key': key, 'value': value});
return new Promise((resolve) => {
writeRequest.onsuccess = (event) => {
resolve(event.target.result);
};
});
}
);
}, 'IndexedDB');

</script>
</body>

0 comments on commit 4d07bf6

Please sign in to comment.