| OLD | NEW |
| 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 "ui/wm/core/window_modality_controller.h" | 5 #include "ui/wm/core/window_modality_controller.h" |
| 6 | 6 |
| 7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
| 8 #include "ash/test/ash_test_base.h" | 8 #include "ash/test/ash_test_base.h" |
| 9 #include "ash/test/child_modal_window.h" | 9 #include "ash/test/child_modal_window.h" |
| 10 #include "ash/wm/window_util.h" | 10 #include "ash/wm/window_util.h" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 } // namespace | 37 } // namespace |
| 38 | 38 |
| 39 // Creates three windows, w1, w11, and w12. w11 is a non-modal transient, w12 is | 39 // Creates three windows, w1, w11, and w12. w11 is a non-modal transient, w12 is |
| 40 // a modal transient. | 40 // a modal transient. |
| 41 // Validates: | 41 // Validates: |
| 42 // - it should be possible to activate w12 even when w11 is open. | 42 // - it should be possible to activate w12 even when w11 is open. |
| 43 // - activating w1 activates w12 and updates stacking order appropriately. | 43 // - activating w1 activates w12 and updates stacking order appropriately. |
| 44 // - closing a window passes focus up the stack. | 44 // - closing a window passes focus up the stack. |
| 45 TEST_F(WindowModalityControllerTest, BasicActivation) { | 45 TEST_F(WindowModalityControllerTest, BasicActivation) { |
| 46 aura::test::TestWindowDelegate d; | 46 aura::test::TestWindowDelegate d; |
| 47 scoped_ptr<aura::Window> w1( | 47 std::unique_ptr<aura::Window> w1( |
| 48 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); | 48 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); |
| 49 scoped_ptr<aura::Window> w11( | 49 std::unique_ptr<aura::Window> w11( |
| 50 CreateTestWindowInShellWithDelegate(&d, -11, gfx::Rect())); | 50 CreateTestWindowInShellWithDelegate(&d, -11, gfx::Rect())); |
| 51 scoped_ptr<aura::Window> w12( | 51 std::unique_ptr<aura::Window> w12( |
| 52 CreateTestWindowInShellWithDelegate(&d, -12, gfx::Rect())); | 52 CreateTestWindowInShellWithDelegate(&d, -12, gfx::Rect())); |
| 53 | 53 |
| 54 ::wm::AddTransientChild(w1.get(), w11.get()); | 54 ::wm::AddTransientChild(w1.get(), w11.get()); |
| 55 wm::ActivateWindow(w1.get()); | 55 wm::ActivateWindow(w1.get()); |
| 56 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 56 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
| 57 wm::ActivateWindow(w11.get()); | 57 wm::ActivateWindow(w11.get()); |
| 58 EXPECT_TRUE(wm::IsActiveWindow(w11.get())); | 58 EXPECT_TRUE(wm::IsActiveWindow(w11.get())); |
| 59 | 59 |
| 60 w12->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); | 60 w12->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); |
| 61 ::wm::AddTransientChild(w1.get(), w12.get()); | 61 ::wm::AddTransientChild(w1.get(), w12.get()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 82 } | 82 } |
| 83 | 83 |
| 84 // Create two toplevel windows w1 and w2, and nest two modals w11 and w111 below | 84 // Create two toplevel windows w1 and w2, and nest two modals w11 and w111 below |
| 85 // w1. | 85 // w1. |
| 86 // Validates: | 86 // Validates: |
| 87 // - activating w1 while w11/w111 is showing always activates most deeply nested | 87 // - activating w1 while w11/w111 is showing always activates most deeply nested |
| 88 // descendant. | 88 // descendant. |
| 89 // - closing a window passes focus up the stack. | 89 // - closing a window passes focus up the stack. |
| 90 TEST_F(WindowModalityControllerTest, NestedModals) { | 90 TEST_F(WindowModalityControllerTest, NestedModals) { |
| 91 aura::test::TestWindowDelegate d; | 91 aura::test::TestWindowDelegate d; |
| 92 scoped_ptr<aura::Window> w1( | 92 std::unique_ptr<aura::Window> w1( |
| 93 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); | 93 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); |
| 94 scoped_ptr<aura::Window> w11( | 94 std::unique_ptr<aura::Window> w11( |
| 95 CreateTestWindowInShellWithDelegate(&d, -11, gfx::Rect())); | 95 CreateTestWindowInShellWithDelegate(&d, -11, gfx::Rect())); |
| 96 scoped_ptr<aura::Window> w111( | 96 std::unique_ptr<aura::Window> w111( |
| 97 CreateTestWindowInShellWithDelegate(&d, -111, gfx::Rect())); | 97 CreateTestWindowInShellWithDelegate(&d, -111, gfx::Rect())); |
| 98 scoped_ptr<aura::Window> w2( | 98 std::unique_ptr<aura::Window> w2( |
| 99 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); | 99 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); |
| 100 | 100 |
| 101 ::wm::AddTransientChild(w1.get(), w11.get()); | 101 ::wm::AddTransientChild(w1.get(), w11.get()); |
| 102 ::wm::AddTransientChild(w11.get(), w111.get()); | 102 ::wm::AddTransientChild(w11.get(), w111.get()); |
| 103 | 103 |
| 104 wm::ActivateWindow(w1.get()); | 104 wm::ActivateWindow(w1.get()); |
| 105 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 105 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
| 106 wm::ActivateWindow(w2.get()); | 106 wm::ActivateWindow(w2.get()); |
| 107 EXPECT_TRUE(wm::IsActiveWindow(w2.get())); | 107 EXPECT_TRUE(wm::IsActiveWindow(w2.get())); |
| 108 | 108 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 135 w11.reset(); | 135 w11.reset(); |
| 136 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 136 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
| 137 } | 137 } |
| 138 | 138 |
| 139 // Create two toplevel windows w1 and w2, and nest two modals w11 and w111 below | 139 // Create two toplevel windows w1 and w2, and nest two modals w11 and w111 below |
| 140 // w1. | 140 // w1. |
| 141 // Validates: | 141 // Validates: |
| 142 // - destroying w11 while w111 is focused activates w1. | 142 // - destroying w11 while w111 is focused activates w1. |
| 143 TEST_F(WindowModalityControllerTest, NestedModalsOuterClosed) { | 143 TEST_F(WindowModalityControllerTest, NestedModalsOuterClosed) { |
| 144 aura::test::TestWindowDelegate d; | 144 aura::test::TestWindowDelegate d; |
| 145 scoped_ptr<aura::Window> w1( | 145 std::unique_ptr<aura::Window> w1( |
| 146 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); | 146 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); |
| 147 scoped_ptr<aura::Window> w11( | 147 std::unique_ptr<aura::Window> w11( |
| 148 CreateTestWindowInShellWithDelegate(&d, -11, gfx::Rect())); | 148 CreateTestWindowInShellWithDelegate(&d, -11, gfx::Rect())); |
| 149 // |w111| will be owned and deleted by |w11|. | 149 // |w111| will be owned and deleted by |w11|. |
| 150 aura::Window* w111 = | 150 aura::Window* w111 = |
| 151 CreateTestWindowInShellWithDelegate(&d, -111, gfx::Rect()); | 151 CreateTestWindowInShellWithDelegate(&d, -111, gfx::Rect()); |
| 152 scoped_ptr<aura::Window> w2( | 152 std::unique_ptr<aura::Window> w2( |
| 153 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); | 153 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); |
| 154 | 154 |
| 155 ::wm::AddTransientChild(w1.get(), w11.get()); | 155 ::wm::AddTransientChild(w1.get(), w11.get()); |
| 156 ::wm::AddTransientChild(w11.get(), w111); | 156 ::wm::AddTransientChild(w11.get(), w111); |
| 157 | 157 |
| 158 wm::ActivateWindow(w1.get()); | 158 wm::ActivateWindow(w1.get()); |
| 159 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 159 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
| 160 wm::ActivateWindow(w2.get()); | 160 wm::ActivateWindow(w2.get()); |
| 161 EXPECT_TRUE(wm::IsActiveWindow(w2.get())); | 161 EXPECT_TRUE(wm::IsActiveWindow(w2.get())); |
| 162 | 162 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 174 // modal window. There is no such use case right now, but it | 174 // modal window. There is no such use case right now, but it |
| 175 // probably should. | 175 // probably should. |
| 176 | 176 |
| 177 w11.reset(); | 177 w11.reset(); |
| 178 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 178 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
| 179 } | 179 } |
| 180 | 180 |
| 181 // Modality also prevents events from being passed to the transient parent. | 181 // Modality also prevents events from being passed to the transient parent. |
| 182 TEST_F(WindowModalityControllerTest, Events) { | 182 TEST_F(WindowModalityControllerTest, Events) { |
| 183 aura::test::TestWindowDelegate d; | 183 aura::test::TestWindowDelegate d; |
| 184 scoped_ptr<aura::Window> w1(CreateTestWindowInShellWithDelegate(&d, -1, | 184 std::unique_ptr<aura::Window> w1( |
| 185 gfx::Rect(0, 0, 100, 100))); | 185 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect(0, 0, 100, 100))); |
| 186 scoped_ptr<aura::Window> w11(CreateTestWindowInShellWithDelegate(&d, -11, | 186 std::unique_ptr<aura::Window> w11( |
| 187 gfx::Rect(20, 20, 50, 50))); | 187 CreateTestWindowInShellWithDelegate(&d, -11, gfx::Rect(20, 20, 50, 50))); |
| 188 scoped_ptr<aura::Window> w111( | 188 std::unique_ptr<aura::Window> w111( |
| 189 CreateTestWindowInShellWithDelegate(&d, -111, gfx::Rect(20, 20, 50, 50))); | 189 CreateTestWindowInShellWithDelegate(&d, -111, gfx::Rect(20, 20, 50, 50))); |
| 190 | 190 |
| 191 ::wm::AddTransientChild(w1.get(), w11.get()); | 191 ::wm::AddTransientChild(w1.get(), w11.get()); |
| 192 | 192 |
| 193 // Add a non-modal child to the modal window in order to ensure modality still | 193 // Add a non-modal child to the modal window in order to ensure modality still |
| 194 // works in this case. This is a regression test for https://crbug.com/456697. | 194 // works in this case. This is a regression test for https://crbug.com/456697. |
| 195 ::wm::AddTransientChild(w11.get(), w111.get()); | 195 ::wm::AddTransientChild(w11.get(), w111.get()); |
| 196 | 196 |
| 197 { | 197 { |
| 198 // Clicking a point within w1 should activate that window. | 198 // Clicking a point within w1 should activate that window. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 209 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 209 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 210 gfx::Point(10, 10)); | 210 gfx::Point(10, 10)); |
| 211 generator.ClickLeftButton(); | 211 generator.ClickLeftButton(); |
| 212 EXPECT_TRUE(wm::IsActiveWindow(w11.get())); | 212 EXPECT_TRUE(wm::IsActiveWindow(w11.get())); |
| 213 } | 213 } |
| 214 } | 214 } |
| 215 | 215 |
| 216 // Events on modal parent activate. | 216 // Events on modal parent activate. |
| 217 TEST_F(WindowModalityControllerTest, EventsForEclipsedWindows) { | 217 TEST_F(WindowModalityControllerTest, EventsForEclipsedWindows) { |
| 218 aura::test::TestWindowDelegate d; | 218 aura::test::TestWindowDelegate d; |
| 219 scoped_ptr<aura::Window> w1(CreateTestWindowInShellWithDelegate(&d, -1, | 219 std::unique_ptr<aura::Window> w1( |
| 220 gfx::Rect(0, 0, 100, 100))); | 220 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect(0, 0, 100, 100))); |
| 221 scoped_ptr<aura::Window> w11(CreateTestWindowInShellWithDelegate(&d, -11, | 221 std::unique_ptr<aura::Window> w11( |
| 222 gfx::Rect(20, 20, 50, 50))); | 222 CreateTestWindowInShellWithDelegate(&d, -11, gfx::Rect(20, 20, 50, 50))); |
| 223 ::wm::AddTransientChild(w1.get(), w11.get()); | 223 ::wm::AddTransientChild(w1.get(), w11.get()); |
| 224 scoped_ptr<aura::Window> w2(CreateTestWindowInShellWithDelegate(&d, -2, | 224 std::unique_ptr<aura::Window> w2( |
| 225 gfx::Rect(0, 0, 50, 50))); | 225 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect(0, 0, 50, 50))); |
| 226 | 226 |
| 227 w11->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); | 227 w11->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); |
| 228 | 228 |
| 229 // Partially eclipse w1 with w2. | 229 // Partially eclipse w1 with w2. |
| 230 wm::ActivateWindow(w2.get()); | 230 wm::ActivateWindow(w2.get()); |
| 231 { | 231 { |
| 232 // Clicking a point on w1 that is not eclipsed by w2. | 232 // Clicking a point on w1 that is not eclipsed by w2. |
| 233 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 233 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 234 gfx::Point(90, 90)); | 234 gfx::Point(90, 90)); |
| 235 generator.ClickLeftButton(); | 235 generator.ClickLeftButton(); |
| 236 EXPECT_TRUE(wm::IsActiveWindow(w11.get())); | 236 EXPECT_TRUE(wm::IsActiveWindow(w11.get())); |
| 237 } | 237 } |
| 238 } | 238 } |
| 239 | 239 |
| 240 // Creates windows w1 and non activatiable child w11. Creates transient window | 240 // Creates windows w1 and non activatiable child w11. Creates transient window |
| 241 // w2 and adds it as a transeint child of w1. Ensures that w2 is parented to | 241 // w2 and adds it as a transeint child of w1. Ensures that w2 is parented to |
| 242 // the parent of w1, and that GetModalTransient(w11) returns w2. | 242 // the parent of w1, and that GetModalTransient(w11) returns w2. |
| 243 TEST_F(WindowModalityControllerTest, GetModalTransient) { | 243 TEST_F(WindowModalityControllerTest, GetModalTransient) { |
| 244 aura::test::TestWindowDelegate d; | 244 aura::test::TestWindowDelegate d; |
| 245 scoped_ptr<aura::Window> w1( | 245 std::unique_ptr<aura::Window> w1( |
| 246 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); | 246 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); |
| 247 scoped_ptr<aura::Window> w11( | 247 std::unique_ptr<aura::Window> w11( |
| 248 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); | 248 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); |
| 249 scoped_ptr<aura::Window> w2( | 249 std::unique_ptr<aura::Window> w2( |
| 250 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); | 250 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); |
| 251 w2->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); | 251 w2->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); |
| 252 | 252 |
| 253 aura::Window* wt; | 253 aura::Window* wt; |
| 254 wt = ::wm::GetModalTransient(w1.get()); | 254 wt = ::wm::GetModalTransient(w1.get()); |
| 255 ASSERT_EQ(static_cast<aura::Window*>(NULL), wt); | 255 ASSERT_EQ(static_cast<aura::Window*>(NULL), wt); |
| 256 | 256 |
| 257 // Parent w2 to w1. It should get parented to the parent of w1. | 257 // Parent w2 to w1. It should get parented to the parent of w1. |
| 258 ::wm::AddTransientChild(w1.get(), w2.get()); | 258 ::wm::AddTransientChild(w1.get(), w2.get()); |
| 259 ASSERT_EQ(2U, w1->parent()->children().size()); | 259 ASSERT_EQ(2U, w1->parent()->children().size()); |
| 260 EXPECT_EQ(-2, w1->parent()->children().at(1)->id()); | 260 EXPECT_EQ(-2, w1->parent()->children().at(1)->id()); |
| 261 | 261 |
| 262 // Request the modal transient window for w1, it should be w2. | 262 // Request the modal transient window for w1, it should be w2. |
| 263 wt = ::wm::GetModalTransient(w1.get()); | 263 wt = ::wm::GetModalTransient(w1.get()); |
| 264 ASSERT_NE(static_cast<aura::Window*>(NULL), wt); | 264 ASSERT_NE(static_cast<aura::Window*>(NULL), wt); |
| 265 EXPECT_EQ(-2, wt->id()); | 265 EXPECT_EQ(-2, wt->id()); |
| 266 | 266 |
| 267 // Request the modal transient window for w11, it should also be w2. | 267 // Request the modal transient window for w11, it should also be w2. |
| 268 wt = ::wm::GetModalTransient(w11.get()); | 268 wt = ::wm::GetModalTransient(w11.get()); |
| 269 ASSERT_NE(static_cast<aura::Window*>(NULL), wt); | 269 ASSERT_NE(static_cast<aura::Window*>(NULL), wt); |
| 270 EXPECT_EQ(-2, wt->id()); | 270 EXPECT_EQ(-2, wt->id()); |
| 271 } | 271 } |
| 272 | 272 |
| 273 // Verifies we generate a capture lost when showing a modal window. | 273 // Verifies we generate a capture lost when showing a modal window. |
| 274 TEST_F(WindowModalityControllerTest, ChangeCapture) { | 274 TEST_F(WindowModalityControllerTest, ChangeCapture) { |
| 275 views::Widget* widget = views::Widget::CreateWindowWithContext( | 275 views::Widget* widget = views::Widget::CreateWindowWithContext( |
| 276 NULL, Shell::GetPrimaryRootWindow()); | 276 NULL, Shell::GetPrimaryRootWindow()); |
| 277 scoped_ptr<aura::Window> widget_window(widget->GetNativeView()); | 277 std::unique_ptr<aura::Window> widget_window(widget->GetNativeView()); |
| 278 views::test::CaptureTrackingView* view = new views::test::CaptureTrackingView; | 278 views::test::CaptureTrackingView* view = new views::test::CaptureTrackingView; |
| 279 widget->client_view()->AddChildView(view); | 279 widget->client_view()->AddChildView(view); |
| 280 widget->SetBounds(gfx::Rect(0, 0, 200, 200)); | 280 widget->SetBounds(gfx::Rect(0, 0, 200, 200)); |
| 281 view->SetBoundsRect(widget->client_view()->GetLocalBounds()); | 281 view->SetBoundsRect(widget->client_view()->GetLocalBounds()); |
| 282 widget->Show(); | 282 widget->Show(); |
| 283 | 283 |
| 284 gfx::Point center(view->width() / 2, view->height() / 2); | 284 gfx::Point center(view->width() / 2, view->height() / 2); |
| 285 views::View::ConvertPointToScreen(view, ¢er); | 285 views::View::ConvertPointToScreen(view, ¢er); |
| 286 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), center); | 286 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), center); |
| 287 generator.PressLeftButton(); | 287 generator.PressLeftButton(); |
| 288 EXPECT_TRUE(view->got_press()); | 288 EXPECT_TRUE(view->got_press()); |
| 289 | 289 |
| 290 views::Widget* modal_widget = | 290 views::Widget* modal_widget = |
| 291 views::Widget::CreateWindowWithParent(NULL, widget->GetNativeView()); | 291 views::Widget::CreateWindowWithParent(NULL, widget->GetNativeView()); |
| 292 scoped_ptr<aura::Window> modal_window(modal_widget->GetNativeView()); | 292 std::unique_ptr<aura::Window> modal_window(modal_widget->GetNativeView()); |
| 293 modal_window->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); | 293 modal_window->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); |
| 294 views::test::CaptureTrackingView* modal_view = | 294 views::test::CaptureTrackingView* modal_view = |
| 295 new views::test::CaptureTrackingView; | 295 new views::test::CaptureTrackingView; |
| 296 modal_widget->client_view()->AddChildView(modal_view); | 296 modal_widget->client_view()->AddChildView(modal_view); |
| 297 modal_widget->SetBounds(gfx::Rect(50, 50, 200, 200)); | 297 modal_widget->SetBounds(gfx::Rect(50, 50, 200, 200)); |
| 298 modal_view->SetBoundsRect(modal_widget->client_view()->GetLocalBounds()); | 298 modal_view->SetBoundsRect(modal_widget->client_view()->GetLocalBounds()); |
| 299 modal_widget->Show(); | 299 modal_widget->Show(); |
| 300 | 300 |
| 301 EXPECT_TRUE(view->got_capture_lost()); | 301 EXPECT_TRUE(view->got_capture_lost()); |
| 302 generator.ReleaseLeftButton(); | 302 generator.ReleaseLeftButton(); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 321 // modal window's modal parent window. | 321 // modal window's modal parent window. |
| 322 TEST_F(WindowModalityControllerTest, ReleaseCapture) { | 322 TEST_F(WindowModalityControllerTest, ReleaseCapture) { |
| 323 // Create a window hierachy like this: | 323 // Create a window hierachy like this: |
| 324 // w0 | 324 // w0 |
| 325 // / | \ | 325 // / | \ |
| 326 // w1 <------ w3 w2 | 326 // w1 <------ w3 w2 |
| 327 // | (modal to) | 327 // | (modal to) |
| 328 // w11 | 328 // w11 |
| 329 | 329 |
| 330 aura::test::TestWindowDelegate d; | 330 aura::test::TestWindowDelegate d; |
| 331 scoped_ptr<aura::Window> w1( | 331 std::unique_ptr<aura::Window> w1( |
| 332 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); | 332 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); |
| 333 scoped_ptr<aura::Window> w11( | 333 std::unique_ptr<aura::Window> w11( |
| 334 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); | 334 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); |
| 335 scoped_ptr<aura::Window> w2( | 335 std::unique_ptr<aura::Window> w2( |
| 336 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); | 336 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); |
| 337 scoped_ptr<aura::Window> w3( | 337 std::unique_ptr<aura::Window> w3( |
| 338 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); | 338 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); |
| 339 w3->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_CHILD); | 339 w3->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_CHILD); |
| 340 ::wm::SetModalParent(w3.get(), w1.get()); | 340 ::wm::SetModalParent(w3.get(), w1.get()); |
| 341 | 341 |
| 342 // w1's capture should be released when w3 becomes visible. | 342 // w1's capture should be released when w3 becomes visible. |
| 343 w3->Hide(); | 343 w3->Hide(); |
| 344 aura::client::GetCaptureClient(Shell::GetPrimaryRootWindow()) | 344 aura::client::GetCaptureClient(Shell::GetPrimaryRootWindow()) |
| 345 ->SetCapture(w1.get()); | 345 ->SetCapture(w1.get()); |
| 346 EXPECT_EQ(w1.get(), | 346 EXPECT_EQ(w1.get(), |
| 347 aura::client::GetCaptureClient(Shell::GetPrimaryRootWindow()) | 347 aura::client::GetCaptureClient(Shell::GetPrimaryRootWindow()) |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 | 402 |
| 403 bool received_touch_; | 403 bool received_touch_; |
| 404 ui::EventType last_event_type_; | 404 ui::EventType last_event_type_; |
| 405 | 405 |
| 406 DISALLOW_COPY_AND_ASSIGN(TouchTrackerWindowDelegate); | 406 DISALLOW_COPY_AND_ASSIGN(TouchTrackerWindowDelegate); |
| 407 }; | 407 }; |
| 408 | 408 |
| 409 // Modality should prevent events from being passed to the transient parent. | 409 // Modality should prevent events from being passed to the transient parent. |
| 410 TEST_F(WindowModalityControllerTest, TouchEvent) { | 410 TEST_F(WindowModalityControllerTest, TouchEvent) { |
| 411 TouchTrackerWindowDelegate d1; | 411 TouchTrackerWindowDelegate d1; |
| 412 scoped_ptr<aura::Window> w1(CreateTestWindowInShellWithDelegate(&d1, | 412 std::unique_ptr<aura::Window> w1( |
| 413 -1, gfx::Rect(0, 0, 100, 100))); | 413 CreateTestWindowInShellWithDelegate(&d1, -1, gfx::Rect(0, 0, 100, 100))); |
| 414 TouchTrackerWindowDelegate d11; | 414 TouchTrackerWindowDelegate d11; |
| 415 scoped_ptr<aura::Window> w11(CreateTestWindowInShellWithDelegate(&d11, | 415 std::unique_ptr<aura::Window> w11(CreateTestWindowInShellWithDelegate( |
| 416 -11, gfx::Rect(20, 20, 50, 50))); | 416 &d11, -11, gfx::Rect(20, 20, 50, 50))); |
| 417 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 417 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 418 gfx::Point(10, 10)); | 418 gfx::Point(10, 10)); |
| 419 | 419 |
| 420 ::wm::AddTransientChild(w1.get(), w11.get()); | 420 ::wm::AddTransientChild(w1.get(), w11.get()); |
| 421 d1.reset(); | 421 d1.reset(); |
| 422 d11.reset(); | 422 d11.reset(); |
| 423 | 423 |
| 424 { | 424 { |
| 425 // Clicking a point within w1 should activate that window. | 425 // Clicking a point within w1 should activate that window. |
| 426 generator.PressMoveAndReleaseTouchTo(gfx::Point(10, 10)); | 426 generator.PressMoveAndReleaseTouchTo(gfx::Point(10, 10)); |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 590 EXPECT_TRUE(child->HasFocus()); | 590 EXPECT_TRUE(child->HasFocus()); |
| 591 EXPECT_FALSE(modal_parent->HasFocus()); | 591 EXPECT_FALSE(modal_parent->HasFocus()); |
| 592 EXPECT_FALSE(parent->HasFocus()); | 592 EXPECT_FALSE(parent->HasFocus()); |
| 593 } | 593 } |
| 594 } | 594 } |
| 595 | 595 |
| 596 // Window-modal test for the case when the originally clicked window is an | 596 // Window-modal test for the case when the originally clicked window is an |
| 597 // ancestor of the modal parent. | 597 // ancestor of the modal parent. |
| 598 TEST_F(WindowModalityControllerTest, WindowModalAncestor) { | 598 TEST_F(WindowModalityControllerTest, WindowModalAncestor) { |
| 599 aura::test::TestWindowDelegate d; | 599 aura::test::TestWindowDelegate d; |
| 600 scoped_ptr<aura::Window> w1( | 600 std::unique_ptr<aura::Window> w1( |
| 601 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); | 601 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); |
| 602 scoped_ptr<aura::Window> w2( | 602 std::unique_ptr<aura::Window> w2( |
| 603 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); | 603 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); |
| 604 scoped_ptr<aura::Window> w3( | 604 std::unique_ptr<aura::Window> w3( |
| 605 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w2.get())); | 605 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w2.get())); |
| 606 scoped_ptr<aura::Window> w4( | 606 std::unique_ptr<aura::Window> w4( |
| 607 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); | 607 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); |
| 608 w4->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); | 608 w4->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); |
| 609 ::wm::AddTransientChild(w1.get(), w4.get()); | 609 ::wm::AddTransientChild(w1.get(), w4.get()); |
| 610 | 610 |
| 611 wm::ActivateWindow(w1.get()); | 611 wm::ActivateWindow(w1.get()); |
| 612 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); | 612 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); |
| 613 | 613 |
| 614 wm::ActivateWindow(w2.get()); | 614 wm::ActivateWindow(w2.get()); |
| 615 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); | 615 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); |
| 616 | 616 |
| 617 wm::ActivateWindow(w3.get()); | 617 wm::ActivateWindow(w3.get()); |
| 618 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); | 618 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); |
| 619 | 619 |
| 620 wm::ActivateWindow(w4.get()); | 620 wm::ActivateWindow(w4.get()); |
| 621 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); | 621 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); |
| 622 } | 622 } |
| 623 | 623 |
| 624 // Child-modal test for the case when the originally clicked window is an | 624 // Child-modal test for the case when the originally clicked window is an |
| 625 // ancestor of the modal parent. | 625 // ancestor of the modal parent. |
| 626 TEST_F(WindowModalityControllerTest, ChildModalAncestor) { | 626 TEST_F(WindowModalityControllerTest, ChildModalAncestor) { |
| 627 aura::test::TestWindowDelegate d; | 627 aura::test::TestWindowDelegate d; |
| 628 scoped_ptr<aura::Window> w1( | 628 std::unique_ptr<aura::Window> w1( |
| 629 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); | 629 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); |
| 630 scoped_ptr<aura::Window> w2( | 630 std::unique_ptr<aura::Window> w2( |
| 631 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); | 631 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); |
| 632 scoped_ptr<aura::Window> w3( | 632 std::unique_ptr<aura::Window> w3( |
| 633 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w2.get())); | 633 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w2.get())); |
| 634 scoped_ptr<aura::Window> w4( | 634 std::unique_ptr<aura::Window> w4( |
| 635 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); | 635 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); |
| 636 w4->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_CHILD); | 636 w4->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_CHILD); |
| 637 ::wm::SetModalParent(w4.get(), w2.get()); | 637 ::wm::SetModalParent(w4.get(), w2.get()); |
| 638 ::wm::AddTransientChild(w1.get(), w4.get()); | 638 ::wm::AddTransientChild(w1.get(), w4.get()); |
| 639 | 639 |
| 640 wm::ActivateWindow(w1.get()); | 640 wm::ActivateWindow(w1.get()); |
| 641 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 641 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
| 642 | 642 |
| 643 wm::ActivateWindow(w2.get()); | 643 wm::ActivateWindow(w2.get()); |
| 644 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); | 644 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); |
| 645 | 645 |
| 646 wm::ActivateWindow(w3.get()); | 646 wm::ActivateWindow(w3.get()); |
| 647 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); | 647 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); |
| 648 | 648 |
| 649 wm::ActivateWindow(w4.get()); | 649 wm::ActivateWindow(w4.get()); |
| 650 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); | 650 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); |
| 651 } | 651 } |
| 652 | 652 |
| 653 } // namespace ash | 653 } // namespace ash |
| OLD | NEW |