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

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

Issue 1352043005: mus: Implement Window Server Capture Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added a test 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/mus/ids.h" 9 #include "components/mus/ids.h"
10 #include "components/mus/public/interfaces/view_tree.mojom.h" 10 #include "components/mus/public/interfaces/view_tree.mojom.h"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 } 155 }
156 156
157 bool DeleteView(ViewTree* vm, Id view_id) { 157 bool DeleteView(ViewTree* vm, Id view_id) {
158 base::RunLoop run_loop; 158 base::RunLoop run_loop;
159 bool result = false; 159 bool result = false;
160 vm->DeleteView(view_id, base::Bind(&BoolResultCallback, &run_loop, &result)); 160 vm->DeleteView(view_id, base::Bind(&BoolResultCallback, &run_loop, &result));
161 run_loop.Run(); 161 run_loop.Run();
162 return result; 162 return result;
163 } 163 }
164 164
165 bool SetViewCapture(ViewTree* vm, Id view_id) {
166 base::RunLoop run_loop;
167 bool result = false;
168 vm->SetCapture(view_id, base::Bind(&BoolResultCallback, &run_loop, &result));
169 run_loop.Run();
170 return result;
171 }
172
165 bool SetViewBounds(ViewTree* vm, Id view_id, int x, int y, int w, int h) { 173 bool SetViewBounds(ViewTree* vm, Id view_id, int x, int y, int w, int h) {
166 base::RunLoop run_loop; 174 base::RunLoop run_loop;
167 bool result = false; 175 bool result = false;
168 RectPtr rect(mojo::Rect::New()); 176 RectPtr rect(mojo::Rect::New());
169 rect->x = x; 177 rect->x = x;
170 rect->y = y; 178 rect->y = y;
171 rect->width = w; 179 rect->width = w;
172 rect->height = h; 180 rect->height = h;
173 vm->SetViewBounds(view_id, rect.Pass(), 181 vm->SetViewBounds(view_id, rect.Pass(),
174 base::Bind(&BoolResultCallback, &run_loop, &result)); 182 base::Bind(&BoolResultCallback, &run_loop, &result));
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 tree_ = tree.Pass(); 317 tree_ = tree.Pass();
310 connection_id_ = connection_id; 318 connection_id_ = connection_id;
311 tracker()->OnEmbed(connection_id, root.Pass()); 319 tracker()->OnEmbed(connection_id, root.Pass());
312 if (embed_run_loop_) 320 if (embed_run_loop_)
313 embed_run_loop_->Quit(); 321 embed_run_loop_->Quit();
314 } 322 }
315 void OnEmbeddedAppDisconnected(Id view_id) override { 323 void OnEmbeddedAppDisconnected(Id view_id) override {
316 tracker()->OnEmbeddedAppDisconnected(view_id); 324 tracker()->OnEmbeddedAppDisconnected(view_id);
317 } 325 }
318 void OnUnembed() override { tracker()->OnUnembed(); } 326 void OnUnembed() override { tracker()->OnUnembed(); }
327 void OnLostCapture(Id view_id) override { tracker()->OnLostCapture(view_id); }
319 void OnViewBoundsChanged(Id view_id, 328 void OnViewBoundsChanged(Id view_id,
320 RectPtr old_bounds, 329 RectPtr old_bounds,
321 RectPtr new_bounds) override { 330 RectPtr new_bounds) override {
322 // The bounds of the root may change during startup on Android at random 331 // The bounds of the root may change during startup on Android at random
323 // times. As this doesn't matter, and shouldn't impact test exepctations, 332 // times. As this doesn't matter, and shouldn't impact test exepctations,
324 // it is ignored. 333 // it is ignored.
325 if (view_id == root_view_id_) 334 if (view_id == root_view_id_)
326 return; 335 return;
327 tracker()->OnViewBoundsChanged(view_id, old_bounds.Pass(), 336 tracker()->OnViewBoundsChanged(view_id, old_bounds.Pass(),
328 new_bounds.Pass()); 337 new_bounds.Pass());
(...skipping 1331 matching lines...) Expand 10 before | Expand all | Expand 10 after
1660 vm1(), view_1_2, mojo::ViewTree::ACCESS_POLICY_EMBED_ROOT, nullptr); 1669 vm1(), view_1_2, mojo::ViewTree::ACCESS_POLICY_EMBED_ROOT, nullptr);
1661 ASSERT_TRUE(vm_client3_.get() != nullptr); 1670 ASSERT_TRUE(vm_client3_.get() != nullptr);
1662 vm_client3_->set_root_view(root_view_id()); 1671 vm_client3_->set_root_view(root_view_id());
1663 1672
1664 // view_1_2 is vm3's root, so even though v3 is an embed root it should not 1673 // view_1_2 is vm3's root, so even though v3 is an embed root it should not
1665 // be able to Embed into itself. 1674 // be able to Embed into itself.
1666 ASSERT_FALSE( 1675 ASSERT_FALSE(
1667 EmbedUrl(application_impl(), vm3(), application_impl()->url(), view_1_2)); 1676 EmbedUrl(application_impl(), vm3(), application_impl()->url(), view_1_2));
1668 } 1677 }
1669 1678
1679 TEST_F(ViewTreeAppTest, CapturePropagation) {
1680 Id view_1_1 = vm_client1()->CreateView(1);
1681 Id view_1_2 = vm_client1()->CreateView(2);
1682 changes1()->clear();
1683 // View 1 takes capture then View 2 takes capture.
1684 // Verify that view 1 has lost capture.
1685 SetViewCapture(vm1(), view_1_1);
1686 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
1687 vm_client1_->WaitForChangeCount(1);
1688
1689 EXPECT_EQ("OnLostCapture view=" + IdToString(view_1_1),
1690 SingleChangeToDescription(*changes1()));
1691 // std::vector<TestView> views;
1692 // GetViewTree(vm1(), view_1_1, &views);
1693 // EXPECT_FALSE(views.empty());
1694 }
sadrul 2015/09/18 01:30:50 ?
Fady Samuel 2015/09/18 02:44:43 Removed.
1670 // TODO(sky): need to better track changes to initial connection. For example, 1695 // TODO(sky): need to better track changes to initial connection. For example,
1671 // that SetBounsdViews/AddView and the like don't result in messages to the 1696 // that SetBounsdViews/AddView and the like don't result in messages to the
1672 // originating connection. 1697 // originating connection.
1673 1698
1674 // TODO(sky): make sure coverage of what was 1699 // TODO(sky): make sure coverage of what was
1675 // ViewManagerTest.SecondEmbedRoot_InitService and 1700 // ViewManagerTest.SecondEmbedRoot_InitService and
1676 // ViewManagerTest.MultipleEmbedRootsBeforeWTHReady gets added to window manager 1701 // ViewManagerTest.MultipleEmbedRootsBeforeWTHReady gets added to window manager
1677 // tests. 1702 // tests.
1678 1703
1679 } // namespace mus 1704 } // namespace mus
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698