summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormpichlinski@opera.com <mpichlinski@opera.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-16 13:45:11 +0000
committermpichlinski@opera.com <mpichlinski@opera.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-16 13:45:11 +0000
commit59ee3a20fcdae7954d2730f04280e69637062aff (patch)
tree88140e8beb066306809ba79dc6983af2b6ae024e
parent6c9b6e15d1cf3fc362356137c07be3bf40d165c0 (diff)
downloadchromium_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.cc3
-rw-r--r--ui/base/win/accessibility_misc_utils.cc10
-rw-r--r--ui/base/win/accessibility_misc_utils.h12
-rw-r--r--ui/views/accessibility/native_view_accessibility_win.cc3
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;
}
}