#include "chrome/browser/ui/views/accessibility/accessibility_event_router_views.h"
#include "chrome/test/base/testing_profile.h"
#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/base/accessibility/accessibility_types.h"
-#include "ui/base/accessibility/accessible_view_state.h"
+#include "ui/accessibility/ax_enums.h"
+#include "ui/accessibility/ax_view_state.h"
#include "ui/base/models/simple_menu_model.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/controls/label.h"
#include "ui/views/controls/menu/menu_item_view.h"
+#include "ui/views/controls/menu/menu_model_adapter.h"
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/controls/menu/submenu_view.h"
#include "ui/views/layout/grid_layout.h"
#endif
#if defined(USE_AURA)
-#include "ui/aura/root_window.h"
#include "ui/aura/test/aura_test_helper.h"
+#include "ui/aura/window_event_dispatcher.h"
+#include "ui/compositor/test/context_factories_for_test.h"
+#include "ui/wm/core/default_activation_client.h"
#endif
using base::ASCIIToUTF16;
class AccessibilityViewsDelegate : public views::TestViewsDelegate {
public:
AccessibilityViewsDelegate() {}
- virtual ~AccessibilityViewsDelegate() {}
+ ~AccessibilityViewsDelegate() override {}
// Overridden from views::TestViewsDelegate:
- virtual void NotifyAccessibilityEvent(
- views::View* view, ui::AccessibilityTypes::Event event_type) OVERRIDE {
+ void NotifyAccessibilityEvent(views::View* view,
+ ui::AXEvent event_type) override {
AccessibilityEventRouterViews::GetInstance()->HandleAccessibilityEvent(
view, event_type);
}
+ private:
DISALLOW_COPY_AND_ASSIGN(AccessibilityViewsDelegate);
};
: contents_(contents) { }
// Overridden from views::WidgetDelegate:
- virtual void DeleteDelegate() OVERRIDE { delete this; }
- virtual views::View* GetContentsView() OVERRIDE { return contents_; }
- virtual const views::Widget* GetWidget() const OVERRIDE {
+ void DeleteDelegate() override { delete this; }
+ views::View* GetContentsView() override { return contents_; }
+ const views::Widget* GetWidget() const override {
return contents_->GetWidget();
}
- virtual views::Widget* GetWidget() OVERRIDE { return contents_->GetWidget(); }
+ views::Widget* GetWidget() override { return contents_->GetWidget(); }
private:
views::View* contents_;
class ViewWithNameAndRole : public views::View {
public:
explicit ViewWithNameAndRole(const base::string16& name,
- ui::AccessibilityTypes::Role role)
+ ui::AXRole role)
: name_(name),
role_(role) {
}
- virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE {
+ void GetAccessibleState(ui::AXViewState* state) override {
views::View::GetAccessibleState(state);
state->name = name_;
state->role = role_;
private:
base::string16 name_;
- ui::AccessibilityTypes::Role role_;
+ ui::AXRole role_;
DISALLOW_COPY_AND_ASSIGN(ViewWithNameAndRole);
};
AccessibilityEventRouterViewsTest() : control_event_count_(0) {
}
- virtual void SetUp() {
+ void SetUp() override {
#if defined(OS_WIN)
ole_initializer_.reset(new ui::ScopedOleInitializer());
#endif
views::ViewsDelegate::views_delegate = new AccessibilityViewsDelegate();
#if defined(USE_AURA)
+ // The ContextFactory must exist before any Compositors are created.
+ bool enable_pixel_output = false;
+ ui::ContextFactory* context_factory =
+ ui::InitializeContextFactoryForTests(enable_pixel_output);
+
aura_test_helper_.reset(new aura::test::AuraTestHelper(&message_loop_));
- bool allow_test_contexts = true;
- aura_test_helper_->SetUp(allow_test_contexts);
+ aura_test_helper_->SetUp(context_factory);
+ new wm::DefaultActivationClient(aura_test_helper_->root_window());
#endif // USE_AURA
EnableAccessibilityAndListenToFocusNotifications();
}
- virtual void TearDown() {
+ void TearDown() override {
ClearCallback();
#if defined(USE_AURA)
aura_test_helper_->TearDown();
+ ui::TerminateContextFactoryForTests();
#endif
delete views::ViewsDelegate::views_delegate;
- views::ViewsDelegate::views_delegate = NULL;
// The Widget's FocusManager is deleted using DeleteSoon - this
// forces it to be deleted now, so we don't have any memory leaks
}
views::Widget* CreateWindowWithContents(views::View* contents) {
- gfx::NativeView context = NULL;
+ gfx::NativeWindow context = NULL;
#if defined(USE_AURA)
context = aura_test_helper_->root_window();
#endif
protected:
// Handle Focus event.
- virtual void OnControlEvent(ui::AccessibilityTypes::Event event,
+ virtual void OnControlEvent(ui::AXEvent event,
const AccessibilityControlInfo* info) {
control_event_count_++;
last_control_type_ = info->type();
// Create a toolbar with a button.
views::View* contents = new ViewWithNameAndRole(
ASCIIToUTF16(kToolbarNameASCII),
- ui::AccessibilityTypes::ROLE_TOOLBAR);
+ ui::AX_ROLE_TOOLBAR);
views::LabelButton* button = new views::LabelButton(
NULL, ASCIIToUTF16(kButtonNameASCII));
button->SetStyle(views::Button::STYLE_BUTTON);
// Create an alert with static text and a button, similar to an infobar.
views::View* contents = new ViewWithNameAndRole(
base::string16(),
- ui::AccessibilityTypes::ROLE_ALERT);
+ ui::AX_ROLE_ALERT);
views::Label* label = new views::Label(ASCIIToUTF16(kAlertTextASCII));
contents->AddChildView(label);
views::LabelButton* button = new views::LabelButton(
// Create a toolbar with a button.
views::View* contents = new ViewWithNameAndRole(
ASCIIToUTF16(kContentsNameASCII),
- ui::AccessibilityTypes::ROLE_CLIENT);
+ ui::AX_ROLE_CLIENT);
ViewWithNameAndRole* child = new ViewWithNameAndRole(
ASCIIToUTF16(kOldNameASCII),
- ui::AccessibilityTypes::ROLE_PUSHBUTTON);
+ ui::AX_ROLE_BUTTON);
child->SetFocusable(true);
contents->AddChildView(child);
// Create a toolbar with a button.
views::View* contents = new ViewWithNameAndRole(
ASCIIToUTF16(kContentsNameASCII),
- ui::AccessibilityTypes::ROLE_CLIENT);
+ ui::AX_ROLE_CLIENT);
ViewWithNameAndRole* child = new ViewWithNameAndRole(
ASCIIToUTF16(kNameASCII),
- ui::AccessibilityTypes::ROLE_PUSHBUTTON);
+ ui::AX_ROLE_BUTTON);
child->SetFocusable(true);
contents->AddChildView(child);
// Send an alert event from the button and let the event loop run.
control_event_count_ = 0;
- button->NotifyAccessibilityEvent(ui::AccessibilityTypes::EVENT_ALERT, true);
+ button->NotifyAccessibilityEvent(ui::AX_EVENT_ALERT, true);
base::MessageLoop::current()->RunUntilIdle();
EXPECT_EQ(kTypeAlert, last_control_type_);
// Send an alert event from the window and let the event loop run.
control_event_count_ = 0;
window->GetRootView()->NotifyAccessibilityEvent(
- ui::AccessibilityTypes::EVENT_ALERT, true);
+ ui::AX_EVENT_ALERT, true);
base::MessageLoop::current()->RunUntilIdle();
EXPECT_EQ(1, control_event_count_);
window->CloseNow();
}
+TEST_F(AccessibilityEventRouterViewsTest, AccessibilityFocusableView) {
+ // Create a view with a child view.
+ views::View* parent = new views::View();
+ views::View* child = new views::View();
+ parent->AddChildView(child);
+
+ // Put the view in a window.
+ views::Widget* window = CreateWindowWithContents(parent);
+
+ // Since the child view has no accessibility focusable ancestors, this
+ // should still be the child view.
+ views::View* accessible_view =
+ AccessibilityEventRouterViews::FindFirstAccessibleAncestor(child);
+ EXPECT_EQ(accessible_view, child);
+
+ // Now make the parent view accessibility focusable. Calling
+ // FindFirstAccessibleAncestor() again on child should return the parent
+ // view.
+ parent->SetAccessibilityFocusable(true);
+ accessible_view =
+ AccessibilityEventRouterViews::FindFirstAccessibleAncestor(child);
+ EXPECT_EQ(accessible_view, parent);
+
+ window->CloseNow();
+}
+
namespace {
class SimpleMenuDelegate : public ui::SimpleMenuModel::Delegate {
};
SimpleMenuDelegate() {}
- virtual ~SimpleMenuDelegate() {}
+ ~SimpleMenuDelegate() override {}
views::MenuItemView* BuildMenu() {
menu_model_.reset(new ui::SimpleMenuModel(this));
menu_model_->AddSeparator(ui::NORMAL_SEPARATOR);
menu_model_->AddItem(IDC_MENU_ITEM_3, ASCIIToUTF16("Item 3"));
- menu_runner_.reset(new views::MenuRunner(menu_model_.get()));
- return menu_runner_->GetMenu();
+ menu_adapter_.reset(new views::MenuModelAdapter(menu_model_.get()));
+ views::MenuItemView* menu_view = menu_adapter_->CreateMenu();
+ menu_runner_.reset(new views::MenuRunner(menu_view, 0));
+ return menu_view;
}
- virtual bool IsCommandIdChecked(int command_id) const OVERRIDE {
- return false;
- }
+ bool IsCommandIdChecked(int command_id) const override { return false; }
- virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE {
- return true;
- }
+ bool IsCommandIdEnabled(int command_id) const override { return true; }
- virtual bool IsCommandIdVisible(int command_id) const OVERRIDE {
+ bool IsCommandIdVisible(int command_id) const override {
return command_id != IDC_MENU_INVISIBLE;
}
- virtual bool GetAcceleratorForCommandId(
- int command_id,
- ui::Accelerator* accelerator) OVERRIDE {
+ bool GetAcceleratorForCommandId(int command_id,
+ ui::Accelerator* accelerator) override {
return false;
}
- virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE {
- }
+ void ExecuteCommand(int command_id, int event_flags) override {}
private:
scoped_ptr<ui::SimpleMenuModel> menu_model_;
+ scoped_ptr<views::MenuModelAdapter> menu_adapter_;
scoped_ptr<views::MenuRunner> menu_runner_;
DISALLOW_COPY_AND_ASSIGN(SimpleMenuDelegate);
{ SimpleMenuDelegate::IDC_MENU_ITEM_3, 2, 3 },
};
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
+ for (size_t i = 0; i < arraysize(kTestCases); ++i) {
int index = 0;
int count = 0;