Index: ui/aura_shell/desktop_event_filter_unittest.cc |
diff --git a/ui/aura_shell/desktop_event_filter_unittest.cc b/ui/aura_shell/desktop_event_filter_unittest.cc |
index 498dbda61fa4375eb07cbe9722c49114b5b3847b..504f1ec02d54c9031f9b272fbc2f07f37e9c7da9 100644 |
--- a/ui/aura_shell/desktop_event_filter_unittest.cc |
+++ b/ui/aura_shell/desktop_event_filter_unittest.cc |
@@ -10,6 +10,7 @@ |
#include "ui/aura/test/aura_test_base.h" |
#include "ui/aura/test/event_generator.h" |
#include "ui/aura/test/test_windows.h" |
+#include "ui/aura/test/test_event_filter.h" |
#include "ui/aura/test/test_window_delegate.h" |
#include "ui/aura/test/test_stacking_client.h" |
#include "ui/aura_shell/shell_window_ids.h" |
@@ -19,9 +20,9 @@ |
namespace aura_shell { |
namespace test { |
-class DefaultEventFilterTest : public aura::test::AuraTestBase { |
+class DesktopEventFilterTest : public aura::test::AuraTestBase { |
public: |
- DefaultEventFilterTest() { |
+ DesktopEventFilterTest() { |
aura::Desktop::GetInstance()->SetEventFilter( |
new internal::DesktopEventFilter); |
@@ -31,12 +32,12 @@ class DefaultEventFilterTest : public aura::test::AuraTestBase { |
stacking_client->default_container()->set_id( |
internal::kShellWindowId_DefaultContainer); |
} |
- virtual ~DefaultEventFilterTest() { |
+ virtual ~DesktopEventFilterTest() { |
aura::Desktop::GetInstance()->SetEventFilter(NULL); |
} |
private: |
- DISALLOW_COPY_AND_ASSIGN(DefaultEventFilterTest); |
+ DISALLOW_COPY_AND_ASSIGN(DesktopEventFilterTest); |
}; |
class HitTestWindowDelegate : public aura::test::TestWindowDelegate { |
@@ -58,7 +59,7 @@ class HitTestWindowDelegate : public aura::test::TestWindowDelegate { |
DISALLOW_COPY_AND_ASSIGN(HitTestWindowDelegate); |
}; |
-TEST_F(DefaultEventFilterTest, Focus) { |
+TEST_F(DesktopEventFilterTest, Focus) { |
aura::Desktop* desktop = aura::Desktop::GetInstance(); |
desktop->SetBounds(gfx::Rect(0, 0, 510, 510)); |
@@ -120,7 +121,7 @@ TEST_F(DefaultEventFilterTest, Focus) { |
} |
// Various assertion testing for activating windows. |
-TEST_F(DefaultEventFilterTest, ActivateOnMouse) { |
+TEST_F(DesktopEventFilterTest, ActivateOnMouse) { |
aura::Desktop* desktop = aura::Desktop::GetInstance(); |
aura::test::ActivateWindowDelegate d1; |
@@ -186,7 +187,7 @@ TEST_F(DefaultEventFilterTest, ActivateOnMouse) { |
} |
// Essentially the same as ActivateOnMouse, but for touch events. |
-TEST_F(DefaultEventFilterTest, ActivateOnTouch) { |
+TEST_F(DesktopEventFilterTest, ActivateOnTouch) { |
aura::Desktop* desktop = aura::Desktop::GetInstance(); |
aura::test::ActivateWindowDelegate d1; |
@@ -252,7 +253,7 @@ TEST_F(DefaultEventFilterTest, ActivateOnTouch) { |
EXPECT_EQ(0, d1.lost_active_count()); |
} |
-TEST_F(DefaultEventFilterTest, MouseEventCursors) { |
+TEST_F(DesktopEventFilterTest, MouseEventCursors) { |
aura::Desktop* desktop = aura::Desktop::GetInstance(); |
// Create a window. |
@@ -316,7 +317,7 @@ TEST_F(DefaultEventFilterTest, MouseEventCursors) { |
EXPECT_EQ(aura::kCursorNull, desktop->last_cursor()); |
} |
-TEST_F(DefaultEventFilterTest, TransformActivate) { |
+TEST_F(DesktopEventFilterTest, TransformActivate) { |
aura::Desktop* desktop = aura::Desktop::GetInstance(); |
gfx::Size size = desktop->GetHostSize(); |
EXPECT_EQ(gfx::Rect(size), |
@@ -355,5 +356,74 @@ TEST_F(DefaultEventFilterTest, TransformActivate) { |
EXPECT_EQ(w1.get(), w1->GetFocusManager()->GetFocusedWindow()); |
} |
+TEST_F(DesktopEventFilterTest, AdditionalFilters) { |
+ aura::Desktop* desktop = aura::Desktop::GetInstance(); |
+ |
+ // Creates a window and make it active |
+ scoped_ptr<aura::Window> w1(aura::test::CreateTestWindow( |
+ SK_ColorWHITE, -1, gfx::Rect(0, 0, 100, 100), NULL)); |
+ desktop->SetActiveWindow(w1.get(), NULL); |
+ |
+ // Creates two addition filters |
+ scoped_ptr<aura::test::TestEventFilter> f1( |
+ new aura::test::TestEventFilter(NULL)); |
+ scoped_ptr<aura::test::TestEventFilter> f2( |
+ new aura::test::TestEventFilter(NULL)); |
+ |
+ // Adds them to desktop event filter. |
+ internal::DesktopEventFilter* desktop_filter = |
+ static_cast<internal::DesktopEventFilter*>(desktop->event_filter()); |
+ desktop_filter->AddFilter(f1.get()); |
+ desktop_filter->AddFilter(f2.get()); |
+ |
+ // Dispatches mouse and keyboard events. |
+ aura::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, 0); |
+ desktop->DispatchKeyEvent(&key_event); |
+ aura::MouseEvent mouse_pressed(ui::ET_MOUSE_PRESSED, gfx::Point(0, 0), 0x0); |
+ desktop->DispatchMouseEvent(&mouse_pressed); |
+ |
+ // Both filters should get the events. |
+ EXPECT_EQ(1, f1->key_event_count()); |
+ EXPECT_EQ(1, f1->mouse_event_count()); |
+ EXPECT_EQ(1, f2->key_event_count()); |
+ EXPECT_EQ(1, f2->mouse_event_count()); |
+ |
+ f1->ResetCounts(); |
+ f2->ResetCounts(); |
+ |
+ // Makes f1 consume events. |
+ f1->set_consumes_key_events(true); |
+ f1->set_consumes_mouse_events(true); |
+ |
+ // Dispatches events. |
+ desktop->DispatchKeyEvent(&key_event); |
+ aura::MouseEvent mouse_released(ui::ET_MOUSE_RELEASED, gfx::Point(0, 0), 0x0); |
+ desktop->DispatchMouseEvent(&mouse_released); |
+ |
+ // f1 should still get the events but f2 no longer gets them. |
+ EXPECT_EQ(1, f1->key_event_count()); |
+ EXPECT_EQ(1, f1->mouse_event_count()); |
+ EXPECT_EQ(0, f2->key_event_count()); |
+ EXPECT_EQ(0, f2->mouse_event_count()); |
+ |
+ f1->ResetCounts(); |
+ f2->ResetCounts(); |
+ |
+ // Remove f1 from additonal filters list. |
+ desktop_filter->RemoveFilter(f1.get()); |
+ |
+ // Dispatches events. |
+ desktop->DispatchKeyEvent(&key_event); |
+ desktop->DispatchMouseEvent(&mouse_pressed); |
+ |
+ // f1 should get no events since it's out and f2 should get them. |
+ EXPECT_EQ(0, f1->key_event_count()); |
+ EXPECT_EQ(0, f1->mouse_event_count()); |
+ EXPECT_EQ(1, f2->key_event_count()); |
+ EXPECT_EQ(1, f2->mouse_event_count()); |
+ |
+ desktop_filter->RemoveFilter(f2.get()); |
+} |
+ |
} // namespace test |
} // namespace aura_shell |