Chromium Code Reviews| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <set> | 6 #include <set> |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/message_loop/message_loop.h" | 11 #include "base/message_loop/message_loop.h" |
| 12 #include "base/run_loop.h" | 12 #include "base/run_loop.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "ui/base/events/event_utils.h" | 15 #include "ui/base/events/event_utils.h" |
| 16 #include "ui/gfx/native_widget_types.h" | 16 #include "ui/gfx/native_widget_types.h" |
| 17 #include "ui/gfx/point.h" | 17 #include "ui/gfx/point.h" |
| 18 #include "ui/views/bubble/bubble_delegate.h" | 18 #include "ui/views/bubble/bubble_delegate.h" |
| 19 #include "ui/views/controls/textfield/textfield.h" | 19 #include "ui/views/controls/textfield/textfield.h" |
| 20 #include "ui/views/test/test_views_delegate.h" | 20 #include "ui/views/test/test_views_delegate.h" |
| 21 #include "ui/views/test/views_test_base.h" | 21 #include "ui/views/test/views_test_base.h" |
| 22 #include "ui/views/views_delegate.h" | 22 #include "ui/views/views_delegate.h" |
| 23 #include "ui/views/widget/native_widget_delegate.h" | 23 #include "ui/views/widget/native_widget_delegate.h" |
| 24 #include "ui/views/widget/root_view.h" | 24 #include "ui/views/widget/root_view.h" |
| 25 #include "ui/views/window/native_frame_view.h" | 25 #include "ui/views/window/native_frame_view.h" |
| 26 | 26 |
| 27 #if defined(USE_AURA) | 27 #if defined(USE_AURA) |
| 28 #include "ui/aura/client/activation_client.h" | |
| 28 #include "ui/aura/client/aura_constants.h" | 29 #include "ui/aura/client/aura_constants.h" |
| 29 #include "ui/aura/env.h" | 30 #include "ui/aura/env.h" |
| 30 #include "ui/aura/root_window.h" | 31 #include "ui/aura/root_window.h" |
| 31 #include "ui/aura/test/test_cursor_client.h" | 32 #include "ui/aura/test/test_cursor_client.h" |
| 32 #include "ui/aura/test/test_window_delegate.h" | 33 #include "ui/aura/test/test_window_delegate.h" |
| 33 #include "ui/aura/window.h" | 34 #include "ui/aura/window.h" |
| 34 #include "ui/views/widget/native_widget_aura.h" | 35 #include "ui/views/widget/native_widget_aura.h" |
| 35 #if !defined(OS_CHROMEOS) | 36 #if !defined(OS_CHROMEOS) |
| 36 #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" | 37 #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" |
| 37 #endif | 38 #endif |
| (...skipping 2338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2376 expected.insert(w21); | 2377 expected.insert(w21); |
| 2377 expected.insert(w22); | 2378 expected.insert(w22); |
| 2378 | 2379 |
| 2379 std::set<Widget*> widgets; | 2380 std::set<Widget*> widgets; |
| 2380 Widget::GetAllChildWidgets(toplevel->GetNativeView(), &widgets); | 2381 Widget::GetAllChildWidgets(toplevel->GetNativeView(), &widgets); |
| 2381 | 2382 |
| 2382 EXPECT_EQ(expected.size(), widgets.size()); | 2383 EXPECT_EQ(expected.size(), widgets.size()); |
| 2383 EXPECT_TRUE(std::equal(expected.begin(), expected.end(), widgets.begin())); | 2384 EXPECT_TRUE(std::equal(expected.begin(), expected.end(), widgets.begin())); |
| 2384 } | 2385 } |
| 2385 | 2386 |
| 2387 #if defined(OS_WIN) && defined(USE_AURA) | |
|
sky
2013/09/03 18:21:51
Since this changes focus it needs to be an interac
ananta
2013/09/03 19:03:31
As per our discussion, focus is a thread specific
| |
| 2388 // Tests whether activation and focus change works correctly in Windows AURA. | |
| 2389 // We test the following:- | |
| 2390 // 1. If the active aura window is correctly set when a top level widget is | |
| 2391 // created. | |
| 2392 // 2. If the active aura window in widget 1 created above, is set to NULL when | |
| 2393 // another top level widget is created and focused. | |
| 2394 // 3. On focusing the native platform window for widget 1, the active aura | |
| 2395 // window for widget 1 should be set and that for widget 2 should reset. | |
| 2396 // TODO(ananta) | |
| 2397 // Discuss with erg on how to write this test for linux x11 aura. | |
| 2398 TEST_F(WidgetTest, DesktopNativeWidgetAuraActivationAndFocusTest) { | |
| 2399 // Create widget 1 and expect the active window to be its window. | |
| 2400 View* contents_view1 = new View; | |
| 2401 contents_view1->set_focusable(true); | |
| 2402 Widget widget1; | |
| 2403 Widget::InitParams init_params = | |
| 2404 CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS); | |
| 2405 init_params.bounds = gfx::Rect(0, 0, 200, 200); | |
| 2406 init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | |
| 2407 init_params.native_widget = new DesktopNativeWidgetAura(&widget1); | |
| 2408 widget1.Init(init_params); | |
| 2409 widget1.SetContentsView(contents_view1); | |
| 2410 widget1.Show(); | |
| 2411 contents_view1->RequestFocus(); | |
| 2412 | |
| 2413 aura::RootWindow* root_window1= widget1.GetNativeView()->GetRootWindow(); | |
| 2414 EXPECT_TRUE(root_window1 != NULL); | |
| 2415 aura::client::ActivationClient* activation_client1 = | |
| 2416 aura::client::GetActivationClient(root_window1); | |
| 2417 EXPECT_TRUE(activation_client1 != NULL); | |
| 2418 EXPECT_EQ(activation_client1->GetActiveWindow(), widget1.GetNativeView()); | |
| 2419 | |
| 2420 // Create widget 2 and expect the active window to be its window. | |
| 2421 View* contents_view2 = new View; | |
| 2422 Widget widget2; | |
| 2423 Widget::InitParams init_params2 = | |
| 2424 CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS); | |
| 2425 init_params2.bounds = gfx::Rect(0, 0, 200, 200); | |
| 2426 init_params2.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | |
| 2427 init_params2.native_widget = new DesktopNativeWidgetAura(&widget2); | |
| 2428 widget2.Init(init_params2); | |
| 2429 widget2.SetContentsView(contents_view2); | |
| 2430 widget2.Show(); | |
| 2431 contents_view2->RequestFocus(); | |
| 2432 | |
| 2433 aura::RootWindow* root_window2 = widget2.GetNativeView()->GetRootWindow(); | |
| 2434 aura::client::ActivationClient* activation_client2 = | |
| 2435 aura::client::GetActivationClient(root_window2); | |
| 2436 EXPECT_TRUE(activation_client2 != NULL); | |
| 2437 EXPECT_EQ(activation_client2->GetActiveWindow(), widget2.GetNativeView()); | |
| 2438 EXPECT_EQ(activation_client1->GetActiveWindow(), | |
| 2439 reinterpret_cast<aura::Window*>(NULL)); | |
| 2440 | |
| 2441 // Now set focus back to widget 1 and expect the active window to be its | |
| 2442 // window. | |
| 2443 ::SetForegroundWindow(root_window1->GetAcceleratedWidget()); | |
| 2444 contents_view1->RequestFocus(); | |
| 2445 EXPECT_EQ(activation_client2->GetActiveWindow(), | |
| 2446 reinterpret_cast<aura::Window*>(NULL)); | |
| 2447 EXPECT_EQ(activation_client1->GetActiveWindow(), widget1.GetNativeView()); | |
| 2448 } | |
| 2449 #endif | |
| 2450 | |
| 2386 } // namespace test | 2451 } // namespace test |
| 2387 } // namespace views | 2452 } // namespace views |
| OLD | NEW |