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

Side by Side Diff: mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc

Issue 2522333002: Provide a Mojo equivalent of ThreadSafeSender. (Closed)
Patch Set: Addresses @tsepez comment Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdint.h> 5 #include <stdint.h>
6 #include <utility> 6 #include <utility>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 base::PlatformThread::CurrentId())); 844 base::PlatformThread::CurrentId()));
845 }, 845 },
846 base::SequencedTaskRunnerHandle::Get(), run_loop.QuitClosure(), 846 base::SequencedTaskRunnerHandle::Get(), run_loop.QuitClosure(),
847 thread_safe_ptr); 847 thread_safe_ptr);
848 other_thread.message_loop()->task_runner()->PostTask(FROM_HERE, run_method); 848 other_thread.message_loop()->task_runner()->PostTask(FROM_HERE, run_method);
849 849
850 // Block until the method callback is called on the background thread. 850 // Block until the method callback is called on the background thread.
851 run_loop.Run(); 851 run_loop.Run();
852 } 852 }
853 853
854 TEST_F(InterfacePtrTest, BindLaterThreadSafeInterfacePointer) {
855 // Create a ThreadSafeInterfacePtr that we'll bind from a different thread.
856 scoped_refptr<math::ThreadSafeCalculatorPtr> thread_safe_ptr =
857 math::ThreadSafeCalculatorPtr::CreateUnbound();
858 ASSERT_TRUE(thread_safe_ptr);
859
860 // Create and start the thread from where we'll bind the interface pointer.
861 base::Thread other_thread("service test thread");
862 other_thread.Start();
863 const scoped_refptr<base::SingleThreadTaskRunner>& other_thread_task_runner =
864 other_thread.message_loop()->task_runner();
865 MathCalculatorImpl* math_calc_impl = nullptr;
866 {
867 base::RunLoop run_loop;
868 auto run_method = base::Bind(
869 [](const scoped_refptr<base::TaskRunner>& main_task_runner,
870 const base::Closure& quit_closure,
871 const scoped_refptr<math::ThreadSafeCalculatorPtr>& thread_safe_ptr,
872 MathCalculatorImpl** math_calc_impl) {
873 math::CalculatorPtr ptr;
874 // In real life, the implementation would have a legitimate owner.
875 *math_calc_impl = new MathCalculatorImpl(GetProxy(&ptr));
876 thread_safe_ptr->Bind(std::move(ptr));
877 main_task_runner->PostTask(FROM_HERE, quit_closure);
878 },
879 base::SequencedTaskRunnerHandle::Get(), run_loop.QuitClosure(),
880 thread_safe_ptr, &math_calc_impl);
881 other_thread.message_loop()->task_runner()->PostTask(FROM_HERE, run_method);
882 run_loop.Run();
883 }
884
885 {
886 // The interface ptr is bound, we can call methods on it.
887 auto calc_callback =
888 base::Bind([](const base::Closure& quit_closure, double result) {
889 EXPECT_EQ(123, result);
890 quit_closure.Run();
891 });
892 base::RunLoop run_loop;
893 (*thread_safe_ptr)
894 ->Add(123, base::Bind(calc_callback, run_loop.QuitClosure()));
895 // Block until the method callback is called.
896 run_loop.Run();
897 }
898
899 other_thread_task_runner->DeleteSoon(FROM_HERE, math_calc_impl);
900
901 // Reset the pointer now so the InterfacePtr associated resources can be
902 // deleted before the background thread's message loop is invalidated.
903 thread_safe_ptr = nullptr;
904 }
905
854 } // namespace 906 } // namespace
855 } // namespace test 907 } // namespace test
856 } // namespace mojo 908 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/tests/associated_interface_unittest.cc ('k') | mojo/public/cpp/bindings/thread_safe_interface_ptr.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698