| Index: mojo/public/c/system/tests/core_unittest.cc
 | 
| diff --git a/mojo/public/c/system/tests/core_unittest.cc b/mojo/public/c/system/tests/core_unittest.cc
 | 
| index d071f4865d78b46e00f59be5d8f00722a2fbde5b..d8ae4b0527a51858c9214ad2bdd34464b516ee29 100644
 | 
| --- a/mojo/public/c/system/tests/core_unittest.cc
 | 
| +++ b/mojo/public/c/system/tests/core_unittest.cc
 | 
| @@ -13,6 +13,13 @@
 | 
|  namespace mojo {
 | 
|  namespace {
 | 
|  
 | 
| +const MojoHandleSignals kSignalReadadableWritable =
 | 
| +    MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE;
 | 
| +
 | 
| +const MojoHandleSignals kSignalAll = MOJO_HANDLE_SIGNAL_READABLE |
 | 
| +                                     MOJO_HANDLE_SIGNAL_WRITABLE |
 | 
| +                                     MOJO_HANDLE_SIGNAL_PEER_CLOSED;
 | 
| +
 | 
|  TEST(CoreTest, GetTimeTicksNow) {
 | 
|    const MojoTimeTicks start = MojoGetTimeTicksNow();
 | 
|    EXPECT_NE(static_cast<MojoTimeTicks>(0), start)
 | 
| @@ -34,21 +41,23 @@ TEST(CoreTest, InvalidHandle) {
 | 
|  
 | 
|    // Wait:
 | 
|    EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
 | 
| -            MojoWait(MOJO_HANDLE_INVALID, ~MOJO_HANDLE_SIGNAL_NONE, 1000000));
 | 
| +            MojoNewWait(MOJO_HANDLE_INVALID, ~MOJO_HANDLE_SIGNAL_NONE, 1000000,
 | 
| +                        NULL));
 | 
| +
 | 
|    h0 = MOJO_HANDLE_INVALID;
 | 
|    sig = ~MOJO_HANDLE_SIGNAL_NONE;
 | 
| -  EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
 | 
| -            MojoWaitMany(&h0, &sig, 1, MOJO_DEADLINE_INDEFINITE));
 | 
| +  EXPECT_EQ(
 | 
| +      MOJO_RESULT_INVALID_ARGUMENT,
 | 
| +      MojoNewWaitMany(&h0, &sig, 1, MOJO_DEADLINE_INDEFINITE, NULL, NULL));
 | 
|  
 | 
|    // Message pipe:
 | 
|    EXPECT_EQ(
 | 
|        MOJO_RESULT_INVALID_ARGUMENT,
 | 
|        MojoWriteMessage(h0, buffer, 3, NULL, 0, MOJO_WRITE_MESSAGE_FLAG_NONE));
 | 
|    buffer_size = static_cast<uint32_t>(sizeof(buffer));
 | 
| -  EXPECT_EQ(
 | 
| -      MOJO_RESULT_INVALID_ARGUMENT,
 | 
| -      MojoReadMessage(
 | 
| -          h0, buffer, &buffer_size, NULL, NULL, MOJO_READ_MESSAGE_FLAG_NONE));
 | 
| +  EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
 | 
| +            MojoReadMessage(h0, buffer, &buffer_size, NULL, NULL,
 | 
| +                            MOJO_READ_MESSAGE_FLAG_NONE));
 | 
|  
 | 
|    // Data pipe:
 | 
|    buffer_size = static_cast<uint32_t>(sizeof(buffer));
 | 
| @@ -56,16 +65,16 @@ TEST(CoreTest, InvalidHandle) {
 | 
|              MojoWriteData(h0, buffer, &buffer_size, MOJO_WRITE_DATA_FLAG_NONE));
 | 
|    write_pointer = NULL;
 | 
|    EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
 | 
| -            MojoBeginWriteData(
 | 
| -                h0, &write_pointer, &buffer_size, MOJO_WRITE_DATA_FLAG_NONE));
 | 
