Index: mojo/shell/tests/connect/connect_unittest.cc |
diff --git a/mojo/shell/tests/connect/connect_unittest.cc b/mojo/shell/tests/connect/connect_unittest.cc |
index 8dd65cea8555ca22a8d2f5e0b345c9833f731bf5..9cfb0a781b6976a459bb38337207a7e9dd7e54e4 100644 |
--- a/mojo/shell/tests/connect/connect_unittest.cc |
+++ b/mojo/shell/tests/connect/connect_unittest.cc |
@@ -352,6 +352,32 @@ TEST_F(ConnectTest, ConnectToClientProcess_Blocked) { |
EXPECT_EQ(shell::mojom::ConnectResult::ACCESS_DENIED, result); |
} |
+// Verifies that a client with the "all_users" capability class can receive |
+// connections from clients run as other users. |
+TEST_F(ConnectTest, AllUsersSingleton) { |
+ // Connect to an instance with an explicitly different user_id. |
+ const std::string singleton_userid = base::GenerateGUID(); |
+ Connector::ConnectParams params(Identity(kTestAppName, singleton_userid)); |
+ scoped_ptr<Connection> connection = connector()->Connect(¶ms); |
+ { |
+ base::RunLoop loop; |
+ connection->AddConnectionCompletedClosure(base::Bind(&QuitLoop, &loop)); |
+ loop.Run(); |
+ EXPECT_EQ(connection->GetRemoteIdentity().user_id(), singleton_userid); |
+ } |
+ // This connects using the current client's user_id, but should be bound to |
+ // the instance run as |singleton_userid|. |
+ scoped_ptr<Connection> inherit_connection = |
+ connector()->Connect(kTestAppName); |
+ { |
+ base::RunLoop loop; |
+ inherit_connection->AddConnectionCompletedClosure( |
+ base::Bind(&QuitLoop, &loop)); |
+ loop.Run(); |
+ EXPECT_EQ(connection->GetRemoteIdentity().user_id(), singleton_userid); |
+ } |
+} |
+ |
// Tests that we can expose an interface to targets on outbound connections. |
TEST_F(ConnectTest, LocalInterface) { |
// Connect to a standalone application. |