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

Side by Side Diff: mojo/services/view_manager/view_manager_connection_unittest.cc

Issue 308053008: Simplifies ShellTestHelper and ViewManager tests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge to trunk Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | mojo/shell/shell_test_helper.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 <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/auto_reset.h" 8 #include "base/auto_reset.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 25 matching lines...) Expand all
36 const char kTestServiceURL[] = "mojo:test_url"; 36 const char kTestServiceURL[] = "mojo:test_url";
37 37
38 // ViewManagerProxy is a proxy to an IViewManager. It handles invoking 38 // ViewManagerProxy is a proxy to an IViewManager. It handles invoking
39 // IViewManager functions on the right thread in a synchronous manner (each 39 // IViewManager functions on the right thread in a synchronous manner (each
40 // IViewManager cover function blocks until the response from the IViewManager 40 // IViewManager cover function blocks until the response from the IViewManager
41 // is returned). In addition it tracks the set of IViewManagerClient messages 41 // is returned). In addition it tracks the set of IViewManagerClient messages
42 // received by way of a vector of Changes. Use DoRunLoopUntilChangesCount() to 42 // received by way of a vector of Changes. Use DoRunLoopUntilChangesCount() to
43 // wait for a certain number of messages to be received. 43 // wait for a certain number of messages to be received.
44 class ViewManagerProxy : public TestChangeTracker::Delegate { 44 class ViewManagerProxy : public TestChangeTracker::Delegate {
45 public: 45 public:
46 ViewManagerProxy(TestChangeTracker* tracker, base::MessageLoop* loop) 46 explicit ViewManagerProxy(TestChangeTracker* tracker)
47 : tracker_(tracker), 47 : tracker_(tracker),
48 main_loop_(loop),
49 background_loop_(base::MessageLoop::current()),
50 view_manager_(NULL), 48 view_manager_(NULL),
51 quit_count_(0), 49 quit_count_(0),
52 router_(NULL) { 50 router_(NULL) {
53 main_loop_->PostTask(FROM_HERE, 51 SetInstance(this);
54 base::Bind(&ViewManagerProxy::SetInstance, this));
55 } 52 }
56 53
57 virtual ~ViewManagerProxy() { 54 virtual ~ViewManagerProxy() {}
58 }
59 55
60 // Runs a message loop until the single instance has been created. 56 // Runs a message loop until the single instance has been created.
61 static ViewManagerProxy* WaitForInstance() { 57 static ViewManagerProxy* WaitForInstance() {
62 if (!instance_) 58 if (!instance_)
63 RunMainLoop(); 59 RunMainLoop();
64 ViewManagerProxy* instance = instance_; 60 ViewManagerProxy* instance = instance_;
65 instance_ = NULL; 61 instance_ = NULL;
66 return instance; 62 return instance;
67 } 63 }
68 64
69 // Runs the main loop until |count| changes have been received. 65 // Runs the main loop until |count| changes have been received.
70 std::vector<Change> DoRunLoopUntilChangesCount(size_t count) { 66 std::vector<Change> DoRunLoopUntilChangesCount(size_t count) {
71 background_loop_->PostTask(FROM_HERE, 67 DCHECK_EQ(0u, quit_count_);
72 base::Bind(&ViewManagerProxy::SetQuitCount, 68 if (tracker_->changes()->size() >= count) {
73 base::Unretained(this), count)); 69 CopyChangesFromTracker();
70 return changes_;
71 }
72 quit_count_ = count - tracker_->changes()->size();
74 // Run the current message loop. When |count| Changes have been received, 73 // Run the current message loop. When |count| Changes have been received,
75 // we'll quit. 74 // we'll quit.
76 RunMainLoop(); 75 RunMainLoop();
77 return changes_; 76 return changes_;
78 } 77 }
79 78
80 const std::vector<Change>& changes() const { return changes_; } 79 const std::vector<Change>& changes() const { return changes_; }
81 80
82 // Destroys the connection, blocking until done. 81 // Destroys the connection, blocking until done.
83 void Destroy() { 82 void Destroy() {
84 background_loop_->PostTask( 83 router_->CloseMessagePipe();
85 FROM_HERE,
86 base::Bind(&ViewManagerProxy::DestroyOnBackgroundThread,
87 base::Unretained(this)));
88 RunMainLoop();
89 } 84 }
90 85
91 // The following functions mirror that of IViewManager. They bounce the 86 // The following functions are cover methods for IViewManager. They block
92 // function to the right thread and return the result. 87 // until the result is received.
93 bool CreateNode(TransportNodeId node_id) { 88 bool CreateNode(TransportNodeId node_id) {
94 changes_.clear(); 89 changes_.clear();
95 bool result = false; 90 bool result = false;
96 background_loop_->PostTask( 91 view_manager_->CreateNode(node_id,
97 FROM_HERE, 92 base::Bind(&ViewManagerProxy::GotResult,
98 base::Bind(&ViewManagerProxy::CreateNodeOnBackgroundThread, 93 base::Unretained(this), &result));
99 base::Unretained(this), node_id, &result));
100 RunMainLoop(); 94 RunMainLoop();
101 return result; 95 return result;
102 } 96 }
103 bool AddNode(TransportNodeId parent, 97 bool AddNode(TransportNodeId parent,
104 TransportNodeId child, 98 TransportNodeId child,
105 TransportChangeId server_change_id) { 99 TransportChangeId server_change_id) {
106 changes_.clear(); 100 changes_.clear();
107 bool result = false; 101 bool result = false;
108 background_loop_->PostTask( 102 view_manager_->AddNode(parent, child, server_change_id,
109 FROM_HERE, 103 base::Bind(&ViewManagerProxy::GotResult,
110 base::Bind(&ViewManagerProxy::AddNodeOnBackgroundThread, 104 base::Unretained(this), &result));
111 base::Unretained(this), parent, child, server_change_id,
112 &result));
113 RunMainLoop(); 105 RunMainLoop();
114 return result; 106 return result;
115 } 107 }
116 bool RemoveNodeFromParent(TransportNodeId node_id, 108 bool RemoveNodeFromParent(TransportNodeId node_id,
117 TransportChangeId server_change_id) { 109 TransportChangeId server_change_id) {
118 changes_.clear(); 110 changes_.clear();
119 bool result = false; 111 bool result = false;
120 background_loop_->PostTask( 112 view_manager_->RemoveNodeFromParent(node_id, server_change_id,
121 FROM_HERE, 113 base::Bind(&ViewManagerProxy::GotResult,
122 base::Bind(&ViewManagerProxy::RemoveNodeFromParentOnBackgroundThread, 114 base::Unretained(this), &result));
123 base::Unretained(this), node_id, server_change_id, &result));
124 RunMainLoop(); 115 RunMainLoop();
125 return result; 116 return result;
126 } 117 }
127 bool SetView(TransportNodeId node_id, TransportViewId view_id) { 118 bool SetView(TransportNodeId node_id, TransportViewId view_id) {
128 changes_.clear(); 119 changes_.clear();
129 bool result = false; 120 bool result = false;
130 background_loop_->PostTask( 121 view_manager_->SetView(node_id, view_id,
131 FROM_HERE, 122 base::Bind(&ViewManagerProxy::GotResult,
132 base::Bind(&ViewManagerProxy::SetViewOnBackgroundThread, 123 base::Unretained(this), &result));
133 base::Unretained(this), node_id, view_id, &result));
134 RunMainLoop(); 124 RunMainLoop();
135 return result; 125 return result;
136 } 126 }
137 bool CreateView(TransportViewId view_id) { 127 bool CreateView(TransportViewId view_id) {
138 changes_.clear(); 128 changes_.clear();
139 bool result = false; 129 bool result = false;
140 background_loop_->PostTask( 130 view_manager_->CreateView(view_id,
141 FROM_HERE, 131 base::Bind(&ViewManagerProxy::GotResult,
142 base::Bind(&ViewManagerProxy::CreateViewOnBackgroundThread, 132 base::Unretained(this), &result));
143 base::Unretained(this), view_id, &result));
144 RunMainLoop(); 133 RunMainLoop();
145 return result; 134 return result;
146 } 135 }
147 void GetNodeTree(TransportNodeId node_id, std::vector<TestNode>* nodes) { 136 void GetNodeTree(TransportNodeId node_id, std::vector<TestNode>* nodes) {
148 changes_.clear(); 137 changes_.clear();
149 background_loop_->PostTask( 138 view_manager_->GetNodeTree(node_id,
150 FROM_HERE, 139 base::Bind(&ViewManagerProxy::GotNodeTree,
151 base::Bind(&ViewManagerProxy::GetNodeTreeOnBackgroundThread, 140 base::Unretained(this), nodes));
152 base::Unretained(this), node_id, nodes));
153 RunMainLoop(); 141 RunMainLoop();
154 } 142 }
155 bool Connect(const std::vector<TransportNodeId>& nodes) { 143 bool Connect(const std::vector<TransportNodeId>& nodes) {
156 changes_.clear(); 144 changes_.clear();
157 base::AutoReset<bool> auto_reset(&in_connect_, true); 145 base::AutoReset<bool> auto_reset(&in_connect_, true);
158 bool result = false; 146 bool result = false;
159 background_loop_->PostTask( 147 view_manager_->Connect(kTestServiceURL, Array<TransportNodeId>::From(nodes),
160 FROM_HERE, 148 base::Bind(&ViewManagerProxy::GotResult,
161 base::Bind(&ViewManagerProxy::ConnectOnBackgroundThread, 149 base::Unretained(this), &result));
162 base::Unretained(this), nodes, &result));
163 RunMainLoop(); 150 RunMainLoop();
164 return result; 151 return result;
165 } 152 }
166 bool DeleteNode(TransportNodeId node_id) { 153 bool DeleteNode(TransportNodeId node_id) {
167 changes_.clear(); 154 changes_.clear();
168 bool result = false; 155 bool result = false;
169 background_loop_->PostTask( 156 view_manager_->DeleteNode(node_id,
170 FROM_HERE, 157 base::Bind(&ViewManagerProxy::GotResult,
171 base::Bind(&ViewManagerProxy::DeleteNodeOnBackgroundThread, 158 base::Unretained(this), &result));
172 base::Unretained(this), node_id, &result));
173 RunMainLoop(); 159 RunMainLoop();
174 return result; 160 return result;
175 } 161 }
176 bool DeleteView(TransportViewId node_id) { 162 bool DeleteView(TransportViewId view_id) {
177 changes_.clear(); 163 changes_.clear();
178 bool result = false; 164 bool result = false;
179 background_loop_->PostTask( 165 view_manager_->DeleteView(view_id,
180 FROM_HERE, 166 base::Bind(&ViewManagerProxy::GotResult,
181 base::Bind(&ViewManagerProxy::DeleteViewOnBackgroundThread, 167 base::Unretained(this), &result));
182 base::Unretained(this), node_id, &result));
183 RunMainLoop(); 168 RunMainLoop();
184 return result; 169 return result;
185 } 170 }
186 bool SetNodeBounds(TransportNodeId node_id, const gfx::Rect& rect) { 171 bool SetNodeBounds(TransportNodeId node_id, const gfx::Rect& bounds) {
172 changes_.clear();
187 bool result = false; 173 bool result = false;
188 background_loop_->PostTask( 174 view_manager_->SetNodeBounds(node_id, Rect::From(bounds),
189 FROM_HERE, 175 base::Bind(&ViewManagerProxy::GotResult,
190 base::Bind(&ViewManagerProxy::SetNodeBoundsOnBackgroundThread, 176 base::Unretained(this), &result));
191 base::Unretained(this), node_id, rect, &result));
192 RunMainLoop(); 177 RunMainLoop();
193 return result; 178 return result;
194 } 179 }
195 180
196 private: 181 private:
197 friend class TestViewManagerClientConnection; 182 friend class TestViewManagerClientConnection;
198 183
199 void set_router(mojo::internal::Router* router) { router_ = router; } 184 void set_router(mojo::internal::Router* router) { router_ = router; }
200 185
201 void set_view_manager(IViewManager* view_manager) { 186 void set_view_manager(IViewManager* view_manager) {
202 view_manager_ = view_manager; 187 view_manager_ = view_manager;
203 } 188 }
204 189
205 void DestroyOnBackgroundThread() {
206 router_->CloseMessagePipe();
207 main_loop_->PostTask(
208 FROM_HERE,
209 base::Bind(&ViewManagerProxy::QuitOnMainThread,
210 base::Unretained(this)));
211 }
212
213 void SetQuitCount(size_t count) {
214 DCHECK_EQ(background_loop_, base::MessageLoop::current());
215 if (tracker_->changes()->size() >= count) {
216 QuitCountReached();
217 return;
218 }
219 quit_count_ = count - tracker_->changes()->size();
220 }
221
222 static void RunMainLoop() { 190 static void RunMainLoop() {
223 DCHECK(!main_run_loop_); 191 DCHECK(!main_run_loop_);
224 main_run_loop_ = new base::RunLoop; 192 main_run_loop_ = new base::RunLoop;
225 main_run_loop_->Run(); 193 main_run_loop_->Run();
226 delete main_run_loop_; 194 delete main_run_loop_;
227 main_run_loop_ = NULL; 195 main_run_loop_ = NULL;
228 } 196 }
229 197
230 void QuitCountReached() { 198 void QuitCountReached() {
231 std::vector<Change> changes; 199 CopyChangesFromTracker();
232 tracker_->changes()->swap(changes);
233 main_loop_->PostTask(
234 FROM_HERE,
235 base::Bind(&ViewManagerProxy::QuitCountReachedOnMain,
236 base::Unretained(this), changes));
237 }
238
239 void QuitCountReachedOnMain(const std::vector<Change>& changes) {
240 changes_ = changes;
241 DCHECK(main_run_loop_);
242 main_run_loop_->Quit(); 200 main_run_loop_->Quit();
243 } 201 }
244 202
203 void CopyChangesFromTracker() {
204 std::vector<Change> changes;
205 tracker_->changes()->swap(changes);
206 changes_.swap(changes);
207 }
208
245 static void SetInstance(ViewManagerProxy* instance) { 209 static void SetInstance(ViewManagerProxy* instance) {
246 DCHECK(!instance_); 210 DCHECK(!instance_);
247 instance_ = instance; 211 instance_ = instance;
248 // Connect() runs its own run loop that is quit when the result is 212 // Connect() runs its own run loop that is quit when the result is
249 // received. Connect() also results in a new instance. If we quit here while 213 // received. Connect() also results in a new instance. If we quit here while
250 // waiting for a Connect() we would prematurely return before we got the 214 // waiting for a Connect() we would prematurely return before we got the
251 // result from Connect(). 215 // result from Connect().
252 if (!in_connect_ && main_run_loop_) 216 if (!in_connect_ && main_run_loop_)
253 main_run_loop_->Quit(); 217 main_run_loop_->Quit();
254 } 218 }
255 219
256 // Callbacks from the various IViewManager functions. 220 // Callbacks from the various IViewManager functions.
257 void GotResultOnBackgroundThread(bool* result_cache, bool result) { 221 void GotResult(bool* result_cache, bool result) {
258 *result_cache = result; 222 *result_cache = result;
259 main_loop_->PostTask(
260 FROM_HERE,
261 base::Bind(&ViewManagerProxy::QuitOnMainThread,
262 base::Unretained(this)));
263 }
264
265 void GotNodeTreeOnBackgroundThread(std::vector<TestNode>* nodes,
266 Array<INodePtr> results) {
267 INodesToTestNodes(results, nodes);
268 main_loop_->PostTask(
269 FROM_HERE,
270 base::Bind(&ViewManagerProxy::QuitOnMainThread,
271 base::Unretained(this)));
272 }
273
274 void QuitOnMainThread() {
275 DCHECK(main_run_loop_); 223 DCHECK(main_run_loop_);
276 main_run_loop_->Quit(); 224 main_run_loop_->Quit();
277 } 225 }
278 226
279 // The following functions correspond to the IViewManager functions. These run 227 void GotNodeTree(std::vector<TestNode>* nodes, Array<INodePtr> results) {
280 // on the background thread. 228 INodesToTestNodes(results, nodes);
281 void CreateNodeOnBackgroundThread(TransportNodeId node_id, bool* result) { 229 DCHECK(main_run_loop_);
282 view_manager_->CreateNode( 230 main_run_loop_->Quit();
283 node_id,
284 base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
285 base::Unretained(this), result));
286 }
287 void AddNodeOnBackgroundThread(TransportNodeId parent,
288 TransportNodeId child,
289 TransportChangeId server_change_id,
290 bool* result) {
291 view_manager_->AddNode(
292 parent, child, server_change_id,
293 base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
294 base::Unretained(this), result));
295 }
296 void RemoveNodeFromParentOnBackgroundThread(
297 TransportNodeId node_id,
298 TransportChangeId server_change_id,
299 bool* result) {
300 view_manager_->RemoveNodeFromParent(node_id, server_change_id,
301 base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
302 base::Unretained(this), result));
303 }
304 void SetViewOnBackgroundThread(TransportNodeId node_id,
305 TransportViewId view_id,
306 bool* result) {
307 view_manager_->SetView(node_id, view_id,
308 base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
309 base::Unretained(this), result));
310 }
311 void CreateViewOnBackgroundThread(TransportViewId view_id, bool* result) {
312 view_manager_->CreateView(view_id,
313 base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
314 base::Unretained(this), result));
315 }
316 void GetNodeTreeOnBackgroundThread(TransportNodeId node_id,
317 std::vector<TestNode>* nodes) {
318 view_manager_->GetNodeTree(node_id,
319 base::Bind(&ViewManagerProxy::GotNodeTreeOnBackgroundThread,
320 base::Unretained(this), nodes));
321 }
322 void ConnectOnBackgroundThread(const std::vector<TransportNodeId>& ids,
323 bool* result) {
324 view_manager_->Connect(kTestServiceURL,
325 Array<TransportNodeId>::From(ids),
326 base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
327 base::Unretained(this), result));
328 }
329 void DeleteNodeOnBackgroundThread(TransportNodeId node_id, bool* result) {
330 view_manager_->DeleteNode(node_id,
331 base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
332 base::Unretained(this), result));
333 }
334 void DeleteViewOnBackgroundThread(TransportViewId view_id, bool* result) {
335 view_manager_->DeleteView(view_id,
336 base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
337 base::Unretained(this), result));
338 }
339 void SetNodeBoundsOnBackgroundThread(TransportNodeId node_id,
340 const gfx::Rect& bounds,
341 bool* result) {
342 view_manager_->SetNodeBounds(node_id, Rect::From(bounds),
343 base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
344 base::Unretained(this), result));
345 } 231 }
346 232
347 // TestChangeTracker::Delegate: 233 // TestChangeTracker::Delegate:
348 virtual void OnChangeAdded() OVERRIDE { 234 virtual void OnChangeAdded() OVERRIDE {
349 if (quit_count_ > 0 && --quit_count_ == 0) 235 if (quit_count_ > 0 && --quit_count_ == 0)
350 QuitCountReached(); 236 QuitCountReached();
351 } 237 }
352 238
353 static ViewManagerProxy* instance_; 239 static ViewManagerProxy* instance_;
354 static base::RunLoop* main_run_loop_; 240 static base::RunLoop* main_run_loop_;
355 static bool in_connect_; 241 static bool in_connect_;
356 242
357 TestChangeTracker* tracker_; 243 TestChangeTracker* tracker_;
358 244
359 // MessageLoop of the test. 245 // MessageLoop of the test.
360 base::MessageLoop* main_loop_; 246 base::MessageLoop* main_loop_;
361 247
362 // MessageLoop ViewManagerProxy lives on.
363 base::MessageLoop* background_loop_;
364
365 IViewManager* view_manager_; 248 IViewManager* view_manager_;
366 249
367 // Number of changes we're waiting on until we quit the current loop. 250 // Number of changes we're waiting on until we quit the current loop.
368 size_t quit_count_; 251 size_t quit_count_;
369 252
370 std::vector<Change> changes_; 253 std::vector<Change> changes_;
371 254
372 mojo::internal::Router* router_; 255 mojo::internal::Router* router_;
373 256
374 DISALLOW_COPY_AND_ASSIGN(ViewManagerProxy); 257 DISALLOW_COPY_AND_ASSIGN(ViewManagerProxy);
375 }; 258 };
376 259
377 // static 260 // static
378 ViewManagerProxy* ViewManagerProxy::instance_ = NULL; 261 ViewManagerProxy* ViewManagerProxy::instance_ = NULL;
379 262
380 // static 263 // static
381 base::RunLoop* ViewManagerProxy::main_run_loop_ = NULL; 264 base::RunLoop* ViewManagerProxy::main_run_loop_ = NULL;
382 265
383 // static 266 // static
384 bool ViewManagerProxy::in_connect_ = false; 267 bool ViewManagerProxy::in_connect_ = false;
385 268
386 class TestViewManagerClientConnection 269 class TestViewManagerClientConnection
387 : public InterfaceImpl<IViewManagerClient> { 270 : public InterfaceImpl<IViewManagerClient> {
388 public: 271 public:
389 explicit TestViewManagerClientConnection(base::MessageLoop* loop) 272 TestViewManagerClientConnection() : connection_(&tracker_) {
390 : connection_(&tracker_, loop) {
391 tracker_.set_delegate(&connection_); 273 tracker_.set_delegate(&connection_);
392 } 274 }
393 275
394 // InterfaceImp: 276 // InterfaceImp:
395 virtual void OnConnectionEstablished() OVERRIDE { 277 virtual void OnConnectionEstablished() OVERRIDE {
396 connection_.set_router(internal_state()->router()); 278 connection_.set_router(internal_state()->router());
397 connection_.set_view_manager(client()); 279 connection_.set_view_manager(client());
398 } 280 }
399 281
400 // IViewMangerClient: 282 // IViewMangerClient:
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 TestChangeTracker tracker_; 322 TestChangeTracker tracker_;
441 ViewManagerProxy connection_; 323 ViewManagerProxy connection_;
442 324
443 DISALLOW_COPY_AND_ASSIGN(TestViewManagerClientConnection); 325 DISALLOW_COPY_AND_ASSIGN(TestViewManagerClientConnection);
444 }; 326 };
445 327
446 // Used with IViewManager::Connect(). Creates a TestViewManagerClientConnection, 328 // Used with IViewManager::Connect(). Creates a TestViewManagerClientConnection,
447 // which creates and owns the ViewManagerProxy. 329 // which creates and owns the ViewManagerProxy.
448 class ConnectServiceLoader : public ServiceLoader { 330 class ConnectServiceLoader : public ServiceLoader {
449 public: 331 public:
450 ConnectServiceLoader() : initial_loop_(base::MessageLoop::current()) { 332 ConnectServiceLoader() {}
451 } 333 virtual ~ConnectServiceLoader() {}
452 virtual ~ConnectServiceLoader() {
453 }
454 334
455 // ServiceLoader: 335 // ServiceLoader:
456 virtual void LoadService(ServiceManager* manager, 336 virtual void LoadService(ServiceManager* manager,
457 const GURL& url, 337 const GURL& url,
458 ScopedMessagePipeHandle shell_handle) OVERRIDE { 338 ScopedMessagePipeHandle shell_handle) OVERRIDE {
459 scoped_ptr<Application> app(new Application(shell_handle.Pass())); 339 scoped_ptr<Application> app(new Application(shell_handle.Pass()));
460 app->AddService<TestViewManagerClientConnection>(initial_loop_); 340 app->AddService<TestViewManagerClientConnection>();
461 apps_.push_back(app.release()); 341 apps_.push_back(app.release());
462 } 342 }
463 virtual void OnServiceError(ServiceManager* manager, 343 virtual void OnServiceError(ServiceManager* manager,
464 const GURL& url) OVERRIDE { 344 const GURL& url) OVERRIDE {
465 } 345 }
466 346
467 private: 347 private:
468 base::MessageLoop* initial_loop_;
469 ScopedVector<Application> apps_; 348 ScopedVector<Application> apps_;
470 349
471 DISALLOW_COPY_AND_ASSIGN(ConnectServiceLoader); 350 DISALLOW_COPY_AND_ASSIGN(ConnectServiceLoader);
472 }; 351 };
473 352
474 // Creates an id used for transport from the specified parameters. 353 // Creates an id used for transport from the specified parameters.
475 TransportNodeId BuildNodeId(TransportConnectionId connection_id, 354 TransportNodeId BuildNodeId(TransportConnectionId connection_id,
476 TransportConnectionSpecificNodeId node_id) { 355 TransportConnectionSpecificNodeId node_id) {
477 return (connection_id << 16) | node_id; 356 return (connection_id << 16) | node_id;
478 } 357 }
(...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after
1321 // TODO(sky): add coverage of test that destroys connections and ensures other 1200 // TODO(sky): add coverage of test that destroys connections and ensures other
1322 // connections get deletion notification (or advanced server id). 1201 // connections get deletion notification (or advanced server id).
1323 1202
1324 // TODO(sky): need to better track changes to initial connection. For example, 1203 // TODO(sky): need to better track changes to initial connection. For example,
1325 // that SetBounsdNodes/AddNode and the like don't result in messages to the 1204 // that SetBounsdNodes/AddNode and the like don't result in messages to the
1326 // originating connection. 1205 // originating connection.
1327 1206
1328 } // namespace service 1207 } // namespace service
1329 } // namespace view_manager 1208 } // namespace view_manager
1330 } // namespace mojo 1209 } // namespace mojo
OLDNEW
« no previous file with comments | « no previous file | mojo/shell/shell_test_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698