| <!doctype html><!-- webkit-test-runner [ IPCTestingAPIEnabled=true ] --> |
| <title>Test that stream sync message crash is noticed immediately</title> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <body> |
| <script> |
| setup({ single_test: true }); |
| if (window.IPC) { // For compiles with !ENABLE(IPC_TESTING_API) |
| const defaultTimeout = 10; |
| const bufferSize = 100; |
| const streamTesterID = 4557; |
| for (const processTarget of IPC.processTargets) { |
| if (processTarget == "UI") |
| continue; // Crashing UI is not supported. |
| const streamConnection = IPC.createStreamClientConnection(processTarget, bufferSize); |
| IPC.sendMessage(processTarget, 0, IPC.messages.IPCTester_CreateStreamTester.name, [ |
| { type: 'uint64_t', value: streamTesterID }, |
| { type: 'StreamConnectionBuffer', value: streamConnection.streamBuffer() }, |
| ]); |
| const arguments = IPC.waitForMessage(processTarget, streamTesterID, IPC.messages.IPCStreamTesterProxy_WasCreated.name, defaultTimeout); |
| streamConnection.setSemaphores(arguments[0].value, arguments[1].value); |
| |
| // Test starts here. |
| const result = streamConnection.sendIPCStreamTesterSyncCrashOnZero(streamTesterID, 78, defaultTimeout); |
| assert_equals(result, 78, `sync messages work for ${ processTarget }`); |
| |
| const start = Date.now(); |
| assert_throws_js(TypeError, |
| () => { streamConnection.sendIPCStreamTesterSyncCrashOnZero(streamTesterID, 0, defaultTimeout); }, |
| `crashing sync message must return failure for ${ processTarget }`); |
| assert_less_than(Date.now() - start, 500, `crashing sync message must complete in 500ms for ${ processTarget }`); |
| console.log(`ttt: ${Date.now() - start}`); |
| } |
| } |
| done(); |
| </script> |
| </body> |