diff options
author | mpichlinski@opera.com <mpichlinski@opera.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-16 13:45:11 +0000 |
---|---|---|
committer | mpichlinski@opera.com <mpichlinski@opera.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-16 13:45:11 +0000 |
commit | 59ee3a20fcdae7954d2730f04280e69637062aff (patch) | |
tree | 88140e8beb066306809ba79dc6983af2b6ae024e | |
parent | 6c9b6e15d1cf3fc362356137c07be3bf40d165c0 (diff) | |
download | chromium_src-59ee3a20fcdae7954d2730f04280e69637062aff.zip chromium_src-59ee3a20fcdae7954d2730f04280e69637062aff.tar.gz chromium_src-59ee3a20fcdae7954d2730f04280e69637062aff.tar.bz2 |
CHR-1796: Implement UIATextProvider::get_Value method.
On Windows 8 LDTP gettextvalue function uses
IRawElementProviderSimple::GetPatternProvider for UIA_ValuePatternId and
method IValueProvider::get_Value which is not implemented instead of
IAccessible::get_accValue.
BUG=384224
Review URL: https://codereview.chromium.org/337453002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@277416 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | content/browser/accessibility/browser_accessibility_win.cc | 3 | ||||
-rw-r--r-- | ui/base/win/accessibility_misc_utils.cc | 10 | ||||
-rw-r--r-- | ui/base/win/accessibility_misc_utils.h | 12 | ||||
-rw-r--r-- | ui/views/accessibility/native_view_accessibility_win.cc | 3 |
4 files changed, 21 insertions, 7 deletions
diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc index 60728e0..c5fa358 100644 --- a/content/browser/accessibility/browser_accessibility_win.cc +++ b/content/browser/accessibility/browser_accessibility_win.cc @@ -2825,7 +2825,8 @@ STDMETHODIMP BrowserAccessibilityWin::GetPatternProvider(PATTERNID id, if (id == UIA_ValuePatternId || id == UIA_TextPatternId) { if (IsEditableText()) { DVLOG(1) << "Returning UIA text provider"; - base::win::UIATextProvider::CreateTextProvider(true, provider); + base::win::UIATextProvider::CreateTextProvider( + GetValueText(), true, provider); return S_OK; } } diff --git a/ui/base/win/accessibility_misc_utils.cc b/ui/base/win/accessibility_misc_utils.cc index 5074ce3..621048f 100644 --- a/ui/base/win/accessibility_misc_utils.cc +++ b/ui/base/win/accessibility_misc_utils.cc @@ -14,7 +14,9 @@ UIATextProvider::UIATextProvider() : editable_(false) {} // static -bool UIATextProvider::CreateTextProvider(bool editable, IUnknown** provider) { +bool UIATextProvider::CreateTextProvider(const string16& value, + bool editable, + IUnknown** provider) { // Make sure ATL is initialized in this module. ui::win::CreateATLModuleIfNeeded(); @@ -23,6 +25,7 @@ bool UIATextProvider::CreateTextProvider(bool editable, IUnknown** provider) { if (SUCCEEDED(hr)) { DCHECK(text_provider); text_provider->set_editable(editable); + text_provider->set_value(value); text_provider->AddRef(); *provider = static_cast<ITextProvider*>(text_provider); return true; @@ -35,5 +38,10 @@ STDMETHODIMP UIATextProvider::get_IsReadOnly(BOOL* read_only) { return S_OK; } +STDMETHODIMP UIATextProvider::get_Value(BSTR* value) { + *value = SysAllocString(value_.c_str()); + return S_OK; +} + } // namespace win } // namespace base diff --git a/ui/base/win/accessibility_misc_utils.h b/ui/base/win/accessibility_misc_utils.h index cc6b17e..e17f1d3 100644 --- a/ui/base/win/accessibility_misc_utils.h +++ b/ui/base/win/accessibility_misc_utils.h @@ -9,6 +9,7 @@ #include <UIAutomationCore.h> #include "base/compiler_specific.h" +#include "base/strings/string16.h" #include "ui/base/ui_base_export.h" namespace base { @@ -30,12 +31,16 @@ class UI_BASE_EXPORT UIATextProvider // Creates an instance of the UIATextProvider class. // Returns true on success - static bool CreateTextProvider(bool editable, IUnknown** provider); + static bool CreateTextProvider(const string16& value, + bool editable, + IUnknown** provider); void set_editable(bool editable) { editable_ = editable; } + void set_value(const string16& value) { value_ = value; } + // // IValueProvider methods. // @@ -48,9 +53,7 @@ class UI_BASE_EXPORT UIATextProvider return E_NOTIMPL; } - STDMETHOD(get_Value)(BSTR* value) { - return E_NOTIMPL; - } + STDMETHOD(get_Value)(BSTR* value); // // ITextProvider methods. @@ -83,6 +86,7 @@ class UI_BASE_EXPORT UIATextProvider private: bool editable_; + string16 value_; }; } // win diff --git a/ui/views/accessibility/native_view_accessibility_win.cc b/ui/views/accessibility/native_view_accessibility_win.cc index 241087d..b890de7 100644 --- a/ui/views/accessibility/native_view_accessibility_win.cc +++ b/ui/views/accessibility/native_view_accessibility_win.cc @@ -1166,7 +1166,8 @@ STDMETHODIMP NativeViewAccessibilityWin::GetPatternProvider( if (role == ROLE_SYSTEM_TEXT) { DVLOG(1) << "Returning UIA text provider"; - base::win::UIATextProvider::CreateTextProvider(true, provider); + base::win::UIATextProvider::CreateTextProvider( + state.value, true, provider); return S_OK; } } |