| <!doctype html><!-- webkit-test-runner [ IPCTestingAPIEnabled=true ] --> | |
| <title>Test that async messages can be sent and replies received</title> | |
| <script src="../resources/testharness.js"></script> | |
| <script src="../resources/testharnessreport.js"></script> | |
| <body> | |
| <script> | |
| function sleep(ms) { | |
| return new Promise(resolve => setTimeout(resolve, ms)); | |
| } | |
| async function runTest() { | |
| const defaultTimeout = 1000; | |
| const testerID = 0; | |
| const IPCTester_AsyncPingName = IPC.messages.IPCTester_AsyncPing.name; | |
| const IPCTester_AsyncPingReplyName = IPC.messages.IPCTester_AsyncPingReply.name; | |
| for (const processTarget of IPC.processTargets) { | |
| // Test starts here. | |
| let results = { }; | |
| let asyncReplyIDs = { }; | |
| const requestCount = 100; | |
| let connection = IPC.connectionForProcessTarget(processTarget); | |
| for (let request = 0; request < requestCount; ++request) { | |
| asyncReplyIDs[request] = connection.sendWithAsyncReply(testerID, IPCTester_AsyncPingName, [{type: 'int32_t', value: request}], (message) => { | |
| results[request] = message; | |
| }); | |
| assert_greater_than(asyncReplyIDs[request], 0, "asyncReplyID is valid"); | |
| if (request == 17) | |
| await sleep(100); // Let some requests be fullfilled asynchronously and some are force-waited. | |
| } | |
| for (let request = 0; request < requestCount; ++request) { | |
| if (typeof results[request] === "undefined") | |
| connection.waitForAsyncReplyAndDispatchImmediately(asyncReplyIDs[request], IPCTester_AsyncPingReplyName, defaultTimeout); | |
| } | |
| for (let request = 0; request < requestCount; ++request) { | |
| const subcase = `${processTarget} request:${request}` | |
| const result = results[request]; | |
| assert_equals(typeof result, "object", subcase); | |
| const firstReply = result.arguments[0]; | |
| assert_equals(firstReply.type, "uint32_t", subcase); | |
| assert_equals(firstReply.value, request + 1, subcase); | |
| } | |
| } | |
| done(); | |
| } | |
| setup({ single_test: true }); | |
| if (window.IPC) | |
| runTest(); | |
| else | |
| done(); | |
| </script> | |
| </body> |