blob: d2b672a44f49f758efe371f02ed843969e8a6d5e [file] [edit]
<!-- webkit-test-runner [ IPCTestingAPIEnabled=true ] -->
<script>
async function main() {
if (!window.IPC) {
alert("PASS");
return;
}
const connection = IPC.connectionForProcessTarget('Networking');
const rootHandle = await new Promise(resolve =>
connection.sendWithAsyncReply(
0,
IPC.messages.NetworkStorageManager_FileSystemGetDirectory.name,
[
{type: 'uint8_t', value: 0},
{type: 'String', value: 'ww'},
{type: 'String', value: 'bb'},
{type: 'uint8_t', value: 0},
{type: 'uint8_t', value: 0},
{type: 'String', value: 'xxxx'},
{type: 'String', value: 'bb'},
{type: 'uint8_t', value: 0}
], reply => resolve((new BigUint64Array(reply.arguments[0]))[1])
)
);
const rootPath = await new Promise(resolve =>
connection.sendWithAsyncReply(
0,
IPC.messages.NetworkStorageManager_GetFile.name,
[
{type: 'uint64_t', value: rootHandle},
], reply => resolve((new TextDecoder()).decode(reply.arguments[0].slice(9)))
)
);
connection.sendMessage(
0,
IPC.messages.NetworkConnectionToWebProcess_RegisterInternalFileBlobURL.name,
[
{type: 'URL', value: 'blob:blobinternal:///b7701c13-a454-4b76-a3b1-e3e57d972c5d'},
{type: 'String', value: rootPath},
{type: 'String', value: '/private/var/db/com.apple.networkextension.tracker-info'},
{type: 'uint8_t', value: 0},
{type: 'String', value: 'text/html'}
]
);
const blobURL = `blob:${location.origin}/13eeac27-7b76-4287-8d60-004badf4591b`;
connection.sendMessage(
0,
IPC.messages.NetworkConnectionToWebProcess_RegisterBlobURL.name,
[
{type: 'URL', value: blobURL},
{type: 'URL', value: 'blob:blobinternal:///b7701c13-a454-4b76-a3b1-e3e57d972c5d'},
// ContentSecurityPolicyResponseHeaders
{type: 'Vector', value: []},
{type: 'uint32_t', value: 200},
// CrossOriginEmbedderPolicy
{type: 'bool', value: 0}, // value
{type: 'bool', value: 0}, // reportOnlyValue
{type: 'String', value: ''}, // reportingEndpoint
{type: 'String', value: ''}, // reportOnlyReportingEndpoint
// CrossOriginOpenerPolicy
{type: 'bool', value: 0}, // value
{type: 'bool', value: 0}, // reportOnlyValue
{type: 'String', value: ''}, // reportingEndpoint
{type: 'String', value: ''}, // reportOnlyReportingEndpoint
// ReferrerPolicy
{type: 'uint8_t', value: 7},
{type: 'uint8_t', value: 1},
{type: 'String', value: location.protocol.substr(0, location.protocol.length - 1)},
{type: 'String', value: location.hostname},
{type: 'uint8_t', value: 1},
{type: 'uint16_t', value: location.port === '' ? 80 : parseInt(location.port)},
]
);
try {
const response = await fetch(blobURL);
const data = await response.arrayBuffer();
if (data.byteLength > 0) {
alert("FAIL: " + new Uint8Array(data.slice(0, 100)));
}
} catch (e) {
// Fetch failed - this is expected when security fix is working
alert("PASS");
}
}
if (window.testRunner) {
testRunner.waitUntilDone();
testRunner.dumpAsText();
}
main().catch(e => {
console.log(e);
}).finally(async () => {
globalThis.testRunner?.notifyDone();
});
</script>