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

Side by Side Diff: ash/display/window_tree_host_manager_unittest.cc

Issue 2445583002: Relocate display_manager from ash to ui (Closed)
Patch Set: Created 4 years, 1 month 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/display/window_tree_host_manager.h" 5 #include "ash/display/window_tree_host_manager.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "ash/aura/wm_window_aura.h" 9 #include "ash/aura/wm_window_aura.h"
10 #include "ash/common/material_design/material_design_controller.h" 10 #include "ash/common/material_design/material_design_controller.h"
11 #include "ash/common/shelf/shelf_widget.h" 11 #include "ash/common/shelf/shelf_widget.h"
12 #include "ash/common/shelf/wm_shelf.h" 12 #include "ash/common/shelf/wm_shelf.h"
13 #include "ash/common/wm/window_state.h" 13 #include "ash/common/wm/window_state.h"
14 #include "ash/common/wm/wm_event.h" 14 #include "ash/common/wm/wm_event.h"
15 #include "ash/common/wm/wm_screen_util.h" 15 #include "ash/common/wm/wm_screen_util.h"
16 #include "ash/display/display_manager.h"
17 #include "ash/display/display_util.h" 16 #include "ash/display/display_util.h"
18 #include "ash/screen_util.h" 17 #include "ash/screen_util.h"
19 #include "ash/shell.h" 18 #include "ash/shell.h"
20 #include "ash/test/ash_md_test_base.h" 19 #include "ash/test/ash_md_test_base.h"
21 #include "ash/test/ash_test_base.h" 20 #include "ash/test/ash_test_base.h"
22 #include "ash/test/ash_test_helper.h" 21 #include "ash/test/ash_test_helper.h"
23 #include "ash/test/cursor_manager_test_api.h" 22 #include "ash/test/cursor_manager_test_api.h"
24 #include "ash/test/display_manager_test_api.h"
25 #include "ash/test/test_shell_delegate.h" 23 #include "ash/test/test_shell_delegate.h"
26 #include "ash/wm/window_state_aura.h" 24 #include "ash/wm/window_state_aura.h"
27 #include "base/command_line.h" 25 #include "base/command_line.h"
28 #include "ui/aura/client/focus_change_observer.h" 26 #include "ui/aura/client/focus_change_observer.h"
29 #include "ui/aura/client/focus_client.h" 27 #include "ui/aura/client/focus_client.h"
30 #include "ui/aura/env.h" 28 #include "ui/aura/env.h"
31 #include "ui/aura/window_observer.h" 29 #include "ui/aura/window_observer.h"
32 #include "ui/aura/window_tracker.h" 30 #include "ui/aura/window_tracker.h"
33 #include "ui/aura/window_tree_host.h" 31 #include "ui/aura/window_tree_host.h"
34 #include "ui/display/display.h" 32 #include "ui/display/display.h"
35 #include "ui/display/display_observer.h" 33 #include "ui/display/display_observer.h"
36 #include "ui/display/manager/display_layout.h" 34 #include "ui/display/manager/display_layout.h"
37 #include "ui/display/manager/display_layout_store.h" 35 #include "ui/display/manager/display_layout_store.h"
36 #include "ui/display/manager/display_manager.h"
38 #include "ui/display/manager/managed_display_info.h" 37 #include "ui/display/manager/managed_display_info.h"
39 #include "ui/display/screen.h" 38 #include "ui/display/screen.h"
39 #include "ui/display/test/display_manager_test_api.h"
40 #include "ui/events/event_handler.h" 40 #include "ui/events/event_handler.h"
41 #include "ui/events/test/event_generator.h" 41 #include "ui/events/test/event_generator.h"
42 #include "ui/views/mouse_watcher.h" 42 #include "ui/views/mouse_watcher.h"
43 #include "ui/views/mouse_watcher_view_host.h" 43 #include "ui/views/mouse_watcher_view_host.h"
44 #include "ui/views/view.h" 44 #include "ui/views/view.h"
45 #include "ui/views/widget/widget.h" 45 #include "ui/views/widget/widget.h"
46 #include "ui/wm/public/activation_change_observer.h" 46 #include "ui/wm/public/activation_change_observer.h"
47 #include "ui/wm/public/activation_client.h" 47 #include "ui/wm/public/activation_client.h"
48 48
49 namespace ash { 49 namespace ash {
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 test::AshTestBase* delegate_; // Not owned 210 test::AshTestBase* delegate_; // Not owned
211 DISALLOW_COPY_AND_ASSIGN(TestHelper); 211 DISALLOW_COPY_AND_ASSIGN(TestHelper);
212 }; 212 };
213 213
214 TestHelper::TestHelper(test::AshTestBase* delegate) : delegate_(delegate) {} 214 TestHelper::TestHelper(test::AshTestBase* delegate) : delegate_(delegate) {}
215 TestHelper::~TestHelper() {} 215 TestHelper::~TestHelper() {}
216 216
217 void TestHelper::SetSecondaryDisplayLayoutAndOffset( 217 void TestHelper::SetSecondaryDisplayLayoutAndOffset(
218 display::DisplayPlacement::Position position, 218 display::DisplayPlacement::Position position,
219 int offset) { 219 int offset) {
220 std::unique_ptr<display::DisplayLayout> layout(test::CreateDisplayLayout( 220 std::unique_ptr<display::DisplayLayout> layout(
221 delegate_->display_manager(), position, offset)); 221 display::test::CreateDisplayLayout(delegate_->display_manager(), position,
222 offset));
222 ASSERT_GT(display::Screen::GetScreen()->GetNumDisplays(), 1); 223 ASSERT_GT(display::Screen::GetScreen()->GetNumDisplays(), 1);
223 delegate_->display_manager()->SetLayoutForCurrentDisplays(std::move(layout)); 224 delegate_->display_manager()->SetLayoutForCurrentDisplays(std::move(layout));
224 } 225 }
225 226
226 void TestHelper::SetSecondaryDisplayLayout( 227 void TestHelper::SetSecondaryDisplayLayout(
227 display::DisplayPlacement::Position position) { 228 display::DisplayPlacement::Position position) {
228 SetSecondaryDisplayLayoutAndOffset(position, 0); 229 SetSecondaryDisplayLayoutAndOffset(position, 0);
229 } 230 }
230 231
231 void TestHelper::SetDefaultDisplayLayout( 232 void TestHelper::SetDefaultDisplayLayout(
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 CreateMirroredDisplayInfo(1, 2.0f); 616 CreateMirroredDisplayInfo(1, 2.0f);
616 const display::ManagedDisplayInfo external_display_info = 617 const display::ManagedDisplayInfo external_display_info =
617 CreateMirroredDisplayInfo(2, 1.0f); 618 CreateMirroredDisplayInfo(2, 1.0f);
618 619
619 std::vector<display::ManagedDisplayInfo> display_info_list; 620 std::vector<display::ManagedDisplayInfo> display_info_list;
620 // Mirror. 621 // Mirror.
621 display_info_list.push_back(internal_display_info); 622 display_info_list.push_back(internal_display_info);
622 display_info_list.push_back(external_display_info); 623 display_info_list.push_back(external_display_info);
623 display_manager()->OnNativeDisplaysChanged(display_info_list); 624 display_manager()->OnNativeDisplaysChanged(display_info_list);
624 const int64_t internal_display_id = 625 const int64_t internal_display_id =
625 test::DisplayManagerTestApi(display_manager()) 626 display::test::DisplayManagerTestApi(display_manager())
626 .SetFirstDisplayAsInternalDisplay(); 627 .SetFirstDisplayAsInternalDisplay();
627 EXPECT_EQ(1, internal_display_id); 628 EXPECT_EQ(1, internal_display_id);
628 EXPECT_EQ(2U, display_manager()->num_connected_displays()); 629 EXPECT_EQ(2U, display_manager()->num_connected_displays());
629 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); 630 EXPECT_EQ(1U, display_manager()->GetNumDisplays());
630 631
631 wm::WindowState* window_state = wm::GetWindowState(w1.get()); 632 wm::WindowState* window_state = wm::GetWindowState(w1.get());
632 const wm::WMEvent toggle_fullscreen_event(wm::WM_EVENT_TOGGLE_FULLSCREEN); 633 const wm::WMEvent toggle_fullscreen_event(wm::WM_EVENT_TOGGLE_FULLSCREEN);
633 window_state->OnWMEvent(&toggle_fullscreen_event); 634 window_state->OnWMEvent(&toggle_fullscreen_event);
634 EXPECT_TRUE(window_state->IsFullscreen()); 635 EXPECT_TRUE(window_state->IsFullscreen());
635 EXPECT_EQ("0,0 250x250", w1->bounds().ToString()); 636 EXPECT_EQ("0,0 250x250", w1->bounds().ToString());
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 display_manager()->SetDisplayRotation( 726 display_manager()->SetDisplayRotation(
726 primary_id, display::Display::ROTATE_90, 727 primary_id, display::Display::ROTATE_90,
727 display::Display::ROTATION_SOURCE_ACTIVE); 728 display::Display::ROTATION_SOURCE_ACTIVE);
728 EXPECT_EQ(0, observer.GetRotationChangedCountAndReset()); 729 EXPECT_EQ(0, observer.GetRotationChangedCountAndReset());
729 EXPECT_EQ(0, observer.CountAndReset()); 730 EXPECT_EQ(0, observer.CountAndReset());
730 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); 731 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset());
731 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); 732 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset());
732 733
733 // UI scale is eanbled only on internal display. 734 // UI scale is eanbled only on internal display.
734 int64_t secondary_id = GetSecondaryDisplay().id(); 735 int64_t secondary_id = GetSecondaryDisplay().id();
735 test::ScopedSetInternalDisplayId set_internal(display_manager(), 736 display::test::ScopedSetInternalDisplayId set_internal(display_manager(),
736 secondary_id); 737 secondary_id);
737 // Changing internal ID display changes the DisplayIdPair (it comes 738 // Changing internal ID display changes the DisplayIdPair (it comes
738 // first), which also changes the primary display candidate. Update 739 // first), which also changes the primary display candidate. Update
739 // the primary display manually to update the primary display to 740 // the primary display manually to update the primary display to
740 // avoid getting the OnDisplayConfigurationChanged() call twice in 741 // avoid getting the OnDisplayConfigurationChanged() call twice in
741 // SetDisplayUIScale. Note that this scenario will never happen on 742 // SetDisplayUIScale. Note that this scenario will never happen on
742 // real devices. 743 // real devices.
743 Shell::GetInstance()->window_tree_host_manager()->SetPrimaryDisplayId( 744 Shell::GetInstance()->window_tree_host_manager()->SetPrimaryDisplayId(
744 secondary_id); 745 secondary_id);
745 EXPECT_EQ(1, observer.CountAndReset()); 746 EXPECT_EQ(1, observer.CountAndReset());
746 747
(...skipping 16 matching lines...) Expand all
763 } 764 }
764 765
765 TEST_P(WindowTreeHostManagerTest, FindNearestDisplay) { 766 TEST_P(WindowTreeHostManagerTest, FindNearestDisplay) {
766 if (!SupportsMultipleDisplays()) 767 if (!SupportsMultipleDisplays())
767 return; 768 return;
768 769
769 WindowTreeHostManager* window_tree_host_manager = 770 WindowTreeHostManager* window_tree_host_manager =
770 Shell::GetInstance()->window_tree_host_manager(); 771 Shell::GetInstance()->window_tree_host_manager();
771 772
772 UpdateDisplay("200x200,300x300"); 773 UpdateDisplay("200x200,300x300");
773 display_manager()->SetLayoutForCurrentDisplays(test::CreateDisplayLayout( 774 display_manager()->SetLayoutForCurrentDisplays(
774 display_manager(), display::DisplayPlacement::RIGHT, 50)); 775 display::test::CreateDisplayLayout(display_manager(),
776 display::DisplayPlacement::RIGHT, 50));
775 777
776 display::Display primary_display = 778 display::Display primary_display =
777 display::Screen::GetScreen()->GetPrimaryDisplay(); 779 display::Screen::GetScreen()->GetPrimaryDisplay();
778 display::Display secondary_display = display_manager()->GetSecondaryDisplay(); 780 display::Display secondary_display = display_manager()->GetSecondaryDisplay();
779 EXPECT_NE(primary_display.id(), secondary_display.id()); 781 EXPECT_NE(primary_display.id(), secondary_display.id());
780 aura::Window* primary_root = 782 aura::Window* primary_root =
781 window_tree_host_manager->GetRootWindowForDisplayId(primary_display.id()); 783 window_tree_host_manager->GetRootWindowForDisplayId(primary_display.id());
782 aura::Window* secondary_root = 784 aura::Window* secondary_root =
783 window_tree_host_manager->GetRootWindowForDisplayId( 785 window_tree_host_manager->GetRootWindowForDisplayId(
784 secondary_display.id()); 786 secondary_display.id());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 const int height_offset = GetMdMaximizedWindowHeightOffset(); 831 const int height_offset = GetMdMaximizedWindowHeightOffset();
830 832
831 WindowTreeHostManager* window_tree_host_manager = 833 WindowTreeHostManager* window_tree_host_manager =
832 Shell::GetInstance()->window_tree_host_manager(); 834 Shell::GetInstance()->window_tree_host_manager();
833 835
834 UpdateDisplay("200x200,300x300"); 836 UpdateDisplay("200x200,300x300");
835 display::Display primary_display = 837 display::Display primary_display =
836 display::Screen::GetScreen()->GetPrimaryDisplay(); 838 display::Screen::GetScreen()->GetPrimaryDisplay();
837 display::Display secondary_display = display_manager()->GetSecondaryDisplay(); 839 display::Display secondary_display = display_manager()->GetSecondaryDisplay();
838 840
839 display_manager()->SetLayoutForCurrentDisplays(test::CreateDisplayLayout( 841 display_manager()->SetLayoutForCurrentDisplays(
840 display_manager(), display::DisplayPlacement::RIGHT, 50)); 842 display::test::CreateDisplayLayout(display_manager(),
843 display::DisplayPlacement::RIGHT, 50));
841 844
842 EXPECT_NE(primary_display.id(), secondary_display.id()); 845 EXPECT_NE(primary_display.id(), secondary_display.id());
843 aura::Window* primary_root = 846 aura::Window* primary_root =
844 window_tree_host_manager->GetRootWindowForDisplayId(primary_display.id()); 847 window_tree_host_manager->GetRootWindowForDisplayId(primary_display.id());
845 aura::Window* secondary_root = 848 aura::Window* secondary_root =
846 window_tree_host_manager->GetRootWindowForDisplayId( 849 window_tree_host_manager->GetRootWindowForDisplayId(
847 secondary_display.id()); 850 secondary_display.id());
848 aura::Window* shelf_window = 851 aura::Window* shelf_window =
849 GetPrimaryShelf()->shelf_widget()->GetNativeView(); 852 GetPrimaryShelf()->shelf_widget()->GetNativeView();
850 EXPECT_TRUE(primary_root->Contains(shelf_window)); 853 EXPECT_TRUE(primary_root->Contains(shelf_window));
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
1067 EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); 1070 EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString());
1068 EXPECT_EQ("200,0 150x200", 1071 EXPECT_EQ("200,0 150x200",
1069 display_manager()->GetSecondaryDisplay().bounds().ToString()); 1072 display_manager()->GetSecondaryDisplay().bounds().ToString());
1070 generator1.MoveMouseToInHost(50, 40); 1073 generator1.MoveMouseToInHost(50, 40);
1071 EXPECT_EQ("40,69", event_handler.GetLocationAndReset()); 1074 EXPECT_EQ("40,69", event_handler.GetLocationAndReset());
1072 EXPECT_EQ(display::Display::ROTATE_90, 1075 EXPECT_EQ(display::Display::ROTATE_90,
1073 GetActiveDisplayRotation(display1.id())); 1076 GetActiveDisplayRotation(display1.id()));
1074 EXPECT_EQ(display::Display::ROTATE_0, GetActiveDisplayRotation(display2_id)); 1077 EXPECT_EQ(display::Display::ROTATE_0, GetActiveDisplayRotation(display2_id));
1075 EXPECT_EQ(1, observer.GetRotationChangedCountAndReset()); 1078 EXPECT_EQ(1, observer.GetRotationChangedCountAndReset());
1076 1079
1077 display_manager()->SetLayoutForCurrentDisplays(test::CreateDisplayLayout( 1080 display_manager()->SetLayoutForCurrentDisplays(
1078 display_manager(), display::DisplayPlacement::BOTTOM, 50)); 1081 display::test::CreateDisplayLayout(
1082 display_manager(), display::DisplayPlacement::BOTTOM, 50));
1079 EXPECT_EQ("50,120 150x200", 1083 EXPECT_EQ("50,120 150x200",
1080 display_manager()->GetSecondaryDisplay().bounds().ToString()); 1084 display_manager()->GetSecondaryDisplay().bounds().ToString());
1081 1085
1082 display_manager()->SetDisplayRotation( 1086 display_manager()->SetDisplayRotation(
1083 display2_id, display::Display::ROTATE_270, 1087 display2_id, display::Display::ROTATE_270,
1084 display::Display::ROTATION_SOURCE_ACTIVE); 1088 display::Display::ROTATION_SOURCE_ACTIVE);
1085 EXPECT_EQ("200x120", root_windows[0]->bounds().size().ToString()); 1089 EXPECT_EQ("200x120", root_windows[0]->bounds().size().ToString());
1086 EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString()); 1090 EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString());
1087 EXPECT_EQ("50,120 200x150", 1091 EXPECT_EQ("50,120 200x150",
1088 display_manager()->GetSecondaryDisplay().bounds().ToString()); 1092 display_manager()->GetSecondaryDisplay().bounds().ToString());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1121 TEST_P(WindowTreeHostManagerTest, ScaleRootWindow) { 1125 TEST_P(WindowTreeHostManagerTest, ScaleRootWindow) {
1122 if (!SupportsMultipleDisplays()) 1126 if (!SupportsMultipleDisplays())
1123 return; 1127 return;
1124 1128
1125 TestEventHandler event_handler; 1129 TestEventHandler event_handler;
1126 Shell::GetInstance()->AddPreTargetHandler(&event_handler); 1130 Shell::GetInstance()->AddPreTargetHandler(&event_handler);
1127 1131
1128 UpdateDisplay("600x400*2@1.5,500x300"); 1132 UpdateDisplay("600x400*2@1.5,500x300");
1129 1133
1130 display::Display display1 = display::Screen::GetScreen()->GetPrimaryDisplay(); 1134 display::Display display1 = display::Screen::GetScreen()->GetPrimaryDisplay();
1131 test::ScopedSetInternalDisplayId set_internal(display_manager(), 1135 display::test::ScopedSetInternalDisplayId set_internal(display_manager(),
1132 display1.id()); 1136 display1.id());
1133 1137
1134 display::Display display2 = display_manager()->GetSecondaryDisplay(); 1138 display::Display display2 = display_manager()->GetSecondaryDisplay();
1135 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); 1139 aura::Window::Windows root_windows = Shell::GetAllRootWindows();
1136 EXPECT_EQ("0,0 450x300", display1.bounds().ToString()); 1140 EXPECT_EQ("0,0 450x300", display1.bounds().ToString());
1137 EXPECT_EQ("0,0 450x300", root_windows[0]->bounds().ToString()); 1141 EXPECT_EQ("0,0 450x300", root_windows[0]->bounds().ToString());
1138 EXPECT_EQ("450,0 500x300", display2.bounds().ToString()); 1142 EXPECT_EQ("450,0 500x300", display2.bounds().ToString());
1139 EXPECT_EQ(1.5f, GetStoredUIScale(display1.id())); 1143 EXPECT_EQ(1.5f, GetStoredUIScale(display1.id()));
1140 EXPECT_EQ(1.0f, GetStoredUIScale(display2.id())); 1144 EXPECT_EQ(1.0f, GetStoredUIScale(display2.id()));
1141 1145
1142 ui::test::EventGenerator generator(root_windows[0]); 1146 ui::test::EventGenerator generator(root_windows[0]);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1259 CreateDisplayInfo(internal_id, 0, display::Display::ROTATE_0); 1263 CreateDisplayInfo(internal_id, 0, display::Display::ROTATE_0);
1260 const display::ManagedDisplayInfo external_display_info = 1264 const display::ManagedDisplayInfo external_display_info =
1261 CreateDisplayInfo(2, 1, display::Display::ROTATE_90); 1265 CreateDisplayInfo(2, 1, display::Display::ROTATE_90);
1262 1266
1263 std::vector<display::ManagedDisplayInfo> display_info_list; 1267 std::vector<display::ManagedDisplayInfo> display_info_list;
1264 // Extended 1268 // Extended
1265 display_info_list.push_back(internal_display_info); 1269 display_info_list.push_back(internal_display_info);
1266 display_info_list.push_back(external_display_info); 1270 display_info_list.push_back(external_display_info);
1267 display_manager()->OnNativeDisplaysChanged(display_info_list); 1271 display_manager()->OnNativeDisplaysChanged(display_info_list);
1268 const int64_t internal_display_id = 1272 const int64_t internal_display_id =
1269 test::DisplayManagerTestApi(display_manager()) 1273 display::test::DisplayManagerTestApi(display_manager())
1270 .SetFirstDisplayAsInternalDisplay(); 1274 .SetFirstDisplayAsInternalDisplay();
1271 EXPECT_EQ(internal_id, internal_display_id); 1275 EXPECT_EQ(internal_id, internal_display_id);
1272 EXPECT_EQ(2U, display_manager()->GetNumDisplays()); 1276 EXPECT_EQ(2U, display_manager()->GetNumDisplays());
1273 1277
1274 // Dock mode. 1278 // Dock mode.
1275 display_info_list.clear(); 1279 display_info_list.clear();
1276 display_info_list.push_back(external_display_info); 1280 display_info_list.push_back(external_display_info);
1277 display_manager()->OnNativeDisplaysChanged(display_info_list); 1281 display_manager()->OnNativeDisplaysChanged(display_info_list);
1278 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); 1282 EXPECT_EQ(1U, display_manager()->GetNumDisplays());
1279 EXPECT_FALSE(Shell::GetPrimaryRootWindow() 1283 EXPECT_FALSE(Shell::GetPrimaryRootWindow()
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1561 widget->GetNativeWindow()->GetRootWindow()); 1565 widget->GetNativeWindow()->GetRootWindow());
1562 event_generator.MoveMouseToCenterOf(widget->GetNativeWindow()); 1566 event_generator.MoveMouseToCenterOf(widget->GetNativeWindow());
1563 1567
1564 UpdateDisplay("300x300"); 1568 UpdateDisplay("300x300");
1565 watcher.Stop(); 1569 watcher.Stop();
1566 1570
1567 widget->CloseNow(); 1571 widget->CloseNow();
1568 } 1572 }
1569 1573
1570 } // namespace ash 1574 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698