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

Side by Side Diff: athena/wm/window_list_provider_impl_unittest.cc

Issue 633623002: Handle transient children as a part of transient parent (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « athena/wm/window_list_provider_impl.cc ('k') | athena/wm/window_manager_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "athena/wm/window_list_provider_impl.h" 5 #include "athena/wm/window_list_provider_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "athena/screen/public/screen_manager.h"
9 #include "athena/test/base/athena_test_base.h" 10 #include "athena/test/base/athena_test_base.h"
10 #include "athena/wm/public/window_list_provider_observer.h" 11 #include "athena/wm/public/window_list_provider_observer.h"
12 #include "athena/wm/public/window_manager.h"
13 #include "ui/aura/client/window_tree_client.h"
11 #include "ui/aura/test/test_window_delegate.h" 14 #include "ui/aura/test/test_window_delegate.h"
12 #include "ui/aura/window.h" 15 #include "ui/aura/window.h"
16 #include "ui/wm/core/window_util.h"
13 17
14 namespace athena { 18 namespace athena {
15 19
16 namespace { 20 namespace {
17 21
18 bool AreWindowListsEqual(const aura::Window::Windows& one, 22 bool AreWindowListsEqual(const aura::Window::Windows& one,
19 const aura::Window::Windows& two) { 23 const aura::Window::Windows& two) {
20 return one.size() == two.size() && 24 return one.size() == two.size() &&
21 std::equal(one.begin(), one.end(), two.begin()); 25 std::equal(one.begin(), one.end(), two.begin());
22 } 26 }
23 27
24 scoped_ptr<aura::Window> CreateWindow(aura::WindowDelegate* delegate, 28 scoped_ptr<aura::Window> CreateWindow(aura::Window* parent,
29 aura::WindowDelegate* delegate,
25 ui::wm::WindowType window_type) { 30 ui::wm::WindowType window_type) {
26 scoped_ptr<aura::Window> window(new aura::Window(delegate)); 31 scoped_ptr<aura::Window> window(new aura::Window(delegate));
27 window->SetType(window_type); 32 window->SetType(window_type);
28 window->Init(aura::WINDOW_LAYER_SOLID_COLOR); 33 window->Init(aura::WINDOW_LAYER_SOLID_COLOR);
34 if (parent)
35 parent->AddChild(window.get());
29 return window.Pass(); 36 return window.Pass();
30 } 37 }
31 38
39 scoped_ptr<aura::Window> CreateTransientWindow(aura::Window* transient_parent,
40 aura::WindowDelegate* delegate,
41 ui::wm::WindowType window_type) {
42 scoped_ptr<aura::Window> window(new aura::Window(delegate));
43 window->SetType(window_type);
44 window->Init(aura::WINDOW_LAYER_SOLID_COLOR);
45 wm::AddTransientChild(transient_parent, window.get());
46 aura::client::ParentWindowWithContext(
47 window.get(), ScreenManager::Get()->GetContext(), gfx::Rect());
48 return window.Pass();
49 }
50
32 // Return a string which defines the order of windows in |now| using the indices 51 // Return a string which defines the order of windows in |now| using the indices
33 // of |original|. The string will then have the lowest/oldest window on the left 52 // of |original|. The string will then have the lowest/oldest window on the left
34 // and the highest / newest on the right. 53 // and the highest / newest on the right.
35 std::string GetWindowOrder(const aura::Window::Windows& original, 54 std::string GetWindowOrder(const aura::Window::Windows& original,
36 const aura::Window::Windows& now) { 55 const aura::Window::Windows& now) {
37 if (original.size() != now.size()) 56 if (original.size() != now.size())
38 return "size has changed."; 57 return "size has changed.";
39 std::string output; 58 std::string output;
40 for (aura::Window::Windows::const_iterator it = now.begin(); 59 for (aura::Window::Windows::const_iterator it = now.begin();
41 it != now.end(); ++it) { 60 it != now.end(); ++it) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 106
88 } // namespace 107 } // namespace
89 108
90 typedef test::AthenaTestBase WindowListProviderImplTest; 109 typedef test::AthenaTestBase WindowListProviderImplTest;
91 110
92 // Tests that the order of windows match the stacking order of the windows in 111 // Tests that the order of windows match the stacking order of the windows in
93 // the container, even after the order is changed through the aura Window API. 112 // the container, even after the order is changed through the aura Window API.
94 TEST_F(WindowListProviderImplTest, StackingOrder) { 113 TEST_F(WindowListProviderImplTest, StackingOrder) {
95 aura::test::TestWindowDelegate delegate; 114 aura::test::TestWindowDelegate delegate;
96 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); 115 scoped_ptr<aura::Window> container(new aura::Window(&delegate));
97 scoped_ptr<aura::Window> first =
98 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
99 scoped_ptr<aura::Window> second =
100 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
101 scoped_ptr<aura::Window> third =
102 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
103 container->AddChild(first.get());
104 container->AddChild(second.get());
105 container->AddChild(third.get());
106
107 scoped_ptr<WindowListProvider> list_provider( 116 scoped_ptr<WindowListProvider> list_provider(
108 new WindowListProviderImpl(container.get())); 117 new WindowListProviderImpl(container.get()));
118
119 scoped_ptr<aura::Window> first =
120 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
121 scoped_ptr<aura::Window> second =
122 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
123 scoped_ptr<aura::Window> third =
124 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
125
126 EXPECT_EQ(3u, container->children().size());
127 EXPECT_EQ(container->children().size(),
128 list_provider->GetWindowList().size());
129
109 EXPECT_TRUE(AreWindowListsEqual(container->children(), 130 EXPECT_TRUE(AreWindowListsEqual(container->children(),
110 list_provider->GetWindowList())); 131 list_provider->GetWindowList()));
111 132
112 container->StackChildAtTop(first.get()); 133 container->StackChildAtTop(first.get());
113 EXPECT_TRUE(AreWindowListsEqual(container->children(), 134 EXPECT_TRUE(AreWindowListsEqual(container->children(),
114 list_provider->GetWindowList())); 135 list_provider->GetWindowList()));
136 EXPECT_EQ(3u, container->children().size());
115 EXPECT_EQ(first.get(), container->children().back()); 137 EXPECT_EQ(first.get(), container->children().back());
116 } 138 }
117 139
118 // Tests that only normal windows of the associated container will be listed. 140 // Tests that only normal windows of the associated container will be listed.
119 TEST_F(WindowListProviderImplTest, ListContainsOnlyNormalWindows) { 141 TEST_F(WindowListProviderImplTest, ListContainsOnlyNormalWindows) {
120 aura::test::TestWindowDelegate delegate; 142 aura::test::TestWindowDelegate delegate;
121 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); 143 scoped_ptr<aura::Window> container(new aura::Window(&delegate));
122 scoped_ptr<aura::Window> first =
123 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
124 scoped_ptr<aura::Window> second =
125 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP);
126 scoped_ptr<aura::Window> third =
127 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
128 scoped_ptr<aura::Window> fourth =
129 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU);
130 container->AddChild(first.get());
131 container->AddChild(second.get());
132 container->AddChild(third.get());
133 container->AddChild(fourth.get());
134
135 scoped_ptr<WindowListProvider> list_provider( 144 scoped_ptr<WindowListProvider> list_provider(
136 new WindowListProviderImpl(container.get())); 145 new WindowListProviderImpl(container.get()));
137 146
147 scoped_ptr<aura::Window> first =
148 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
149 scoped_ptr<aura::Window> second =
150 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_POPUP);
151 scoped_ptr<aura::Window> third =
152 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
153 scoped_ptr<aura::Window> fourth =
154 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_MENU);
155
138 const aura::Window::Windows& list = list_provider->GetWindowList(); 156 const aura::Window::Windows& list = list_provider->GetWindowList();
139 EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), second.get())); 157 EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), second.get()));
140 EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), fourth.get())); 158 EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), fourth.get()));
141 EXPECT_NE(list.end(), std::find(list.begin(), list.end(), first.get())); 159 EXPECT_NE(list.end(), std::find(list.begin(), list.end(), first.get()));
142 EXPECT_NE(list.end(), std::find(list.begin(), list.end(), third.get())); 160 EXPECT_NE(list.end(), std::find(list.begin(), list.end(), third.get()));
143 } 161 }
144 162
145 // Testing that IsValidWidow, IsWindowInList and AddWindow work as expected. 163 // Testing that IsValidWidow, IsWindowInList and AddWindow work as expected.
146 TEST_F(WindowListProviderImplTest, SimpleChecks) { 164 TEST_F(WindowListProviderImplTest, SimpleChecks) {
147 aura::test::TestWindowDelegate delegate; 165 aura::test::TestWindowDelegate delegate;
148 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); 166 scoped_ptr<aura::Window> container(new aura::Window(&delegate));
167 scoped_ptr<WindowListProviderImpl> list_provider(
168 new WindowListProviderImpl(container.get()));
149 169
150 scoped_ptr<aura::Window> normal_window = 170 scoped_ptr<aura::Window> normal_window =
151 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); 171 CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL);
152 scoped_ptr<aura::Window> popup_window = 172 scoped_ptr<aura::Window> popup_window =
153 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP); 173 CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_POPUP);
154 scoped_ptr<aura::Window> menu_window = 174 scoped_ptr<aura::Window> menu_window =
155 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU); 175 CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_MENU);
156
157 scoped_ptr<WindowListProvider> list_provider(
158 new WindowListProviderImpl(container.get()));
159 176
160 // Check which windows are valid and which are not. 177 // Check which windows are valid and which are not.
161 EXPECT_TRUE(list_provider->IsValidWindow(normal_window.get())); 178 EXPECT_TRUE(list_provider->IsValidWindow(normal_window.get()));
162 EXPECT_FALSE(list_provider->IsValidWindow(popup_window.get())); 179 EXPECT_FALSE(list_provider->IsValidWindow(popup_window.get()));
163 EXPECT_FALSE(list_provider->IsValidWindow(menu_window.get())); 180 EXPECT_FALSE(list_provider->IsValidWindow(menu_window.get()));
164 181
165 // Check that no window is currently in the list. 182 // Check that no window is currently in the list.
166 EXPECT_FALSE(list_provider->IsWindowInList(normal_window.get())); 183 EXPECT_FALSE(list_provider->IsWindowInList(normal_window.get()));
167 EXPECT_FALSE(list_provider->IsWindowInList(popup_window.get())); 184 EXPECT_FALSE(list_provider->IsWindowInList(popup_window.get()));
168 EXPECT_FALSE(list_provider->IsWindowInList(menu_window.get())); 185 EXPECT_FALSE(list_provider->IsWindowInList(menu_window.get()));
169 186
170 // Check that adding the window will add it to the list. 187 // Check that adding the window will add it to the list.
171 container->AddChild(normal_window.get()); 188 container->AddChild(normal_window.get());
172 EXPECT_TRUE(list_provider->IsWindowInList(normal_window.get())); 189 EXPECT_TRUE(list_provider->IsWindowInList(normal_window.get()));
173 } 190 }
174 191
175 // Testing that window ordering functions work as expected. 192 // Testing that window ordering functions work as expected.
176 TEST_F(WindowListProviderImplTest, TestWindowOrderingFunctions) { 193 TEST_F(WindowListProviderImplTest, TestWindowOrderingFunctions) {
177 aura::test::TestWindowDelegate delegate; 194 aura::test::TestWindowDelegate delegate;
178 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); 195 scoped_ptr<aura::Window> container(new aura::Window(&delegate));
179
180 scoped_ptr<aura::Window> window1 =
181 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
182 scoped_ptr<aura::Window> window2 =
183 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
184 scoped_ptr<aura::Window> window3 =
185 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
186
187 scoped_ptr<WindowListProvider> list_provider( 196 scoped_ptr<WindowListProvider> list_provider(
188 new WindowListProviderImpl(container.get())); 197 new WindowListProviderImpl(container.get()));
189 scoped_ptr<WindowListObserver> observer( 198 scoped_ptr<WindowListObserver> observer(
190 new WindowListObserver(list_provider.get())); 199 new WindowListObserver(list_provider.get()));
191 200
201 scoped_ptr<aura::Window> window1 =
202 CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL);
203 scoped_ptr<aura::Window> window2 =
204 CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL);
205 scoped_ptr<aura::Window> window3 =
206 CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL);
207
192 EXPECT_FALSE(list_provider->IsWindowInList(window1.get())); 208 EXPECT_FALSE(list_provider->IsWindowInList(window1.get()));
193 EXPECT_FALSE(list_provider->IsWindowInList(window2.get())); 209 EXPECT_FALSE(list_provider->IsWindowInList(window2.get()));
194 EXPECT_FALSE(list_provider->IsWindowInList(window3.get())); 210 EXPECT_FALSE(list_provider->IsWindowInList(window3.get()));
195 211
196 // Add the windows. 212 // Add the windows.
197 container->AddChild(window1.get()); 213 container->AddChild(window1.get());
198 container->AddChild(window2.get()); 214 container->AddChild(window2.get());
199 container->AddChild(window3.get()); 215 container->AddChild(window3.get());
200 // Make a copy of the window-list in the original order. 216 // Make a copy of the window-list in the original order.
201 aura::Window::Windows original_order = list_provider->GetWindowList(); 217 aura::Window::Windows original_order = list_provider->GetWindowList();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 EXPECT_EQ(4, observer->calls()); 253 EXPECT_EQ(4, observer->calls());
238 list_provider->StackWindowBehindTo(window3.get(), window1.get()); 254 list_provider->StackWindowBehindTo(window3.get(), window1.get());
239 EXPECT_EQ("2 3 1", GetWindowOrder(original_order, 255 EXPECT_EQ("2 3 1", GetWindowOrder(original_order,
240 list_provider->GetWindowList())); 256 list_provider->GetWindowList()));
241 EXPECT_EQ(4, observer->calls()); 257 EXPECT_EQ(4, observer->calls());
242 } 258 }
243 259
244 TEST_F(WindowListProviderImplTest, TestWindowRemovalNotification) { 260 TEST_F(WindowListProviderImplTest, TestWindowRemovalNotification) {
245 aura::test::TestWindowDelegate delegate; 261 aura::test::TestWindowDelegate delegate;
246 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); 262 scoped_ptr<aura::Window> container(new aura::Window(&delegate));
247
248 scoped_ptr<aura::Window> window1 =
249 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
250 scoped_ptr<aura::Window> window2 =
251 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
252 scoped_ptr<aura::Window> window3 =
253 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
254 scoped_ptr<aura::Window> window4 =
255 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP);
256
257 scoped_ptr<WindowListProvider> list_provider( 263 scoped_ptr<WindowListProvider> list_provider(
258 new WindowListProviderImpl(container.get())); 264 new WindowListProviderImpl(container.get()));
259 scoped_ptr<WindowListObserver> observer( 265 scoped_ptr<WindowListObserver> observer(
260 new WindowListObserver(list_provider.get())); 266 new WindowListObserver(list_provider.get()));
261 267
262 // Add the windows. 268 scoped_ptr<aura::Window> window1 =
263 container->AddChild(window1.get()); 269 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
264 container->AddChild(window2.get()); 270 scoped_ptr<aura::Window> window2 =
265 container->AddChild(window3.get()); 271 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
266 container->AddChild(window4.get()); 272 scoped_ptr<aura::Window> window3 =
273 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
274 scoped_ptr<aura::Window> window4 =
275 CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_POPUP);
276
267 // The popup-window (window4) should not be included in the window-list. 277 // The popup-window (window4) should not be included in the window-list.
268 ASSERT_EQ(3U, list_provider->GetWindowList().size()); 278 ASSERT_EQ(3U, list_provider->GetWindowList().size());
269 EXPECT_EQ(0, observer->window_removal_calls()); 279 EXPECT_EQ(0, observer->window_removal_calls());
270 EXPECT_FALSE(list_provider->IsWindowInList(window4.get())); 280 EXPECT_FALSE(list_provider->IsWindowInList(window4.get()));
271 281
272 // Destroying the popup window should not trigger the remove notification. 282 // Destroying the popup window should not trigger the remove notification.
273 window4.reset(); 283 window4.reset();
274 ASSERT_EQ(3U, list_provider->GetWindowList().size()); 284 ASSERT_EQ(3U, list_provider->GetWindowList().size());
275 EXPECT_EQ(0, observer->window_removal_calls()); 285 EXPECT_EQ(0, observer->window_removal_calls());
276 286
277 window2.reset(); 287 window2.reset();
278 ASSERT_EQ(2U, list_provider->GetWindowList().size()); 288 ASSERT_EQ(2U, list_provider->GetWindowList().size());
279 EXPECT_EQ(1, observer->window_removal_calls()); 289 EXPECT_EQ(1, observer->window_removal_calls());
280 290
281 window1.reset(); 291 window1.reset();
282 ASSERT_EQ(1U, list_provider->GetWindowList().size()); 292 ASSERT_EQ(1U, list_provider->GetWindowList().size());
283 EXPECT_EQ(2, observer->window_removal_calls()); 293 EXPECT_EQ(2, observer->window_removal_calls());
284 294
285 window3.reset(); 295 window3.reset();
286 ASSERT_EQ(0U, list_provider->GetWindowList().size()); 296 ASSERT_EQ(0U, list_provider->GetWindowList().size());
287 EXPECT_EQ(3, observer->window_removal_calls()); 297 EXPECT_EQ(3, observer->window_removal_calls());
288 } 298 }
289 299
300 // Test that transient windows are handled property.
301 TEST_F(WindowListProviderImplTest, TransientWindows) {
302 aura::test::TestWindowDelegate delegate;
303 delegate.set_can_focus(true);
304
305 WindowListProvider* list_provider =
306 WindowManager::Get()->GetWindowListProvider();
307
308 scoped_ptr<WindowListObserver> observer(
309 new WindowListObserver(list_provider));
310 scoped_ptr<aura::Window> w1 = CreateTestWindow(&delegate, gfx::Rect());
311 w1->Show();
312 scoped_ptr<aura::Window> w2 = CreateTestWindow(&delegate, gfx::Rect());
313 w2->Show();
314 scoped_ptr<aura::Window> t1 =
315 CreateTransientWindow(w1.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL);
316 t1->Show();
317
318 EXPECT_EQ(2u, list_provider->GetWindowList().size());
319
320 // Activation should honor transient relations.
321 wm::ActivateWindow(w2.get());
322 EXPECT_EQ(w1.get(), list_provider->GetWindowList()[0]);
323 EXPECT_EQ(w2.get(), list_provider->GetWindowList()[1]);
324
325 EXPECT_EQ(w1.get(), w1->parent()->children()[0]);
326 EXPECT_EQ(t1.get(), w1->parent()->children()[1]);
327 EXPECT_EQ(w2.get(), w1->parent()->children()[2]);
328
329 wm::ActivateWindow(w1.get());
330 EXPECT_EQ(w2.get(), w1->parent()->children()[0]);
331 EXPECT_EQ(w1.get(), w1->parent()->children()[1]);
332 EXPECT_EQ(t1.get(), w1->parent()->children()[2]);
333
334 // Manual operations should honor transient relations too.
335 // TODO(oshima): moving the active window back should activate the top window.
336 list_provider->StackWindowBehindTo(w1.get(), w2.get());
337 EXPECT_EQ(w1.get(), w1->parent()->children()[0]);
338 EXPECT_EQ(t1.get(), w1->parent()->children()[1]);
339 EXPECT_EQ(w2.get(), w1->parent()->children()[2]);
340
341 list_provider->StackWindowFrontOf(w1.get(), w2.get());
342 EXPECT_EQ(w2.get(), w1->parent()->children()[0]);
343 EXPECT_EQ(w1.get(), w1->parent()->children()[1]);
344 EXPECT_EQ(t1.get(), w1->parent()->children()[2]);
345
346 // Transient windows should follow the transient parent's
347 // visibility.
348 EXPECT_TRUE(t1->IsVisible());
349 w1->Hide();
350 EXPECT_FALSE(t1->IsVisible());
351 w1->Show();
352 EXPECT_TRUE(t1->IsVisible());
353
354 // Resetting transient window won't notify the observer.
355 t1.reset();
356 EXPECT_EQ(0, observer->window_removal_calls());
357 }
358
290 } // namespace athena 359 } // namespace athena
OLDNEW
« no previous file with comments | « athena/wm/window_list_provider_impl.cc ('k') | athena/wm/window_manager_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698