Chromium Code Reviews| Index: components/mus/view_tree_apptest.cc |
| diff --git a/components/mus/view_tree_apptest.cc b/components/mus/view_tree_apptest.cc |
| index dfef44ec5589e3de604abe610619240898aa6d7a..7f7a5129570f68f9c1934bb175461eb4b628931b 100644 |
| --- a/components/mus/view_tree_apptest.cc |
| +++ b/components/mus/view_tree_apptest.cc |
| @@ -162,6 +162,14 @@ bool DeleteView(ViewTree* vm, Id view_id) { |
| return result; |
| } |
| +bool SetViewCapture(ViewTree* vm, Id view_id) { |
| + base::RunLoop run_loop; |
| + bool result = false; |
| + vm->SetCapture(view_id, base::Bind(&BoolResultCallback, &run_loop, &result)); |
| + run_loop.Run(); |
| + return result; |
| +} |
| + |
| bool SetViewBounds(ViewTree* vm, Id view_id, int x, int y, int w, int h) { |
| base::RunLoop run_loop; |
| bool result = false; |
| @@ -316,6 +324,7 @@ class TestViewTreeClientImpl : public mojo::ViewTreeClient, |
| tracker()->OnEmbeddedAppDisconnected(view_id); |
| } |
| void OnUnembed() override { tracker()->OnUnembed(); } |
| + void OnLostCapture(Id view_id) override { tracker()->OnLostCapture(view_id); } |
| void OnViewBoundsChanged(Id view_id, |
| RectPtr old_bounds, |
| RectPtr new_bounds) override { |
| @@ -1667,6 +1676,22 @@ TEST_F(ViewTreeAppTest, CantEmbedFromConnectionRoot) { |
| EmbedUrl(application_impl(), vm3(), application_impl()->url(), view_1_2)); |
| } |
| +TEST_F(ViewTreeAppTest, CapturePropagation) { |
| + Id view_1_1 = vm_client1()->CreateView(1); |
| + Id view_1_2 = vm_client1()->CreateView(2); |
| + changes1()->clear(); |
| + // View 1 takes capture then View 2 takes capture. |
| + // Verify that view 1 has lost capture. |
| + SetViewCapture(vm1(), view_1_1); |
| + SetViewCapture(vm1(), view_1_2); |
|
sadrul
2015/09/18 01:30:50
What if the two setcapture calls come from two sep
Fady Samuel
2015/09/18 02:44:43
So two separate windows? If one tries to capture,
sadrul
2015/09/18 11:47:28
Yep. (in most cases anyway. The second capture can
|
| + vm_client1_->WaitForChangeCount(1); |
| + |
| + EXPECT_EQ("OnLostCapture view=" + IdToString(view_1_1), |
| + SingleChangeToDescription(*changes1())); |
| + // std::vector<TestView> views; |
| + // GetViewTree(vm1(), view_1_1, &views); |
| + // EXPECT_FALSE(views.empty()); |
| +} |
|
sadrul
2015/09/18 01:30:50
?
Fady Samuel
2015/09/18 02:44:43
Removed.
|
| // TODO(sky): need to better track changes to initial connection. For example, |
| // that SetBounsdViews/AddView and the like don't result in messages to the |
| // originating connection. |