1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 define("mojo/apps/js/test/js_to_cpp_unittest", [
6 "mojo/apps/js/test/js_to_cpp.mojom",
7 "mojo/public/js/bindings/connection",
8 "mojo/public/js/bindings/connector",
9 "mojo/public/js/bindings/core",
10 ], function (jsToCpp, connection, connector, core) {
11 var retainedConnection;
13 var DATA_PIPE_PARAMS = {
14 flags: core.CREATE_DATA_PIPE_OPTIONS_FLAG_NONE,
19 function JsSideConnection(cppSide) {
20 this.cppSide_ = cppSide;
24 JsSideConnection.prototype = Object.create(jsToCpp.JsSideStub.prototype);
26 JsSideConnection.prototype.ping = function (arg) {
27 this.cppSide_.pingResponse();
30 JsSideConnection.prototype.echo = function (numIterations, arg) {
38 // Ensure expected negative values are negative.
51 for (i = 0; i < numIterations; ++i) {
52 data_pipe1 = core.createDataPipe(DATA_PIPE_PARAMS);
53 data_pipe2 = core.createDataPipe(DATA_PIPE_PARAMS);
54 message_pipe1 = core.createMessagePipe();
55 message_pipe2 = core.createMessagePipe();
57 arg.data_handle = data_pipe1.consumerHandle;
58 arg.message_handle = message_pipe1.handle1;
60 arg2 = new jsToCpp.EchoArgs();
66 arg2.data_handle = data_pipe2.consumerHandle;
67 arg2.message_handle = message_pipe2.handle1;
69 this.cppSide_.echoResponse(arg, arg2);
71 core.close(data_pipe1.producerHandle);
72 core.close(data_pipe2.producerHandle);
73 core.close(message_pipe1.handle0);
74 core.close(message_pipe2.handle0);
76 this.cppSide_.testFinished();
79 JsSideConnection.prototype.bitFlip = function (arg) {
83 var stopSignalled = false;
84 var proto = connector.Connector.prototype;
85 proto.realAccept = proto.accept;
86 proto.accept = function (message) {
87 var offset = iteration / 8;
90 if (offset < message.buffer.arrayBuffer.byteLength) {
91 mask = 1 << (iteration % 8);
92 value = message.buffer.dataView.getUint8(offset) ^ mask;
93 message.buffer.dataView.setUint8(offset, value);
94 return this.realAccept(message);
99 while (!stopSignalled) {
100 data_pipe = core.createDataPipe(DATA_PIPE_PARAMS);
101 message_pipe = core.createMessagePipe();
102 arg.data_handle = data_pipe.consumerHandle;
103 arg.message_handle = message_pipe.handle1;
104 this.cppSide_.bitFlipResponse(arg);
105 core.close(data_pipe.producerHandle);
106 core.close(message_pipe.handle0);
109 proto.accept = proto.realAccept;
110 proto.realAccept = null;
111 this.cppSide_.testFinished();
114 return function(handle) {
115 retainedConnection = new connection.Connection(handle, JsSideConnection,
116 jsToCpp.CppSideProxy);