Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(459)

Side by Side Diff: content/browser/accessibility/browser_accessibility_win.cc

Issue 1397183002: Escapes backslash, colon, comma, equals and semicolon in IAccessible2 string attributes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Made formatting fixes. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/accessibility/browser_accessibility_win.h" 5 #include "content/browser/accessibility/browser_accessibility_win.h"
6 6
7 #include <UIAutomationClient.h> 7 #include <UIAutomationClient.h>
8 #include <UIAutomationCoreApi.h> 8 #include <UIAutomationCoreApi.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 3237 matching lines...) Expand 10 before | Expand all | Expand 10 after
3248 win_attributes_->ia2_attributes.push_back(L"invalid:spelling"); 3248 win_attributes_->ia2_attributes.push_back(L"invalid:spelling");
3249 break; 3249 break;
3250 case ui::AX_INVALID_STATE_GRAMMAR: 3250 case ui::AX_INVALID_STATE_GRAMMAR:
3251 win_attributes_->ia2_attributes.push_back(L"invalid:grammar"); 3251 win_attributes_->ia2_attributes.push_back(L"invalid:grammar");
3252 break; 3252 break;
3253 case ui::AX_INVALID_STATE_OTHER: 3253 case ui::AX_INVALID_STATE_OTHER:
3254 { 3254 {
3255 base::string16 aria_invalid_value; 3255 base::string16 aria_invalid_value;
3256 if (GetString16Attribute(ui::AX_ATTR_ARIA_INVALID_VALUE, 3256 if (GetString16Attribute(ui::AX_ATTR_ARIA_INVALID_VALUE,
3257 &aria_invalid_value)) { 3257 &aria_invalid_value)) {
3258 win_attributes_->ia2_attributes.push_back( 3258 win_attributes_->ia2_attributes.push_back(
dmazzoni 2015/10/12 17:15:15 There are other places where we're adding strings
3259 L"invalid:" + aria_invalid_value); 3259 L"invalid:" + aria_invalid_value);
3260 } else { 3260 } else {
3261 // Set the attribute to L"true", since we cannot be more specific. 3261 // Set the attribute to L"true", since we cannot be more specific.
3262 win_attributes_->ia2_attributes.push_back(L"invalid:true"); 3262 win_attributes_->ia2_attributes.push_back(L"invalid:true");
3263 } 3263 }
3264 } 3264 }
3265 break; 3265 break;
3266 default: 3266 default:
3267 NOTREACHED(); 3267 NOTREACHED();
3268 } 3268 }
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
3624 3624
3625 if (str.empty()) 3625 if (str.empty())
3626 return S_FALSE; 3626 return S_FALSE;
3627 3627
3628 *value_bstr = SysAllocString(str.c_str()); 3628 *value_bstr = SysAllocString(str.c_str());
3629 DCHECK(*value_bstr); 3629 DCHECK(*value_bstr);
3630 3630
3631 return S_OK; 3631 return S_OK;
3632 } 3632 }
3633 3633
3634 // Static
3635 void BrowserAccessibilityWin::SanitizeStringAttributeForIA2(
3636 const base::string16& input,
3637 base::string16* output) {
3638 // According to the IA2 Spec, these characters need to be escaped with a
3639 // backslash: backslash, colon, comma, equals and semicolon.
3640 // Note that backslash must be replaced first.
3641 base::ReplaceChars(input, L"\\", L"\\\\", output);
3642 base::ReplaceChars(input, L":", L"\\:", output);
dmazzoni 2015/10/12 17:15:15 This won't work correctly if input and output are
3643 base::ReplaceChars(input, L",", L"\\,", output);
3644 base::ReplaceChars(input, L"=", L"\\=", output);
3645 base::ReplaceChars(input, L";", L"\\;", output);
3646 }
3647
3634 void BrowserAccessibilityWin::StringAttributeToIA2( 3648 void BrowserAccessibilityWin::StringAttributeToIA2(
3635 ui::AXStringAttribute attribute, 3649 ui::AXStringAttribute attribute,
3636 const char* ia2_attr) { 3650 const char* ia2_attr) {
3637 base::string16 value; 3651 base::string16 value;
3638 if (GetString16Attribute(attribute, &value)) { 3652 if (GetString16Attribute(attribute, &value)) {
3653 SanitizeStringAttributeForIA2(value, &value);
3639 win_attributes_->ia2_attributes.push_back( 3654 win_attributes_->ia2_attributes.push_back(
3640 base::ASCIIToUTF16(ia2_attr) + L":" + value); 3655 base::ASCIIToUTF16(ia2_attr) + L":" + value);
3641 } 3656 }
3642 } 3657 }
3643 3658
3644 void BrowserAccessibilityWin::BoolAttributeToIA2( 3659 void BrowserAccessibilityWin::BoolAttributeToIA2(
3645 ui::AXBoolAttribute attribute, 3660 ui::AXBoolAttribute attribute,
3646 const char* ia2_attr) { 3661 const char* ia2_attr) {
3647 bool value; 3662 bool value;
3648 if (GetBoolAttribute(attribute, &value)) { 3663 if (GetBoolAttribute(attribute, &value)) {
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after
4621 ia2_role = ia_role; 4636 ia2_role = ia_role;
4622 4637
4623 win_attributes_->ia_role = ia_role; 4638 win_attributes_->ia_role = ia_role;
4624 win_attributes_->ia_state = ia_state; 4639 win_attributes_->ia_state = ia_state;
4625 win_attributes_->role_name = role_name; 4640 win_attributes_->role_name = role_name;
4626 win_attributes_->ia2_role = ia2_role; 4641 win_attributes_->ia2_role = ia2_role;
4627 win_attributes_->ia2_state = ia2_state; 4642 win_attributes_->ia2_state = ia2_state;
4628 } 4643 }
4629 4644
4630 } // namespace content 4645 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698