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 2704b423ed54c8633197ed4da2c0599453e312a2..daeba4e6443973a2ca143f68ea4435502ff73cb6 100644 |
--- a/content/browser/accessibility/browser_accessibility_win.cc |
+++ b/content/browser/accessibility/browser_accessibility_win.cc |
@@ -3631,11 +3631,26 @@ HRESULT BrowserAccessibilityWin::GetStringAttributeAsBstr( |
return S_OK; |
} |
+// Static |
+void BrowserAccessibilityWin::SanitizeStringAttributeForIA2( |
+ const base::string16& input, |
+ base::string16* output) { |
+ // According to the IA2 Spec, these characters need to be escaped with a |
+ // backslash: backslash, colon, comma, equals and semicolon. |
+ // Note that backslash must be replaced first. |
+ base::ReplaceChars(input, L"\\", L"\\\\", output); |
+ base::ReplaceChars(input, L":", L"\\:", output); |
dmazzoni
2015/10/12 17:15:15
This won't work correctly if input and output are
|
+ base::ReplaceChars(input, L",", L"\\,", output); |
+ base::ReplaceChars(input, L"=", L"\\=", output); |
+ base::ReplaceChars(input, L";", L"\\;", output); |
+} |
+ |
void BrowserAccessibilityWin::StringAttributeToIA2( |
ui::AXStringAttribute attribute, |
const char* ia2_attr) { |
base::string16 value; |
if (GetString16Attribute(attribute, &value)) { |
+ SanitizeStringAttributeForIA2(value, &value); |
win_attributes_->ia2_attributes.push_back( |
base::ASCIIToUTF16(ia2_attr) + L":" + value); |
} |