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/view_manager/public/cpp/view_manager.h" | 5 #include "mojo/services/view_manager/public/cpp/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 "base/memory/scoped_vector.h" |
10 #include "mojo/public/cpp/application/application_connection.h" | 11 #include "mojo/public/cpp/application/application_connection.h" |
11 #include "mojo/public/cpp/application/application_delegate.h" | 12 #include "mojo/public/cpp/application/application_delegate.h" |
12 #include "mojo/public/cpp/application/application_impl.h" | 13 #include "mojo/public/cpp/application/application_impl.h" |
13 #include "mojo/public/cpp/application/service_provider_impl.h" | 14 #include "mojo/public/cpp/application/service_provider_impl.h" |
14 #include "mojo/public/interfaces/application/service_provider.mojom.h" | 15 #include "mojo/public/interfaces/application/service_provider.mojom.h" |
15 #include "mojo/services/geometry/public/cpp/geometry_util.h" | 16 #include "mojo/services/geometry/public/cpp/geometry_util.h" |
16 #include "mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.h" | 17 #include "mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.h" |
17 #include "mojo/services/view_manager/public/cpp/lib/view_private.h" | 18 #include "mojo/services/view_manager/public/cpp/lib/view_private.h" |
18 #include "mojo/services/view_manager/public/cpp/util.h" | 19 #include "mojo/services/view_manager/public/cpp/util.h" |
19 #include "mojo/services/view_manager/public/cpp/view_manager_client_factory.h" | 20 #include "mojo/services/view_manager/public/cpp/view_manager_client_factory.h" |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 InterfaceRequest<ServiceProvider> services, | 85 InterfaceRequest<ServiceProvider> services, |
85 ServiceProviderPtr exposed_services) override { | 86 ServiceProviderPtr exposed_services) override { |
86 callback_.Run(root); | 87 callback_.Run(root); |
87 } | 88 } |
88 void OnViewManagerDisconnected(ViewManager* view_manager) override {} | 89 void OnViewManagerDisconnected(ViewManager* view_manager) override {} |
89 | 90 |
90 ScopedVector<ApplicationImpl> apps_; | 91 ScopedVector<ApplicationImpl> apps_; |
91 LoadedCallback callback_; | 92 LoadedCallback callback_; |
92 scoped_ptr<ViewManagerClientFactory> view_manager_client_factory_; | 93 scoped_ptr<ViewManagerClientFactory> view_manager_client_factory_; |
93 | 94 |
94 DISALLOW_COPY_AND_ASSIGN(ConnectApplicationLoader); | 95 MOJO_DISALLOW_COPY_AND_ASSIGN(ConnectApplicationLoader); |
95 }; | 96 }; |
96 | 97 |
97 class BoundsChangeObserver : public ViewObserver { | 98 class BoundsChangeObserver : public ViewObserver { |
98 public: | 99 public: |
99 explicit BoundsChangeObserver(View* view) : view_(view) {} | 100 explicit BoundsChangeObserver(View* view) : view_(view) {} |
100 ~BoundsChangeObserver() override {} | 101 ~BoundsChangeObserver() override {} |
101 | 102 |
102 private: | 103 private: |
103 // Overridden from ViewObserver: | 104 // Overridden from ViewObserver: |
104 void OnViewBoundsChanged(View* view, | 105 void OnViewBoundsChanged(View* view, |
105 const Rect& old_bounds, | 106 const Rect& old_bounds, |
106 const Rect& new_bounds) override { | 107 const Rect& new_bounds) override { |
107 DCHECK_EQ(view, view_); | 108 DCHECK_EQ(view, view_); |
108 QuitRunLoop(); | 109 QuitRunLoop(); |
109 } | 110 } |
110 | 111 |
111 View* view_; | 112 View* view_; |
112 | 113 |
113 DISALLOW_COPY_AND_ASSIGN(BoundsChangeObserver); | 114 MOJO_DISALLOW_COPY_AND_ASSIGN(BoundsChangeObserver); |
114 }; | 115 }; |
115 | 116 |
116 // Wait until the bounds of the supplied view change. | 117 // Wait until the bounds of the supplied view change. |
117 void WaitForBoundsToChange(View* view) { | 118 void WaitForBoundsToChange(View* view) { |
118 BoundsChangeObserver observer(view); | 119 BoundsChangeObserver observer(view); |
119 view->AddObserver(&observer); | 120 view->AddObserver(&observer); |
120 DoRunLoop(); | 121 DoRunLoop(); |
121 view->RemoveObserver(&observer); | 122 view->RemoveObserver(&observer); |
122 } | 123 } |
123 | 124 |
(...skipping 21 matching lines...) Expand all Loading... |
145 size_t count = 1; | 146 size_t count = 1; |
146 View::Children::const_iterator it = view->children().begin(); | 147 View::Children::const_iterator it = view->children().begin(); |
147 for (; it != view->children().end(); ++it) | 148 for (; it != view->children().end(); ++it) |
148 count += CountViews(*it); | 149 count += CountViews(*it); |
149 return count; | 150 return count; |
150 } | 151 } |
151 | 152 |
152 View* tree_; | 153 View* tree_; |
153 size_t tree_size_; | 154 size_t tree_size_; |
154 | 155 |
155 DISALLOW_COPY_AND_ASSIGN(TreeSizeMatchesObserver); | 156 MOJO_DISALLOW_COPY_AND_ASSIGN(TreeSizeMatchesObserver); |
156 }; | 157 }; |
157 | 158 |
158 void WaitForTreeSizeToMatch(View* view, size_t tree_size) { | 159 void WaitForTreeSizeToMatch(View* view, size_t tree_size) { |
159 TreeSizeMatchesObserver observer(view, tree_size); | 160 TreeSizeMatchesObserver observer(view, tree_size); |
160 if (observer.IsTreeCorrectSize()) | 161 if (observer.IsTreeCorrectSize()) |
161 return; | 162 return; |
162 view->AddObserver(&observer); | 163 view->AddObserver(&observer); |
163 DoRunLoop(); | 164 DoRunLoop(); |
164 view->RemoveObserver(&observer); | 165 view->RemoveObserver(&observer); |
165 } | 166 } |
(...skipping 14 matching lines...) Expand all Loading... |
180 if (CanQuit()) | 181 if (CanQuit()) |
181 QuitRunLoop(); | 182 QuitRunLoop(); |
182 } | 183 } |
183 | 184 |
184 bool CanQuit() { | 185 bool CanQuit() { |
185 return !views_ || views_->empty(); | 186 return !views_ || views_->empty(); |
186 } | 187 } |
187 | 188 |
188 std::set<Id>* views_; | 189 std::set<Id>* views_; |
189 | 190 |
190 DISALLOW_COPY_AND_ASSIGN(DestructionObserver); | 191 MOJO_DISALLOW_COPY_AND_ASSIGN(DestructionObserver); |
191 }; | 192 }; |
192 | 193 |
193 void WaitForDestruction(ViewManager* view_manager, std::set<Id>* views) { | 194 void WaitForDestruction(ViewManager* view_manager, std::set<Id>* views) { |
194 DestructionObserver observer(views); | 195 DestructionObserver observer(views); |
195 DCHECK(views); | 196 DCHECK(views); |
196 if (views) { | 197 if (views) { |
197 for (std::set<Id>::const_iterator it = views->begin(); | 198 for (std::set<Id>::const_iterator it = views->begin(); |
198 it != views->end(); ++it) { | 199 it != views->end(); ++it) { |
199 view_manager->GetViewById(*it)->AddObserver(&observer); | 200 view_manager->GetViewById(*it)->AddObserver(&observer); |
200 } | 201 } |
(...skipping 12 matching lines...) Expand all Loading... |
213 // Overridden from ViewObserver: | 214 // Overridden from ViewObserver: |
214 void OnViewReordered(View* view, | 215 void OnViewReordered(View* view, |
215 View* relative_view, | 216 View* relative_view, |
216 OrderDirection direction) override { | 217 OrderDirection direction) override { |
217 DCHECK_EQ(view, view_); | 218 DCHECK_EQ(view, view_); |
218 QuitRunLoop(); | 219 QuitRunLoop(); |
219 } | 220 } |
220 | 221 |
221 View* view_; | 222 View* view_; |
222 | 223 |
223 DISALLOW_COPY_AND_ASSIGN(OrderChangeObserver); | 224 MOJO_DISALLOW_COPY_AND_ASSIGN(OrderChangeObserver); |
224 }; | 225 }; |
225 | 226 |
226 void WaitForOrderChange(ViewManager* view_manager, View* view) { | 227 void WaitForOrderChange(ViewManager* view_manager, View* view) { |
227 OrderChangeObserver observer(view); | 228 OrderChangeObserver observer(view); |
228 DoRunLoop(); | 229 DoRunLoop(); |
229 } | 230 } |
230 | 231 |
231 // Tracks a view's destruction. Query is_valid() for current state. | 232 // Tracks a view's destruction. Query is_valid() for current state. |
232 class ViewTracker : public ViewObserver { | 233 class ViewTracker : public ViewObserver { |
233 public: | 234 public: |
(...skipping 10 matching lines...) Expand all Loading... |
244 private: | 245 private: |
245 // Overridden from ViewObserver: | 246 // Overridden from ViewObserver: |
246 void OnViewDestroyed(View* view) override { | 247 void OnViewDestroyed(View* view) override { |
247 DCHECK_EQ(view, view_); | 248 DCHECK_EQ(view, view_); |
248 view_ = NULL; | 249 view_ = NULL; |
249 } | 250 } |
250 | 251 |
251 int id_; | 252 int id_; |
252 View* view_; | 253 View* view_; |
253 | 254 |
254 DISALLOW_COPY_AND_ASSIGN(ViewTracker); | 255 MOJO_DISALLOW_COPY_AND_ASSIGN(ViewTracker); |
255 }; | 256 }; |
256 | 257 |
257 } // namespace | 258 } // namespace |
258 | 259 |
259 // ViewManager ----------------------------------------------------------------- | 260 // ViewManager ----------------------------------------------------------------- |
260 | 261 |
261 // These tests model synchronization of two peer connections to the view manager | 262 // These tests model synchronization of two peer connections to the view manager |
262 // service, that are given access to some root view. | 263 // service, that are given access to some root view. |
263 | 264 |
264 class ViewManagerTest : public testing::Test { | 265 class ViewManagerTest : public testing::Test { |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 | 331 |
331 base::RunLoop* connect_loop_; | 332 base::RunLoop* connect_loop_; |
332 shell::ShellTestHelper test_helper_; | 333 shell::ShellTestHelper test_helper_; |
333 // Used to receive the most recent view manager loaded by an embed action. | 334 // Used to receive the most recent view manager loaded by an embed action. |
334 ViewManager* loaded_view_manager_; | 335 ViewManager* loaded_view_manager_; |
335 // The View Manager connection held by the window manager (app running at the | 336 // The View Manager connection held by the window manager (app running at the |
336 // root view). | 337 // root view). |
337 ViewManager* window_manager_; | 338 ViewManager* window_manager_; |
338 int commit_count_; | 339 int commit_count_; |
339 | 340 |
340 DISALLOW_COPY_AND_ASSIGN(ViewManagerTest); | 341 MOJO_DISALLOW_COPY_AND_ASSIGN(ViewManagerTest); |
341 }; | 342 }; |
342 | 343 |
343 // TODO(sky): all of these tests are disabled as each test triggers running | 344 // TODO(sky): all of these tests are disabled as each test triggers running |
344 // ViewsInit, which tries to register the same set of paths with the | 345 // ViewsInit, which tries to register the same set of paths with the |
345 // PathService, triggering a DCHECK. | 346 // PathService, triggering a DCHECK. |
346 TEST_F(ViewManagerTest, DISABLED_SetUp) {} | 347 TEST_F(ViewManagerTest, DISABLED_SetUp) {} |
347 | 348 |
348 TEST_F(ViewManagerTest, DISABLED_Embed) { | 349 TEST_F(ViewManagerTest, DISABLED_Embed) { |
349 View* view = window_manager()->CreateView(); | 350 View* view = window_manager()->CreateView(); |
350 view->SetVisible(true); | 351 view->SetVisible(true); |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
536 | 537 |
537 private: | 538 private: |
538 // Overridden from ViewObserver: | 539 // Overridden from ViewObserver: |
539 void OnViewVisibilityChanged(View* view) override { | 540 void OnViewVisibilityChanged(View* view) override { |
540 EXPECT_EQ(view, view_); | 541 EXPECT_EQ(view, view_); |
541 QuitRunLoop(); | 542 QuitRunLoop(); |
542 } | 543 } |
543 | 544 |
544 View* view_; | 545 View* view_; |
545 | 546 |
546 DISALLOW_COPY_AND_ASSIGN(VisibilityChangeObserver); | 547 MOJO_DISALLOW_COPY_AND_ASSIGN(VisibilityChangeObserver); |
547 }; | 548 }; |
548 | 549 |
549 } // namespace | 550 } // namespace |
550 | 551 |
551 TEST_F(ViewManagerTest, DISABLED_Visible) { | 552 TEST_F(ViewManagerTest, DISABLED_Visible) { |
552 View* view1 = window_manager()->CreateView(); | 553 View* view1 = window_manager()->CreateView(); |
553 view1->SetVisible(true); | 554 view1->SetVisible(true); |
554 window_manager()->GetRoot()->AddChild(view1); | 555 window_manager()->GetRoot()->AddChild(view1); |
555 | 556 |
556 // Embed another app and verify initial state. | 557 // Embed another app and verify initial state. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
599 | 600 |
600 private: | 601 private: |
601 // Overridden from ViewObserver: | 602 // Overridden from ViewObserver: |
602 void OnViewDrawnChanged(View* view) override { | 603 void OnViewDrawnChanged(View* view) override { |
603 EXPECT_EQ(view, view_); | 604 EXPECT_EQ(view, view_); |
604 QuitRunLoop(); | 605 QuitRunLoop(); |
605 } | 606 } |
606 | 607 |
607 View* view_; | 608 View* view_; |
608 | 609 |
609 DISALLOW_COPY_AND_ASSIGN(DrawnChangeObserver); | 610 MOJO_DISALLOW_COPY_AND_ASSIGN(DrawnChangeObserver); |
610 }; | 611 }; |
611 | 612 |
612 } // namespace | 613 } // namespace |
613 | 614 |
614 TEST_F(ViewManagerTest, DISABLED_Drawn) { | 615 TEST_F(ViewManagerTest, DISABLED_Drawn) { |
615 View* view1 = window_manager()->CreateView(); | 616 View* view1 = window_manager()->CreateView(); |
616 view1->SetVisible(true); | 617 view1->SetVisible(true); |
617 window_manager()->GetRoot()->AddChild(view1); | 618 window_manager()->GetRoot()->AddChild(view1); |
618 | 619 |
619 // Embed another app and verify initial state. | 620 // Embed another app and verify initial state. |
(...skipping 23 matching lines...) Expand all Loading... |
643 | 644 |
644 // TODO(beng): tests for focus: | 645 // TODO(beng): tests for focus: |
645 // - focus between two views known to a connection | 646 // - focus between two views known to a connection |
646 // - focus between views unknown to one of the connections. | 647 // - focus between views unknown to one of the connections. |
647 // - focus between views unknown to either connection. | 648 // - focus between views unknown to either connection. |
648 | 649 |
649 // TODO(sky): need test of root being destroyed with existing views. See | 650 // TODO(sky): need test of root being destroyed with existing views. See |
650 // 434555 for specific case. | 651 // 434555 for specific case. |
651 | 652 |
652 } // namespace mojo | 653 } // namespace mojo |
OLD | NEW |