Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / accessibility / accessibility_event_router_views_unittest.cc
index 4b86aeb..44aee57 100644 (file)
 #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;
@@ -41,15 +44,16 @@ 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);
 };
 
@@ -59,12 +63,12 @@ class AccessibilityWindowDelegate : public views::WidgetDelegate {
       : 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_;
@@ -75,12 +79,12 @@ class AccessibilityWindowDelegate : public views::WidgetDelegate {
 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_;
@@ -90,7 +94,7 @@ class ViewWithNameAndRole : public views::View {
 
  private:
   base::string16 name_;
-  ui::AccessibilityTypes::Role role_;
+  ui::AXRole role_;
   DISALLOW_COPY_AND_ASSIGN(ViewWithNameAndRole);
 };
 
@@ -100,26 +104,31 @@ class AccessibilityEventRouterViewsTest
   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
@@ -132,7 +141,7 @@ class AccessibilityEventRouterViewsTest
   }
 
   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
@@ -165,7 +174,7 @@ class AccessibilityEventRouterViewsTest
 
  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();
@@ -251,7 +260,7 @@ TEST_F(AccessibilityEventRouterViewsTest, TestToolbarContext) {
   // 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);
@@ -281,7 +290,7 @@ TEST_F(AccessibilityEventRouterViewsTest, TestAlertContext) {
   // 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(
@@ -314,10 +323,10 @@ TEST_F(AccessibilityEventRouterViewsTest, StateChangeAfterNotification) {
   // 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);
 
@@ -350,10 +359,10 @@ TEST_F(AccessibilityEventRouterViewsTest, NotificationOnDeletedObject) {
   // 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);
 
@@ -396,7 +405,7 @@ TEST_F(AccessibilityEventRouterViewsTest, AlertsFromWindowAndControl) {
 
   // 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_);
@@ -406,7 +415,7 @@ TEST_F(AccessibilityEventRouterViewsTest, AlertsFromWindowAndControl) {
   // 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_);
@@ -415,6 +424,32 @@ TEST_F(AccessibilityEventRouterViewsTest, AlertsFromWindowAndControl) {
   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 {
@@ -427,7 +462,7 @@ class SimpleMenuDelegate : public ui::SimpleMenuModel::Delegate {
   };
 
   SimpleMenuDelegate() {}
-  virtual ~SimpleMenuDelegate() {}
+  ~SimpleMenuDelegate() override {}
 
   views::MenuItemView* BuildMenu() {
     menu_model_.reset(new ui::SimpleMenuModel(this));
@@ -438,33 +473,30 @@ class SimpleMenuDelegate : public ui::SimpleMenuModel::Delegate {
     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);
@@ -488,7 +520,7 @@ TEST_F(AccessibilityEventRouterViewsTest, MenuIndexAndCountForInvisibleMenu) {
     { 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;