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

Side by Side Diff: components/mus/view_tree_apptest.cc

Issue 1344573002: Mandoline: Rename components/view_manager to components/mus (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 years, 3 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
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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/message_loop/message_loop.h" 6 #include "base/message_loop/message_loop.h"
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "components/view_manager/ids.h" 9 #include "components/mus/ids.h"
10 #include "components/view_manager/public/interfaces/view_tree.mojom.h" 10 #include "components/mus/public/interfaces/view_tree.mojom.h"
11 #include "components/view_manager/public/interfaces/view_tree_host.mojom.h" 11 #include "components/mus/public/interfaces/view_tree_host.mojom.h"
12 #include "components/view_manager/test_change_tracker.h" 12 #include "components/mus/test_change_tracker.h"
13 #include "mojo/application/public/cpp/application_delegate.h" 13 #include "mojo/application/public/cpp/application_delegate.h"
14 #include "mojo/application/public/cpp/application_impl.h" 14 #include "mojo/application/public/cpp/application_impl.h"
15 #include "mojo/application/public/cpp/application_test_base.h" 15 #include "mojo/application/public/cpp/application_test_base.h"
16 16
17 using mojo::ApplicationConnection; 17 using mojo::ApplicationConnection;
18 using mojo::ApplicationDelegate; 18 using mojo::ApplicationDelegate;
19 using mojo::Array; 19 using mojo::Array;
20 using mojo::Callback; 20 using mojo::Callback;
21 using mojo::ConnectionSpecificId; 21 using mojo::ConnectionSpecificId;
22 using mojo::ERROR_CODE_NONE; 22 using mojo::ERROR_CODE_NONE;
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 Id relative_view_id, 140 Id relative_view_id,
141 OrderDirection direction) { 141 OrderDirection direction) {
142 bool result = false; 142 bool result = false;
143 base::RunLoop run_loop; 143 base::RunLoop run_loop;
144 vm->ReorderView(view_id, relative_view_id, direction, 144 vm->ReorderView(view_id, relative_view_id, direction,
145 base::Bind(&BoolResultCallback, &run_loop, &result)); 145 base::Bind(&BoolResultCallback, &run_loop, &result));
146 run_loop.Run(); 146 run_loop.Run();
147 return result; 147 return result;
148 } 148 }
149 149
150 void GetViewTree(ViewTree* vm, 150 void GetViewTree(ViewTree* vm, Id view_id, std::vector<TestView>* views) {
151 Id view_id,
152 std::vector<TestView>* views) {
153 base::RunLoop run_loop; 151 base::RunLoop run_loop;
154 vm->GetViewTree(view_id, 152 vm->GetViewTree(view_id,
155 base::Bind(&ViewTreeResultCallback, &run_loop, views)); 153 base::Bind(&ViewTreeResultCallback, &run_loop, views));
156 run_loop.Run(); 154 run_loop.Run();
157 } 155 }
158 156
159 bool DeleteView(ViewTree* vm, Id view_id) { 157 bool DeleteView(ViewTree* vm, Id view_id) {
160 base::RunLoop run_loop; 158 base::RunLoop run_loop;
161 bool result = false; 159 bool result = false;
162 vm->DeleteView(view_id, base::Bind(&BoolResultCallback, &run_loop, &result)); 160 vm->DeleteView(view_id, base::Bind(&BoolResultCallback, &run_loop, &result));
163 run_loop.Run(); 161 run_loop.Run();
164 return result; 162 return result;
165 } 163 }
166 164
167 bool SetViewBounds(ViewTree* vm, 165 bool SetViewBounds(ViewTree* vm, Id view_id, int x, int y, int w, int h) {
168 Id view_id,
169 int x,
170 int y,
171 int w,
172 int h) {
173 base::RunLoop run_loop; 166 base::RunLoop run_loop;
174 bool result = false; 167 bool result = false;
175 RectPtr rect(mojo::Rect::New()); 168 RectPtr rect(mojo::Rect::New());
176 rect->x = x; 169 rect->x = x;
177 rect->y = y; 170 rect->y = y;
178 rect->width = w; 171 rect->width = w;
179 rect->height = h; 172 rect->height = h;
180 vm->SetViewBounds(view_id, rect.Pass(), 173 vm->SetViewBounds(view_id, rect.Pass(),
181 base::Bind(&BoolResultCallback, &run_loop, &result)); 174 base::Bind(&BoolResultCallback, &run_loop, &result));
182 run_loop.Run(); 175 run_loop.Run();
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 tracker()->OnEmbeddedAppDisconnected(view_id); 317 tracker()->OnEmbeddedAppDisconnected(view_id);
325 } 318 }
326 void OnUnembed() override { tracker()->OnUnembed(); } 319 void OnUnembed() override { tracker()->OnUnembed(); }
327 void OnViewBoundsChanged(Id view_id, 320 void OnViewBoundsChanged(Id view_id,
328 RectPtr old_bounds, 321 RectPtr old_bounds,
329 RectPtr new_bounds) override { 322 RectPtr new_bounds) override {
330 // The bounds of the root may change during startup on Android at random 323 // The bounds of the root may change during startup on Android at random
331 // times. As this doesn't matter, and shouldn't impact test exepctations, 324 // times. As this doesn't matter, and shouldn't impact test exepctations,
332 // it is ignored. 325 // it is ignored.
333 if (view_id == root_view_id_) 326 if (view_id == root_view_id_)
334 return; 327 return;
335 tracker()->OnViewBoundsChanged(view_id, old_bounds.Pass(), 328 tracker()->OnViewBoundsChanged(view_id, old_bounds.Pass(),
336 new_bounds.Pass()); 329 new_bounds.Pass());
337 } 330 }
338 void OnViewViewportMetricsChanged(ViewportMetricsPtr old_metrics, 331 void OnViewViewportMetricsChanged(ViewportMetricsPtr old_metrics,
339 ViewportMetricsPtr new_metrics) override { 332 ViewportMetricsPtr new_metrics) override {
340 // Don't track the metrics as they are available at an indeterministic time 333 // Don't track the metrics as they are available at an indeterministic time
341 // on Android. 334 // on Android.
342 } 335 }
343 void OnViewHierarchyChanged(Id view, 336 void OnViewHierarchyChanged(Id view,
344 Id new_parent, 337 Id new_parent,
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 mojo::ApplicationImpl* app_; 417 mojo::ApplicationImpl* app_;
425 scoped_ptr<ViewTreeClientImpl> client_impl_; 418 scoped_ptr<ViewTreeClientImpl> client_impl_;
426 scoped_ptr<base::RunLoop> run_loop_; 419 scoped_ptr<base::RunLoop> run_loop_;
427 420
428 DISALLOW_COPY_AND_ASSIGN(ViewTreeClientFactory); 421 DISALLOW_COPY_AND_ASSIGN(ViewTreeClientFactory);
429 }; 422 };
430 423
431 class ViewTreeAppTest : public mojo::test::ApplicationTestBase, 424 class ViewTreeAppTest : public mojo::test::ApplicationTestBase,
432 public ApplicationDelegate { 425 public ApplicationDelegate {
433 public: 426 public:
434 ViewTreeAppTest() 427 ViewTreeAppTest()
435 : connection_id_1_(0), connection_id_2_(0), root_view_id_(0) {} 428 : connection_id_1_(0), connection_id_2_(0), root_view_id_(0) {}
436 ~ViewTreeAppTest() override {} 429 ~ViewTreeAppTest() override {}
437 430
438 protected: 431 protected:
439 // Returns the changes from the various connections. 432 // Returns the changes from the various connections.
440 std::vector<Change>* changes1() { return vm_client1_->tracker()->changes(); } 433 std::vector<Change>* changes1() { return vm_client1_->tracker()->changes(); }
441 std::vector<Change>* changes2() { return vm_client2_->tracker()->changes(); } 434 std::vector<Change>* changes2() { return vm_client2_->tracker()->changes(); }
442 std::vector<Change>* changes3() { return vm_client3_->tracker()->changes(); } 435 std::vector<Change>* changes3() { return vm_client3_->tracker()->changes(); }
443 436
444 // Various connections. |vm1()|, being the first connection, has special 437 // Various connections. |vm1()|, being the first connection, has special
445 // permissions (it's treated as the window manager). 438 // permissions (it's treated as the window manager).
446 ViewTree* vm1() { return vm_client1_->tree(); } 439 ViewTree* vm1() { return vm_client1_->tree(); }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 486
494 // Establishes a new connection by way of Embed() on the specified 487 // Establishes a new connection by way of Embed() on the specified
495 // ViewTree. 488 // ViewTree.
496 scoped_ptr<ViewTreeClientImpl> 489 scoped_ptr<ViewTreeClientImpl>
497 EstablishConnectionViaEmbed(ViewTree* owner, Id root_id, int* connection_id) { 490 EstablishConnectionViaEmbed(ViewTree* owner, Id root_id, int* connection_id) {
498 if (!EmbedUrl(application_impl(), owner, application_impl()->url(), 491 if (!EmbedUrl(application_impl(), owner, application_impl()->url(),
499 root_id)) { 492 root_id)) {
500 ADD_FAILURE() << "Embed() failed"; 493 ADD_FAILURE() << "Embed() failed";
501 return nullptr; 494 return nullptr;
502 } 495 }
503 scoped_ptr<ViewTreeClientImpl> client = 496 scoped_ptr<ViewTreeClientImpl> client = client_factory_->WaitForInstance();
504 client_factory_->WaitForInstance();
505 if (!client.get()) { 497 if (!client.get()) {
506 ADD_FAILURE() << "WaitForInstance failed"; 498 ADD_FAILURE() << "WaitForInstance failed";
507 return nullptr; 499 return nullptr;
508 } 500 }
509 client->WaitForOnEmbed(); 501 client->WaitForOnEmbed();
510 502
511 EXPECT_EQ("OnEmbed", 503 EXPECT_EQ("OnEmbed",
512 SingleChangeToDescription(*client->tracker()->changes())); 504 SingleChangeToDescription(*client->tracker()->changes()));
513 if (connection_id) 505 if (connection_id)
514 *connection_id = (*client->tracker()->changes())[0].connection_id; 506 *connection_id = (*client->tracker()->changes())[0].connection_id;
515 return client.Pass(); 507 return client.Pass();
516 } 508 }
517 509
518 // ApplicationTestBase: 510 // ApplicationTestBase:
519 ApplicationDelegate* GetApplicationDelegate() override { return this; } 511 ApplicationDelegate* GetApplicationDelegate() override { return this; }
520 void SetUp() override { 512 void SetUp() override {
521 ApplicationTestBase::SetUp(); 513 ApplicationTestBase::SetUp();
522 client_factory_.reset(new ViewTreeClientFactory(application_impl())); 514 client_factory_.reset(new ViewTreeClientFactory(application_impl()));
523 mojo::URLRequestPtr request(mojo::URLRequest::New()); 515 mojo::URLRequestPtr request(mojo::URLRequest::New());
524 request->url = mojo::String::From("mojo:view_manager"); 516 request->url = mojo::String::From("mojo:view_manager");
525 517
526 mojo::ViewTreeHostFactoryPtr factory; 518 mojo::ViewTreeHostFactoryPtr factory;
527 application_impl()->ConnectToService(request.Pass(), &factory); 519 application_impl()->ConnectToService(request.Pass(), &factory);
528 520
529 mojo::ViewTreeClientPtr tree_client_ptr; 521 mojo::ViewTreeClientPtr tree_client_ptr;
530 vm_client1_.reset(new ViewTreeClientImpl(application_impl())); 522 vm_client1_.reset(new ViewTreeClientImpl(application_impl()));
531 vm_client1_->Bind(GetProxy(&tree_client_ptr)); 523 vm_client1_->Bind(GetProxy(&tree_client_ptr));
532 524
533 factory->CreateViewTreeHost(GetProxy(&host_), 525 factory->CreateViewTreeHost(GetProxy(&host_), mojo::ViewTreeHostClientPtr(),
534 mojo::ViewTreeHostClientPtr(),
535 tree_client_ptr.Pass()); 526 tree_client_ptr.Pass());
536 527
537 // Next we should get an embed call on the "window manager" client. 528 // Next we should get an embed call on the "window manager" client.
538 vm_client1_->WaitForIncomingMethodCall(); 529 vm_client1_->WaitForIncomingMethodCall();
539 530
540 ASSERT_EQ(1u, changes1()->size()); 531 ASSERT_EQ(1u, changes1()->size());
541 EXPECT_EQ(CHANGE_TYPE_EMBED, (*changes1())[0].type); 532 EXPECT_EQ(CHANGE_TYPE_EMBED, (*changes1())[0].type);
542 // All these tests assume 1 for the client id. The only real assertion here 533 // All these tests assume 1 for the client id. The only real assertion here
543 // is the client id is not zero, but adding this as rest of code here 534 // is the client id is not zero, but adding this as rest of code here
544 // assumes 1. 535 // assumes 1.
(...skipping 1059 matching lines...) Expand 10 before | Expand all | Expand 10 after
1604 ASSERT_TRUE(view_2_2); 1595 ASSERT_TRUE(view_2_2);
1605 ASSERT_TRUE(AddView(vm2(), view_1_1, view_2_2)); 1596 ASSERT_TRUE(AddView(vm2(), view_1_1, view_2_2));
1606 ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(vm2(), view_2_2)); 1597 ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(vm2(), view_2_2));
1607 1598
1608 Id view_3_3 = vm_client3()->CreateView(3); 1599 Id view_3_3 = vm_client3()->CreateView(3);
1609 ASSERT_TRUE(view_3_3); 1600 ASSERT_TRUE(view_3_3);
1610 ASSERT_TRUE(AddView(vm3(), view_2_2, view_3_3)); 1601 ASSERT_TRUE(AddView(vm3(), view_2_2, view_3_3));
1611 1602
1612 // 2 should not be able to embed in view_3_3 as view_3_3 was not created by 1603 // 2 should not be able to embed in view_3_3 as view_3_3 was not created by
1613 // 2. 1604 // 2.
1614 EXPECT_FALSE(EmbedUrl(application_impl(), vm2(), application_impl()->url(), 1605 EXPECT_FALSE(
1615 view_3_3)); 1606 EmbedUrl(application_impl(), vm2(), application_impl()->url(), view_3_3));
1616 } 1607 }
1617 1608
1618 // Verifies Embed() from window manager on another connections view works. 1609 // Verifies Embed() from window manager on another connections view works.
1619 TEST_F(ViewTreeAppTest, EmbedFromOtherConnection) { 1610 TEST_F(ViewTreeAppTest, EmbedFromOtherConnection) {
1620 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); 1611 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
1621 1612
1622 Id view_1_1 = BuildViewId(connection_id_1(), 1); 1613 Id view_1_1 = BuildViewId(connection_id_1(), 1);
1623 Id view_2_2 = vm_client2()->CreateView(2); 1614 Id view_2_2 = vm_client2()->CreateView(2);
1624 ASSERT_TRUE(view_2_2); 1615 ASSERT_TRUE(view_2_2);
1625 ASSERT_TRUE(AddView(vm2(), view_1_1, view_2_2)); 1616 ASSERT_TRUE(AddView(vm2(), view_1_1, view_2_2));
(...skipping 25 matching lines...) Expand all
1651 WaitForViewTreeClient(); 1642 WaitForViewTreeClient();
1652 1643
1653 Id view_1_2 = vm_client1()->CreateView(2); 1644 Id view_1_2 = vm_client1()->CreateView(2);
1654 ASSERT_TRUE(view_1_2); 1645 ASSERT_TRUE(view_1_2);
1655 ASSERT_TRUE(AddView(vm1(), BuildViewId(connection_id_1(), 1), view_1_2)); 1646 ASSERT_TRUE(AddView(vm1(), BuildViewId(connection_id_1(), 1), view_1_2));
1656 vm1()->SetAccessPolicy(view_1_2, ViewTree::ACCESS_POLICY_EMBED_ROOT); 1647 vm1()->SetAccessPolicy(view_1_2, ViewTree::ACCESS_POLICY_EMBED_ROOT);
1657 ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(vm1(), view_1_2)); 1648 ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(vm1(), view_1_2));
1658 1649
1659 // view_1_2 is vm3's root, so even though v3 is an embed root it should not 1650 // view_1_2 is vm3's root, so even though v3 is an embed root it should not
1660 // be able to Embed into itself. 1651 // be able to Embed into itself.
1661 ASSERT_FALSE(EmbedUrl(application_impl(), vm3(), application_impl()->url(), 1652 ASSERT_FALSE(
1662 view_1_2)); 1653 EmbedUrl(application_impl(), vm3(), application_impl()->url(), view_1_2));
1663 } 1654 }
1664 1655
1665 // TODO(sky): need to better track changes to initial connection. For example, 1656 // TODO(sky): need to better track changes to initial connection. For example,
1666 // that SetBounsdViews/AddView and the like don't result in messages to the 1657 // that SetBounsdViews/AddView and the like don't result in messages to the
1667 // originating connection. 1658 // originating connection.
1668 1659
1669 // TODO(sky): make sure coverage of what was 1660 // TODO(sky): make sure coverage of what was
1670 // ViewManagerTest.SecondEmbedRoot_InitService and 1661 // ViewManagerTest.SecondEmbedRoot_InitService and
1671 // ViewManagerTest.MultipleEmbedRootsBeforeWTHReady gets added to window manager 1662 // ViewManagerTest.MultipleEmbedRootsBeforeWTHReady gets added to window manager
1672 // tests. 1663 // tests.
1673 1664
1674 } // namespace view_manager 1665 } // namespace view_manager
OLDNEW
« no previous file with comments | « components/mus/view_manager_client_apptest.cc ('k') | components/mus/view_tree_host_connection.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698