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

Side by Side Diff: mojo/edk/system/channel_manager_unittest.cc

Issue 1412283002: Convert mojo::system::Dispatcher to use our new refcounting stuff (instead of base's). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: no change Created 5 years, 2 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 unified diff | Download patch
« no previous file with comments | « mojo/edk/system/channel_manager.cc ('k') | mojo/edk/system/core.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "mojo/edk/system/channel_manager.h" 5 #include "mojo/edk/system/channel_manager.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/task_runner.h" 10 #include "base/task_runner.h"
(...skipping 30 matching lines...) Expand all
41 // before it (and should outlive it). 41 // before it (and should outlive it).
42 ChannelManager channel_manager_; 42 ChannelManager channel_manager_;
43 43
44 MOJO_DISALLOW_COPY_AND_ASSIGN(ChannelManagerTest); 44 MOJO_DISALLOW_COPY_AND_ASSIGN(ChannelManagerTest);
45 }; 45 };
46 46
47 TEST_F(ChannelManagerTest, Basic) { 47 TEST_F(ChannelManagerTest, Basic) {
48 embedder::PlatformChannelPair channel_pair; 48 embedder::PlatformChannelPair channel_pair;
49 49
50 const ChannelId id = 1; 50 const ChannelId id = 1;
51 scoped_refptr<MessagePipeDispatcher> d = 51 RefPtr<MessagePipeDispatcher> d = channel_manager().CreateChannelOnIOThread(
52 channel_manager().CreateChannelOnIOThread( 52 id, channel_pair.PassServerHandle());
53 id, channel_pair.PassServerHandle());
54 53
55 RefPtr<Channel> ch = channel_manager().GetChannel(id); 54 RefPtr<Channel> ch = channel_manager().GetChannel(id);
56 EXPECT_TRUE(ch); 55 EXPECT_TRUE(ch);
57 56
58 channel_manager().WillShutdownChannel(id); 57 channel_manager().WillShutdownChannel(id);
59 58
60 channel_manager().ShutdownChannelOnIOThread(id); 59 channel_manager().ShutdownChannelOnIOThread(id);
61 // |ChannelManager| should have given up its ref. 60 // |ChannelManager| should have given up its ref.
62 ch->AssertHasOneRef(); 61 ch->AssertHasOneRef();
63 62
64 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 63 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
65 } 64 }
66 65
67 TEST_F(ChannelManagerTest, TwoChannels) { 66 TEST_F(ChannelManagerTest, TwoChannels) {
68 embedder::PlatformChannelPair channel_pair; 67 embedder::PlatformChannelPair channel_pair;
69 68
70 const ChannelId id1 = 1; 69 const ChannelId id1 = 1;
71 scoped_refptr<MessagePipeDispatcher> d1 = 70 RefPtr<MessagePipeDispatcher> d1 = channel_manager().CreateChannelOnIOThread(
72 channel_manager().CreateChannelOnIOThread( 71 id1, channel_pair.PassServerHandle());
73 id1, channel_pair.PassServerHandle());
74 72
75 const ChannelId id2 = 2; 73 const ChannelId id2 = 2;
76 scoped_refptr<MessagePipeDispatcher> d2 = 74 RefPtr<MessagePipeDispatcher> d2 = channel_manager().CreateChannelOnIOThread(
77 channel_manager().CreateChannelOnIOThread( 75 id2, channel_pair.PassClientHandle());
78 id2, channel_pair.PassClientHandle());
79 76
80 RefPtr<Channel> ch1 = channel_manager().GetChannel(id1); 77 RefPtr<Channel> ch1 = channel_manager().GetChannel(id1);
81 EXPECT_TRUE(ch1); 78 EXPECT_TRUE(ch1);
82 79
83 RefPtr<Channel> ch2 = channel_manager().GetChannel(id2); 80 RefPtr<Channel> ch2 = channel_manager().GetChannel(id2);
84 EXPECT_TRUE(ch2); 81 EXPECT_TRUE(ch2);
85 82
86 // Calling |WillShutdownChannel()| multiple times (on |id1|) is okay. 83 // Calling |WillShutdownChannel()| multiple times (on |id1|) is okay.
87 channel_manager().WillShutdownChannel(id1); 84 channel_manager().WillShutdownChannel(id1);
88 channel_manager().WillShutdownChannel(id1); 85 channel_manager().WillShutdownChannel(id1);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 ChannelId channel_id_; 134 ChannelId channel_id_;
138 base::Closure quit_closure_; 135 base::Closure quit_closure_;
139 136
140 MOJO_DISALLOW_COPY_AND_ASSIGN(OtherThread); 137 MOJO_DISALLOW_COPY_AND_ASSIGN(OtherThread);
141 }; 138 };
142 139
143 TEST_F(ChannelManagerTest, CallsFromOtherThread) { 140 TEST_F(ChannelManagerTest, CallsFromOtherThread) {
144 embedder::PlatformChannelPair channel_pair; 141 embedder::PlatformChannelPair channel_pair;
145 142
146 const ChannelId id = 1; 143 const ChannelId id = 1;
147 scoped_refptr<MessagePipeDispatcher> d = 144 RefPtr<MessagePipeDispatcher> d = channel_manager().CreateChannelOnIOThread(
148 channel_manager().CreateChannelOnIOThread( 145 id, channel_pair.PassServerHandle());
149 id, channel_pair.PassServerHandle());
150 146
151 base::RunLoop run_loop; 147 base::RunLoop run_loop;
152 OtherThread thread(base::ThreadTaskRunnerHandle::Get(), &channel_manager(), 148 OtherThread thread(base::ThreadTaskRunnerHandle::Get(), &channel_manager(),
153 id, run_loop.QuitClosure()); 149 id, run_loop.QuitClosure());
154 thread.Start(); 150 thread.Start();
155 run_loop.Run(); 151 run_loop.Run();
156 thread.Join(); 152 thread.Join();
157 153
158 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 154 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
159 } 155 }
160 156
161 // TODO(vtl): Test |CreateChannelWithoutBootstrapOnIOThread()|. (This will 157 // TODO(vtl): Test |CreateChannelWithoutBootstrapOnIOThread()|. (This will
162 // require additional functionality in |Channel|.) 158 // require additional functionality in |Channel|.)
163 159
164 } // namespace 160 } // namespace
165 } // namespace system 161 } // namespace system
166 } // namespace mojo 162 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/channel_manager.cc ('k') | mojo/edk/system/core.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698