| Index: content/browser/accessibility/browser_accessibility_win.cc
|
| diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc
|
| index e2ad1dae1e58a7eaefd88182bc308f89b854d884..d40a576ae3b00685343a4bedaf148da7b0f5e4fd 100644
|
| --- a/content/browser/accessibility/browser_accessibility_win.cc
|
| +++ b/content/browser/accessibility/browser_accessibility_win.cc
|
| @@ -421,7 +421,7 @@ HRESULT BrowserAccessibilityWin::accDoDefaultAction(VARIANT var_id) {
|
| return E_INVALIDARG;
|
|
|
| // Return an error if it's not clickable.
|
| - if (!target->HasStringAttribute(ui::AX_ATTR_ACTION))
|
| + if (!target->HasIntAttribute(ui::AX_ATTR_ACTION))
|
| return DISP_E_MEMBERNOTFOUND;
|
|
|
| manager()->DoDefaultAction(*target);
|
| @@ -577,8 +577,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_accDefaultAction(VARIANT var_id,
|
| if (!target)
|
| return E_INVALIDARG;
|
|
|
| - return target->GetStringAttributeAsBstr(
|
| - ui::AX_ATTR_ACTION, def_action);
|
| + return target->get_localizedName(0, def_action);
|
| }
|
|
|
| STDMETHODIMP BrowserAccessibilityWin::get_accDescription(VARIANT var_id,
|
| @@ -2839,7 +2838,7 @@ STDMETHODIMP BrowserAccessibilityWin::nActions(long* n_actions) {
|
| // |IsHyperlink| is required for |IAccessibleHyperlink::anchor/anchorTarget|
|
| // to work properly because the |IAccessibleHyperlink| interface inherits from
|
| // |IAccessibleAction|.
|
| - if (IsHyperlink() || HasStringAttribute(ui::AX_ATTR_ACTION)) {
|
| + if (IsHyperlink() || HasIntAttribute(ui::AX_ATTR_ACTION)) {
|
| *n_actions = 1;
|
| } else {
|
| *n_actions = 0;
|
| @@ -2853,7 +2852,7 @@ STDMETHODIMP BrowserAccessibilityWin::doAction(long action_index) {
|
| if (!instance_active())
|
| return E_FAIL;
|
|
|
| - if (!HasStringAttribute(ui::AX_ATTR_ACTION) || action_index != 0)
|
| + if (!HasIntAttribute(ui::AX_ATTR_ACTION) || action_index != 0)
|
| return E_INVALIDARG;
|
|
|
| manager()->DoDefaultAction(*this);
|
| @@ -2882,13 +2881,19 @@ STDMETHODIMP BrowserAccessibilityWin::get_name(long action_index, BSTR* name) {
|
| if (!name)
|
| return E_INVALIDARG;
|
|
|
| - base::string16 action_verb;
|
| - if (!GetString16Attribute(ui::AX_ATTR_ACTION, &action_verb) ||
|
| - action_index != 0) {
|
| + int action;
|
| + if (!GetIntAttribute(ui::AX_ATTR_ACTION, &action) || action_index != 0) {
|
| *name = nullptr;
|
| return E_INVALIDARG;
|
| }
|
|
|
| + base::string16 action_verb =
|
| + ui::ActionToUnlocalizedString(static_cast<ui::AXSupportedAction>(action));
|
| + if (action_verb.empty() || action_verb == L"none") {
|
| + *name = nullptr;
|
| + return S_FALSE;
|
| + }
|
| +
|
| *name = SysAllocString(action_verb.c_str());
|
| DCHECK(name);
|
| return S_OK;
|
| @@ -2898,7 +2903,28 @@ STDMETHODIMP
|
| BrowserAccessibilityWin::get_localizedName(long action_index,
|
| BSTR* localized_name) {
|
| WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_LOCALIZED_NAME);
|
| - return E_NOTIMPL;
|
| + if (!instance_active())
|
| + return E_FAIL;
|
| +
|
| + if (!localized_name)
|
| + return E_INVALIDARG;
|
| +
|
| + int action;
|
| + if (!GetIntAttribute(ui::AX_ATTR_ACTION, &action) || action_index != 0) {
|
| + *localized_name = nullptr;
|
| + return E_INVALIDARG;
|
| + }
|
| +
|
| + base::string16 action_verb =
|
| + ui::ActionToString(static_cast<ui::AXSupportedAction>(action));
|
| + if (action_verb.empty()) {
|
| + *localized_name = nullptr;
|
| + return S_FALSE;
|
| + }
|
| +
|
| + *localized_name = SysAllocString(action_verb.c_str());
|
| + DCHECK(localized_name);
|
| + return S_OK;
|
| }
|
|
|
| //
|
|
|