OLD | NEW |
---|---|
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 "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
11 #include "base/strings/string_split.h" | |
11 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
12 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
13 #include "base/win/enum_variant.h" | 14 #include "base/win/enum_variant.h" |
14 #include "base/win/scoped_comptr.h" | 15 #include "base/win/scoped_comptr.h" |
15 #include "base/win/windows_version.h" | 16 #include "base/win/windows_version.h" |
16 #include "content/browser/accessibility/browser_accessibility_manager_win.h" | 17 #include "content/browser/accessibility/browser_accessibility_manager_win.h" |
17 #include "content/common/accessibility_messages.h" | 18 #include "content/common/accessibility_messages.h" |
18 #include "content/public/common/content_client.h" | 19 #include "content/public/common/content_client.h" |
19 #include "ui/base/accessibility/accessible_text_utils.h" | 20 #include "ui/base/accessibility/accessible_text_utils.h" |
20 #include "ui/base/win/accessibility_ids_win.h" | 21 #include "ui/base/win/accessibility_ids_win.h" |
(...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
860 // IAccessibleApplication methods. | 861 // IAccessibleApplication methods. |
861 // | 862 // |
862 | 863 |
863 STDMETHODIMP BrowserAccessibilityWin::get_appName(BSTR* app_name) { | 864 STDMETHODIMP BrowserAccessibilityWin::get_appName(BSTR* app_name) { |
864 // No need to check |instance_active_| because this interface is | 865 // No need to check |instance_active_| because this interface is |
865 // global, and doesn't depend on any local state. | 866 // global, and doesn't depend on any local state. |
866 | 867 |
867 if (!app_name) | 868 if (!app_name) |
868 return E_INVALIDARG; | 869 return E_INVALIDARG; |
869 | 870 |
870 std::string product_name = GetContentClient()->GetProduct(); | 871 // GetProduct() returns a string like "Chrome/aa.bb.cc.dd", split out |
871 *app_name = SysAllocString(UTF8ToUTF16(product_name).c_str()); | 872 // the part before the "/". |
873 std::vector<std::string> product_components; | |
874 base::SplitString(GetContentClient()->GetProduct(), '/', &product_components); | |
875 if (product_components.size() != 2) | |
876 return E_FAIL; | |
jam
2013/06/28 23:10:10
nit: perhaps dcheck? also below
dmazzoni
2013/06/28 23:34:51
Done.
| |
877 *app_name = SysAllocString(UTF8ToUTF16(product_components[0]).c_str()); | |
872 DCHECK(*app_name); | 878 DCHECK(*app_name); |
873 return *app_name ? S_OK : E_FAIL; | 879 return *app_name ? S_OK : E_FAIL; |
874 } | 880 } |
875 | 881 |
876 STDMETHODIMP BrowserAccessibilityWin::get_appVersion(BSTR* app_version) { | 882 STDMETHODIMP BrowserAccessibilityWin::get_appVersion(BSTR* app_version) { |
877 // No need to check |instance_active_| because this interface is | 883 // No need to check |instance_active_| because this interface is |
878 // global, and doesn't depend on any local state. | 884 // global, and doesn't depend on any local state. |
879 | 885 |
880 if (!app_version) | 886 if (!app_version) |
881 return E_INVALIDARG; | 887 return E_INVALIDARG; |
882 | 888 |
883 std::string user_agent = GetContentClient()->GetUserAgent(); | 889 // GetProduct() returns a string like "Chrome/aa.bb.cc.dd", split out |
884 *app_version = SysAllocString(UTF8ToUTF16(user_agent).c_str()); | 890 // the part after the "/". |
891 std::vector<std::string> product_components; | |
892 base::SplitString(GetContentClient()->GetProduct(), '/', &product_components); | |
893 if (product_components.size() != 2) | |
894 return E_FAIL; | |
895 *app_version = SysAllocString(UTF8ToUTF16(product_components[1]).c_str()); | |
885 DCHECK(*app_version); | 896 DCHECK(*app_version); |
886 return *app_version ? S_OK : E_FAIL; | 897 return *app_version ? S_OK : E_FAIL; |
887 } | 898 } |
888 | 899 |
889 STDMETHODIMP BrowserAccessibilityWin::get_toolkitName(BSTR* toolkit_name) { | 900 STDMETHODIMP BrowserAccessibilityWin::get_toolkitName(BSTR* toolkit_name) { |
890 // No need to check |instance_active_| because this interface is | 901 // No need to check |instance_active_| because this interface is |
891 // global, and doesn't depend on any local state. | 902 // global, and doesn't depend on any local state. |
892 | 903 |
893 if (!toolkit_name) | 904 if (!toolkit_name) |
894 return E_INVALIDARG; | 905 return E_INVALIDARG; |
(...skipping 2709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3604 // The role should always be set. | 3615 // The role should always be set. |
3605 DCHECK(!role_name_.empty() || ia_role_); | 3616 DCHECK(!role_name_.empty() || ia_role_); |
3606 | 3617 |
3607 // If we didn't explicitly set the IAccessible2 role, make it the same | 3618 // If we didn't explicitly set the IAccessible2 role, make it the same |
3608 // as the MSAA role. | 3619 // as the MSAA role. |
3609 if (!ia2_role_) | 3620 if (!ia2_role_) |
3610 ia2_role_ = ia_role_; | 3621 ia2_role_ = ia_role_; |
3611 } | 3622 } |
3612 | 3623 |
3613 } // namespace content | 3624 } // namespace content |
OLD | NEW |