| +            MojoBeginWriteData(h0, &write_pointer, &buffer_size,
 | 
| +                               MOJO_WRITE_DATA_FLAG_NONE));
 | 
|    EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoEndWriteData(h0, 1));
 | 
|    buffer_size = static_cast<uint32_t>(sizeof(buffer));
 | 
|    EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
 | 
|              MojoReadData(h0, buffer, &buffer_size, MOJO_READ_DATA_FLAG_NONE));
 | 
|    read_pointer = NULL;
 | 
|    EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
 | 
| -            MojoBeginReadData(
 | 
| -                h0, &read_pointer, &buffer_size, MOJO_READ_DATA_FLAG_NONE));
 | 
| +            MojoBeginReadData(h0, &read_pointer, &buffer_size,
 | 
| +                              MOJO_READ_DATA_FLAG_NONE));
 | 
|    EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoEndReadData(h0, 1));
 | 
|  
 | 
|    // Shared buffer:
 | 
| @@ -88,45 +97,56 @@ TEST(CoreTest, BasicMessagePipe) {
 | 
|    EXPECT_NE(h0, MOJO_HANDLE_INVALID);
 | 
|    EXPECT_NE(h1, MOJO_HANDLE_INVALID);
 | 
|  
 | 
| -  // Shouldn't be readable.
 | 
| +  // Shouldn't be readable, we haven't written anything.
 | 
| +  MojoHandleSignalsState state;
 | 
|    EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
 | 
| -            MojoWait(h0, MOJO_HANDLE_SIGNAL_READABLE, 0));
 | 
| +            MojoNewWait(h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state));
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals);
 | 
| +  EXPECT_EQ(kSignalAll, state.satisfiable_signals);
 | 
|  
 | 
|    // Should be writable.
 | 
| -  EXPECT_EQ(MOJO_RESULT_OK, MojoWait(h0, MOJO_HANDLE_SIGNAL_WRITABLE, 0));
 | 
| +  EXPECT_EQ(MOJO_RESULT_OK,
 | 
| +            MojoNewWait(h0, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &state));
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals);
 | 
| +  EXPECT_EQ(kSignalAll, state.satisfiable_signals);
 | 
|  
 | 
|    // Try to read.
 | 
|    buffer_size = static_cast<uint32_t>(sizeof(buffer));
 | 
| -  EXPECT_EQ(
 | 
| -      MOJO_RESULT_SHOULD_WAIT,
 | 
| -      MojoReadMessage(
 | 
| -          h0, buffer, &buffer_size, NULL, NULL, MOJO_READ_MESSAGE_FLAG_NONE));
 | 
| +  EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
 | 
| +            MojoReadMessage(h0, buffer, &buffer_size, NULL, NULL,
 | 
| +                            MOJO_READ_MESSAGE_FLAG_NONE));
 | 
|  
 | 
|    // Write to |h1|.
 | 
|    static const char kHello[] = "hello";
 | 
|    buffer_size = static_cast<uint32_t>(sizeof(kHello));
 | 
| -  EXPECT_EQ(
 | 
| -      MOJO_RESULT_OK,
 | 
| -      MojoWriteMessage(
 | 
| -          h1, kHello, buffer_size, NULL, 0, MOJO_WRITE_MESSAGE_FLAG_NONE));
 | 
| +  EXPECT_EQ(MOJO_RESULT_OK, MojoWriteMessage(h1, kHello, buffer_size, NULL, 0,
 | 
| +                                             MOJO_WRITE_MESSAGE_FLAG_NONE));
 | 
|  
 | 
|    // |h0| should be readable.
 | 
| +  uint32_t result_index = 1;
 | 
| +  MojoHandleSignalsState states[1];
 | 
|    sig = MOJO_HANDLE_SIGNAL_READABLE;
 | 
|    EXPECT_EQ(MOJO_RESULT_OK,
 | 
| -            MojoWaitMany(&h0, &sig, 1, MOJO_DEADLINE_INDEFINITE));
 | 
| +            MojoNewWaitMany(&h0, &sig, 1, MOJO_DEADLINE_INDEFINITE,
 | 
| +                            &result_index, states));
 | 
