| <!DOCTYPE html> |
| <title>Same-origin prerendering can access Storage Foundation API</title> |
| <meta name="timeout" content="long"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/common/utils.js"></script> |
| <script src="resources/utils.js"></script> |
| <body> |
| <script> |
| |
| setup(() => assertSpeculationRulesIsSupported()); |
| |
| const expectedReadBuffer = [65, 66, 67, 68]; |
| |
| async function writeToFile() { |
| let f = await storageFoundation.open('test_file'); |
| const writeBuffer = new Uint8Array(4); |
| writeBuffer.set(expectedReadBuffer); |
| |
| await storageFoundation.requestCapacity(4); |
| |
| const {writtenBytes} = await f.write(writeBuffer, 0); |
| await f.flush(); |
| await f.close(); |
| return writtenBytes == 4; |
| } |
| |
| async function readFromFile() { |
| let f = await storageFoundation.open('test_file'); |
| const {buffer, readBytes} = await f.read(new Uint8Array(4), 0); |
| await f.close(); |
| return buffer; |
| } |
| |
| promise_test(async t => { |
| const uid = token(); |
| const bc = new PrerenderChannel('prerender-channel', uid); |
| |
| const gotMessage = new Promise(resolve => { |
| bc.addEventListener('message', e => { |
| resolve(e.data); |
| }, { |
| once: true |
| }); |
| }); |
| |
| const writeResult = await writeToFile(); |
| assert_true( |
| writeResult, |
| 'primary page should be able to write to storage foundation API.'); |
| |
| // Start prerendering a page that attempts to access storage foundation API. |
| startPrerendering(`resources/storage-foundation-access.https.html`); |
| const result = await gotMessage; |
| |
| assert_array_equals( |
| result.readBuffer, expectedReadBuffer, |
| 'prerendering page should be able to read from storage foundation API'); |
| |
| const readBufferWrittenByPrerender = await readFromFile(); |
| assert_array_equals( |
| result.writtenBuffer, readBufferWrittenByPrerender, |
| 'prerendering page should be able to write to storage foundation API'); |
| |
| await storageFoundation.delete('test_file'); |
| }, 'prerendering page should be able to access storage foundation API'); |
| |
| </script> |
| </body> |