<!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, defaultTimeout);
    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 {
        o35.sendMessage(backendID, IPC.messages.RemoteRenderingBackend_CreateImageBuffer.name,
                  [{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);
    } catch (error) {
        if (!(error instanceof TypeError))
            debug("Failed: " + error)
    }
    try {
        o35.sendSyncMessage(imageBufferID,IPC.messages.RemoteImageBuffer_GetShareableBitmap.name, [{type: 'bool',value: 0}]);
    } catch (error) {
        if (!(error instanceof TypeError))
            debug("Failed: " + error)
    } finally {
        o35.invalidate();
        finishJSTest();
    }
}
</script>
<body onload='fuzz()'></body>
