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

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

Issue 320193002: Consolidates view_manager typedefs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: formatting 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 | « mojo/services/view_manager/view_manager_connection.cc ('k') | no next file » | 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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 78
79 const std::vector<Change>& changes() const { return changes_; } 79 const std::vector<Change>& changes() const { return changes_; }
80 80
81 // Destroys the connection, blocking until done. 81 // Destroys the connection, blocking until done.
82 void Destroy() { 82 void Destroy() {
83 router_->CloseMessagePipe(); 83 router_->CloseMessagePipe();
84 } 84 }
85 85
86 // The following functions are cover methods for IViewManager. They block 86 // The following functions are cover methods for IViewManager. They block
87 // until the result is received. 87 // until the result is received.
88 bool CreateNode(TransportNodeId node_id) { 88 bool CreateNode(Id node_id) {
89 changes_.clear(); 89 changes_.clear();
90 bool result = false; 90 bool result = false;
91 view_manager_->CreateNode(node_id, 91 view_manager_->CreateNode(node_id,
92 base::Bind(&ViewManagerProxy::GotResult, 92 base::Bind(&ViewManagerProxy::GotResult,
93 base::Unretained(this), &result)); 93 base::Unretained(this), &result));
94 RunMainLoop(); 94 RunMainLoop();
95 return result; 95 return result;
96 } 96 }
97 bool AddNode(TransportNodeId parent, 97 bool AddNode(Id parent, Id child, Id server_change_id) {
98 TransportNodeId child,
99 TransportChangeId server_change_id) {
100 changes_.clear(); 98 changes_.clear();
101 bool result = false; 99 bool result = false;
102 view_manager_->AddNode(parent, child, server_change_id, 100 view_manager_->AddNode(parent, child, server_change_id,
103 base::Bind(&ViewManagerProxy::GotResult, 101 base::Bind(&ViewManagerProxy::GotResult,
104 base::Unretained(this), &result)); 102 base::Unretained(this), &result));
105 RunMainLoop(); 103 RunMainLoop();
106 return result; 104 return result;
107 } 105 }
108 bool RemoveNodeFromParent(TransportNodeId node_id, 106 bool RemoveNodeFromParent(Id node_id, Id server_change_id) {
109 TransportChangeId server_change_id) {
110 changes_.clear(); 107 changes_.clear();
111 bool result = false; 108 bool result = false;
112 view_manager_->RemoveNodeFromParent(node_id, server_change_id, 109 view_manager_->RemoveNodeFromParent(node_id, server_change_id,
113 base::Bind(&ViewManagerProxy::GotResult, 110 base::Bind(&ViewManagerProxy::GotResult,
114 base::Unretained(this), &result)); 111 base::Unretained(this), &result));
115 RunMainLoop(); 112 RunMainLoop();
116 return result; 113 return result;
117 } 114 }
118 bool SetView(TransportNodeId node_id, TransportViewId view_id) { 115 bool SetView(Id node_id, Id view_id) {
119 changes_.clear(); 116 changes_.clear();
120 bool result = false; 117 bool result = false;
121 view_manager_->SetView(node_id, view_id, 118 view_manager_->SetView(node_id, view_id,
122 base::Bind(&ViewManagerProxy::GotResult, 119 base::Bind(&ViewManagerProxy::GotResult,
123 base::Unretained(this), &result)); 120 base::Unretained(this), &result));
124 RunMainLoop(); 121 RunMainLoop();
125 return result; 122 return result;
126 } 123 }
127 bool CreateView(TransportViewId view_id) { 124 bool CreateView(Id view_id) {
128 changes_.clear(); 125 changes_.clear();
129 bool result = false; 126 bool result = false;
130 view_manager_->CreateView(view_id, 127 view_manager_->CreateView(view_id,
131 base::Bind(&ViewManagerProxy::GotResult, 128 base::Bind(&ViewManagerProxy::GotResult,
132 base::Unretained(this), &result)); 129 base::Unretained(this), &result));
133 RunMainLoop(); 130 RunMainLoop();
134 return result; 131 return result;
135 } 132 }
136 void GetNodeTree(TransportNodeId node_id, std::vector<TestNode>* nodes) { 133 void GetNodeTree(Id node_id, std::vector<TestNode>* nodes) {
137 changes_.clear(); 134 changes_.clear();
138 view_manager_->GetNodeTree(node_id, 135 view_manager_->GetNodeTree(node_id,
139 base::Bind(&ViewManagerProxy::GotNodeTree, 136 base::Bind(&ViewManagerProxy::GotNodeTree,
140 base::Unretained(this), nodes)); 137 base::Unretained(this), nodes));
141 RunMainLoop(); 138 RunMainLoop();
142 } 139 }
143 bool Connect(const std::vector<TransportNodeId>& nodes) { 140 bool Connect(const std::vector<Id>& nodes) {
144 changes_.clear(); 141 changes_.clear();
145 base::AutoReset<bool> auto_reset(&in_connect_, true); 142 base::AutoReset<bool> auto_reset(&in_connect_, true);
146 bool result = false; 143 bool result = false;
147 view_manager_->Connect(kTestServiceURL, Array<TransportNodeId>::From(nodes), 144 view_manager_->Connect(kTestServiceURL, Array<Id>::From(nodes),
148 base::Bind(&ViewManagerProxy::GotResult, 145 base::Bind(&ViewManagerProxy::GotResult,
149 base::Unretained(this), &result)); 146 base::Unretained(this), &result));
150 RunMainLoop(); 147 RunMainLoop();
151 return result; 148 return result;
152 } 149 }
153 bool DeleteNode(TransportNodeId node_id) { 150 bool DeleteNode(Id node_id) {
154 changes_.clear(); 151 changes_.clear();
155 bool result = false; 152 bool result = false;
156 view_manager_->DeleteNode(node_id, 153 view_manager_->DeleteNode(node_id,
157 base::Bind(&ViewManagerProxy::GotResult, 154 base::Bind(&ViewManagerProxy::GotResult,
158 base::Unretained(this), &result)); 155 base::Unretained(this), &result));
159 RunMainLoop(); 156 RunMainLoop();
160 return result; 157 return result;
161 } 158 }
162 bool DeleteView(TransportViewId view_id) { 159 bool DeleteView(Id view_id) {
163 changes_.clear(); 160 changes_.clear();
164 bool result = false; 161 bool result = false;
165 view_manager_->DeleteView(view_id, 162 view_manager_->DeleteView(view_id,
166 base::Bind(&ViewManagerProxy::GotResult, 163 base::Bind(&ViewManagerProxy::GotResult,
167 base::Unretained(this), &result)); 164 base::Unretained(this), &result));
168 RunMainLoop(); 165 RunMainLoop();
169 return result; 166 return result;
170 } 167 }
171 bool SetNodeBounds(TransportNodeId node_id, const gfx::Rect& bounds) { 168 bool SetNodeBounds(Id node_id, const gfx::Rect& bounds) {
172 changes_.clear(); 169 changes_.clear();
173 bool result = false; 170 bool result = false;
174 view_manager_->SetNodeBounds(node_id, Rect::From(bounds), 171 view_manager_->SetNodeBounds(node_id, Rect::From(bounds),
175 base::Bind(&ViewManagerProxy::GotResult, 172 base::Bind(&ViewManagerProxy::GotResult,
176 base::Unretained(this), &result)); 173 base::Unretained(this), &result));
177 RunMainLoop(); 174 RunMainLoop();
178 return result; 175 return result;
179 } 176 }
180 177
181 private: 178 private:
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 } 271 }
275 272
276 // InterfaceImp: 273 // InterfaceImp:
277 virtual void OnConnectionEstablished() OVERRIDE { 274 virtual void OnConnectionEstablished() OVERRIDE {
278 connection_.set_router(internal_state()->router()); 275 connection_.set_router(internal_state()->router());
279 connection_.set_view_manager(client()); 276 connection_.set_view_manager(client());
280 } 277 }
281 278
282 // IViewMangerClient: 279 // IViewMangerClient:
283 virtual void OnViewManagerConnectionEstablished( 280 virtual void OnViewManagerConnectionEstablished(
284 TransportConnectionId connection_id, 281 ConnectionSpecificId connection_id,
285 TransportChangeId next_server_change_id, 282 Id next_server_change_id,
286 Array<INodePtr> nodes) OVERRIDE { 283 Array<INodePtr> nodes) OVERRIDE {
287 tracker_.OnViewManagerConnectionEstablished( 284 tracker_.OnViewManagerConnectionEstablished(
288 connection_id, next_server_change_id, nodes.Pass()); 285 connection_id, next_server_change_id, nodes.Pass());
289 } 286 }
290 virtual void OnRootsAdded(Array<INodePtr> nodes) OVERRIDE { 287 virtual void OnRootsAdded(Array<INodePtr> nodes) OVERRIDE {
291 tracker_.OnRootsAdded(nodes.Pass()); 288 tracker_.OnRootsAdded(nodes.Pass());
292 } 289 }
293 virtual void OnServerChangeIdAdvanced( 290 virtual void OnServerChangeIdAdvanced(
294 TransportChangeId next_server_change_id) OVERRIDE { 291 Id next_server_change_id) OVERRIDE {
295 tracker_.OnServerChangeIdAdvanced(next_server_change_id); 292 tracker_.OnServerChangeIdAdvanced(next_server_change_id);
296 } 293 }
297 virtual void OnNodeBoundsChanged(TransportNodeId node_id, 294 virtual void OnNodeBoundsChanged(Id node_id,
298 RectPtr old_bounds, 295 RectPtr old_bounds,
299 RectPtr new_bounds) OVERRIDE { 296 RectPtr new_bounds) OVERRIDE {
300 tracker_.OnNodeBoundsChanged(node_id, old_bounds.Pass(), new_bounds.Pass()); 297 tracker_.OnNodeBoundsChanged(node_id, old_bounds.Pass(), new_bounds.Pass());
301 } 298 }
302 virtual void OnNodeHierarchyChanged( 299 virtual void OnNodeHierarchyChanged(Id node,
303 TransportNodeId node, 300 Id new_parent,
304 TransportNodeId new_parent, 301 Id old_parent,
305 TransportNodeId old_parent, 302 Id server_change_id,
306 TransportChangeId server_change_id, 303 Array<INodePtr> nodes) OVERRIDE {
307 Array<INodePtr> nodes) OVERRIDE {
308 tracker_.OnNodeHierarchyChanged(node, new_parent, old_parent, 304 tracker_.OnNodeHierarchyChanged(node, new_parent, old_parent,
309 server_change_id, nodes.Pass()); 305 server_change_id, nodes.Pass());
310 } 306 }
311 virtual void OnNodeDeleted(TransportNodeId node, 307 virtual void OnNodeDeleted(Id node, Id server_change_id) OVERRIDE {
312 TransportChangeId server_change_id) OVERRIDE {
313 tracker_.OnNodeDeleted(node, server_change_id); 308 tracker_.OnNodeDeleted(node, server_change_id);
314 } 309 }
315 virtual void OnViewDeleted(TransportViewId view) OVERRIDE { 310 virtual void OnViewDeleted(Id view) OVERRIDE {
316 tracker_.OnViewDeleted(view); 311 tracker_.OnViewDeleted(view);
317 } 312 }
318 virtual void OnNodeViewReplaced(TransportNodeId node, 313 virtual void OnNodeViewReplaced(Id node,
319 TransportViewId new_view_id, 314 Id new_view_id,
320 TransportViewId old_view_id) OVERRIDE { 315 Id old_view_id) OVERRIDE {
321 tracker_.OnNodeViewReplaced(node, new_view_id, old_view_id); 316 tracker_.OnNodeViewReplaced(node, new_view_id, old_view_id);
322 } 317 }
323 virtual void OnViewInputEvent(TransportViewId view_id, 318 virtual void OnViewInputEvent(Id view_id,
324 EventPtr event, 319 EventPtr event,
325 const Callback<void()>& callback) OVERRIDE { 320 const Callback<void()>& callback) OVERRIDE {
326 tracker_.OnViewInputEvent(view_id, event.Pass()); 321 tracker_.OnViewInputEvent(view_id, event.Pass());
327 } 322 }
328 323
329 private: 324 private:
330 TestChangeTracker tracker_; 325 TestChangeTracker tracker_;
331 ViewManagerProxy connection_; 326 ViewManagerProxy connection_;
332 327
333 DISALLOW_COPY_AND_ASSIGN(TestViewManagerClientConnection); 328 DISALLOW_COPY_AND_ASSIGN(TestViewManagerClientConnection);
(...skipping 18 matching lines...) Expand all
352 const GURL& url) OVERRIDE { 347 const GURL& url) OVERRIDE {
353 } 348 }
354 349
355 private: 350 private:
356 ScopedVector<Application> apps_; 351 ScopedVector<Application> apps_;
357 352
358 DISALLOW_COPY_AND_ASSIGN(ConnectServiceLoader); 353 DISALLOW_COPY_AND_ASSIGN(ConnectServiceLoader);
359 }; 354 };
360 355
361 // Creates an id used for transport from the specified parameters. 356 // Creates an id used for transport from the specified parameters.
362 TransportNodeId BuildNodeId(TransportConnectionId connection_id, 357 Id BuildNodeId(ConnectionSpecificId connection_id,
363 TransportConnectionSpecificNodeId node_id) { 358 ConnectionSpecificId node_id) {
364 return (connection_id << 16) | node_id; 359 return (connection_id << 16) | node_id;
365 } 360 }
366 361
367 // Creates an id used for transport from the specified parameters. 362 // Creates an id used for transport from the specified parameters.
368 TransportViewId BuildViewId(TransportConnectionId connection_id, 363 Id BuildViewId(ConnectionSpecificId connection_id,
369 TransportConnectionSpecificViewId view_id) { 364 ConnectionSpecificId view_id) {
370 return (connection_id << 16) | view_id; 365 return (connection_id << 16) | view_id;
371 } 366 }
372 367
373 // Callback from ViewManagerInitConnect(). |result| is the result of the 368 // Callback from ViewManagerInitConnect(). |result| is the result of the
374 // Connect() call and |run_loop| the nested RunLoop. 369 // Connect() call and |run_loop| the nested RunLoop.
375 void ViewManagerInitConnectCallback(bool* result_cache, 370 void ViewManagerInitConnectCallback(bool* result_cache,
376 base::RunLoop* run_loop, 371 base::RunLoop* run_loop,
377 bool result) { 372 bool result) {
378 *result_cache = result; 373 *result_cache = result;
379 run_loop->Quit(); 374 run_loop->Quit();
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 } 414 }
420 415
421 virtual void TearDown() OVERRIDE { 416 virtual void TearDown() OVERRIDE {
422 if (connection2_) 417 if (connection2_)
423 connection2_->Destroy(); 418 connection2_->Destroy();
424 if (connection_) 419 if (connection_)
425 connection_->Destroy(); 420 connection_->Destroy();
426 } 421 }
427 422
428 protected: 423 protected:
429 void EstablishSecondConnectionWithRoots( 424 void EstablishSecondConnectionWithRoots(Id id1, Id id2) {
430 TransportNodeId id1, 425 std::vector<Id> node_ids;
431 TransportNodeId id2) {
432 std::vector<TransportNodeId> node_ids;
433 node_ids.push_back(id1); 426 node_ids.push_back(id1);
434 if (id2 != 0) 427 if (id2 != 0)
435 node_ids.push_back(id2); 428 node_ids.push_back(id2);
436 ASSERT_TRUE(connection_->Connect(node_ids)); 429 ASSERT_TRUE(connection_->Connect(node_ids));
437 connection2_ = ViewManagerProxy::WaitForInstance(); 430 connection2_ = ViewManagerProxy::WaitForInstance();
438 ASSERT_TRUE(connection2_ != NULL); 431 ASSERT_TRUE(connection2_ != NULL);
439 connection2_->DoRunLoopUntilChangesCount(1); 432 connection2_->DoRunLoopUntilChangesCount(1);
440 ASSERT_EQ(1u, connection2_->changes().size()); 433 ASSERT_EQ(1u, connection2_->changes().size());
441 } 434 }
442 435
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 // Verifies client gets a valid id. 467 // Verifies client gets a valid id.
475 TEST_F(ViewManagerConnectionTest, ValidId) { 468 TEST_F(ViewManagerConnectionTest, ValidId) {
476 EXPECT_EQ("OnConnectionEstablished", 469 EXPECT_EQ("OnConnectionEstablished",
477 ChangesToDescription1(connection_->changes())[0]); 470 ChangesToDescription1(connection_->changes())[0]);
478 471
479 // All these tests assume 1 for the client id. The only real assertion here is 472 // All these tests assume 1 for the client id. The only real assertion here is
480 // the client id is not zero, but adding this as rest of code here assumes 1. 473 // the client id is not zero, but adding this as rest of code here assumes 1.
481 EXPECT_EQ(1, connection_->changes()[0].connection_id); 474 EXPECT_EQ(1, connection_->changes()[0].connection_id);
482 475
483 // Change ids start at 1 as well. 476 // Change ids start at 1 as well.
484 EXPECT_EQ(static_cast<TransportChangeId>(1), 477 EXPECT_EQ(static_cast<Id>(1), connection_->changes()[0].change_id);
485 connection_->changes()[0].change_id);
486 } 478 }
487 479
488 // Verifies two clients/connections get different ids. 480 // Verifies two clients/connections get different ids.
489 TEST_F(ViewManagerConnectionTest, TwoClientsGetDifferentConnectionIds) { 481 TEST_F(ViewManagerConnectionTest, TwoClientsGetDifferentConnectionIds) {
490 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); 482 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
491 EXPECT_EQ("OnConnectionEstablished", 483 EXPECT_EQ("OnConnectionEstablished",
492 ChangesToDescription1(connection2_->changes())[0]); 484 ChangesToDescription1(connection2_->changes())[0]);
493 485
494 // It isn't strickly necessary that the second connection gets 2, but these 486 // It isn't strickly necessary that the second connection gets 2, but these
495 // tests are written assuming that is the case. The key thing is the 487 // tests are written assuming that is the case. The key thing is the
496 // connection ids of |connection_| and |connection2_| differ. 488 // connection ids of |connection_| and |connection2_| differ.
497 EXPECT_EQ(2, connection2_->changes()[0].connection_id); 489 EXPECT_EQ(2, connection2_->changes()[0].connection_id);
498 490
499 // Change ids start at 1 as well. 491 // Change ids start at 1 as well.
500 EXPECT_EQ(static_cast<TransportChangeId>(1), 492 EXPECT_EQ(static_cast<Id>(1), connection2_->changes()[0].change_id);
501 connection2_->changes()[0].change_id);
502 } 493 }
503 494
504 // Verifies client gets a valid id. 495 // Verifies client gets a valid id.
505 TEST_F(ViewManagerConnectionTest, CreateNode) { 496 TEST_F(ViewManagerConnectionTest, CreateNode) {
506 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); 497 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
507 EXPECT_TRUE(connection_->changes().empty()); 498 EXPECT_TRUE(connection_->changes().empty());
508 499
509 // Can't create a node with the same id. 500 // Can't create a node with the same id.
510 ASSERT_FALSE(connection_->CreateNode(BuildNodeId(1, 1))); 501 ASSERT_FALSE(connection_->CreateNode(BuildNodeId(1, 1)));
511 EXPECT_TRUE(connection_->changes().empty()); 502 EXPECT_TRUE(connection_->changes().empty());
(...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after
1206 } 1197 }
1207 1198
1208 TEST_F(ViewManagerConnectionTest, ConnectTwice) { 1199 TEST_F(ViewManagerConnectionTest, ConnectTwice) {
1209 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); 1200 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
1210 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 1201 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
1211 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); 1202 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
1212 1203
1213 // Try to connect again to 1,1, this should fail as already connected to that 1204 // Try to connect again to 1,1, this should fail as already connected to that
1214 // root. 1205 // root.
1215 { 1206 {
1216 std::vector<TransportNodeId> node_ids; 1207 std::vector<Id> node_ids;
1217 node_ids.push_back(BuildNodeId(1, 1)); 1208 node_ids.push_back(BuildNodeId(1, 1));
1218 ASSERT_FALSE(connection_->Connect(node_ids)); 1209 ASSERT_FALSE(connection_->Connect(node_ids));
1219 } 1210 }
1220 1211
1221 // Connecting to 1,2 should succeed and end up in connection2. 1212 // Connecting to 1,2 should succeed and end up in connection2.
1222 { 1213 {
1223 std::vector<TransportNodeId> node_ids; 1214 std::vector<Id> node_ids;
1224 node_ids.push_back(BuildNodeId(1, 2)); 1215 node_ids.push_back(BuildNodeId(1, 2));
1225 ASSERT_TRUE(connection_->Connect(node_ids)); 1216 ASSERT_TRUE(connection_->Connect(node_ids));
1226 connection2_->DoRunLoopUntilChangesCount(1); 1217 connection2_->DoRunLoopUntilChangesCount(1);
1227 const Changes changes(ChangesToDescription1(connection2_->changes())); 1218 const Changes changes(ChangesToDescription1(connection2_->changes()));
1228 ASSERT_EQ(1u, changes.size()); 1219 ASSERT_EQ(1u, changes.size());
1229 EXPECT_EQ("OnRootsAdded", changes[0]); 1220 EXPECT_EQ("OnRootsAdded", changes[0]);
1230 EXPECT_EQ("[node=1,2 parent=null view=null]", 1221 EXPECT_EQ("[node=1,2 parent=null view=null]",
1231 ChangeNodeDescription(connection2_->changes())); 1222 ChangeNodeDescription(connection2_->changes()));
1232 } 1223 }
1233 } 1224 }
1234 1225
1235 // TODO(sky): add coverage of test that destroys connections and ensures other 1226 // TODO(sky): add coverage of test that destroys connections and ensures other
1236 // connections get deletion notification (or advanced server id). 1227 // connections get deletion notification (or advanced server id).
1237 1228
1238 // TODO(sky): need to better track changes to initial connection. For example, 1229 // TODO(sky): need to better track changes to initial connection. For example,
1239 // that SetBounsdNodes/AddNode and the like don't result in messages to the 1230 // that SetBounsdNodes/AddNode and the like don't result in messages to the
1240 // originating connection. 1231 // originating connection.
1241 1232
1242 } // namespace service 1233 } // namespace service
1243 } // namespace view_manager 1234 } // namespace view_manager
1244 } // namespace mojo 1235 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/services/view_manager/view_manager_connection.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698