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

Side by Side Diff: mojo/services/public/cpp/view_manager/tests/view_manager_unittest.cc

Issue 460863002: Rename Node to View in the View Manager mojom & client lib. Service TBD. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 4 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
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/services/public/cpp/view_manager/view_manager.h" 5 #include "mojo/services/public/cpp/view_manager/view_manager.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "mojo/application_manager/application_manager.h" 10 #include "mojo/application_manager/application_manager.h"
11 #include "mojo/public/cpp/application/application_connection.h" 11 #include "mojo/public/cpp/application/application_connection.h"
12 #include "mojo/public/cpp/application/application_delegate.h" 12 #include "mojo/public/cpp/application/application_delegate.h"
13 #include "mojo/public/cpp/application/application_impl.h" 13 #include "mojo/public/cpp/application/application_impl.h"
14 #include "mojo/public/cpp/application/service_provider_impl.h" 14 #include "mojo/public/cpp/application/service_provider_impl.h"
15 #include "mojo/public/interfaces/application/service_provider.mojom.h" 15 #include "mojo/public/interfaces/application/service_provider.mojom.h"
16 #include "mojo/services/public/cpp/view_manager/lib/node_private.h"
17 #include "mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.h" 16 #include "mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.h"
18 #include "mojo/services/public/cpp/view_manager/node_observer.h" 17 #include "mojo/services/public/cpp/view_manager/lib/view_private.h"
19 #include "mojo/services/public/cpp/view_manager/util.h" 18 #include "mojo/services/public/cpp/view_manager/util.h"
20 #include "mojo/services/public/cpp/view_manager/view_manager_client_factory.h" 19 #include "mojo/services/public/cpp/view_manager/view_manager_client_factory.h"
21 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" 20 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h"
21 #include "mojo/services/public/cpp/view_manager/view_observer.h"
22 #include "mojo/shell/shell_test_helper.h" 22 #include "mojo/shell/shell_test_helper.h"
23 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
24 24
25 namespace mojo { 25 namespace mojo {
26 namespace { 26 namespace {
27 27
28 const char kWindowManagerURL[] = "mojo:window_manager"; 28 const char kWindowManagerURL[] = "mojo:window_manager";
29 const char kEmbeddedApp1URL[] = "mojo:embedded_app_1"; 29 const char kEmbeddedApp1URL[] = "mojo:embedded_app_1";
30 30
31 base::RunLoop* current_run_loop = NULL; 31 base::RunLoop* current_run_loop = NULL;
32 32
33 void DoRunLoop() { 33 void DoRunLoop() {
34 base::RunLoop run_loop; 34 base::RunLoop run_loop;
35 current_run_loop = &run_loop; 35 current_run_loop = &run_loop;
36 current_run_loop->Run(); 36 current_run_loop->Run();
37 current_run_loop = NULL; 37 current_run_loop = NULL;
38 } 38 }
39 39
40 void QuitRunLoop() { 40 void QuitRunLoop() {
41 current_run_loop->Quit(); 41 current_run_loop->Quit();
42 } 42 }
43 43
44 class ConnectApplicationLoader : public ApplicationLoader, 44 class ConnectApplicationLoader : public ApplicationLoader,
45 public ApplicationDelegate, 45 public ApplicationDelegate,
46 public ViewManagerDelegate { 46 public ViewManagerDelegate {
47 public: 47 public:
48 typedef base::Callback<void(ViewManager*, Node*)> LoadedCallback; 48 typedef base::Callback<void(ViewManager*, View*)> LoadedCallback;
49 49
50 explicit ConnectApplicationLoader(const LoadedCallback& callback) 50 explicit ConnectApplicationLoader(const LoadedCallback& callback)
51 : callback_(callback), view_manager_client_factory_(this) {} 51 : callback_(callback), view_manager_client_factory_(this) {}
52 virtual ~ConnectApplicationLoader() {} 52 virtual ~ConnectApplicationLoader() {}
53 53
54 private: 54 private:
55 // Overridden from ApplicationLoader: 55 // Overridden from ApplicationLoader:
56 virtual void Load(ApplicationManager* manager, 56 virtual void Load(ApplicationManager* manager,
57 const GURL& url, 57 const GURL& url,
58 scoped_refptr<LoadCallbacks> callbacks) OVERRIDE { 58 scoped_refptr<LoadCallbacks> callbacks) OVERRIDE {
59 ScopedMessagePipeHandle shell_handle = callbacks->RegisterApplication(); 59 ScopedMessagePipeHandle shell_handle = callbacks->RegisterApplication();
60 if (!shell_handle.is_valid()) 60 if (!shell_handle.is_valid())
61 return; 61 return;
62 scoped_ptr<ApplicationImpl> app(new ApplicationImpl(this, 62 scoped_ptr<ApplicationImpl> app(new ApplicationImpl(this,
63 shell_handle.Pass())); 63 shell_handle.Pass()));
64 apps_.push_back(app.release()); 64 apps_.push_back(app.release());
65 } 65 }
66 66
67 virtual void OnServiceError(ApplicationManager* manager, 67 virtual void OnServiceError(ApplicationManager* manager,
68 const GURL& url) OVERRIDE {} 68 const GURL& url) OVERRIDE {}
69 69
70 virtual bool ConfigureIncomingConnection(ApplicationConnection* connection) 70 virtual bool ConfigureIncomingConnection(ApplicationConnection* connection)
71 OVERRIDE { 71 OVERRIDE {
72 connection->AddService(&view_manager_client_factory_); 72 connection->AddService(&view_manager_client_factory_);
73 return true; 73 return true;
74 } 74 }
75 75
76 // Overridden from ViewManagerDelegate: 76 // Overridden from ViewManagerDelegate:
77 virtual void OnEmbed(ViewManager* view_manager, 77 virtual void OnEmbed(ViewManager* view_manager,
78 Node* root, 78 View* root,
79 ServiceProviderImpl* exported_services, 79 ServiceProviderImpl* exported_services,
80 scoped_ptr<ServiceProvider> imported_services) OVERRIDE { 80 scoped_ptr<ServiceProvider> imported_services) OVERRIDE {
81 callback_.Run(view_manager, root); 81 callback_.Run(view_manager, root);
82 } 82 }
83 virtual void OnViewManagerDisconnected(ViewManager* view_manager) OVERRIDE {} 83 virtual void OnViewManagerDisconnected(ViewManager* view_manager) OVERRIDE {}
84 84
85 ScopedVector<ApplicationImpl> apps_; 85 ScopedVector<ApplicationImpl> apps_;
86 LoadedCallback callback_; 86 LoadedCallback callback_;
87 ViewManagerClientFactory view_manager_client_factory_; 87 ViewManagerClientFactory view_manager_client_factory_;
88 88
89 DISALLOW_COPY_AND_ASSIGN(ConnectApplicationLoader); 89 DISALLOW_COPY_AND_ASSIGN(ConnectApplicationLoader);
90 }; 90 };
91 91
92 class BoundsChangeObserver : public NodeObserver { 92 class BoundsChangeObserver : public ViewObserver {
93 public: 93 public:
94 explicit BoundsChangeObserver(Node* node) : node_(node) {} 94 explicit BoundsChangeObserver(View* view) : view_(view) {}
95 virtual ~BoundsChangeObserver() {} 95 virtual ~BoundsChangeObserver() {}
96 96
97 private: 97 private:
98 // Overridden from NodeObserver: 98 // Overridden from ViewObserver:
99 virtual void OnNodeBoundsChanged(Node* node, 99 virtual void OnViewBoundsChanged(View* view,
100 const gfx::Rect& old_bounds, 100 const gfx::Rect& old_bounds,
101 const gfx::Rect& new_bounds) OVERRIDE { 101 const gfx::Rect& new_bounds) OVERRIDE {
102 DCHECK_EQ(node, node_); 102 DCHECK_EQ(view, view_);
103 QuitRunLoop(); 103 QuitRunLoop();
104 } 104 }
105 105
106 Node* node_; 106 View* view_;
107 107
108 DISALLOW_COPY_AND_ASSIGN(BoundsChangeObserver); 108 DISALLOW_COPY_AND_ASSIGN(BoundsChangeObserver);
109 }; 109 };
110 110
111 // Wait until the bounds of the supplied node change. 111 // Wait until the bounds of the supplied view change.
112 void WaitForBoundsToChange(Node* node) { 112 void WaitForBoundsToChange(View* view) {
113 BoundsChangeObserver observer(node); 113 BoundsChangeObserver observer(view);
114 node->AddObserver(&observer); 114 view->AddObserver(&observer);
115 DoRunLoop(); 115 DoRunLoop();
116 node->RemoveObserver(&observer); 116 view->RemoveObserver(&observer);
117 } 117 }
118 118
119 // Spins a runloop until the tree beginning at |root| has |tree_size| nodes 119 // Spins a runloop until the tree beginning at |root| has |tree_size| views
120 // (including |root|). 120 // (including |root|).
121 class TreeSizeMatchesObserver : public NodeObserver { 121 class TreeSizeMatchesObserver : public ViewObserver {
122 public: 122 public:
123 TreeSizeMatchesObserver(Node* tree, size_t tree_size) 123 TreeSizeMatchesObserver(View* tree, size_t tree_size)
124 : tree_(tree), 124 : tree_(tree),
125 tree_size_(tree_size) {} 125 tree_size_(tree_size) {}
126 virtual ~TreeSizeMatchesObserver() {} 126 virtual ~TreeSizeMatchesObserver() {}
127 127
128 bool IsTreeCorrectSize() { 128 bool IsTreeCorrectSize() {
129 return CountNodes(tree_) == tree_size_; 129 return CountViews(tree_) == tree_size_;
130 } 130 }
131 131
132 private: 132 private:
133 // Overridden from NodeObserver: 133 // Overridden from ViewObserver:
134 virtual void OnTreeChanged(const TreeChangeParams& params) OVERRIDE { 134 virtual void OnTreeChanged(const TreeChangeParams& params) OVERRIDE {
135 if (IsTreeCorrectSize()) 135 if (IsTreeCorrectSize())
136 QuitRunLoop(); 136 QuitRunLoop();
137 } 137 }
138 138
139 size_t CountNodes(const Node* node) const { 139 size_t CountViews(const View* view) const {
140 size_t count = 1; 140 size_t count = 1;
141 Node::Children::const_iterator it = node->children().begin(); 141 View::Children::const_iterator it = view->children().begin();
142 for (; it != node->children().end(); ++it) 142 for (; it != view->children().end(); ++it)
143 count += CountNodes(*it); 143 count += CountViews(*it);
144 return count; 144 return count;
145 } 145 }
146 146
147 Node* tree_; 147 View* tree_;
148 size_t tree_size_; 148 size_t tree_size_;
149 149
150 DISALLOW_COPY_AND_ASSIGN(TreeSizeMatchesObserver); 150 DISALLOW_COPY_AND_ASSIGN(TreeSizeMatchesObserver);
151 }; 151 };
152 152
153 void WaitForTreeSizeToMatch(Node* node, size_t tree_size) { 153 void WaitForTreeSizeToMatch(View* view, size_t tree_size) {
154 TreeSizeMatchesObserver observer(node, tree_size); 154 TreeSizeMatchesObserver observer(view, tree_size);
155 if (observer.IsTreeCorrectSize()) 155 if (observer.IsTreeCorrectSize())
156 return; 156 return;
157 node->AddObserver(&observer); 157 view->AddObserver(&observer);
158 DoRunLoop(); 158 DoRunLoop();
159 node->RemoveObserver(&observer); 159 view->RemoveObserver(&observer);
160 } 160 }
161 161
162 // Utility class that waits for the destruction of some number of nodes and 162 // Utility class that waits for the destruction of some number of views and
163 // views. 163 // views.
164 class DestructionObserver : public NodeObserver { 164 class DestructionObserver : public ViewObserver {
165 public: 165 public:
166 // |nodes| or |views| can be NULL. 166 // |views| or |views| can be NULL.
167 explicit DestructionObserver(std::set<Id>* nodes) : nodes_(nodes) {} 167 explicit DestructionObserver(std::set<Id>* views) : views_(views) {}
168 168
169 private: 169 private:
170 // Overridden from NodeObserver: 170 // Overridden from ViewObserver:
171 virtual void OnNodeDestroyed(Node* node) OVERRIDE { 171 virtual void OnViewDestroyed(View* view) OVERRIDE {
172 std::set<Id>::iterator it = nodes_->find(node->id()); 172 std::set<Id>::iterator it = views_->find(view->id());
173 if (it != nodes_->end()) 173 if (it != views_->end())
174 nodes_->erase(it); 174 views_->erase(it);
175 if (CanQuit()) 175 if (CanQuit())
176 QuitRunLoop(); 176 QuitRunLoop();
177 } 177 }
178 178
179 bool CanQuit() { 179 bool CanQuit() {
180 return !nodes_ || nodes_->empty(); 180 return !views_ || views_->empty();
181 } 181 }
182 182
183 std::set<Id>* nodes_; 183 std::set<Id>* views_;
184 184
185 DISALLOW_COPY_AND_ASSIGN(DestructionObserver); 185 DISALLOW_COPY_AND_ASSIGN(DestructionObserver);
186 }; 186 };
187 187
188 void WaitForDestruction(ViewManager* view_manager, std::set<Id>* nodes) { 188 void WaitForDestruction(ViewManager* view_manager, std::set<Id>* views) {
189 DestructionObserver observer(nodes); 189 DestructionObserver observer(views);
190 DCHECK(nodes); 190 DCHECK(views);
191 if (nodes) { 191 if (views) {
192 for (std::set<Id>::const_iterator it = nodes->begin(); 192 for (std::set<Id>::const_iterator it = views->begin();
193 it != nodes->end(); ++it) { 193 it != views->end(); ++it) {
194 view_manager->GetNodeById(*it)->AddObserver(&observer); 194 view_manager->GetViewById(*it)->AddObserver(&observer);
195 } 195 }
196 } 196 }
197 DoRunLoop(); 197 DoRunLoop();
198 } 198 }
199 199
200 class OrderChangeObserver : public NodeObserver { 200 class OrderChangeObserver : public ViewObserver {
201 public: 201 public:
202 OrderChangeObserver(Node* node) : node_(node) { 202 OrderChangeObserver(View* view) : view_(view) {
203 node_->AddObserver(this); 203 view_->AddObserver(this);
204 } 204 }
205 virtual ~OrderChangeObserver() { 205 virtual ~OrderChangeObserver() {
206 node_->RemoveObserver(this); 206 view_->RemoveObserver(this);
207 } 207 }
208 208
209 private: 209 private:
210 // Overridden from NodeObserver: 210 // Overridden from ViewObserver:
211 virtual void OnNodeReordered(Node* node, 211 virtual void OnViewReordered(View* view,
212 Node* relative_node, 212 View* relative_view,
213 OrderDirection direction) OVERRIDE { 213 OrderDirection direction) OVERRIDE {
214 DCHECK_EQ(node, node_); 214 DCHECK_EQ(view, view_);
215 QuitRunLoop(); 215 QuitRunLoop();
216 } 216 }
217 217
218 Node* node_; 218 View* view_;
219 219
220 DISALLOW_COPY_AND_ASSIGN(OrderChangeObserver); 220 DISALLOW_COPY_AND_ASSIGN(OrderChangeObserver);
221 }; 221 };
222 222
223 void WaitForOrderChange(ViewManager* view_manager, Node* node) { 223 void WaitForOrderChange(ViewManager* view_manager, View* view) {
224 OrderChangeObserver observer(node); 224 OrderChangeObserver observer(view);
225 DoRunLoop(); 225 DoRunLoop();
226 } 226 }
227 227
228 // Tracks a node's destruction. Query is_valid() for current state. 228 // Tracks a view's destruction. Query is_valid() for current state.
229 class NodeTracker : public NodeObserver { 229 class ViewTracker : public ViewObserver {
230 public: 230 public:
231 explicit NodeTracker(Node* node) : node_(node) { 231 explicit ViewTracker(View* view) : view_(view) {
232 node_->AddObserver(this); 232 view_->AddObserver(this);
233 } 233 }
234 virtual ~NodeTracker() { 234 virtual ~ViewTracker() {
235 if (node_) 235 if (view_)
236 node_->RemoveObserver(this); 236 view_->RemoveObserver(this);
237 } 237 }
238 238
239 bool is_valid() const { return !!node_; } 239 bool is_valid() const { return !!view_; }
240 240
241 private: 241 private:
242 // Overridden from NodeObserver: 242 // Overridden from ViewObserver:
243 virtual void OnNodeDestroyed(Node* node) OVERRIDE { 243 virtual void OnViewDestroyed(View* view) OVERRIDE {
244 DCHECK_EQ(node, node_); 244 DCHECK_EQ(view, view_);
245 node_ = NULL; 245 view_ = NULL;
246 } 246 }
247 247
248 int id_; 248 int id_;
249 Node* node_; 249 View* view_;
250 250
251 DISALLOW_COPY_AND_ASSIGN(NodeTracker); 251 DISALLOW_COPY_AND_ASSIGN(ViewTracker);
252 }; 252 };
253 253
254 } // namespace 254 } // namespace
255 255
256 // ViewManager ----------------------------------------------------------------- 256 // ViewManager -----------------------------------------------------------------
257 257
258 // These tests model synchronization of two peer connections to the view manager 258 // These tests model synchronization of two peer connections to the view manager
259 // service, that are given access to some root node. 259 // service, that are given access to some root view.
260 260
261 class ViewManagerTest : public testing::Test { 261 class ViewManagerTest : public testing::Test {
262 public: 262 public:
263 ViewManagerTest() 263 ViewManagerTest()
264 : connect_loop_(NULL), 264 : connect_loop_(NULL),
265 loaded_view_manager_(NULL), 265 loaded_view_manager_(NULL),
266 window_manager_(NULL), 266 window_manager_(NULL),
267 commit_count_(0) {} 267 commit_count_(0) {}
268 268
269 protected: 269 protected:
270 ViewManager* window_manager() { return window_manager_; } 270 ViewManager* window_manager() { return window_manager_; }
271 271
272 Node* CreateNodeInParent(Node* parent) { 272 View* CreateViewInParent(View* parent) {
273 ViewManager* parent_manager = NodePrivate(parent).view_manager(); 273 ViewManager* parent_manager = ViewPrivate(parent).view_manager();
274 Node* node = Node::Create(parent_manager); 274 View* view = View::Create(parent_manager);
275 parent->AddChild(node); 275 parent->AddChild(view);
276 return node; 276 return view;
277 } 277 }
278 278
279 // Embeds another version of the test app @ node. 279 // Embeds another version of the test app @ view.
280 ViewManager* Embed(ViewManager* view_manager, Node* node) { 280 ViewManager* Embed(ViewManager* view_manager, View* view) {
281 DCHECK_EQ(view_manager, NodePrivate(node).view_manager()); 281 DCHECK_EQ(view_manager, ViewPrivate(view).view_manager());
282 node->Embed(kEmbeddedApp1URL); 282 view->Embed(kEmbeddedApp1URL);
283 RunRunLoop(); 283 RunRunLoop();
284 return GetLoadedViewManager(); 284 return GetLoadedViewManager();
285 } 285 }
286 286
287 ViewManager* GetLoadedViewManager() { 287 ViewManager* GetLoadedViewManager() {
288 ViewManager* view_manager = loaded_view_manager_; 288 ViewManager* view_manager = loaded_view_manager_;
289 loaded_view_manager_ = NULL; 289 loaded_view_manager_ = NULL;
290 return view_manager; 290 return view_manager;
291 } 291 }
292 292
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 BindToProxy(new ServiceProviderImpl, &sp); 325 BindToProxy(new ServiceProviderImpl, &sp);
326 view_manager_init->Embed( 326 view_manager_init->Embed(
327 url, sp.Pass(), 327 url, sp.Pass(),
328 base::Bind(&ViewManagerTest::EmbedRootCallback, base::Unretained(this), 328 base::Bind(&ViewManagerTest::EmbedRootCallback, base::Unretained(this),
329 &result)); 329 &result));
330 RunRunLoop(); 330 RunRunLoop();
331 window_manager_ = GetLoadedViewManager(); 331 window_manager_ = GetLoadedViewManager();
332 return result; 332 return result;
333 } 333 }
334 334
335 void OnViewManagerLoaded(ViewManager* view_manager, Node* root) { 335 void OnViewManagerLoaded(ViewManager* view_manager, View* root) {
336 loaded_view_manager_ = view_manager; 336 loaded_view_manager_ = view_manager;
337 connect_loop_->Quit(); 337 connect_loop_->Quit();
338 } 338 }
339 339
340 void RunRunLoop() { 340 void RunRunLoop() {
341 base::RunLoop run_loop; 341 base::RunLoop run_loop;
342 connect_loop_ = &run_loop; 342 connect_loop_ = &run_loop;
343 connect_loop_->Run(); 343 connect_loop_->Run();
344 connect_loop_ = NULL; 344 connect_loop_ = NULL;
345 } 345 }
346 346
347 base::RunLoop* connect_loop_; 347 base::RunLoop* connect_loop_;
348 shell::ShellTestHelper test_helper_; 348 shell::ShellTestHelper test_helper_;
349 ViewManagerInitServicePtr view_manager_init_; 349 ViewManagerInitServicePtr view_manager_init_;
350 // Used to receive the most recent view manager loaded by an embed action. 350 // Used to receive the most recent view manager loaded by an embed action.
351 ViewManager* loaded_view_manager_; 351 ViewManager* loaded_view_manager_;
352 // The View Manager connection held by the window manager (app running at the 352 // The View Manager connection held by the window manager (app running at the
353 // root node). 353 // root view).
354 ViewManager* window_manager_; 354 ViewManager* window_manager_;
355 int commit_count_; 355 int commit_count_;
356 356
357 DISALLOW_COPY_AND_ASSIGN(ViewManagerTest); 357 DISALLOW_COPY_AND_ASSIGN(ViewManagerTest);
358 }; 358 };
359 359
360 TEST_F(ViewManagerTest, SetUp) {} 360 TEST_F(ViewManagerTest, SetUp) {}
361 361
362 TEST_F(ViewManagerTest, Embed) { 362 TEST_F(ViewManagerTest, Embed) {
363 Node* node = Node::Create(window_manager()); 363 View* view = View::Create(window_manager());
364 window_manager()->GetRoots().front()->AddChild(node); 364 window_manager()->GetRoots().front()->AddChild(view);
365 ViewManager* embedded = Embed(window_manager(), node); 365 ViewManager* embedded = Embed(window_manager(), view);
366 EXPECT_TRUE(NULL != embedded); 366 EXPECT_TRUE(NULL != embedded);
367 367
368 Node* node_in_embedded = embedded->GetRoots().front(); 368 View* view_in_embedded = embedded->GetRoots().front();
369 EXPECT_EQ(node->parent(), window_manager()->GetRoots().front()); 369 EXPECT_EQ(view->parent(), window_manager()->GetRoots().front());
370 EXPECT_EQ(NULL, node_in_embedded->parent()); 370 EXPECT_EQ(NULL, view_in_embedded->parent());
371 } 371 }
372 372
373 // Window manager has two nodes, N1 and N11. Embeds A at N1. A should not see 373 // Window manager has two views, N1 and N11. Embeds A at N1. A should not see
374 // N11. 374 // N11.
375 // TODO(sky): Update client lib to match server. 375 // TODO(sky): Update client lib to match server.
376 TEST_F(ViewManagerTest, DISABLED_EmbeddedDoesntSeeChild) { 376 TEST_F(ViewManagerTest, DISABLED_EmbeddedDoesntSeeChild) {
377 Node* node = Node::Create(window_manager()); 377 View* view = View::Create(window_manager());
378 window_manager()->GetRoots().front()->AddChild(node); 378 window_manager()->GetRoots().front()->AddChild(view);
379 Node* nested = Node::Create(window_manager()); 379 View* nested = View::Create(window_manager());
380 node->AddChild(nested); 380 view->AddChild(nested);
381 381
382 ViewManager* embedded = Embed(window_manager(), node); 382 ViewManager* embedded = Embed(window_manager(), view);
383 EXPECT_EQ(embedded->GetRoots().front()->children().front()->id(), 383 EXPECT_EQ(embedded->GetRoots().front()->children().front()->id(),
384 nested->id()); 384 nested->id());
385 EXPECT_TRUE(embedded->GetRoots().front()->children().empty()); 385 EXPECT_TRUE(embedded->GetRoots().front()->children().empty());
386 EXPECT_TRUE(nested->parent() == NULL); 386 EXPECT_TRUE(nested->parent() == NULL);
387 } 387 }
388 388
389 // http://crbug.com/396300 389 // http://crbug.com/396300
390 TEST_F(ViewManagerTest, DISABLED_ViewManagerDestroyed_CleanupNode) { 390 TEST_F(ViewManagerTest, DISABLED_ViewManagerDestroyed_CleanupView) {
391 Node* node = Node::Create(window_manager()); 391 View* view = View::Create(window_manager());
392 window_manager()->GetRoots().front()->AddChild(node); 392 window_manager()->GetRoots().front()->AddChild(view);
393 ViewManager* embedded = Embed(window_manager(), node); 393 ViewManager* embedded = Embed(window_manager(), view);
394 394
395 Id node_id = node->id(); 395 Id view_id = view->id();
396 396
397 UnloadApplication(GURL(kWindowManagerURL)); 397 UnloadApplication(GURL(kWindowManagerURL));
398 398
399 std::set<Id> nodes; 399 std::set<Id> views;
400 nodes.insert(node_id); 400 views.insert(view_id);
401 WaitForDestruction(embedded, &nodes); 401 WaitForDestruction(embedded, &views);
402 402
403 EXPECT_TRUE(embedded->GetRoots().empty()); 403 EXPECT_TRUE(embedded->GetRoots().empty());
404 } 404 }
405 405
406 // TODO(beng): write a replacement test for the one that once existed here: 406 // TODO(beng): write a replacement test for the one that once existed here:
407 // This test validates the following scenario: 407 // This test validates the following scenario:
408 // - a node originating from one connection 408 // - a view originating from one connection
409 // - a view originating from a second connection 409 // - a view originating from a second connection
410 // + the connection originating the node is destroyed 410 // + the connection originating the view is destroyed
411 // -> the view should still exist (since the second connection is live) but 411 // -> the view should still exist (since the second connection is live) but
412 // should be disconnected from any nodes. 412 // should be disconnected from any views.
413 // http://crbug.com/396300 413 // http://crbug.com/396300
414 // 414 //
415 // TODO(beng): The new test should validate the scenario as described above 415 // TODO(beng): The new test should validate the scenario as described above
416 // except that the second connection still has a valid tree. 416 // except that the second connection still has a valid tree.
417 417
418 // Verifies that bounds changes applied to a node hierarchy in one connection 418 // Verifies that bounds changes applied to a view hierarchy in one connection
419 // are reflected to another. 419 // are reflected to another.
420 TEST_F(ViewManagerTest, SetBounds) { 420 TEST_F(ViewManagerTest, SetBounds) {
421 Node* node = Node::Create(window_manager()); 421 View* view = View::Create(window_manager());
422 window_manager()->GetRoots().front()->AddChild(node); 422 window_manager()->GetRoots().front()->AddChild(view);
423 ViewManager* embedded = Embed(window_manager(), node); 423 ViewManager* embedded = Embed(window_manager(), view);
424 424
425 Node* node_in_embedded = embedded->GetNodeById(node->id()); 425 View* view_in_embedded = embedded->GetViewById(view->id());
426 EXPECT_EQ(node->bounds(), node_in_embedded->bounds()); 426 EXPECT_EQ(view->bounds(), view_in_embedded->bounds());
427 427
428 node->SetBounds(gfx::Rect(100, 100)); 428 view->SetBounds(gfx::Rect(100, 100));
429 EXPECT_NE(node->bounds(), node_in_embedded->bounds()); 429 EXPECT_NE(view->bounds(), view_in_embedded->bounds());
430 WaitForBoundsToChange(node_in_embedded); 430 WaitForBoundsToChange(view_in_embedded);
431 EXPECT_EQ(node->bounds(), node_in_embedded->bounds()); 431 EXPECT_EQ(view->bounds(), view_in_embedded->bounds());
432 } 432 }
433 433
434 // Verifies that bounds changes applied to a node owned by a different 434 // Verifies that bounds changes applied to a view owned by a different
435 // connection are refused. 435 // connection are refused.
436 TEST_F(ViewManagerTest, SetBoundsSecurity) { 436 TEST_F(ViewManagerTest, SetBoundsSecurity) {
437 Node* node = Node::Create(window_manager()); 437 View* view = View::Create(window_manager());
438 window_manager()->GetRoots().front()->AddChild(node); 438 window_manager()->GetRoots().front()->AddChild(view);
439 ViewManager* embedded = Embed(window_manager(), node); 439 ViewManager* embedded = Embed(window_manager(), view);
440 440
441 Node* node_in_embedded = embedded->GetNodeById(node->id()); 441 View* view_in_embedded = embedded->GetViewById(view->id());
442 node->SetBounds(gfx::Rect(800, 600)); 442 view->SetBounds(gfx::Rect(800, 600));
443 WaitForBoundsToChange(node_in_embedded); 443 WaitForBoundsToChange(view_in_embedded);
444 444
445 node_in_embedded->SetBounds(gfx::Rect(1024, 768)); 445 view_in_embedded->SetBounds(gfx::Rect(1024, 768));
446 // Bounds change should have been rejected. 446 // Bounds change should have been rejected.
447 EXPECT_EQ(node->bounds(), node_in_embedded->bounds()); 447 EXPECT_EQ(view->bounds(), view_in_embedded->bounds());
448 } 448 }
449 449
450 // Verifies that a node can only be destroyed by the connection that created it. 450 // Verifies that a view can only be destroyed by the connection that created it.
451 TEST_F(ViewManagerTest, DestroySecurity) { 451 TEST_F(ViewManagerTest, DestroySecurity) {
452 Node* node = Node::Create(window_manager()); 452 View* view = View::Create(window_manager());
453 window_manager()->GetRoots().front()->AddChild(node); 453 window_manager()->GetRoots().front()->AddChild(view);
454 ViewManager* embedded = Embed(window_manager(), node); 454 ViewManager* embedded = Embed(window_manager(), view);
455 455
456 Node* node_in_embedded = embedded->GetNodeById(node->id()); 456 View* view_in_embedded = embedded->GetViewById(view->id());
457 457
458 NodeTracker tracker2(node_in_embedded); 458 ViewTracker tracker2(view_in_embedded);
459 node_in_embedded->Destroy(); 459 view_in_embedded->Destroy();
460 // Node should not have been destroyed. 460 // View should not have been destroyed.
461 EXPECT_TRUE(tracker2.is_valid()); 461 EXPECT_TRUE(tracker2.is_valid());
462 462
463 NodeTracker tracker1(node); 463 ViewTracker tracker1(view);
464 node->Destroy(); 464 view->Destroy();
465 EXPECT_FALSE(tracker1.is_valid()); 465 EXPECT_FALSE(tracker1.is_valid());
466 } 466 }
467 467
468 TEST_F(ViewManagerTest, MultiRoots) { 468 TEST_F(ViewManagerTest, MultiRoots) {
469 Node* node1 = Node::Create(window_manager()); 469 View* view1 = View::Create(window_manager());
470 window_manager()->GetRoots().front()->AddChild(node1); 470 window_manager()->GetRoots().front()->AddChild(view1);
471 Node* node2 = Node::Create(window_manager()); 471 View* view2 = View::Create(window_manager());
472 window_manager()->GetRoots().front()->AddChild(node2); 472 window_manager()->GetRoots().front()->AddChild(view2);
473 ViewManager* embedded1 = Embed(window_manager(), node1); 473 ViewManager* embedded1 = Embed(window_manager(), view1);
474 ViewManager* embedded2 = Embed(window_manager(), node2); 474 ViewManager* embedded2 = Embed(window_manager(), view2);
475 EXPECT_EQ(embedded1, embedded2); 475 EXPECT_EQ(embedded1, embedded2);
476 } 476 }
477 477
478 TEST_F(ViewManagerTest, EmbeddingIdentity) { 478 TEST_F(ViewManagerTest, EmbeddingIdentity) {
479 Node* node = Node::Create(window_manager()); 479 View* view = View::Create(window_manager());
480 window_manager()->GetRoots().front()->AddChild(node); 480 window_manager()->GetRoots().front()->AddChild(view);
481 ViewManager* embedded = Embed(window_manager(), node); 481 ViewManager* embedded = Embed(window_manager(), view);
482 EXPECT_EQ(kWindowManagerURL, embedded->GetEmbedderURL()); 482 EXPECT_EQ(kWindowManagerURL, embedded->GetEmbedderURL());
483 } 483 }
484 484
485 TEST_F(ViewManagerTest, Reorder) { 485 TEST_F(ViewManagerTest, Reorder) {
486 Node* node1 = Node::Create(window_manager()); 486 View* view1 = View::Create(window_manager());
487 window_manager()->GetRoots().front()->AddChild(node1); 487 window_manager()->GetRoots().front()->AddChild(view1);
488 488
489 ViewManager* embedded = Embed(window_manager(), node1); 489 ViewManager* embedded = Embed(window_manager(), view1);
490 490
491 Node* node11 = Node::Create(embedded); 491 View* view11 = View::Create(embedded);
492 embedded->GetRoots().front()->AddChild(node11); 492 embedded->GetRoots().front()->AddChild(view11);
493 Node* node12 = Node::Create(embedded); 493 View* view12 = View::Create(embedded);
494 embedded->GetRoots().front()->AddChild(node12); 494 embedded->GetRoots().front()->AddChild(view12);
495 495
496 Node* node1_in_wm = window_manager()->GetNodeById(node1->id()); 496 View* view1_in_wm = window_manager()->GetViewById(view1->id());
497 497
498 { 498 {
499 WaitForTreeSizeToMatch(node1, 2u); 499 WaitForTreeSizeToMatch(view1, 2u);
500 node11->MoveToFront(); 500 view11->MoveToFront();
501 WaitForOrderChange(window_manager(), 501 WaitForOrderChange(window_manager(),
502 window_manager()->GetNodeById(node11->id())); 502 window_manager()->GetViewById(view11->id()));
503 503
504 EXPECT_EQ(node1_in_wm->children().front(), 504 EXPECT_EQ(view1_in_wm->children().front(),
505 window_manager()->GetNodeById(node12->id())); 505 window_manager()->GetViewById(view12->id()));
506 EXPECT_EQ(node1_in_wm->children().back(), 506 EXPECT_EQ(view1_in_wm->children().back(),
507 window_manager()->GetNodeById(node11->id())); 507 window_manager()->GetViewById(view11->id()));
508 } 508 }
509 509
510 { 510 {
511 node11->MoveToBack(); 511 view11->MoveToBack();
512 WaitForOrderChange(window_manager(), 512 WaitForOrderChange(window_manager(),
513 window_manager()->GetNodeById(node11->id())); 513 window_manager()->GetViewById(view11->id()));
514 514
515 EXPECT_EQ(node1_in_wm->children().front(), 515 EXPECT_EQ(view1_in_wm->children().front(),
516 window_manager()->GetNodeById(node11->id())); 516 window_manager()->GetViewById(view11->id()));
517 EXPECT_EQ(node1_in_wm->children().back(), 517 EXPECT_EQ(view1_in_wm->children().back(),
518 window_manager()->GetNodeById(node12->id())); 518 window_manager()->GetViewById(view12->id()));
519 } 519 }
520 } 520 }
521 521
522 // TODO(beng): tests for view event dispatcher. 522 // TODO(beng): tests for view event dispatcher.
523 // - verify that we see events for all views. 523 // - verify that we see events for all views.
524 524
525 // TODO(beng): tests for focus: 525 // TODO(beng): tests for focus:
526 // - focus between two nodes known to a connection 526 // - focus between two views known to a connection
527 // - focus between nodes unknown to one of the connections. 527 // - focus between views unknown to one of the connections.
528 // - focus between nodes unknown to either connection. 528 // - focus between views unknown to either connection.
529 529
530 } // namespace mojo 530 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698