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

Unified Diff: mojo/public/cpp/bindings/tests/associated_interface_unittest.cc

Issue 2646853003: Mojo C++ bindings: Simplify associated interface API. (Closed)
Patch Set: . Created 3 years, 10 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
Index: mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
diff --git a/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc b/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
index 56c1e878b905fd05917a804a33ef63a9cade0a36..a97a38d3c5841517683370d276bdb1a832ec0077 100644
--- a/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
@@ -106,12 +106,13 @@ class AssociatedInterfaceTest : public testing::Test {
template <typename T>
AssociatedInterfacePtrInfo<T> EmulatePassingAssociatedPtrInfo(
AssociatedInterfacePtrInfo<T> ptr_info,
+ scoped_refptr<MultiplexRouter> source,
scoped_refptr<MultiplexRouter> target) {
ScopedInterfaceEndpointHandle handle = ptr_info.PassHandle();
- CHECK(!handle.is_local());
- return AssociatedInterfacePtrInfo<T>(
- target->CreateLocalEndpointHandle(handle.release()),
- ptr_info.version());
+ CHECK(handle.pending_association());
+ auto id = source->AssociateInterface(std::move(handle));
+ return AssociatedInterfacePtrInfo<T>(target->CreateLocalEndpointHandle(id),
+ ptr_info.version());
}
void CreateRouterPair(scoped_refptr<MultiplexRouter>* router0,
@@ -130,10 +131,11 @@ class AssociatedInterfaceTest : public testing::Test {
IntegerSenderAssociatedPtrInfo* ptr_info0,
scoped_refptr<MultiplexRouter> router1,
IntegerSenderAssociatedRequest* request1) {
- router1->CreateAssociatedGroup()->CreateAssociatedInterface(
- AssociatedGroup::WILL_PASS_PTR, ptr_info0, request1);
- *ptr_info0 =
- EmulatePassingAssociatedPtrInfo(std::move(*ptr_info0), router0);
+ AssociatedGroup dummy_group;
+ dummy_group.CreateAssociatedInterface(AssociatedGroup::WILL_PASS_PTR,
+ ptr_info0, request1);
+ *ptr_info0 = EmulatePassingAssociatedPtrInfo(std::move(*ptr_info0), router1,
+ router0);
}
void CreateIntegerSender(IntegerSenderAssociatedPtrInfo* ptr_info,
@@ -950,6 +952,30 @@ TEST_F(AssociatedInterfaceTest, AssociatedBindingConnectionErrorWithReason) {
run_loop.Run();
}
+TEST_F(AssociatedInterfaceTest,
+ PendingAssociatedBindingConnectionErrorWithReason) {
+ // Test that AssociatedBinding is notified with connection error when the
+ // interface hasn't associated with a message pipe and the peer is closed.
+
+ AssociatedGroup dummy_group;
+ IntegerSenderAssociatedPtr ptr;
+ IntegerSenderImpl impl(MakeRequest(&ptr, &dummy_group));
+
+ base::RunLoop run_loop;
+ impl.binding()->set_connection_error_with_reason_handler(base::Bind(
+ [](const base::Closure& quit_closure, uint32_t custom_reason,
+ const std::string& description) {
+ EXPECT_EQ(123u, custom_reason);
+ EXPECT_EQ("farewell", description);
+ quit_closure.Run();
+ },
+ run_loop.QuitClosure()));
+
+ ptr.ResetWithReason(123u, "farewell");
+
+ run_loop.Run();
+}
+
TEST_F(AssociatedInterfaceTest, AssociatedPtrConnectionErrorWithReason) {
AssociatedInterfaceRequest<IntegerSender> request;
IntegerSenderAssociatedPtrInfo ptr_info;
@@ -974,6 +1000,29 @@ TEST_F(AssociatedInterfaceTest, AssociatedPtrConnectionErrorWithReason) {
run_loop.Run();
}
+TEST_F(AssociatedInterfaceTest, PendingAssociatedPtrConnectionErrorWithReason) {
+ // Test that AssociatedInterfacePtr is notified with connection error when the
+ // interface hasn't associated with a message pipe and the peer is closed.
+
+ AssociatedGroup dummy_group;
+ IntegerSenderAssociatedPtr ptr;
+ auto request = MakeRequest(&ptr, &dummy_group);
+
+ base::RunLoop run_loop;
+ ptr.set_connection_error_with_reason_handler(base::Bind(
+ [](const base::Closure& quit_closure, uint32_t custom_reason,
+ const std::string& description) {
+ EXPECT_EQ(456u, custom_reason);
+ EXPECT_EQ("farewell", description);
+ quit_closure.Run();
+ },
+ run_loop.QuitClosure()));
+
+ request.ResetWithReason(456u, "farewell");
+
+ run_loop.Run();
+}
+
TEST_F(AssociatedInterfaceTest, AssociatedRequestResetWithReason) {
AssociatedInterfaceRequest<IntegerSender> request;
IntegerSenderAssociatedPtrInfo ptr_info;

Powered by Google App Engine
This is Rietveld 408576698