Chromium Code Reviews| Index: ios/web/webui/mojo_facade_unittest.mm |
| diff --git a/ios/web/webui/mojo_facade_unittest.mm b/ios/web/webui/mojo_facade_unittest.mm |
| index a8da2855d667ebe6bb8d45c6418952ba04338748..0108c09d8b8de2a0fad0dc32ea4426bead3d14ce 100644 |
| --- a/ios/web/webui/mojo_facade_unittest.mm |
| +++ b/ios/web/webui/mojo_facade_unittest.mm |
| @@ -65,6 +65,34 @@ class MojoFacadeTest : public WebTest { |
| OCMockObject* evaluator() { return evaluator_; } |
| MojoFacade* facade() { return facade_.get(); } |
| + void CreateMessagePipe(uint32_t* handle0, uint32_t* handle1) { |
| + NSDictionary* create = @{ |
| + @"name" : @"Mojo.createMessagePipe", |
| + @"args" : @{}, |
| + }; |
| + std::string response_as_string = |
| + facade()->HandleMojoMessage(GetJson(create)); |
| + |
| + // Verify handles. |
| + ASSERT_FALSE(response_as_string.empty()); |
| + NSDictionary* response_as_dict = GetObject(response_as_string); |
| + ASSERT_TRUE([response_as_dict isKindOfClass:[NSDictionary class]]); |
| + ASSERT_EQ(MOJO_RESULT_OK, [response_as_dict[@"result"] unsignedIntValue]); |
| + *handle0 = [response_as_dict[@"handle0"] unsignedIntValue]; |
| + *handle1 = [response_as_dict[@"handle1"] unsignedIntValue]; |
| + } |
| + |
| + void CloseHandle(uint32_t handle) { |
| + NSDictionary* close = @{ |
| + @"name" : @"MojoHandle.close", |
| + @"args" : @{ |
| + @"handle" : @(handle), |
| + }, |
| + }; |
| + std::string result = facade()->HandleMojoMessage(GetJson(close)); |
| + EXPECT_TRUE(result.empty()); |
| + } |
| + |
| private: |
| void BindTestUIHandlerMojoRequest( |
| const service_manager::BindSourceInfo& source_info, |
| @@ -75,108 +103,46 @@ class MojoFacadeTest : public WebTest { |
| std::unique_ptr<MojoFacade> facade_; |
| }; |
| -// Tests connecting to existing interface and closing the handle. |
| -TEST_F(MojoFacadeTest, GetInterfaceAndCloseHandle) { |
| - // Bind to the interface. |
| +// Tests binding an interface. |
| +TEST_F(MojoFacadeTest, BindInterface) { |
| + uint32_t handle0, handle1; |
|
Eugene But (OOO till 7-30)
2017/06/24 01:09:51
nit: Per Style Guide, please initialize local vari
yzshen1
2017/06/26 20:09:59
Done.
|
| + CreateMessagePipe(&handle0, &handle1); |
| + |
| + // Pass handle0 as interface request. |
| NSDictionary* connect = @{ |
| - @"name" : @"interface_provider.getInterface", |
| + @"name" : @"Mojo.bindInterface", |
| @"args" : @{ |
| @"interfaceName" : @"::TestUIHandlerMojo", |
| + @"requestHandle" : @(handle0), |
| }, |
| }; |
| std::string handle_as_string = facade()->HandleMojoMessage(GetJson(connect)); |
| - EXPECT_FALSE(handle_as_string.empty()); |
| - int handle = 0; |
| - EXPECT_TRUE(base::StringToInt(handle_as_string, &handle)); |
| + EXPECT_TRUE(handle_as_string.empty()); |
| - // Close the handle. |
| - NSDictionary* close = @{ |
| - @"name" : @"core.close", |
| - @"args" : @{ |
| - @"handle" : @(handle), |
| - }, |
| - }; |
| - std::string result_as_string = facade()->HandleMojoMessage(GetJson(close)); |
| - EXPECT_FALSE(result_as_string.empty()); |
| - int result = 0; |
| - EXPECT_TRUE(base::StringToInt(result_as_string, &result)); |
| - EXPECT_EQ(MOJO_RESULT_OK, static_cast<MojoResult>(result)); |
| + CloseHandle(handle1); |
| } |
| -// Tests creating a message pipe without options. |
| -TEST_F(MojoFacadeTest, CreateMessagePipeWithoutOptions) { |
| - // Create a message pipe. |
| - NSDictionary* create = @{ |
| - @"name" : @"core.createMessagePipe", |
| - @"args" : @{ |
| - @"optionsDict" : [NSNull null], |
| - }, |
| - }; |
| - std::string response_as_string = facade()->HandleMojoMessage(GetJson(create)); |
| - |
| - // Verify handles. |
| - EXPECT_FALSE(response_as_string.empty()); |
| - NSDictionary* response_as_dict = GetObject(response_as_string); |
| - EXPECT_TRUE([response_as_dict isKindOfClass:[NSDictionary class]]); |
| - id handle0 = response_as_dict[@"handle0"]; |
| - EXPECT_TRUE(handle0); |
| - id handle1 = response_as_dict[@"handle1"]; |
| - EXPECT_TRUE(handle1); |
| - |
| - // Close handle0. |
| - NSDictionary* close0 = @{ |
| - @"name" : @"core.close", |
| - @"args" : @{ |
| - @"handle" : handle0, |
| - }, |
| - }; |
| - std::string result0_as_string = facade()->HandleMojoMessage(GetJson(close0)); |
| - EXPECT_FALSE(result0_as_string.empty()); |
| - int result0 = 0; |
| - EXPECT_TRUE(base::StringToInt(result0_as_string, &result0)); |
| - EXPECT_EQ(MOJO_RESULT_OK, static_cast<MojoResult>(result0)); |
| - |
| - // Close handle1. |
| - NSDictionary* close1 = @{ |
| - @"name" : @"core.close", |
| - @"args" : @{ |
| - @"handle" : handle1, |
| - }, |
| - }; |
| - std::string result1_as_string = facade()->HandleMojoMessage(GetJson(close1)); |
| - EXPECT_FALSE(result1_as_string.empty()); |
| - int result1 = 0; |
| - EXPECT_TRUE(base::StringToInt(result1_as_string, &result1)); |
| - EXPECT_EQ(MOJO_RESULT_OK, static_cast<MojoResult>(result1)); |
| +// Tests creating a message pipe. |
| +TEST_F(MojoFacadeTest, CreateMessagePipe) { |
| + uint32_t handle0, handle1; |
| + CreateMessagePipe(&handle0, &handle1); |
| + |
| + CloseHandle(handle0); |
| + CloseHandle(handle1); |
| } |
| // Tests watching the pipe. |
| TEST_F(MojoFacadeTest, Watch) { |
| - // Create a message pipe. |
| - NSDictionary* create = @{ |
| - @"name" : @"core.createMessagePipe", |
| - @"args" : @{ |
| - @"optionsDict" : [NSNull null], |
| - }, |
| - }; |
| - std::string response_as_string = facade()->HandleMojoMessage(GetJson(create)); |
| - |
| - // Verify handles. |
| - EXPECT_FALSE(response_as_string.empty()); |
| - NSDictionary* response_as_dict = GetObject(response_as_string); |
| - EXPECT_TRUE([response_as_dict isKindOfClass:[NSDictionary class]]); |
| - id handle0 = response_as_dict[@"handle0"]; |
| - EXPECT_TRUE(handle0); |
| - id handle1 = response_as_dict[@"handle1"]; |
| - EXPECT_TRUE(handle1); |
| + uint32_t handle0, handle1; |
| + CreateMessagePipe(&handle0, &handle1); |
| // Start watching one end of the pipe. |
| int callback_id = 99; |
| NSDictionary* watch = @{ |
| - @"name" : @"support.watch", |
| + @"name" : @"MojoHandle.watch", |
| @"args" : @{ |
| - @"handle" : handle0, |
| + @"handle" : @(handle0), |
| @"signals" : @(MOJO_HANDLE_SIGNAL_READABLE), |
| @"callbackId" : @(callback_id), |
| }, |
| @@ -189,15 +155,16 @@ TEST_F(MojoFacadeTest, Watch) { |
| // Start waiting for the watch callback. |
| __block bool callback_received = false; |
| NSString* expected_script = |
| - [NSString stringWithFormat:@"__crWeb.mojo.signalWatch(%d, %d)", |
| - callback_id, MOJO_RESULT_OK]; |
| + [NSString stringWithFormat: |
| + @"Mojo.internal.watchCallbacksHolder.callCallback(%d, %d)", |
| + callback_id, MOJO_RESULT_OK]; |
| [[[evaluator() expect] andDo:^(NSInvocation*) { |
| callback_received = true; |
| // Cancel the watch immediately to ensure there are no additional |
| // notifications. |
| NSDictionary* cancel_watch = @{ |
| - @"name" : @"support.cancelWatch", |
| + @"name" : @"MojoWatcher.cancel", |
| @"args" : @{ |
| @"watchId" : @(watch_id), |
| }, |
| @@ -209,13 +176,9 @@ TEST_F(MojoFacadeTest, Watch) { |
| // Write to the other end of the pipe. |
| NSDictionary* write = @{ |
| - @"name" : @"core.writeMessage", |
| - @"args" : @{ |
| - @"handle" : handle1, |
| - @"handles" : @[], |
| - @"flags" : @(MOJO_WRITE_MESSAGE_FLAG_NONE), |
| - @"buffer" : @{@"0" : @0} |
| - }, |
| + @"name" : @"MojoHandle.writeMessage", |
| + @"args" : |
| + @{@"handle" : @(handle1), @"handles" : @[], @"buffer" : @{@"0" : @0}}, |
| }; |
| std::string result_as_string = facade()->HandleMojoMessage(GetJson(write)); |
| EXPECT_FALSE(result_as_string.empty()); |
| @@ -228,35 +191,22 @@ TEST_F(MojoFacadeTest, Watch) { |
| return callback_received; |
| }, |
| true, base::TimeDelta()); |
| + |
| + CloseHandle(handle0); |
| + CloseHandle(handle1); |
| } |
| // Tests reading the message from the pipe. |
| TEST_F(MojoFacadeTest, ReadWrite) { |
| - // Create a message pipe. |
| - NSDictionary* create = @{ |
| - @"name" : @"core.createMessagePipe", |
| - @"args" : @{ |
| - @"optionsDict" : [NSNull null], |
| - }, |
| - }; |
| - std::string response_as_string = facade()->HandleMojoMessage(GetJson(create)); |
| - |
| - // Verify handles. |
| - EXPECT_FALSE(response_as_string.empty()); |
| - NSDictionary* response_as_dict = GetObject(response_as_string); |
| - EXPECT_TRUE([response_as_dict isKindOfClass:[NSDictionary class]]); |
| - id handle0 = response_as_dict[@"handle0"]; |
| - EXPECT_TRUE(handle0); |
| - id handle1 = response_as_dict[@"handle1"]; |
| - EXPECT_TRUE(handle1); |
| + uint32_t handle0, handle1; |
| + CreateMessagePipe(&handle0, &handle1); |
| // Write to the other end of the pipe. |
| NSDictionary* write = @{ |
| - @"name" : @"core.writeMessage", |
| + @"name" : @"MojoHandle.writeMessage", |
| @"args" : @{ |
| - @"handle" : handle1, |
| + @"handle" : @(handle1), |
| @"handles" : @[], |
| - @"flags" : @(MOJO_WRITE_MESSAGE_FLAG_NONE), |
| @"buffer" : @{@"0" : @9, @"1" : @2, @"2" : @2008} |
| }, |
| }; |
| @@ -268,10 +218,9 @@ TEST_F(MojoFacadeTest, ReadWrite) { |
| // Read the message from the pipe. |
| NSDictionary* read = @{ |
| - @"name" : @"core.readMessage", |
| + @"name" : @"MojoHandle.readMessage", |
| @"args" : @{ |
| - @"handle" : handle0, |
| - @"flags" : @(MOJO_READ_MESSAGE_FLAG_NONE), |
| + @"handle" : @(handle0), |
| }, |
| }; |
| NSDictionary* message = GetObject(facade()->HandleMojoMessage(GetJson(read))); |
| @@ -281,6 +230,9 @@ TEST_F(MojoFacadeTest, ReadWrite) { |
| EXPECT_NSEQ(expected_message, message[@"buffer"]); |
| EXPECT_FALSE([message[@"handles"] count]); |
| EXPECT_EQ(MOJO_RESULT_OK, [message[@"result"] unsignedIntValue]); |
| + |
| + CloseHandle(handle0); |
| + CloseHandle(handle1); |
| } |
| } // namespace web |