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

Side by Side Diff: ash/root_window_controller_unittest.cc

Issue 2808723004: Renames WmShell to ShellPort (Closed)
Patch Set: feedback Created 3 years, 8 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ash/root_window_controller.h" 5 #include "ash/root_window_controller.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "ash/public/cpp/shell_window_ids.h" 9 #include "ash/public/cpp/shell_window_ids.h"
10 #include "ash/session/session_controller.h" 10 #include "ash/session/session_controller.h"
11 #include "ash/shell.h" 11 #include "ash/shell.h"
12 #include "ash/shell_port.h"
12 #include "ash/system/tray/system_tray_delegate.h" 13 #include "ash/system/tray/system_tray_delegate.h"
13 #include "ash/test/ash_test_base.h" 14 #include "ash/test/ash_test_base.h"
14 #include "ash/test/test_session_controller_client.h" 15 #include "ash/test/test_session_controller_client.h"
15 #include "ash/wm/system_modal_container_layout_manager.h" 16 #include "ash/wm/system_modal_container_layout_manager.h"
16 #include "ash/wm/window_properties.h" 17 #include "ash/wm/window_properties.h"
17 #include "ash/wm/window_state.h" 18 #include "ash/wm/window_state.h"
18 #include "ash/wm/window_state_aura.h" 19 #include "ash/wm/window_state_aura.h"
19 #include "ash/wm/window_util.h" 20 #include "ash/wm/window_util.h"
20 #include "ash/wm_shell.h"
21 #include "ash/wm_window.h" 21 #include "ash/wm_window.h"
22 #include "base/command_line.h" 22 #include "base/command_line.h"
23 #include "ui/aura/client/focus_change_observer.h" 23 #include "ui/aura/client/focus_change_observer.h"
24 #include "ui/aura/client/focus_client.h" 24 #include "ui/aura/client/focus_client.h"
25 #include "ui/aura/client/window_parenting_client.h" 25 #include "ui/aura/client/window_parenting_client.h"
26 #include "ui/aura/env.h" 26 #include "ui/aura/env.h"
27 #include "ui/aura/test/test_window_delegate.h" 27 #include "ui/aura/test/test_window_delegate.h"
28 #include "ui/aura/test/test_windows.h" 28 #include "ui/aura/test/test_windows.h"
29 #include "ui/aura/window.h" 29 #include "ui/aura/window.h"
30 #include "ui/aura/window_event_dispatcher.h" 30 #include "ui/aura/window_event_dispatcher.h"
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 EXPECT_EQ(root_windows[1], 179 EXPECT_EQ(root_windows[1],
180 unparented_control->GetNativeView()->GetRootWindow()); 180 unparented_control->GetNativeView()->GetRootWindow());
181 EXPECT_EQ(kShellWindowId_UnparentedControlContainer, 181 EXPECT_EQ(kShellWindowId_UnparentedControlContainer,
182 unparented_control->GetNativeView()->parent()->id()); 182 unparented_control->GetNativeView()->parent()->id());
183 183
184 aura::Window* panel = CreateTestWindowInShellWithDelegateAndType( 184 aura::Window* panel = CreateTestWindowInShellWithDelegateAndType(
185 NULL, ui::wm::WINDOW_TYPE_PANEL, 0, gfx::Rect(700, 100, 100, 100)); 185 NULL, ui::wm::WINDOW_TYPE_PANEL, 0, gfx::Rect(700, 100, 100, 100));
186 EXPECT_EQ(root_windows[1], panel->GetRootWindow()); 186 EXPECT_EQ(root_windows[1], panel->GetRootWindow());
187 EXPECT_EQ(kShellWindowId_PanelContainer, panel->parent()->id()); 187 EXPECT_EQ(kShellWindowId_PanelContainer, panel->parent()->id());
188 188
189 if (WmShell::Get()->IsRunningInMash()) { 189 if (ShellPort::Get()->IsRunningInMash()) {
190 // TODO(erg): Ignore this one part of the test when running mash. We would 190 // TODO(erg): Ignore this one part of the test when running mash. We would
191 // crash because the aura::Window |d2| created in the other block doesn't 191 // crash because the aura::Window |d2| created in the other block doesn't
192 // get deleted, and thus continues to contain a reference to its delegate, 192 // get deleted, and thus continues to contain a reference to its delegate,
193 // |delete_on_blur_delegate|, which is declared on the stack. 193 // |delete_on_blur_delegate|, which is declared on the stack.
194 // 194 //
195 // Making this work requires building out enough of the display management 195 // Making this work requires building out enough of the display management
196 // system; notably the part where updating the display may cause focus 196 // system; notably the part where updating the display may cause focus
197 // changes. http://crbug.com/695632. 197 // changes. http://crbug.com/695632.
198 UpdateDisplay("600x600"); 198 UpdateDisplay("600x600");
199 } else { 199 } else {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 UpdateDisplay("500x500"); 295 UpdateDisplay("500x500");
296 EXPECT_EQ(root_windows[0], modal->GetNativeView()->GetRootWindow()); 296 EXPECT_EQ(root_windows[0], modal->GetNativeView()->GetRootWindow());
297 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); 297 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView()));
298 generator_1st.ClickLeftButton(); 298 generator_1st.ClickLeftButton();
299 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView())); 299 EXPECT_TRUE(wm::IsActiveWindow(modal->GetNativeView()));
300 } 300 }
301 301
302 // Make sure lock related windows moves. 302 // Make sure lock related windows moves.
303 TEST_F(RootWindowControllerTest, MoveWindows_LockWindowsInUnified) { 303 TEST_F(RootWindowControllerTest, MoveWindows_LockWindowsInUnified) {
304 // TODO: requires unified desktop mode. http://crbug.com/581462. 304 // TODO: requires unified desktop mode. http://crbug.com/581462.
305 if (WmShell::Get()->IsRunningInMash()) 305 if (ShellPort::Get()->IsRunningInMash())
306 return; 306 return;
307 307
308 display_manager()->SetUnifiedDesktopEnabled(true); 308 display_manager()->SetUnifiedDesktopEnabled(true);
309 309
310 UpdateDisplay("500x500"); 310 UpdateDisplay("500x500");
311 const int kLockScreenWindowId = 1000; 311 const int kLockScreenWindowId = 1000;
312 const int kLockWallpaperWindowId = 1001; 312 const int kLockWallpaperWindowId = 1001;
313 313
314 RootWindowController* controller = Shell::GetPrimaryRootWindowController(); 314 RootWindowController* controller = Shell::GetPrimaryRootWindowController();
315 315
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 377
378 ASSERT_EQ(lock_screen->GetNativeWindow(), 378 ASSERT_EQ(lock_screen->GetNativeWindow(),
379 controller->GetRootWindow()->GetChildById(kLockScreenWindowId)); 379 controller->GetRootWindow()->GetChildById(kLockScreenWindowId));
380 ASSERT_EQ(lock_wallpaper->GetNativeWindow(), 380 ASSERT_EQ(lock_wallpaper->GetNativeWindow(),
381 controller->GetRootWindow()->GetChildById(kLockWallpaperWindowId)); 381 controller->GetRootWindow()->GetChildById(kLockWallpaperWindowId));
382 EXPECT_EQ("0,0 600x500", lock_screen->GetNativeWindow()->bounds().ToString()); 382 EXPECT_EQ("0,0 600x500", lock_screen->GetNativeWindow()->bounds().ToString());
383 } 383 }
384 384
385 TEST_F(RootWindowControllerTest, ModalContainer) { 385 TEST_F(RootWindowControllerTest, ModalContainer) {
386 UpdateDisplay("600x600"); 386 UpdateDisplay("600x600");
387 WmShell* wm_shell = WmShell::Get(); 387 RootWindowController* controller =
388 RootWindowController* controller = wm_shell->GetPrimaryRootWindowController(); 388 ShellPort::Get()->GetPrimaryRootWindowController();
389 EXPECT_EQ(LoginStatus::USER, 389 EXPECT_EQ(LoginStatus::USER,
390 Shell::Get()->system_tray_delegate()->GetUserLoginStatus()); 390 Shell::Get()->system_tray_delegate()->GetUserLoginStatus());
391 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), 391 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer),
392 controller->GetSystemModalLayoutManager(NULL)); 392 controller->GetSystemModalLayoutManager(NULL));
393 393
394 views::Widget* session_modal_widget = 394 views::Widget* session_modal_widget =
395 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); 395 CreateModalWidget(gfx::Rect(300, 10, 100, 100));
396 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), 396 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer),
397 controller->GetSystemModalLayoutManager( 397 controller->GetSystemModalLayoutManager(
398 WmWindow::Get(session_modal_widget->GetNativeWindow()))); 398 WmWindow::Get(session_modal_widget->GetNativeWindow())));
(...skipping 25 matching lines...) Expand all
424 424
425 // Configure login screen environment. 425 // Configure login screen environment.
426 SessionController* session_controller = Shell::Get()->session_controller(); 426 SessionController* session_controller = Shell::Get()->session_controller();
427 SetUserLoggedIn(false); 427 SetUserLoggedIn(false);
428 EXPECT_EQ(LoginStatus::NOT_LOGGED_IN, 428 EXPECT_EQ(LoginStatus::NOT_LOGGED_IN,
429 Shell::Get()->system_tray_delegate()->GetUserLoginStatus()); 429 Shell::Get()->system_tray_delegate()->GetUserLoginStatus());
430 EXPECT_EQ(0, session_controller->NumberOfLoggedInUsers()); 430 EXPECT_EQ(0, session_controller->NumberOfLoggedInUsers());
431 EXPECT_FALSE(session_controller->IsActiveUserSessionStarted()); 431 EXPECT_FALSE(session_controller->IsActiveUserSessionStarted());
432 432
433 RootWindowController* controller = 433 RootWindowController* controller =
434 WmShell::Get()->GetPrimaryRootWindowController(); 434 ShellPort::Get()->GetPrimaryRootWindowController();
435 EXPECT_EQ( 435 EXPECT_EQ(
436 GetLayoutManager(controller, kShellWindowId_LockSystemModalContainer), 436 GetLayoutManager(controller, kShellWindowId_LockSystemModalContainer),
437 controller->GetSystemModalLayoutManager(NULL)); 437 controller->GetSystemModalLayoutManager(NULL));
438 438
439 aura::Window* lock_container = 439 aura::Window* lock_container =
440 controller->GetContainer(kShellWindowId_LockScreenContainer); 440 controller->GetContainer(kShellWindowId_LockScreenContainer);
441 views::Widget* login_modal_widget = 441 views::Widget* login_modal_widget =
442 CreateModalWidgetWithParent(gfx::Rect(300, 10, 100, 100), lock_container); 442 CreateModalWidgetWithParent(gfx::Rect(300, 10, 100, 100), lock_container);
443 EXPECT_EQ( 443 EXPECT_EQ(
444 GetLayoutManager(controller, kShellWindowId_LockSystemModalContainer), 444 GetLayoutManager(controller, kShellWindowId_LockSystemModalContainer),
(...skipping 14 matching lines...) Expand all
459 views::Widget* session_modal_widget = 459 views::Widget* session_modal_widget =
460 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); 460 CreateModalWidget(gfx::Rect(300, 10, 100, 100));
461 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), 461 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer),
462 controller->GetSystemModalLayoutManager( 462 controller->GetSystemModalLayoutManager(
463 WmWindow::Get(session_modal_widget->GetNativeWindow()))); 463 WmWindow::Get(session_modal_widget->GetNativeWindow())));
464 } 464 }
465 465
466 TEST_F(RootWindowControllerTest, ModalContainerBlockedSession) { 466 TEST_F(RootWindowControllerTest, ModalContainerBlockedSession) {
467 UpdateDisplay("600x600"); 467 UpdateDisplay("600x600");
468 RootWindowController* controller = 468 RootWindowController* controller =
469 WmShell::Get()->GetPrimaryRootWindowController(); 469 ShellPort::Get()->GetPrimaryRootWindowController();
470 aura::Window* lock_container = 470 aura::Window* lock_container =
471 controller->GetContainer(kShellWindowId_LockScreenContainer); 471 controller->GetContainer(kShellWindowId_LockScreenContainer);
472 for (int block_reason = FIRST_BLOCK_REASON; 472 for (int block_reason = FIRST_BLOCK_REASON;
473 block_reason < NUMBER_OF_BLOCK_REASONS; ++block_reason) { 473 block_reason < NUMBER_OF_BLOCK_REASONS; ++block_reason) {
474 views::Widget* session_modal_widget = 474 views::Widget* session_modal_widget =
475 CreateModalWidget(gfx::Rect(300, 10, 100, 100)); 475 CreateModalWidget(gfx::Rect(300, 10, 100, 100));
476 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), 476 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer),
477 controller->GetSystemModalLayoutManager( 477 controller->GetSystemModalLayoutManager(
478 WmWindow::Get(session_modal_widget->GetNativeWindow()))); 478 WmWindow::Get(session_modal_widget->GetNativeWindow())));
479 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer), 479 EXPECT_EQ(GetLayoutManager(controller, kShellWindowId_SystemModalContainer),
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 kShellWindowId_VirtualKeyboardContainer)); 756 kShellWindowId_VirtualKeyboardContainer));
757 ASSERT_FALSE(Shell::GetContainer(secondary_root_window, 757 ASSERT_FALSE(Shell::GetContainer(secondary_root_window,
758 kShellWindowId_VirtualKeyboardContainer)); 758 kShellWindowId_VirtualKeyboardContainer));
759 } 759 }
760 760
761 // Test for http://crbug.com/303429. Virtual keyboard container should show on 761 // Test for http://crbug.com/303429. Virtual keyboard container should show on
762 // a display which has touch capability. 762 // a display which has touch capability.
763 TEST_F(VirtualKeyboardRootWindowControllerTest, 763 TEST_F(VirtualKeyboardRootWindowControllerTest,
764 VirtualKeyboardOnTouchableDisplayOnly) { 764 VirtualKeyboardOnTouchableDisplayOnly) {
765 // TODO: investigate failure in mash. http://crbug.com/695640. 765 // TODO: investigate failure in mash. http://crbug.com/695640.
766 if (WmShell::Get()->IsRunningInMash()) 766 if (ShellPort::Get()->IsRunningInMash())
767 return; 767 return;
768 768
769 UpdateDisplay("500x500,500x500"); 769 UpdateDisplay("500x500,500x500");
770 display::Display secondary_display = 770 display::Display secondary_display =
771 Shell::Get()->display_manager()->GetSecondaryDisplay(); 771 Shell::Get()->display_manager()->GetSecondaryDisplay();
772 display::test::DisplayManagerTestApi(Shell::Get()->display_manager()) 772 display::test::DisplayManagerTestApi(Shell::Get()->display_manager())
773 .SetTouchSupport(secondary_display.id(), 773 .SetTouchSupport(secondary_display.id(),
774 display::Display::TouchSupport::TOUCH_SUPPORT_AVAILABLE); 774 display::Display::TouchSupport::TOUCH_SUPPORT_AVAILABLE);
775 775
776 // The primary display doesn't have touch capability and the secondary display 776 // The primary display doesn't have touch capability and the secondary display
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 EXPECT_FALSE(Shell::GetContainer(primary_root_window, 808 EXPECT_FALSE(Shell::GetContainer(primary_root_window,
809 kShellWindowId_VirtualKeyboardContainer)); 809 kShellWindowId_VirtualKeyboardContainer));
810 EXPECT_TRUE(Shell::GetContainer(secondary_root_window, 810 EXPECT_TRUE(Shell::GetContainer(secondary_root_window,
811 kShellWindowId_VirtualKeyboardContainer)); 811 kShellWindowId_VirtualKeyboardContainer));
812 } 812 }
813 813
814 // Test for http://crbug.com/303429. If both of displays have touch capability, 814 // Test for http://crbug.com/303429. If both of displays have touch capability,
815 // virtual keyboard follows the input focus. 815 // virtual keyboard follows the input focus.
816 TEST_F(VirtualKeyboardRootWindowControllerTest, FollowInputFocus) { 816 TEST_F(VirtualKeyboardRootWindowControllerTest, FollowInputFocus) {
817 // TODO: investigate failure in mash. http://crbug.com/695640. 817 // TODO: investigate failure in mash. http://crbug.com/695640.
818 if (WmShell::Get()->IsRunningInMash()) 818 if (ShellPort::Get()->IsRunningInMash())
819 return; 819 return;
820 820
821 UpdateDisplay("500x500,500x500"); 821 UpdateDisplay("500x500,500x500");
822 const int64_t primary_display_id = 822 const int64_t primary_display_id =
823 display::Screen::GetScreen()->GetPrimaryDisplay().id(); 823 display::Screen::GetScreen()->GetPrimaryDisplay().id();
824 display::test::DisplayManagerTestApi(Shell::Get()->display_manager()) 824 display::test::DisplayManagerTestApi(Shell::Get()->display_manager())
825 .SetTouchSupport(primary_display_id, 825 .SetTouchSupport(primary_display_id,
826 display::Display::TouchSupport::TOUCH_SUPPORT_AVAILABLE); 826 display::Display::TouchSupport::TOUCH_SUPPORT_AVAILABLE);
827 const int64_t secondary_display_id = 827 const int64_t secondary_display_id =
828 Shell::Get()->display_manager()->GetSecondaryDisplay().id(); 828 Shell::Get()->display_manager()->GetSecondaryDisplay().id();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
878 kShellWindowId_VirtualKeyboardContainer)); 878 kShellWindowId_VirtualKeyboardContainer));
879 EXPECT_FALSE(Shell::GetContainer(secondary_root_window, 879 EXPECT_FALSE(Shell::GetContainer(secondary_root_window,
880 kShellWindowId_VirtualKeyboardContainer)); 880 kShellWindowId_VirtualKeyboardContainer));
881 } 881 }
882 882
883 // Test for http://crbug.com/303429. Even if both of display don't have touch 883 // Test for http://crbug.com/303429. Even if both of display don't have touch
884 // capability, the virtual keyboard shows up on the specified display. 884 // capability, the virtual keyboard shows up on the specified display.
885 TEST_F(VirtualKeyboardRootWindowControllerTest, 885 TEST_F(VirtualKeyboardRootWindowControllerTest,
886 VirtualKeyboardShowOnSpecifiedDisplay) { 886 VirtualKeyboardShowOnSpecifiedDisplay) {
887 // TODO: fails in mash. http://crbug.com/695640. 887 // TODO: fails in mash. http://crbug.com/695640.
888 if (WmShell::Get()->IsRunningInMash()) 888 if (ShellPort::Get()->IsRunningInMash())
889 return; 889 return;
890 890
891 UpdateDisplay("500x500,500x500"); 891 UpdateDisplay("500x500,500x500");
892 display::Display secondary_display = GetSecondaryDisplay(); 892 display::Display secondary_display = GetSecondaryDisplay();
893 893
894 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); 894 aura::Window::Windows root_windows = Shell::GetAllRootWindows();
895 aura::Window* primary_root_window = Shell::GetPrimaryRootWindow(); 895 aura::Window* primary_root_window = Shell::GetPrimaryRootWindow();
896 aura::Window* secondary_root_window = root_windows[0] == primary_root_window 896 aura::Window* secondary_root_window = root_windows[0] == primary_root_window
897 ? root_windows[1] 897 ? root_windows[1]
898 : root_windows[0]; 898 : root_windows[0];
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1075 ASSERT_EQ(root_window->bounds().width(), 1075 ASSERT_EQ(root_window->bounds().width(),
1076 text_input_client.caret_exclude_rect().width()); 1076 text_input_client.caret_exclude_rect().width());
1077 ASSERT_EQ(keyboard_height, text_input_client.caret_exclude_rect().height()); 1077 ASSERT_EQ(keyboard_height, text_input_client.caret_exclude_rect().height());
1078 1078
1079 input_method->SetFocusedTextInputClient(NULL); 1079 input_method->SetFocusedTextInputClient(NULL);
1080 } 1080 }
1081 1081
1082 TEST_F(VirtualKeyboardRootWindowControllerTest, 1082 TEST_F(VirtualKeyboardRootWindowControllerTest,
1083 EnsureCaretInWorkAreaWithMultipleDisplays) { 1083 EnsureCaretInWorkAreaWithMultipleDisplays) {
1084 // TODO: fails in mash. http://crbug.com/695640. 1084 // TODO: fails in mash. http://crbug.com/695640.
1085 if (WmShell::Get()->IsRunningInMash()) 1085 if (ShellPort::Get()->IsRunningInMash())
1086 return; 1086 return;
1087 1087
1088 UpdateDisplay("500x500,600x600"); 1088 UpdateDisplay("500x500,600x600");
1089 const int64_t primary_display_id = 1089 const int64_t primary_display_id =
1090 display::Screen::GetScreen()->GetPrimaryDisplay().id(); 1090 display::Screen::GetScreen()->GetPrimaryDisplay().id();
1091 const int64_t secondary_display_id = GetSecondaryDisplay().id(); 1091 const int64_t secondary_display_id = GetSecondaryDisplay().id();
1092 ASSERT_NE(primary_display_id, secondary_display_id); 1092 ASSERT_NE(primary_display_id, secondary_display_id);
1093 1093
1094 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); 1094 aura::Window::Windows root_windows = Shell::GetAllRootWindows();
1095 ASSERT_EQ(static_cast<size_t>(2), root_windows.size()); 1095 ASSERT_EQ(static_cast<size_t>(2), root_windows.size());
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
1236 keyboard_controller->ui()->GetKeyboardWindow()->SetBounds( 1236 keyboard_controller->ui()->GetKeyboardWindow()->SetBounds(
1237 gfx::Rect(0, 400, 800, 200)); 1237 gfx::Rect(0, 400, 800, 200));
1238 EXPECT_EQ("0,400 800x200", keyboard_container->bounds().ToString()); 1238 EXPECT_EQ("0,400 800x200", keyboard_container->bounds().ToString());
1239 1239
1240 UpdateDisplay("600x800"); 1240 UpdateDisplay("600x800");
1241 EXPECT_EQ("0,600 600x200", keyboard_container->bounds().ToString()); 1241 EXPECT_EQ("0,600 600x200", keyboard_container->bounds().ToString());
1242 } 1242 }
1243 1243
1244 } // namespace test 1244 } // namespace test
1245 } // namespace ash 1245 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698