<!doctype html><!-- webkit-test-runner [ IPCTestingAPIEnabled=true ] -->
<script src="../resources/js-test.js"></script>
<script>
function fuzz() {
    description("Send IPC messages between GPU process and WebProcess to create RenderingBackend then ImageBuffer then get the ShareableBitmap");
    window.jsTestIsAsync = true;

    if (!window.IPC) {
        finishJSTest();
        return;
    }

    const defaultTimeout = 1000;
    o4=IPC.pageID;
    o5=IPC.webPageProxyID;
    let pair = IPC.createStreamClientConnection(14);
    o35=pair[0];
    o36=pair[1];
    o35.open();

    // Use random identifiers in case this test is run multiple times in the same process.
    let backendID = Math.floor(Math.random() * 100000000) + 1;
    let imageBufferID = Math.floor(Math.random() * 100000000) + 1;

    try {
        IPC.sendMessage('GPU',0,IPC.messages.GPUConnectionToWebProcess_CreateRenderingBackend.name,
                  [{type: 'uint64_t', value: backendID},
                   {type: 'uint64_t', value: o5},
                   {type: 'uint64_t', value: o4},
                   {type: 'StreamServerConnectionHandle', value: o36}])
    } catch (error) {
        if (!(error instanceof TypeError))
            debug("Failed: " + error)
    }
    try {
        resp = o35.waitForMessage(backendID, IPC.messages.RemoteRenderingBackendProxy_DidInitialize.name, defaultTimeout)
    } catch (error) {
        if (!(error instanceof TypeError))
            debug("Failed: " + error)
    }
    try {
        o35.setSemaphores(resp[0].value, resp[1].value);
    } catch (error) {
        if (!(error instanceof TypeError))
            debug("Failed: " + error)
    }
    try {
        o35.sendMessage(backendID, IPC.messages.RemoteRenderingBackend_CreateImageBuffer.name, 0.1,
                  [{type: 'float', value: 804},
                   {type: 'float', value: 486},
                   {type: 'uint8_t', value: 0},
                   {type: 'uint8_t', value: 2},
                   {type: 'float', value: 184},
                   {type: 'uint8_t', value: 0},
                   {type: 'uint8_t', value: 0},
                   {type: 'uint64_t', value: imageBufferID}])
    } catch (error) {
        if (!(error instanceof TypeError))
            debug("Failed: " + error)
    }
    try {
        o35.waitForMessage(imageBufferID, IPC.messages.RemoteImageBufferProxy_DidCreateBackend.name, defaultTimeout);
    } catch (error) {
        if (!(error instanceof TypeError))
            debug("Failed: " + error)
    }
    try {
        o35.sendSyncMessage(imageBufferID,IPC.messages.RemoteImageBuffer_GetShareableBitmap.name,0.1,[{type: 'bool',value: 0}]);
    } catch (error) {
        if (!(error instanceof TypeError))
            debug("Failed: " + error)
    } finally {
        o35.invalidate();
        finishJSTest();
    }
}
</script>
<body onload='fuzz()'></body>