| +
 | 
| +  EXPECT_EQ(0u, result_index);
 | 
| +  EXPECT_EQ(kSignalReadadableWritable, states[0].satisfied_signals);
 | 
| +  EXPECT_EQ(kSignalAll, states[0].satisfiable_signals);
 | 
|  
 | 
|    // Read from |h0|.
 | 
|    buffer_size = static_cast<uint32_t>(sizeof(buffer));
 | 
| -  EXPECT_EQ(
 | 
| -      MOJO_RESULT_OK,
 | 
| -      MojoReadMessage(
 | 
| -          h0, buffer, &buffer_size, NULL, NULL, MOJO_READ_MESSAGE_FLAG_NONE));
 | 
| +  EXPECT_EQ(MOJO_RESULT_OK, MojoReadMessage(h0, buffer, &buffer_size, NULL,
 | 
| +                                            NULL, MOJO_READ_MESSAGE_FLAG_NONE));
 | 
|    EXPECT_EQ(static_cast<uint32_t>(sizeof(kHello)), buffer_size);
 | 
|    EXPECT_STREQ(kHello, buffer);
 | 
|  
 | 
|    // |h0| should no longer be readable.
 | 
|    EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
 | 
| -            MojoWait(h0, MOJO_HANDLE_SIGNAL_READABLE, 10));
 | 
| +            MojoNewWait(h0, MOJO_HANDLE_SIGNAL_READABLE, 10, &state));
 | 
| +
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals);
 | 
| +  EXPECT_EQ(kSignalAll, state.satisfiable_signals);
 | 
|  
 | 
|    // Close |h0|.
 | 
|    EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h0));
 | 
| @@ -134,8 +154,11 @@ TEST(CoreTest, BasicMessagePipe) {
 | 
|    // |h1| should no longer be readable or writable.
 | 
|    EXPECT_EQ(
 | 
|        MOJO_RESULT_FAILED_PRECONDITION,
 | 
| -      MojoWait(
 | 
| -          h1, MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1000));
 | 
| +      MojoNewWait(h1, MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
 | 
| +                  1000, &state));
 | 
| +
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfied_signals);
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfiable_signals);
 | 
|  
 | 
|    EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h1));
 | 
|  }
 | 
| @@ -164,11 +187,21 @@ TEST(CoreTest, MAYBE_BasicDataPipe) {
 | 
|    EXPECT_NE(hc, MOJO_HANDLE_INVALID);
 | 
|  
 | 
|    // The consumer |hc| shouldn't be readable.
 | 
| +  MojoHandleSignalsState state;
 | 
|    EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
 | 
| -            MojoWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 0));
 | 
| +            MojoNewWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state));
 | 
| +
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals);
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
 | 
| +            state.satisfiable_signals);
 | 
|  
 | 
|    // The producer |hp| should be writable.
 | 
| -  EXPECT_EQ(MOJO_RESULT_OK, MojoWait(hp, MOJO_HANDLE_SIGNAL_WRITABLE, 0));
 | 
| +  EXPECT_EQ(MOJO_RESULT_OK,
 | 
| +            MojoNewWait(hp, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &state));
 | 
| +
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals);
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
 | 
| +            state.satisfiable_signals);
 | 
|  
 | 
|    // Try to read from |hc|.
 | 
|    buffer_size = static_cast<uint32_t>(sizeof(buffer));
 | 
| @@ -178,26 +211,32 @@ TEST(CoreTest, MAYBE_BasicDataPipe) {
 | 
|    // Try to begin a two-phase read from |hc|.
 | 
|    read_pointer = NULL;
 | 
|    EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
 | 
| -            MojoBeginReadData(
 | 
| -                hc, &read_pointer, &buffer_size, MOJO_READ_DATA_FLAG_NONE));
 | 
| +            MojoBeginReadData(hc, &read_pointer, &buffer_size,
 | 
| +                              MOJO_READ_DATA_FLAG_NONE));
 | 
|  
 | 
|    // Write to |hp|.
 | 
