| Index: ui/views/corewm/focus_controller_unittest.cc
|
| diff --git a/ui/views/corewm/focus_controller_unittest.cc b/ui/views/corewm/focus_controller_unittest.cc
|
| index 349f517d7bd1d1bfae4c44bbd1666548b9f96487..8bea0a9727da2e22f09ae96ada2475648c290a60 100644
|
| --- a/ui/views/corewm/focus_controller_unittest.cc
|
| +++ b/ui/views/corewm/focus_controller_unittest.cc
|
| @@ -305,6 +305,7 @@ class FocusControllerTestBase : public aura::test::AuraTestBase {
|
| virtual void NoShiftActiveOnActivation() {}
|
| virtual void NoFocusChangeOnClickOnCaptureWindow() {}
|
| virtual void ChangeFocusWhenNothingFocusedAndCaptured() {}
|
| + virtual void ChangeFocusWithinActivate() {}
|
|
|
| private:
|
| scoped_ptr<FocusController> focus_controller_;
|
| @@ -313,6 +314,38 @@ class FocusControllerTestBase : public aura::test::AuraTestBase {
|
| DISALLOW_COPY_AND_ASSIGN(FocusControllerTestBase);
|
| };
|
|
|
| +// ActivationChangeObserver that attempts to focus another window on an
|
| +// activation change.
|
| +class TestActivationChangeObserver
|
| + : public aura::client::ActivationChangeObserver {
|
| + public:
|
| + TestActivationChangeObserver() : gained_active_(NULL), to_focus_(NULL) {}
|
| + virtual ~TestActivationChangeObserver() {}
|
| +
|
| + // Sets the window to focus (|to_focus|) when a window is made active.
|
| + void SetWindows(aura::Window* gained_active, aura::Window* to_focus) {
|
| + gained_active_ = gained_active;
|
| + to_focus_ = to_focus;
|
| + }
|
| +
|
| + // aura::client::ActivationChangeObserver:
|
| + virtual void OnWindowActivated(aura::Window* gained_active,
|
| + aura::Window* lost_active) OVERRIDE {
|
| + if (gained_active == gained_active_ && to_focus_) {
|
| + aura::Window* to_focus = to_focus_;
|
| + to_focus_ = NULL;
|
| + gained_active_ = NULL;
|
| + to_focus->Focus();
|
| + }
|
| + }
|
| +
|
| + private:
|
| + aura::Window* gained_active_;
|
| + aura::Window* to_focus_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestActivationChangeObserver);
|
| +};
|
| +
|
| // Test base for tests where focus is directly set to a target window.
|
| class FocusControllerDirectTestBase : public FocusControllerTestBase {
|
| protected:
|
| @@ -618,6 +651,25 @@ class FocusControllerDirectTestBase : public FocusControllerTestBase {
|
| aura::client::GetCaptureClient(root_window())->ReleaseCapture(w1);
|
| }
|
|
|
| + // Verifies a request to focus a window is honored if the
|
| + // ActivationChangeObserver changes focus.
|
| + virtual void ChangeFocusWithinActivate() OVERRIDE {
|
| + TestActivationChangeObserver test_observer;
|
| + aura::client::GetActivationClient(root_window())->
|
| + AddObserver(&test_observer);
|
| + // Set things such that when |w1| is made active a request is made to focus
|
| + // |w11|.
|
| + test_observer.SetWindows(root_window()->GetChildById(1),
|
| + root_window()->GetChildById(11));
|
| + // Attempt to activate |w12|. This should activate |w1| (its the child of
|
| + // the root
|
| + ActivateWindowById(12);
|
| + EXPECT_EQ(1, GetActiveWindowId());
|
| + EXPECT_EQ(12, GetFocusedWindowId());
|
| + aura::client::GetActivationClient(root_window())->RemoveObserver(
|
| + &test_observer);
|
| + }
|
| +
|
| private:
|
| DISALLOW_COPY_AND_ASSIGN(FocusControllerDirectTestBase);
|
| };
|
| @@ -1019,5 +1071,7 @@ DIRECT_FOCUS_CHANGE_TESTS(NoFocusChangeOnClickOnCaptureWindow);
|
| FOCUS_CONTROLLER_TEST(FocusControllerApiTest,
|
| ChangeFocusWhenNothingFocusedAndCaptured);
|
|
|
| +FOCUS_CONTROLLER_TEST(FocusControllerApiTest, ChangeFocusWithinActivate);
|
| +
|
| } // namespace corewm
|
| } // namespace views
|
|
|