Skip to content

Commit

Permalink
Refactor Views accessibility.
Browse files Browse the repository at this point in the history
BUG=none
TEST=none

Review URL: http://codereview.chromium.org/6581010

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76825 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
dmazzoni@chromium.org committed Mar 3, 2011
1 parent 7c8f18a commit c45dde3
Show file tree
Hide file tree
Showing 139 changed files with 1,068 additions and 884 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@
#include "chrome/test/ui_test_utils.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "ui/base/accessibility/accessibility_types.h"
#include "ui/base/l10n/l10n_util.h"
#include "views/accessibility/view_accessibility.h"
#include "views/accessibility/native_view_accessibility_win.h"
#include "views/widget/root_view.h"
#include "views/widget/widget_win.h"
#include "views/window/window.h"
Expand All @@ -28,7 +29,7 @@ namespace {
VARIANT id_self = {VT_I4, CHILDID_SELF};

// Dummy class to force creation of ATL module, needed by COM to instantiate
// ViewAccessibility.
// NativeViewAccessibilityWin.
class TestAtlModule : public CAtlDllModuleT<TestAtlModule> {};
TestAtlModule test_atl_module_;

Expand Down Expand Up @@ -86,7 +87,9 @@ class BrowserViewsAccessibilityTest : public InProcessBrowserTest {
ASSERT_TRUE(NULL != view);

TestAccessibilityInfo(
ViewAccessibility::GetAccessibleForView(view), name, role);
views::NativeViewAccessibilityWin::GetAccessibleForView(view),
name,
role);
}


Expand Down Expand Up @@ -253,8 +256,8 @@ IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest,
EXPECT_STREQ(
aboutChromeWindow->GetDelegate()->GetWindowTitle().c_str(),
UTF16ToWide(l10n_util::GetStringUTF16(IDS_ABOUT_CHROME_TITLE)).c_str());
EXPECT_EQ(aboutChromeWindow->GetDelegate()->accessible_role(),
AccessibilityTypes::ROLE_DIALOG);
EXPECT_EQ(aboutChromeWindow->GetDelegate()->GetAccessibleRole(),
ui::AccessibilityTypes::ROLE_DIALOG);

// Also test the accessibility object directly.
IAccessible* acc_obj = NULL;
Expand Down
6 changes: 3 additions & 3 deletions chrome/browser/autocomplete/autocomplete_accessibility.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#include "chrome/browser/autocomplete/autocomplete_edit_view_win.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "views/accessibility/view_accessibility.h"
#include "views/accessibility/native_view_accessibility_win.h"
#include "views/view.h"

HRESULT AutocompleteAccessibility::Initialize(
Expand Down Expand Up @@ -59,8 +59,8 @@ STDMETHODIMP AutocompleteAccessibility::get_accParent(IDispatch** disp_parent) {
}

// Retrieve the IDispatch interface for the parent view.
*disp_parent =
ViewAccessibility::GetAccessibleForView(edit_box_->parent_view());
*disp_parent = views::NativeViewAccessibilityWin::GetAccessibleForView(
edit_box_->parent_view());
// Increment the reference count for the retrieved interface.
(*disp_parent)->AddRef();
return S_OK;
Expand Down
6 changes: 6 additions & 0 deletions chrome/browser/autocomplete/autocomplete_edit_view_views.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "googleurl/src/gurl.h"
#include "grit/generated_resources.h"
#include "net/base/escape.h"
#include "ui/base/accessibility/accessible_view_state.h"
#include "ui/base/dragdrop/drag_drop_types.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/font.h"
Expand Down Expand Up @@ -271,6 +272,11 @@ void AutocompleteEditViewViews::Layout() {
height() - insets.height());
}

void AutocompleteEditViewViews::GetAccessibleState(
ui::AccessibleViewState* state) {
state->name = l10n_util::GetStringUTF16(IDS_ACCNAME_LOCATION);
}

////////////////////////////////////////////////////////////////////////////////
// AutocompleteEditViewViews, AutocopmleteEditView implementation:

Expand Down
1 change: 1 addition & 0 deletions chrome/browser/autocomplete/autocomplete_edit_view_views.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ class AutocompleteEditViewViews : public views::View,
// Implements views::View
virtual bool OnMousePressed(const views::MouseEvent& event);
virtual void Layout();
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;

