summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-30 01:49:39 +0000
committerctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-30 01:49:39 +0000
commit8a0a55e61c5efd4711fbf21d49b4001a4cc9908b (patch)
tree658af47a25e0ec4f84a87c2bf6859c4809ce2f42
parent690aa5c82084132146296cc439b54d5231659d61 (diff)
downloadchromium_src-8a0a55e61c5efd4711fbf21d49b4001a4cc9908b.zip
chromium_src-8a0a55e61c5efd4711fbf21d49b4001a4cc9908b.tar.gz
chromium_src-8a0a55e61c5efd4711fbf21d49b4001a4cc9908b.tar.bz2
[accessibility] Extension toolbar and infobar container views should not have state visible if they are not rendered on screen.
Add the ROLE_PANE role to viewsaccessibility types. Provide accessible role and name for BrowserActionsContainer, InfoBarContainer, and InfoBar. Set BrowserActionsContainer view visibility to true only when it contains browser actions. Set ExtensionShelf vew visibility to true only when it has non-zero height. BUG=36224 TEST=Verify extension toolbar and infobar container accessibility info within AccExplore32.exe Review URL: http://codereview.chromium.org/669275 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43044 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/app/generated_resources.grd15
-rw-r--r--chrome/browser/views/browser_actions_container.cc6
-rw-r--r--chrome/browser/views/frame/browser_view_layout.cc2
-rw-r--r--chrome/browser/views/infobars/infobar_container.cc5
-rw-r--r--chrome/browser/views/infobars/infobars.cc36
-rw-r--r--chrome/browser/views/infobars/infobars.h6
-rw-r--r--views/accessibility/accessibility_types.h1
-rw-r--r--views/accessibility/view_accessibility.cc8
-rw-r--r--views/accessibility/view_accessibility.h4
9 files changed, 75 insertions, 8 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index af5d09c..ec11f3a 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -3426,6 +3426,21 @@ each locale. -->
<message name="IDS_EXTENSION_INSTALLED_MANAGE_INFO_MAC" desc="Text displayed in the InfoBubble with instructions on how to find the chrome://extensions/ management page on MAC OS X">
You can manage your installed extensions by clicking Extensions in the Window menu.
</message>
+ <message name="IDS_ACCNAME_INFOBAR_CONTAINER" desc="The accessible name for the infobar container.">
+ Infobar Container
+ </message>
+ <message name="IDS_ACCNAME_INFOBAR_INFO" desc="The accessible name for the info infobar type.">
+ Info
+ </message>
+ <message name="IDS_ACCNAME_INFOBAR_WARNING" desc="The accessible name for the warning infobar type.">
+ Warning
+ </message>
+ <message name="IDS_ACCNAME_INFOBAR_ERROR" desc="The accessible name for the error infobar type.">
+ Error
+ </message>
+ <message name="IDS_ACCNAME_INFOBAR_PAGE_ACTION" desc="The accessible name for page action infobar type.">
+ Page Action
+ </message>
<!-- chrome://extensions page -->
<message name="IDS_EXTENSIONS_DEVELOPER_MODE_LINK" desc="Text of the link for developer mode.">
diff --git a/chrome/browser/views/browser_actions_container.cc b/chrome/browser/views/browser_actions_container.cc
index 7ccaee8..ec57c82 100644
--- a/chrome/browser/views/browser_actions_container.cc
+++ b/chrome/browser/views/browser_actions_container.cc
@@ -373,6 +373,8 @@ BrowserActionsContainer::BrowserActionsContainer(
ALLOW_THIS_IN_INITIALIZER_LIST(show_menu_task_factory_(this)) {
SetID(VIEW_ID_BROWSER_ACTION_TOOLBAR);
+ SetVisible(false);
+
model_ = profile_->GetExtensionsService()->toolbar_model();
model_->AddObserver(this);
@@ -510,6 +512,7 @@ void BrowserActionsContainer::DeleteBrowserActionViews() {
}
void BrowserActionsContainer::OnBrowserActionVisibilityChanged() {
+ SetVisible(browser_action_views_.size() > 0);
resize_gripper_->SetVisible(browser_action_views_.size() > 0);
owner_view_->Layout();
@@ -602,6 +605,7 @@ gfx::Size BrowserActionsContainer::GetPreferredSize() {
void BrowserActionsContainer::Layout() {
if (browser_action_views_.size() == 0) {
+ SetVisible(false);
resize_gripper_->SetVisible(false);
chevron_->SetVisible(false);
return;
@@ -1029,7 +1033,7 @@ int BrowserActionsContainer::WidthOfNonIconArea() const {
}
int BrowserActionsContainer::IconCountToWidth(int icons) const {
- DCHECK(icons >= 0);
+ DCHECK_GE(icons, 0);
if (icons == 0)
return ContainerMinSize();
diff --git a/chrome/browser/views/frame/browser_view_layout.cc b/chrome/browser/views/frame/browser_view_layout.cc
index 2c11574..2b0f2e0 100644
--- a/chrome/browser/views/frame/browser_view_layout.cc
+++ b/chrome/browser/views/frame/browser_view_layout.cc
@@ -414,7 +414,7 @@ int BrowserViewLayout::LayoutExtensionShelf(int bottom) {
Browser::FEATURE_EXTENSIONSHELF);
int height =
visible ? extension_shelf_->GetPreferredSize().height() : 0;
- extension_shelf_->SetVisible(visible);
+ extension_shelf_->SetVisible(visible && height != 0);
extension_shelf_->SetBounds(vertical_layout_rect_.x(), bottom - height,
vertical_layout_rect_.width(), height);
extension_shelf_->Layout();
diff --git a/chrome/browser/views/infobars/infobar_container.cc b/chrome/browser/views/infobars/infobar_container.cc
index 99e9eb3..c140a4b 100644
--- a/chrome/browser/views/infobars/infobar_container.cc
+++ b/chrome/browser/views/infobars/infobar_container.cc
@@ -4,11 +4,13 @@
#include "chrome/browser/views/infobars/infobar_container.h"
+#include "app/l10n_util.h"
#include "chrome/browser/tab_contents/infobar_delegate.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/view_ids.h"
#include "chrome/browser/views/infobars/infobars.h"
#include "chrome/common/notification_service.h"
+#include "grit/generated_resources.h"
// InfoBarContainer, public: ---------------------------------------------------
@@ -16,6 +18,7 @@ InfoBarContainer::InfoBarContainer(Delegate* delegate)
: delegate_(delegate),
tab_contents_(NULL) {
SetID(VIEW_ID_INFO_BAR_CONTAINER);
+ SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_INFOBAR_CONTAINER));
}
InfoBarContainer::~InfoBarContainer() {
@@ -88,7 +91,7 @@ bool InfoBarContainer::GetAccessibleName(std::wstring* name) {
bool InfoBarContainer::GetAccessibleRole(AccessibilityTypes::Role* role) {
DCHECK(role);
- *role = AccessibilityTypes::ROLE_TOOLBAR;
+ *role = AccessibilityTypes::ROLE_GROUPING;
return true;
}
diff --git a/chrome/browser/views/infobars/infobars.cc b/chrome/browser/views/infobars/infobars.cc
index 71382e2..f99501d 100644
--- a/chrome/browser/views/infobars/infobars.cc
+++ b/chrome/browser/views/infobars/infobars.cc
@@ -107,6 +107,24 @@ InfoBar::InfoBar(InfoBarDelegate* delegate)
set_background(new InfoBarBackground(delegate->GetInfoBarType()));
+ switch (delegate->GetInfoBarType()) {
+ case InfoBarDelegate::INFO_TYPE:
+ SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_INFOBAR_INFO));
+ break;
+ case InfoBarDelegate::WARNING_TYPE:
+ SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_INFOBAR_WARNING));
+ break;
+ case InfoBarDelegate::ERROR_TYPE:
+ SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_INFOBAR_ERROR));
+ break;
+ case InfoBarDelegate::PAGE_ACTION_TYPE:
+ SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_INFOBAR_PAGE_ACTION));
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
close_button_->SetImage(views::CustomButton::BS_NORMAL,
rb.GetBitmapNamed(IDR_CLOSE_BAR));
@@ -160,6 +178,22 @@ void InfoBar::Close() {
// InfoBar, views::View overrides: ---------------------------------------------
+bool InfoBar::GetAccessibleName(std::wstring* name) {
+ *name = accessible_name_;
+ return !accessible_name_.empty();
+}
+
+bool InfoBar::GetAccessibleRole(AccessibilityTypes::Role* role) {
+ DCHECK(role);
+
+ *role = AccessibilityTypes::ROLE_PANE;
+ return true;
+}
+
+void InfoBar::SetAccessibleName(const std::wstring& name) {
+ accessible_name_.assign(name);
+}
+
gfx::Size InfoBar::GetPreferredSize() {
int height = static_cast<int>(target_height_ * animation_->GetCurrentValue());
return gfx::Size(0, height);
@@ -429,12 +463,14 @@ ConfirmInfoBar::ConfirmInfoBar(ConfirmInfoBarDelegate* delegate)
initialized_(false) {
ok_button_ = new views::NativeButton(
this, delegate->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_OK));
+ ok_button_->SetAccessibleName(ok_button_->label());
if (delegate->GetButtons() & ConfirmInfoBarDelegate::BUTTON_OK_DEFAULT)
ok_button_->SetAppearsAsDefault(true);
if (delegate->NeedElevation(ConfirmInfoBarDelegate::BUTTON_OK))
ok_button_->SetNeedElevation(true);
cancel_button_ = new views::NativeButton(
this, delegate->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_CANCEL));
+ cancel_button_->SetAccessibleName(cancel_button_->label());
// Set up the link.
link_ = new views::Link;
diff --git a/chrome/browser/views/infobars/infobars.h b/chrome/browser/views/infobars/infobars.h
index c222824..5c0f5f6 100644
--- a/chrome/browser/views/infobars/infobars.h
+++ b/chrome/browser/views/infobars/infobars.h
@@ -77,6 +77,9 @@ class InfoBar : public views::View,
static const int kButtonInLabelSpacing;
// Overridden from views::View:
+ virtual bool GetAccessibleName(std::wstring* name);
+ virtual bool GetAccessibleRole(AccessibilityTypes::Role* role);
+ virtual void SetAccessibleName(const std::wstring& name);
virtual gfx::Size GetPreferredSize();
virtual void Layout();
@@ -130,6 +133,9 @@ class InfoBar : public views::View,
// the stack in ViewHierarchyChanged to unwind).
void DeleteSelf();
+ // Storage of string needed for accessibility.
+ std::wstring accessible_name_;
+
// The InfoBar's container
InfoBarContainer* container_;
diff --git a/views/accessibility/accessibility_types.h b/views/accessibility/accessibility_types.h
index cc92d0c..79b9e03 100644
--- a/views/accessibility/accessibility_types.h
+++ b/views/accessibility/accessibility_types.h
@@ -31,6 +31,7 @@ class AccessibilityTypes {
ROLE_LINK,
ROLE_PAGETAB,
ROLE_PAGETABLIST,
+ ROLE_PANE,
ROLE_PUSHBUTTON,
ROLE_SEPARATOR,
ROLE_TEXT,
diff --git a/views/accessibility/view_accessibility.cc b/views/accessibility/view_accessibility.cc
index 32239d1..9d8861a 100644
--- a/views/accessibility/view_accessibility.cc
+++ b/views/accessibility/view_accessibility.cc
@@ -23,7 +23,7 @@ HRESULT ViewAccessibility::Initialize(views::View* view) {
return S_OK;
}
-// TODO(klink): Handle case where child View is not contained by parent.
+// TODO(ctguil): Handle case where child View is not contained by parent.
STDMETHODIMP ViewAccessibility::accHitTest(LONG x_left, LONG y_top,
VARIANT* child) {
if (!child) {
@@ -699,7 +699,7 @@ void ViewAccessibility::SetState(VARIANT* msaa_state, views::View* view) {
msaa_state->lVal |= MSAAState(state);
}
-long ViewAccessibility::MSAARole(AccessibilityTypes::Role role) {
+int32 ViewAccessibility::MSAARole(AccessibilityTypes::Role role) {
switch (role) {
case AccessibilityTypes::ROLE_APPLICATION:
return ROLE_SYSTEM_APPLICATION;
@@ -721,6 +721,8 @@ long ViewAccessibility::MSAARole(AccessibilityTypes::Role role) {
return ROLE_SYSTEM_PAGETAB;
case AccessibilityTypes::ROLE_PAGETABLIST:
return ROLE_SYSTEM_PAGETABLIST;
+ case AccessibilityTypes::ROLE_PANE:
+ return ROLE_SYSTEM_PANE;
case AccessibilityTypes::ROLE_PUSHBUTTON:
return ROLE_SYSTEM_PUSHBUTTON;
case AccessibilityTypes::ROLE_SEPARATOR:
@@ -740,7 +742,7 @@ long ViewAccessibility::MSAARole(AccessibilityTypes::Role role) {
}
}
-long ViewAccessibility::MSAAState(AccessibilityTypes::State state) {
+int32 ViewAccessibility::MSAAState(AccessibilityTypes::State state) {
switch (state) {
case AccessibilityTypes::STATE_HASPOPUP :
return STATE_SYSTEM_HASPOPUP;
diff --git a/views/accessibility/view_accessibility.h b/views/accessibility/view_accessibility.h
index 7d95794..b7a6dad 100644
--- a/views/accessibility/view_accessibility.h
+++ b/views/accessibility/view_accessibility.h
@@ -130,11 +130,11 @@ class ATL_NO_VTABLE ViewAccessibility
// Returns a conversion from the Role (as defined in accessibility_types.h)
// to an MSAA role.
- long MSAARole(AccessibilityTypes::Role role);
+ int32 MSAARole(AccessibilityTypes::Role role);
// Returns a conversion from the State (as defined in accessibility_types.h)
// to MSAA states set.
- long MSAAState(AccessibilityTypes::State state);
+ int32 MSAAState(AccessibilityTypes::State state);
// Returns the IAccessible interface for a native view if applicable.
// Returns S_OK on success.