Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(493)

Unified Diff: ios/web/webui/mojo_facade_unittest.mm

Issue 2946383002: Support new-style Mojo JS core API on IOS. (Closed)
Patch Set: . Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/web/webui/mojo_facade.mm ('k') | ios/web/webui/mojo_js_constants.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..4aee73d9f1cd427214573f5d708aa67479db797e 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,47 @@ 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 = 0;
+ uint32_t handle1 = 0;
+ 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 +156,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 +177,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 +192,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 +219,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 +231,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
« no previous file with comments | « ios/web/webui/mojo_facade.mm ('k') | ios/web/webui/mojo_js_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698