OLD | NEW |
---|---|
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/bind.h" | 7 #include "base/bind.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "mojo/public/cpp/application/application.h" | |
10 #include "mojo/service_manager/service_manager.h" | |
9 #include "mojo/services/public/cpp/view_manager/lib/view_manager_private.h" | 11 #include "mojo/services/public/cpp/view_manager/lib/view_manager_private.h" |
10 #include "mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.h" | 12 #include "mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.h" |
11 #include "mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h" | 13 #include "mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h" |
12 #include "mojo/services/public/cpp/view_manager/util.h" | 14 #include "mojo/services/public/cpp/view_manager/util.h" |
13 #include "mojo/services/public/cpp/view_manager/view.h" | 15 #include "mojo/services/public/cpp/view_manager/view.h" |
14 #include "mojo/services/public/cpp/view_manager/view_observer.h" | 16 #include "mojo/services/public/cpp/view_manager/view_observer.h" |
15 #include "mojo/services/public/cpp/view_manager/view_tree_node_observer.h" | 17 #include "mojo/services/public/cpp/view_manager/view_tree_node_observer.h" |
16 #include "mojo/shell/shell_test_helper.h" | 18 #include "mojo/shell/shell_test_helper.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
18 | 20 |
19 namespace mojo { | 21 namespace mojo { |
20 namespace view_manager { | 22 namespace view_manager { |
21 namespace { | 23 namespace { |
22 | 24 |
25 const char kTestServiceURL[] = "mojo:test_url"; | |
26 | |
23 base::RunLoop* current_run_loop = NULL; | 27 base::RunLoop* current_run_loop = NULL; |
24 | 28 |
25 void DoRunLoop() { | 29 void DoRunLoop() { |
26 base::RunLoop run_loop; | 30 base::RunLoop run_loop; |
27 current_run_loop = &run_loop; | 31 current_run_loop = &run_loop; |
28 current_run_loop->Run(); | 32 current_run_loop->Run(); |
29 current_run_loop = NULL; | 33 current_run_loop = NULL; |
30 } | 34 } |
31 | 35 |
32 void QuitRunLoop() { | 36 void QuitRunLoop() { |
33 current_run_loop->Quit(); | 37 current_run_loop->Quit(); |
34 } | 38 } |
35 | 39 |
36 void QuitRunLoopOnChangesAcked() { | 40 void QuitRunLoopOnChangesAcked() { |
37 QuitRunLoop(); | 41 QuitRunLoop(); |
38 } | 42 } |
39 | 43 |
40 void WaitForAllChangesToBeAcked(ViewManager* manager) { | 44 void WaitForAllChangesToBeAcked(ViewManager* manager) { |
41 ViewManagerPrivate(manager).synchronizer()->set_changes_acked_callback( | 45 ViewManagerPrivate(manager).synchronizer()->set_changes_acked_callback( |
42 base::Bind(&QuitRunLoopOnChangesAcked)); | 46 base::Bind(&QuitRunLoopOnChangesAcked)); |
43 DoRunLoop(); | 47 DoRunLoop(); |
44 ViewManagerPrivate(manager).synchronizer()->ClearChangesAckedCallback(); | 48 ViewManagerPrivate(manager).synchronizer()->ClearChangesAckedCallback(); |
45 } | 49 } |
46 | 50 |
51 // Used with IViewManager::Connect(). Creates a TestViewManagerClientConnection, | |
52 // which creates and owns the ViewManagerProxy. | |
53 class ConnectServiceLoader : public ServiceLoader { | |
54 public: | |
55 explicit ConnectServiceLoader(base::Callback<void(ViewManager*)> callback) | |
56 : callback_(callback) {} | |
57 virtual ~ConnectServiceLoader() {} | |
58 | |
59 // ServiceLoader: | |
60 virtual void LoadService(ServiceManager* manager, | |
61 const GURL& url, | |
62 ScopedMessagePipeHandle shell_handle) OVERRIDE { | |
63 scoped_ptr<Application> app(new Application(shell_handle.Pass())); | |
64 ViewManager::Create(app.get(), callback_); | |
65 apps_.push_back(app.release()); | |
66 } | |
67 virtual void OnServiceError(ServiceManager* manager, | |
68 const GURL& url) OVERRIDE { | |
69 } | |
70 | |
71 private: | |
72 ScopedVector<Application> apps_; | |
73 base::Callback<void(ViewManager*)> callback_; | |
74 | |
75 DISALLOW_COPY_AND_ASSIGN(ConnectServiceLoader); | |
76 }; | |
77 | |
47 class ActiveViewChangedObserver : public ViewTreeNodeObserver { | 78 class ActiveViewChangedObserver : public ViewTreeNodeObserver { |
48 public: | 79 public: |
49 explicit ActiveViewChangedObserver(ViewTreeNode* node) | 80 explicit ActiveViewChangedObserver(ViewTreeNode* node) |
50 : node_(node) {} | 81 : node_(node) {} |
51 virtual ~ActiveViewChangedObserver() {} | 82 virtual ~ActiveViewChangedObserver() {} |
52 | 83 |
53 private: | 84 private: |
54 // Overridden from ViewTreeNodeObserver: | 85 // Overridden from ViewTreeNodeObserver: |
55 virtual void OnNodeActiveViewChange(ViewTreeNode* node, | 86 virtual void OnNodeActiveViewChange(ViewTreeNode* node, |
56 View* old_view, | 87 View* old_view, |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
269 } | 300 } |
270 | 301 |
271 void DestroyViewManager1() { | 302 void DestroyViewManager1() { |
272 // view_manager_1_.reset(); | 303 // view_manager_1_.reset(); |
273 } | 304 } |
274 | 305 |
275 private: | 306 private: |
276 // Overridden from testing::Test: | 307 // Overridden from testing::Test: |
277 virtual void SetUp() OVERRIDE { | 308 virtual void SetUp() OVERRIDE { |
278 test_helper_.Init(); | 309 test_helper_.Init(); |
310 ConnectServiceLoader* loader = | |
311 new ConnectServiceLoader( | |
312 base::Bind(&ViewManagerTest::OnViewManagerLoaded, | |
313 base::Unretained(this))); | |
314 test_helper_.SetLoaderForURL( | |
315 scoped_ptr<ServiceLoader>(loader), | |
316 GURL(kTestServiceURL)); | |
317 | |
318 ConnectToService(test_helper_.service_provider(), | |
319 "mojo:mojo_view_manager", | |
320 &view_manager_init_); | |
321 ASSERT_TRUE(ViewManagerInitConnect(view_manager_init_.get(), | |
322 kTestServiceURL)); | |
323 } | |
324 | |
325 void ViewManagerInitConnectCallback(bool* result_cache, | |
326 bool result) { | |
327 *result_cache = result; | |
328 } | |
329 | |
330 bool ViewManagerInitConnect(IViewManagerInit* view_manager_init, | |
331 const std::string& url) { | |
332 bool result = false; | |
333 view_manager_init->Connect( | |
334 url, | |
335 base::Bind(&ViewManagerTest::ViewManagerInitConnectCallback, | |
336 base::Unretained(this), &result)); | |
337 init_loop_.Run(); | |
338 return result; | |
339 } | |
340 | |
341 void OnViewManagerLoaded(ViewManager* view_manager) { | |
342 init_loop_.Quit(); | |
279 } | 343 } |
280 | 344 |
281 base::MessageLoop loop_; | 345 base::MessageLoop loop_; |
346 base::RunLoop init_loop_; | |
282 shell::ShellTestHelper test_helper_; | 347 shell::ShellTestHelper test_helper_; |
348 IViewManagerInitPtr view_manager_init_; | |
283 ViewManager* view_manager_1_; | 349 ViewManager* view_manager_1_; |
284 ViewManager* view_manager_2_; | 350 ViewManager* view_manager_2_; |
285 int commit_count_; | 351 int commit_count_; |
286 | 352 |
287 DISALLOW_COPY_AND_ASSIGN(ViewManagerTest); | 353 DISALLOW_COPY_AND_ASSIGN(ViewManagerTest); |
288 }; | 354 }; |
289 | 355 |
290 // Base class for helpers that quit the current runloop after a specific tree | 356 // Base class for helpers that quit the current runloop after a specific tree |
291 // change is observed by a view manager. | 357 // change is observed by a view manager. |
292 class TreeObserverBase : public ViewTreeNodeObserver { | 358 class TreeObserverBase : public ViewTreeNodeObserver { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
329 return params.receiver == view_manager()->tree() && | 395 return params.receiver == view_manager()->tree() && |
330 !params.old_parent && | 396 !params.old_parent && |
331 params.new_parent == view_manager()->tree(); | 397 params.new_parent == view_manager()->tree(); |
332 } | 398 } |
333 | 399 |
334 DISALLOW_COPY_AND_ASSIGN(HierarchyChanged_NodeCreatedObserver); | 400 DISALLOW_COPY_AND_ASSIGN(HierarchyChanged_NodeCreatedObserver); |
335 }; | 401 }; |
336 | 402 |
337 // TODO(beng): reenable these once converted to new way of connecting. | 403 // TODO(beng): reenable these once converted to new way of connecting. |
338 | 404 |
405 TEST_F(ViewManagerTest, SetUp) { | |
406 EXPECT_TRUE(true); | |
sky
2014/06/03 20:15:26
I don't think you need the EXPECT_TRUE here.
| |
407 } | |
408 | |
339 TEST_F(ViewManagerTest, DISABLED_HierarchyChanged_NodeCreated) { | 409 TEST_F(ViewManagerTest, DISABLED_HierarchyChanged_NodeCreated) { |
340 HierarchyChanged_NodeCreatedObserver observer(view_manager_2()); | 410 HierarchyChanged_NodeCreatedObserver observer(view_manager_2()); |
341 ViewTreeNode* node1 = ViewTreeNode::Create(view_manager_1()); | 411 ViewTreeNode* node1 = ViewTreeNode::Create(view_manager_1()); |
342 view_manager_1()->tree()->AddChild(node1); | 412 view_manager_1()->tree()->AddChild(node1); |
343 DoRunLoop(); | 413 DoRunLoop(); |
344 | 414 |
345 EXPECT_EQ(view_manager_2()->tree()->children().front()->id(), node1->id()); | 415 EXPECT_EQ(view_manager_2()->tree()->children().front()->id(), node1->id()); |
346 } | 416 } |
347 | 417 |
348 // Quits the current runloop when the root is notified about a node moved from | 418 // Quits the current runloop when the root is notified about a node moved from |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
630 // Node should not have been destroyed. | 700 // Node should not have been destroyed. |
631 EXPECT_TRUE(tracker2.is_valid()); | 701 EXPECT_TRUE(tracker2.is_valid()); |
632 | 702 |
633 NodeTracker tracker1(node1); | 703 NodeTracker tracker1(node1); |
634 node1->Destroy(); | 704 node1->Destroy(); |
635 EXPECT_FALSE(tracker1.is_valid()); | 705 EXPECT_FALSE(tracker1.is_valid()); |
636 } | 706 } |
637 | 707 |
638 } // namespace view_manager | 708 } // namespace view_manager |
639 } // namespace mojo | 709 } // namespace mojo |
OLD | NEW |