// Implement the AutocompleteEditView interface.
virtual AutocompleteEditModel* model();
Expand Down
14 changes: 8 additions & 6 deletions chrome/browser/autocomplete/autocomplete_edit_view_win.cc
Original file line number Diff line number Diff line change
Expand Up @@ -735,8 +735,10 @@ void AutocompleteEditViewWin::ClosePopup() {

void AutocompleteEditViewWin::SetFocus() {
::SetFocus(m_hWnd);
parent_view_->
NotifyAccessibilityEvent(AccessibilityTypes::EVENT_FOCUS, false);
parent_view_->GetWidget()->NotifyAccessibilityEvent(
parent_view_,
ui::AccessibilityTypes::EVENT_FOCUS,
false);
}

IAccessible* AutocompleteEditViewWin::GetIAccessible() {
Expand Down Expand Up @@ -906,12 +908,12 @@ bool AutocompleteEditViewWin::OnAfterPossibleChangeInternal(
if (text_differs) {
// Note that a TEXT_CHANGED event implies that the cursor/selection
// probably changed too, so we don't need to send both.
parent_view_->NotifyAccessibilityEvent(
AccessibilityTypes::EVENT_TEXT_CHANGED);
parent_view_->GetWidget()->NotifyAccessibilityEvent(
parent_view_, ui::AccessibilityTypes::EVENT_TEXT_CHANGED, true);
} else if (selection_differs) {
// Notify assistive technology that the cursor or selection changed.
parent_view_->NotifyAccessibilityEvent(
AccessibilityTypes::EVENT_SELECTION_CHANGED);
parent_view_->GetWidget()->NotifyAccessibilityEvent(
parent_view_, ui::AccessibilityTypes::EVENT_SELECTION_CHANGED, true);
} else if (delete_at_end_pressed_) {
controller_->OnChanged();
}
Expand Down
4 changes: 2 additions & 2 deletions chrome/browser/download/download_browsertest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -388,8 +388,8 @@ class DownloadTest : public InProcessBrowserTest {
// - Add a member function to the |DownloadShelf| interface class, that
// indicates how many members it has.
// - Add a member function to |DownloadShelf| to get the status text
// of a given member (for example, via |DownloadItemView|'s
// GetAccessibleName() member function), by index.
// of a given member (for example, via the name in |DownloadItemView|'s
// GetAccessibleState() member function), by index.
// - Iterate over browser->window()->GetDownloadShelf()'s members
// to see if any match the status text we want. Start with the last one.

Expand Down
16 changes: 9 additions & 7 deletions chrome/browser/renderer_host/render_widget_host_view_win.cc
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
#include "ui/gfx/canvas_skia.h"
#include "ui/gfx/gdi_util.h"
#include "ui/gfx/rect.h"
#include "views/accessibility/view_accessibility.h"
#include "views/accessibility/native_view_accessibility_win.h"
#include "views/focus/focus_manager.h"
#include "views/focus/focus_util_win.h"
// Included for views::kReflectedMessage - TODO(beng): move this to win_util.h!
Expand Down Expand Up @@ -587,9 +587,10 @@ void RenderWidgetHostViewWin::Show() {

// Save away our HWND in the parent window as a property so that the
// accessibility code can find it.
accessibility_prop_.reset(new ViewProp(GetParent(),
kViewsNativeHostPropForAccessibility,
m_hWnd));
accessibility_prop_.reset(new ViewProp(
GetParent(),
views::kViewsNativeHostPropForAccessibility,
m_hWnd));

DidBecomeSelected();
}
Expand Down Expand Up @@ -864,9 +865,10 @@ LRESULT RenderWidgetHostViewWin::OnCreate(CREATESTRUCT* create_struct) {
static_cast<RenderWidgetHostView*>(this)));
// Save away our HWND in the parent window as a property so that the
// accessibility code can find it.
accessibility_prop_.reset(new ViewProp(GetParent(),
kViewsNativeHostPropForAccessibility,
m_hWnd));
accessibility_prop_.reset(new ViewProp(
GetParent(),
views::kViewsNativeHostPropForAccessibility,
m_hWnd));

return 0;
}
Expand Down
38 changes: 20 additions & 18 deletions chrome/browser/ui/views/accessibility_event_router_views.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/views/location_bar/location_bar_view.h"
#include "chrome/common/notification_type.h"
#include "views/accessibility/accessibility_types.h"
#include "ui/base/accessibility/accessible_view_state.h"
#include "views/controls/button/custom_button.h"
#include "views/controls/button/menu_button.h"
#include "views/controls/button/native_button.h"
Expand Down Expand Up @@ -43,38 +43,38 @@ AccessibilityEventRouterViews* AccessibilityEventRouterViews::GetInstance() {
}

void AccessibilityEventRouterViews::HandleAccessibilityEvent(
views::View* view, AccessibilityTypes::Event event_type) {
views::View* view, ui::AccessibilityTypes::Event event_type) {
if (!ExtensionAccessibilityEventRouter::GetInstance()->
IsAccessibilityEnabled()) {
return;
}

switch (event_type) {
case AccessibilityTypes::EVENT_FOCUS:
case ui::AccessibilityTypes::EVENT_FOCUS:
DispatchAccessibilityNotification(
view, NotificationType::ACCESSIBILITY_CONTROL_FOCUSED);
break;
case AccessibilityTypes::EVENT_MENUSTART:
case AccessibilityTypes::EVENT_MENUPOPUPSTART:
case ui::AccessibilityTypes::EVENT_MENUSTART:
case ui::AccessibilityTypes::EVENT_MENUPOPUPSTART:
DispatchAccessibilityNotification(
view, NotificationType::ACCESSIBILITY_MENU_OPENED);
break;
case AccessibilityTypes::EVENT_MENUEND:
case AccessibilityTypes::EVENT_MENUPOPUPEND:
case ui::AccessibilityTypes::EVENT_MENUEND:
case ui::AccessibilityTypes::EVENT_MENUPOPUPEND:
DispatchAccessibilityNotification(
view, NotificationType::ACCESSIBILITY_MENU_CLOSED);
break;
case AccessibilityTypes::EVENT_TEXT_CHANGED:
case AccessibilityTypes::EVENT_SELECTION_CHANGED:
case ui::AccessibilityTypes::EVENT_TEXT_CHANGED:
case ui::AccessibilityTypes::EVENT_SELECTION_CHANGED:
DispatchAccessibilityNotification(
view, NotificationType::ACCESSIBILITY_TEXT_CHANGED);
break;
case AccessibilityTypes::EVENT_VALUE_CHANGED:
case ui::AccessibilityTypes::EVENT_VALUE_CHANGED:
DispatchAccessibilityNotification(
view, NotificationType::ACCESSIBILITY_CONTROL_ACTION);
break;
case AccessibilityTypes::EVENT_ALERT:
case AccessibilityTypes::EVENT_NAME_CHANGED:
case ui::AccessibilityTypes::EVENT_ALERT:
case ui::AccessibilityTypes::EVENT_NAME_CHANGED:
// TODO(dmazzoni): re-evaluate this list later and see
// if supporting any of these would be useful feature requests or
// they'd just be superfluous.
Expand All @@ -88,9 +88,9 @@ void AccessibilityEventRouterViews::HandleAccessibilityEvent(
//

std::string AccessibilityEventRouterViews::GetViewName(views::View* view) {
string16 wname;
view->GetAccessibleName(&wname);
return UTF16ToUTF8(wname);
ui::AccessibleViewState state;
view->GetAccessibleState(&state);
return UTF16ToUTF8(state.name);
}

void AccessibilityEventRouterViews::DispatchAccessibilityNotification(
Expand Down Expand Up @@ -202,9 +202,11 @@ bool AccessibilityEventRouterViews::IsMenuEvent(
return true;

while (view) {
AccessibilityTypes::Role role = view->GetAccessibleRole();
if (role == AccessibilityTypes::ROLE_MENUITEM ||
role == AccessibilityTypes::ROLE_MENUPOPUP) {
ui::AccessibleViewState state;
view->GetAccessibleState(&state);
ui::AccessibilityTypes::Role role = state.role;
if (role == ui::AccessibilityTypes::ROLE_MENUITEM ||
role == ui::AccessibilityTypes::ROLE_MENUPOPUP) {
return true;
}
view = view->parent();
Expand Down
4 changes: 2 additions & 2 deletions chrome/browser/ui/views/accessibility_event_router_views.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
#include "base/singleton.h"
#include "base/task.h"
#include "chrome/browser/accessibility_events.h"
#include "views/accessibility/accessibility_types.h"
#include "ui/base/accessibility/accessibility_types.h"

class Profile;
namespace views {
Expand Down Expand Up @@ -54,7 +54,7 @@ class AccessibilityEventRouterViews {

// Handle an accessibility event generated by a view.
void HandleAccessibilityEvent(
views::View* view, AccessibilityTypes::Event event_type);
views::View* view, ui::AccessibilityTypes::Event event_type);

private:
AccessibilityEventRouterViews();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class AccessibilityViewsDelegate : public views::ViewsDelegate {
return false;
}
virtual void NotifyAccessibilityEvent(
views::View* view, AccessibilityTypes::Event event_type) {
views::View* view, ui::AccessibilityTypes::Event event_type) {
AccessibilityEventRouterViews::GetInstance()->HandleAccessibilityEvent(
view, event_type);
}
Expand Down
5 changes: 3 additions & 2 deletions chrome/browser/ui/views/accessible_pane_view.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "chrome/browser/ui/views/accessible_pane_view.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/location_bar/location_bar_view.h"
#include "ui/base/accessibility/accessible_view_state.h"
#include "views/controls/button/menu_button.h"
#include "views/controls/native/native_view_host.h"
#include "views/focus/focus_search.h"
Expand Down Expand Up @@ -192,8 +193,8 @@ void AccessiblePaneView::SetVisible(bool flag) {
View::SetVisible(flag);
}

AccessibilityTypes::Role AccessiblePaneView::GetAccessibleRole() {
return AccessibilityTypes::ROLE_PANE;
void AccessiblePaneView::GetAccessibleState(ui::AccessibleViewState* state) {
state->role = ui::AccessibilityTypes::ROLE_PANE;
}

////////////////////////////////////////////////////////////////////////////////
Expand Down
17 changes: 9 additions & 8 deletions chrome/browser/ui/views/accessible_pane_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,19 +41,20 @@ class AccessiblePaneView : public views::View,
virtual bool SetPaneFocusAndFocusDefault(int view_storage_id);

// Overridden from views::View:
virtual FocusTraversable* GetPaneFocusTraversable();
virtual bool AcceleratorPressed(const views::Accelerator& accelerator);
virtual void SetVisible(bool flag);
virtual AccessibilityTypes::Role GetAccessibleRole();
virtual FocusTraversable* GetPaneFocusTraversable() OVERRIDE;
virtual bool AcceleratorPressed(const views::Accelerator& accelerator)
OVERRIDE;
virtual void SetVisible(bool flag) OVERRIDE;
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;

// Overridden from views::FocusChangeListener:
virtual void FocusWillChange(View* focused_before,
View* focused_now);
View* focused_now) OVERRIDE;

// Overridden from views::FocusTraversable:
virtual views::FocusSearch* GetFocusSearch();
virtual FocusTraversable* GetFocusTraversableParent();
virtual View* GetFocusTraversableParentView();
virtual views::FocusSearch* GetFocusSearch() OVERRIDE;
virtual FocusTraversable* GetFocusTraversableParent() OVERRIDE;
virtual View* GetFocusTraversableParentView() OVERRIDE;

protected:
// A subclass can override this to provide a default focusable child
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,9 @@ void BookmarkBarInstructionsView::ViewHierarchyChanged(bool is_add,
UpdateColors();
}

AccessibilityTypes::Role BookmarkBarInstructionsView::GetAccessibleRole() {
return AccessibilityTypes::ROLE_GROUPING;
void BookmarkBarInstructionsView::GetAccessibleState(
ui::AccessibleViewState* state) {
state->role = ui::AccessibilityTypes::ROLE_GROUPING;
}

void BookmarkBarInstructionsView::LinkActivated(views::Link* source,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#define CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BAR_INSTRUCTIONS_VIEW_H_
#pragma once

#include "ui/base/accessibility/accessible_view_state.h"
#include "views/controls/link.h"
#include "views/view.h"

Expand Down Expand Up @@ -35,16 +36,16 @@ class BookmarkBarInstructionsView : public views::View,
explicit BookmarkBarInstructionsView(Delegate* delegate);

// View overrides.
virtual gfx::Size GetPreferredSize();
virtual void Layout();
virtual void OnThemeChanged();
virtual gfx::Size GetPreferredSize() OVERRIDE;
virtual void Layout() OVERRIDE;
virtual void OnThemeChanged() OVERRIDE;
virtual void ViewHierarchyChanged(bool is_add,
views::View* parent,
views::View* child);
virtual AccessibilityTypes::Role GetAccessibleRole();
views::View* child) OVERRIDE;
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;

// LinkController.
virtual void LinkActivated(views::Link* source, int event_flags);
virtual void LinkActivated(views::Link* source, int event_flags) OVERRIDE;

private:
void UpdateColors();
Expand Down
Loading

0 comments on commit c45dde3

Please sign in to comment.