summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authormhm@chromium.org <mhm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-22 23:58:18 +0000
committermhm@chromium.org <mhm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-22 23:58:18 +0000
commit8de9751320f20f82198ca2d5a3d5ddbe066cbe87 (patch)
tree8582152732573755530231a5ab7f465f69f53031 /chrome
parente657bfcfb7f9f0f92c496cf28631d87d1a022a1c (diff)
downloadchromium_src-8de9751320f20f82198ca2d5a3d5ddbe066cbe87.zip
chromium_src-8de9751320f20f82198ca2d5a3d5ddbe066cbe87.tar.gz
chromium_src-8de9751320f20f82198ca2d5a3d5ddbe066cbe87.tar.bz2
Allow Extensions to have MSAA information.
The whole extension shelf and its items were missing MSAA information. Some of them were uninitialized due to the custom components not having any AccessibleRole. Some extensions have no name, this could happen where the user didn't put a name for their browser action in the manifest. If such case happens, we will use the extension name itself. BUG=36289 TEST=Extension shelf now has MSAA information according to Inspect32. Screenshot available on the issue tracker. Review URL: http://codereview.chromium.org/1105008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42289 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/app/generated_resources.grd6
-rw-r--r--chrome/browser/views/browser_actions_container.cc38
-rw-r--r--chrome/browser/views/browser_actions_container.h6
3 files changed, 49 insertions, 1 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 02486fd..59a7674 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -3701,6 +3701,12 @@ Keep your key file in a safe place. You will need it to create new versions of y
<message name="IDS_ACCNAME_EXTENSIONS" desc="The accessible name for the Extensions toolbar.">
Extensions
</message>
+ <message name="IDS_ACCNAME_EXTENSIONS_BROWSER_ACTION" desc="The accessible name for a browser action.">
+ Browser Action
+ </message>
+ <message name="IDS_ACCNAME_EXTENSIONS_CHEVRON" desc="The accessible name for the chevron visible if not all the extension buttons fit.">
+ Menu containing hidden extensions
+ </message>
<message name="IDS_ACCNAME_NEWTAB" desc="The accessible name for the New Tab (+) button.">
New Tab
</message>
diff --git a/chrome/browser/views/browser_actions_container.cc b/chrome/browser/views/browser_actions_container.cc
index acf06c2..9634c93 100644
--- a/chrome/browser/views/browser_actions_container.cc
+++ b/chrome/browser/views/browser_actions_container.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/views/browser_actions_container.h"
#include "app/gfx/canvas.h"
+#include "app/l10n_util.h"
#include "app/resource_bundle.h"
#include "app/slide_animation.h"
#include "base/stl_util-inl.h"
@@ -28,6 +29,7 @@
#include "chrome/common/notification_type.h"
#include "chrome/common/pref_names.h"
#include "grit/app_resources.h"
+#include "grit/generated_resources.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkTypeface.h"
#include "third_party/skia/include/effects/SkGradientShader.h"
@@ -163,7 +165,12 @@ void BrowserActionButton::UpdateState() {
else if (!default_icon_.isNull())
SetIcon(default_icon_);
- SetTooltipText(UTF8ToWide(browser_action()->GetTitle(tab_id)));
+ // If the browser action name is empty, show the extension name instead.
+ std::wstring name = UTF8ToWide(browser_action()->GetTitle(tab_id));
+ if (name.empty())
+ name = UTF8ToWide(extension()->name());
+ SetTooltipText(name);
+ SetAccessibleName(name);
GetParent()->SchedulePaint();
}
@@ -307,6 +314,18 @@ gfx::Canvas* BrowserActionView::GetIconWithBadge() {
return canvas;
}
+bool BrowserActionView::GetAccessibleRole(AccessibilityTypes::Role* role) {
+ DCHECK(role);
+ *role = AccessibilityTypes::ROLE_GROUPING;
+ return true;
+}
+
+bool BrowserActionView::GetAccessibleName(std::wstring* name) {
+ DCHECK(name);
+ *name = l10n_util::GetString(IDS_ACCNAME_EXTENSIONS_BROWSER_ACTION);
+ return true;
+}
+
void BrowserActionView::Layout() {
button_->SetBounds(0, kControlVertOffset, width(), kButtonSize);
}
@@ -348,6 +367,8 @@ BrowserActionsContainer::BrowserActionsContainer(
resize_animation_.reset(new SlideAnimation(this));
resize_gripper_ = new views::ResizeGripper(this);
+ resize_gripper_->SetAccessibleName(
+ l10n_util::GetString(IDS_ACCNAME_SEPARATOR));
resize_gripper_->SetVisible(false);
AddChildView(resize_gripper_);
@@ -357,6 +378,8 @@ BrowserActionsContainer::BrowserActionsContainer(
chevron_ = new views::MenuButton(NULL, std::wstring(), this, false);
chevron_->SetVisible(false);
chevron_->SetIcon(*chevron_image);
+ chevron_->SetAccessibleName(
+ l10n_util::GetString(IDS_ACCNAME_EXTENSIONS_CHEVRON));
// Chevron contains >> that should point left in LTR locales.
chevron_->EnableCanvasFlippingForRTLUI(true);
AddChildView(chevron_);
@@ -779,6 +802,19 @@ int BrowserActionsContainer::OnPerformDrop(
return DragDropTypes::DRAG_MOVE;
}
+bool BrowserActionsContainer::GetAccessibleRole(
+ AccessibilityTypes::Role* role) {
+ DCHECK(role);
+ *role = AccessibilityTypes::ROLE_GROUPING;
+ return true;
+}
+
+bool BrowserActionsContainer::GetAccessibleName(std::wstring* name) {
+ DCHECK(name);
+ *name = l10n_util::GetString(IDS_ACCNAME_EXTENSIONS);
+ return !name->empty();
+}
+
void BrowserActionsContainer::MoveBrowserAction(
const std::string& extension_id, size_t new_index) {
ExtensionsService* service = profile_->GetExtensionsService();
diff --git a/chrome/browser/views/browser_actions_container.h b/chrome/browser/views/browser_actions_container.h
index cb73ccb..6b4f123 100644
--- a/chrome/browser/views/browser_actions_container.h
+++ b/chrome/browser/views/browser_actions_container.h
@@ -144,6 +144,10 @@ class BrowserActionView : public views::View {
// returned object.
gfx::Canvas* GetIconWithBadge();
+ // Accessibility accessors, overridden from View.
+ virtual bool GetAccessibleRole(AccessibilityTypes::Role* role);
+ virtual bool GetAccessibleName(std::wstring* name);
+
private:
virtual void Layout();
@@ -310,6 +314,8 @@ class BrowserActionsContainer
virtual int OnDragUpdated(const views::DropTargetEvent& event);
virtual void OnDragExited();
virtual int OnPerformDrop(const views::DropTargetEvent& event);
+ virtual bool GetAccessibleRole(AccessibilityTypes::Role* role);
+ virtual bool GetAccessibleName(std::wstring* name);
// Overridden from views::ViewMenuDelegate:
virtual void RunMenu(View* source, const gfx::Point& pt);