1module js_to_cpp {
2
3// This struct encompasses all of the basic types, so that they
4// may be sent from C++ to JS and back for validation.
5struct EchoArgs {
6  int64 si64;
7  int32 si32;
8  int16 si16;
9  int8  si8;
10  uint64 ui64;
11  uint32 ui32;
12  uint16 ui16;
13  uint8  ui8;
14  float float_val;
15  float float_inf;
16  float float_nan;
17  double double_val;
18  double double_inf;
19  double double_nan;
20  string? name;
21  string[]? string_array;
22  handle<message_pipe>? message_handle;
23  handle<data_pipe_consumer>? data_handle;
24};
25
26struct EchoArgsList {
27  EchoArgsList? next;
28  EchoArgs? item;
29};
30
31// Note: For messages which control test flow, pick numbers that are unlikely
32// to be hit as a result of our deliberate corruption of response messages.
33interface CppSide {
34  // Sent for all tests to notify that the JS side is now ready.
35  StartTest@88888888();
36
37  // Indicates end for echo, bit-flip, and back-pointer tests.
38  TestFinished@99999999();
39
40  // Responses from specific tests.
41  PingResponse();
42  EchoResponse(EchoArgsList list);
43  BitFlipResponse(EchoArgsList arg);
44  BackPointerResponse(EchoArgsList arg);
45};
46
47[Client=CppSide]
48interface JsSide {
49  Ping();
50  Echo(int32 numIterations, EchoArgs arg);
51  BitFlip(EchoArgs arg);
52  BackPointer(EchoArgs arg);
53};
54
55}
56