| Index: ui/views/view_unittest.cc
|
| diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc
|
| index 68675c0aa8d0748f74102ea9f7b7e3295d9d9334..8e4a7a7f8a933d5d9a4c9a16768fff706809ee75 100644
|
| --- a/ui/views/view_unittest.cc
|
| +++ b/ui/views/view_unittest.cc
|
| @@ -212,7 +212,9 @@ class TestView : public View {
|
| delete_on_pressed_(false),
|
| did_paint_(false),
|
| native_theme_(NULL),
|
| - can_process_events_within_subtree_(true) {}
|
| + can_process_events_within_subtree_(true),
|
| + is_child_widget_(false),
|
| + focus_in_child_widget_(false) {}
|
| ~TestView() override {}
|
|
|
| // Reset all test state
|
| @@ -265,6 +267,12 @@ class TestView : public View {
|
|
|
| void OnNativeThemeChanged(const ui::NativeTheme* native_theme) override;
|
|
|
| + bool IsChildWidget() const override { return is_child_widget_; }
|
| + bool FocusInChildWidget() const override { return focus_in_child_widget_; }
|
| +
|
| + void set_child_widget(bool b) { is_child_widget_ = b; }
|
| + void set_focus_in_child_widget(bool b) { focus_in_child_widget_ = b; }
|
| +
|
| // OnBoundsChanged.
|
| bool did_change_bounds_;
|
| gfx::Rect new_bounds_;
|
| @@ -291,6 +299,9 @@ class TestView : public View {
|
|
|
| // Value to return from CanProcessEventsWithinSubtree().
|
| bool can_process_events_within_subtree_;
|
| +
|
| + bool is_child_widget_;
|
| + bool focus_in_child_widget_;
|
| };
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -2101,6 +2112,72 @@ bool TestView::AcceleratorPressed(const ui::Accelerator& accelerator) {
|
| return true;
|
| }
|
|
|
| +class TestWidget : public Widget {
|
| + public:
|
| + TestWidget() : Widget() {}
|
| +
|
| + // Widget method:
|
| + bool IsActive() const override { return active_; }
|
| +
|
| + void set_active(bool active) { active_ = active; }
|
| +
|
| + private:
|
| + bool active_ = false;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestWidget);
|
| +};
|
| +
|
| +// ChromeOS handles accelerators correctly with regards to the activeness or top
|
| +// level status of the widget, so there's no extra logic there to test.
|
| +#if !defined(OS_CHROMEOS)
|
| +TEST_F(ViewTest, HandleAccelerator) {
|
| + ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE);
|
| + TestView* view = new TestView();
|
| + view->Reset();
|
| + view->AddAccelerator(return_accelerator);
|
| + EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0);
|
| +
|
| + // Create a window and add the view as its child.
|
| + scoped_ptr<TestWidget> widget(new TestWidget);
|
| + Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
|
| + params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
|
| + params.bounds = gfx::Rect(0, 0, 100, 100);
|
| + widget->Init(params);
|
| + View* root = widget->GetRootView();
|
| + root->AddChildView(view);
|
| + widget->Show();
|
| +
|
| + FocusManager* focus_manager = widget->GetFocusManager();
|
| + ASSERT_TRUE(focus_manager);
|
| +
|
| + // Child widgets shouldn't handle accelerators when they are not focused.
|
| + EXPECT_FALSE(view->IsChildWidget());
|
| + EXPECT_FALSE(view->FocusInChildWidget());
|
| + EXPECT_FALSE(widget->IsActive());
|
| + EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator));
|
| + EXPECT_EQ(0, view->accelerator_count_map_[return_accelerator]);
|
| +
|
| + // Child without focus.
|
| + view->set_child_widget(true);
|
| + view->set_focus_in_child_widget(false);
|
| + EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator));
|
| + EXPECT_EQ(0, view->accelerator_count_map_[return_accelerator]);
|
| +
|
| + // Child with focus.
|
| + view->set_child_widget(true);
|
| + view->set_focus_in_child_widget(true);
|
| + EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
|
| + EXPECT_EQ(1, view->accelerator_count_map_[return_accelerator]);
|
| +
|
| + // Not a child, but active.
|
| + view->set_child_widget(false);
|
| + view->set_focus_in_child_widget(true);
|
| + widget->set_active(true);
|
| + EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
|
| + EXPECT_EQ(2, view->accelerator_count_map_[return_accelerator]);
|
| +}
|
| +#endif
|
| +
|
| // TODO: these tests were initially commented out when getting aura to
|
| // run. Figure out if still valuable and either nuke or fix.
|
| #if 0
|
|
|