|    static const char kHello[] = "hello ";
 | 
|    // Don't include terminating null.
 | 
|    buffer_size = static_cast<uint32_t>(strlen(kHello));
 | 
| -  EXPECT_EQ(
 | 
| -      MOJO_RESULT_OK,
 | 
| -      MojoWriteData(hp, kHello, &buffer_size, MOJO_WRITE_MESSAGE_FLAG_NONE));
 | 
| +  EXPECT_EQ(MOJO_RESULT_OK, MojoWriteData(hp, kHello, &buffer_size,
 | 
| +                                          MOJO_WRITE_MESSAGE_FLAG_NONE));
 | 
|  
 | 
|    // |hc| should be(come) readable.
 | 
| +  uint32_t result_index = 1;
 | 
| +  MojoHandleSignalsState states[1];
 | 
|    sig = MOJO_HANDLE_SIGNAL_READABLE;
 | 
|    EXPECT_EQ(MOJO_RESULT_OK,
 | 
| -            MojoWaitMany(&hc, &sig, 1, MOJO_DEADLINE_INDEFINITE));
 | 
| +            MojoNewWaitMany(&hc, &sig, 1, MOJO_DEADLINE_INDEFINITE,
 | 
| +                            &result_index, states));
 | 
| +
 | 
| +  EXPECT_EQ(0u, result_index);
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, states[0].satisfied_signals);
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
 | 
| +            states[0].satisfiable_signals);
 | 
|  
 | 
|    // Do a two-phase write to |hp|.
 | 
| -  EXPECT_EQ(MOJO_RESULT_OK,
 | 
| -            MojoBeginWriteData(
 | 
| -                hp, &write_pointer, &buffer_size, MOJO_WRITE_DATA_FLAG_NONE));
 | 
| +  EXPECT_EQ(MOJO_RESULT_OK, MojoBeginWriteData(hp, &write_pointer, &buffer_size,
 | 
| +                                               MOJO_WRITE_DATA_FLAG_NONE));
 | 
|    static const char kWorld[] = "world";
 | 
|    ASSERT_GE(buffer_size, sizeof(kWorld));
 | 
|    // Include the terminating null.
 | 
| @@ -215,13 +254,18 @@ TEST(CoreTest, MAYBE_BasicDataPipe) {
 | 
|    EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hp));
 | 
|  
 | 
|    // |hc| should still be readable.
 | 
| -  EXPECT_EQ(MOJO_RESULT_OK, MojoWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 0));
 | 
| +  EXPECT_EQ(MOJO_RESULT_OK,
 | 
| +            MojoNewWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state));
 | 
| +
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
 | 
| +            state.satisfied_signals);
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
 | 
| +            state.satisfiable_signals);
 | 
|  
 | 
|    // Do a two-phase read from |hc|.
 | 
|    read_pointer = NULL;
 | 
| -  EXPECT_EQ(MOJO_RESULT_OK,
 | 
| -            MojoBeginReadData(
 | 
| -                hc, &read_pointer, &buffer_size, MOJO_READ_DATA_FLAG_NONE));
 | 
| +  EXPECT_EQ(MOJO_RESULT_OK, MojoBeginReadData(hc, &read_pointer, &buffer_size,
 | 
| +                                              MOJO_READ_DATA_FLAG_NONE));
 | 
|    ASSERT_LE(buffer_size, sizeof(buffer) - 1);
 | 
|    memcpy(&buffer[1], read_pointer, buffer_size);
 | 
|    EXPECT_EQ(MOJO_RESULT_OK, MojoEndReadData(hc, buffer_size));
 | 
| @@ -229,7 +273,10 @@ TEST(CoreTest, MAYBE_BasicDataPipe) {
 | 
|  
 | 
|    // |hc| should no longer be readable.
 | 
|    EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
 | 
| -            MojoWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 1000));
 | 
| +            MojoNewWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 1000, &state));
 | 
| +
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfied_signals);
 | 
| +  EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfiable_signals);
 | 
|  
 | 
|    EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hc));
 | 
|  
 | 
| 
 |