| Index: services/window_manager/focus_controller_unittest.cc
|
| diff --git a/services/window_manager/focus_controller_unittest.cc b/services/window_manager/focus_controller_unittest.cc
|
| index 13e841d228d087523874c2aecb1679d87e23ca85..e55e9e0a51e175f2c824cb77a134c0b654ac934c 100644
|
| --- a/services/window_manager/focus_controller_unittest.cc
|
| +++ b/services/window_manager/focus_controller_unittest.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "mojo/converters/geometry/geometry_type_converters.h"
|
| #include "services/window_manager/basic_focus_rules.h"
|
| +#include "services/window_manager/capture_controller.h"
|
| #include "services/window_manager/focus_controller_observer.h"
|
| #include "services/window_manager/view_event_dispatcher.h"
|
| #include "services/window_manager/view_targeter.h"
|
| @@ -347,6 +348,10 @@ class FocusControllerTestBase : public testing::Test {
|
| test_focus_rules_ = new TestFocusRules(root_view());
|
| focus_controller_.reset(
|
| new FocusController(scoped_ptr<FocusRules>(test_focus_rules_)));
|
| + SetFocusController(root_view(), focus_controller_.get());
|
| +
|
| + capture_controller_.reset(new CaptureController);
|
| + SetCaptureController(root_view(), capture_controller_.get());
|
|
|
| ViewTarget* root_target = root_view_->target();
|
| root_target->SetEventTargeter(scoped_ptr<ViewTargeter>(new ViewTargeter()));
|
| @@ -362,6 +367,7 @@ class FocusControllerTestBase : public testing::Test {
|
|
|
| root_view_->Destroy();
|
|
|
| + capture_controller_.reset();
|
| test_focus_rules_ = nullptr; // Owned by FocusController.
|
| focus_controller_.reset();
|
|
|
| @@ -410,6 +416,7 @@ class FocusControllerTestBase : public testing::Test {
|
| View* root_view() { return root_view_; }
|
| TestFocusRules* test_focus_rules() { return test_focus_rules_; }
|
| FocusController* focus_controller() { return focus_controller_.get(); }
|
| + CaptureController* capture_controller() { return capture_controller_.get(); }
|
|
|
| // Test functions.
|
| virtual void BasicFocus() = 0;
|
| @@ -427,9 +434,8 @@ class FocusControllerTestBase : public testing::Test {
|
| virtual void ShiftFocusOnActivation() {}
|
| virtual void ShiftFocusOnActivationDueToHide() {}
|
| virtual void NoShiftActiveOnActivation() {}
|
| - // TODO(erg): void NoFocusChangeOnClickOnCaptureWindow() once we have a
|
| - // system of capture.
|
| - // TODO(erg): Also, void ChangeFocusWhenNothingFocusedAndCaptured().
|
| + virtual void NoFocusChangeOnClickOnCaptureWindow() {}
|
| + virtual void ChangeFocusWhenNothingFocusedAndCaptured() {}
|
| virtual void DontPassDestroyedView() {}
|
| // TODO(erg): Also, void FocusedTextInputClient() once we build the IME.
|
|
|
| @@ -437,6 +443,7 @@ class FocusControllerTestBase : public testing::Test {
|
| TestView* root_view_;
|
| scoped_ptr<FocusController> focus_controller_;
|
| TestFocusRules* test_focus_rules_;
|
| + scoped_ptr<CaptureController> capture_controller_;
|
| // TODO(erg): The aura version of this class also keeps track of WMState. Do
|
| // we need something analogous here?
|
|
|
| @@ -723,7 +730,39 @@ class FocusControllerDirectTestBase : public FocusControllerTestBase {
|
| // from being made in response to an activation change notification.
|
| }
|
|
|
| - // TODO(erg): Port the capture tests here, once we have a capture mechanism.
|
| + void NoFocusChangeOnClickOnCaptureWindow() override {
|
| + // Clicking on a view which has capture should not cause a focus change
|
| + // to the view. This test verifies whether that is indeed the case.
|
| + ActivateViewById(1);
|
| +
|
| + EXPECT_EQ(1, GetActiveViewId());
|
| + EXPECT_EQ(1, GetFocusedViewId());
|
| +
|
| + View* v2 = root_view()->GetChildById(2);
|
| + capture_controller()->SetCapture(v2);
|
| + ClickLeftButton(v2);
|
| +
|
| + EXPECT_EQ(1, GetActiveViewId());
|
| + EXPECT_EQ(1, GetFocusedViewId());
|
| +
|
| + capture_controller()->ReleaseCapture(v2);
|
| + }
|
| +
|
| + // Verifies focus change is honored while capture held.
|
| + void ChangeFocusWhenNothingFocusedAndCaptured() override {
|
| + View* v1 = root_view()->GetChildById(1);
|
| + capture_controller()->SetCapture(v1);
|
| +
|
| + EXPECT_EQ(-1, GetActiveViewId());
|
| + EXPECT_EQ(-1, GetFocusedViewId());
|
| +
|
| + FocusViewById(1);
|
| +
|
| + EXPECT_EQ(1, GetActiveViewId());
|
| + EXPECT_EQ(1, GetFocusedViewId());
|
| +
|
| + capture_controller()->ReleaseCapture(v1);
|
| + }
|
|
|
| // Verifies if a view that loses activation or focus is destroyed during
|
| // observer notification we don't pass the destroyed view to other observers.
|
| @@ -1122,7 +1161,11 @@ DIRECT_FOCUS_CHANGE_TESTS(ShiftFocusOnActivation);
|
| DIRECT_FOCUS_CHANGE_TESTS(ShiftFocusOnActivationDueToHide);
|
| DIRECT_FOCUS_CHANGE_TESTS(NoShiftActiveOnActivation);
|
|
|
| -// TODO(erg): Add the capture tests here.
|
| +// Clicking on a window which has capture should not result in a focus change.
|
| +DIRECT_FOCUS_CHANGE_TESTS(NoFocusChangeOnClickOnCaptureWindow);
|
| +
|
| +FOCUS_CONTROLLER_TEST(FocusControllerApiTest,
|
| + ChangeFocusWhenNothingFocusedAndCaptured);
|
|
|
| // See description above DontPassDestroyedView() for details.
|
| FOCUS_CONTROLLER_TEST(FocusControllerApiTest, DontPassDestroyedView);
|
|
|