| Index: mojo/common/handle_watcher_unittest.cc
|
| diff --git a/mojo/common/handle_watcher_unittest.cc b/mojo/common/handle_watcher_unittest.cc
|
| index ae1a1755ad6f0c5b6a20a62308bdb381df927f3c..a10585aa49a1610e613e86ba1319df39a53cb780 100644
|
| --- a/mojo/common/handle_watcher_unittest.cc
|
| +++ b/mojo/common/handle_watcher_unittest.cc
|
| @@ -32,6 +32,14 @@ void RunUntilIdle() {
|
| run_loop.RunUntilIdle();
|
| }
|
|
|
| +void DeleteWatcherAndForwardResult(
|
| + HandleWatcher* watcher,
|
| + base::Callback<void(MojoResult)> next_callback,
|
| + MojoResult result) {
|
| + delete watcher;
|
| + next_callback.Run(result);
|
| +}
|
| +
|
| // Helper class to manage the callback and running the message loop waiting for
|
| // message to be received. Typical usage is something like:
|
| // Schedule callback returned from GetCallback().
|
| @@ -59,17 +67,22 @@ class CallbackHelper {
|
| run_loop.Run();
|
| }
|
|
|
| - base::Closure GetCallback() {
|
| + base::Callback<void(MojoResult)> GetCallback() {
|
| return base::Bind(&CallbackHelper::OnCallback, weak_factory_.GetWeakPtr());
|
| }
|
|
|
| void Start(HandleWatcher* watcher, MojoHandle handle) {
|
| + StartWithCallback(watcher, handle, GetCallback());
|
| + }
|
| +
|
| + void StartWithCallback(HandleWatcher* watcher, MojoHandle handle,
|
| + const base::Callback<void(MojoResult)>& callback) {
|
| watcher->Start(handle, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE,
|
| - GetCallback());
|
| + callback);
|
| }
|
|
|
| private:
|
| - void OnCallback() {
|
| + void OnCallback(MojoResult result) {
|
| got_callback_ = true;
|
| if (run_loop_)
|
| run_loop_->Quit();
|
| @@ -275,6 +288,20 @@ TEST_F(HandleWatcherTest, Deadline) {
|
| EXPECT_FALSE(callback_helper3.got_callback());
|
| }
|
|
|
| +TEST_F(HandleWatcherTest, DeleteInCallback) {
|
| + ScopedMessagePipe test_pipe;
|
| + CallbackHelper callback_helper;
|
| +
|
| + HandleWatcher* watcher = new HandleWatcher();
|
| + callback_helper.StartWithCallback(watcher, test_pipe.handle_1(),
|
| + base::Bind(&DeleteWatcherAndForwardResult,
|
| + watcher,
|
| + callback_helper.GetCallback()));
|
| + WriteToHandle(test_pipe.handle_0());
|
| + callback_helper.RunUntilGotCallback();
|
| + EXPECT_TRUE(callback_helper.got_callback());
|
| +}
|
| +
|
| } // namespace test
|
| } // namespace common
|
| } // namespace mojo
|
|
|