| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome_frame/test/chrome_frame_ui_test_utils.h" | 5 #include "chrome_frame/test/chrome_frame_ui_test_utils.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 | 8 |
| 9 #include <sstream> | 9 #include <sstream> |
| 10 #include <stack> | 10 #include <stack> |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 IID_IAccessible, reinterpret_cast<void**>(accessible.Receive())); | 53 IID_IAccessible, reinterpret_cast<void**>(accessible.Receive())); |
| 54 if (accessible) | 54 if (accessible) |
| 55 return new AccObject(accessible); | 55 return new AccObject(accessible); |
| 56 return NULL; | 56 return NULL; |
| 57 } | 57 } |
| 58 | 58 |
| 59 // static | 59 // static |
| 60 AccObject* AccObject::CreateFromEvent(HWND hwnd, LONG object_id, | 60 AccObject* AccObject::CreateFromEvent(HWND hwnd, LONG object_id, |
| 61 LONG child_id) { | 61 LONG child_id) { |
| 62 ScopedComPtr<IAccessible> accessible; | 62 ScopedComPtr<IAccessible> accessible; |
| 63 ScopedVariant acc_child_id; | 63 base::win::ScopedVariant acc_child_id; |
| 64 ::AccessibleObjectFromEvent(hwnd, object_id, child_id, accessible.Receive(), | 64 ::AccessibleObjectFromEvent(hwnd, object_id, child_id, accessible.Receive(), |
| 65 acc_child_id.Receive()); | 65 acc_child_id.Receive()); |
| 66 if (accessible && acc_child_id.type() == VT_I4) | 66 if (accessible && acc_child_id.type() == VT_I4) |
| 67 return new AccObject(accessible, V_I4(&acc_child_id)); | 67 return new AccObject(accessible, V_I4(&acc_child_id)); |
| 68 return NULL; | 68 return NULL; |
| 69 } | 69 } |
| 70 | 70 |
| 71 // static | 71 // static |
| 72 AccObject* AccObject::CreateFromDispatch(IDispatch* dispatch) { | 72 AccObject* AccObject::CreateFromDispatch(IDispatch* dispatch) { |
| 73 if (dispatch) { | 73 if (dispatch) { |
| 74 ScopedComPtr<IAccessible> accessible; | 74 ScopedComPtr<IAccessible> accessible; |
| 75 accessible.QueryFrom(dispatch); | 75 accessible.QueryFrom(dispatch); |
| 76 if (accessible) | 76 if (accessible) |
| 77 return new AccObject(accessible); | 77 return new AccObject(accessible); |
| 78 } | 78 } |
| 79 return NULL; | 79 return NULL; |
| 80 } | 80 } |
| 81 | 81 |
| 82 // static | 82 // static |
| 83 AccObject* AccObject::CreateFromPoint(int x, int y) { | 83 AccObject* AccObject::CreateFromPoint(int x, int y) { |
| 84 ScopedComPtr<IAccessible> accessible; | 84 ScopedComPtr<IAccessible> accessible; |
| 85 ScopedVariant child_id; | 85 base::win::ScopedVariant child_id; |
| 86 POINT point = {x, y}; | 86 POINT point = {x, y}; |
| 87 ::AccessibleObjectFromPoint(point, accessible.Receive(), child_id.Receive()); | 87 ::AccessibleObjectFromPoint(point, accessible.Receive(), child_id.Receive()); |
| 88 if (accessible && child_id.type() == VT_I4) | 88 if (accessible && child_id.type() == VT_I4) |
| 89 return new AccObject(accessible, V_I4(&child_id)); | 89 return new AccObject(accessible, V_I4(&child_id)); |
| 90 return NULL; | 90 return NULL; |
| 91 } | 91 } |
| 92 | 92 |
| 93 bool AccObject::DoDefaultAction() { | 93 bool AccObject::DoDefaultAction() { |
| 94 // Prevent clients from using this method to try to select menu items, which | 94 // Prevent clients from using this method to try to select menu items, which |
| 95 // does not work with a locked desktop. | 95 // does not work with a locked desktop. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 112 return PostMouseButtonMessages(WM_RBUTTONDOWN, WM_RBUTTONUP); | 112 return PostMouseButtonMessages(WM_RBUTTONDOWN, WM_RBUTTONUP); |
| 113 } | 113 } |
| 114 | 114 |
| 115 bool AccObject::Focus() { | 115 bool AccObject::Focus() { |
| 116 EXPECT_HRESULT_SUCCEEDED( | 116 EXPECT_HRESULT_SUCCEEDED( |
| 117 accessible_->accSelect(SELFLAG_TAKEFOCUS, child_id_)); | 117 accessible_->accSelect(SELFLAG_TAKEFOCUS, child_id_)); |
| 118 | 118 |
| 119 // Double check that the object actually received focus. In some cases | 119 // Double check that the object actually received focus. In some cases |
| 120 // the parent object must have the focus first. | 120 // the parent object must have the focus first. |
| 121 bool did_focus = false; | 121 bool did_focus = false; |
| 122 ScopedVariant focused; | 122 base::win::ScopedVariant focused; |
| 123 if (SUCCEEDED(accessible_->get_accFocus(focused.Receive()))) { | 123 if (SUCCEEDED(accessible_->get_accFocus(focused.Receive()))) { |
| 124 if (focused.type() != VT_EMPTY) | 124 if (focused.type() != VT_EMPTY) |
| 125 did_focus = true; | 125 did_focus = true; |
| 126 } | 126 } |
| 127 EXPECT_TRUE(did_focus) << "Could not focus AccObject: " << GetDescription(); | 127 EXPECT_TRUE(did_focus) << "Could not focus AccObject: " << GetDescription(); |
| 128 return did_focus; | 128 return did_focus; |
| 129 } | 129 } |
| 130 | 130 |
| 131 bool AccObject::Select() { | 131 bool AccObject::Select() { |
| 132 // SELFLAG_TAKESELECTION needs to be combined with the focus in order to | 132 // SELFLAG_TAKESELECTION needs to be combined with the focus in order to |
| 133 // take effect. | 133 // take effect. |
| 134 int selection_flag = SELFLAG_TAKEFOCUS | SELFLAG_TAKESELECTION; | 134 int selection_flag = SELFLAG_TAKEFOCUS | SELFLAG_TAKESELECTION; |
| 135 EXPECT_HRESULT_SUCCEEDED(accessible_->accSelect(selection_flag, child_id_)); | 135 EXPECT_HRESULT_SUCCEEDED(accessible_->accSelect(selection_flag, child_id_)); |
| 136 | 136 |
| 137 // Double check that the object actually received selection. | 137 // Double check that the object actually received selection. |
| 138 bool did_select = false; | 138 bool did_select = false; |
| 139 ScopedVariant selected; | 139 base::win::ScopedVariant selected; |
| 140 if (SUCCEEDED(accessible_->get_accSelection(selected.Receive()))) { | 140 if (SUCCEEDED(accessible_->get_accSelection(selected.Receive()))) { |
| 141 if (selected.type() != VT_EMPTY) | 141 if (selected.type() != VT_EMPTY) |
| 142 did_select = true; | 142 did_select = true; |
| 143 } | 143 } |
| 144 EXPECT_TRUE(did_select) << "Could not select AccObject: " << GetDescription(); | 144 EXPECT_TRUE(did_select) << "Could not select AccObject: " << GetDescription(); |
| 145 return did_select; | 145 return did_select; |
| 146 } | 146 } |
| 147 | 147 |
| 148 bool AccObject::SetValue(const std::wstring& value) { | 148 bool AccObject::SetValue(const std::wstring& value) { |
| 149 base::win::ScopedBstr value_bstr(value.c_str()); | 149 base::win::ScopedBstr value_bstr(value.c_str()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 165 DCHECK(name); | 165 DCHECK(name); |
| 166 base::win::ScopedBstr name_bstr; | 166 base::win::ScopedBstr name_bstr; |
| 167 HRESULT result = accessible_->get_accName(child_id_, name_bstr.Receive()); | 167 HRESULT result = accessible_->get_accName(child_id_, name_bstr.Receive()); |
| 168 if (SUCCEEDED(result)) | 168 if (SUCCEEDED(result)) |
| 169 name->assign(name_bstr, name_bstr.Length()); | 169 name->assign(name_bstr, name_bstr.Length()); |
| 170 return SUCCEEDED(result); | 170 return SUCCEEDED(result); |
| 171 } | 171 } |
| 172 | 172 |
| 173 bool AccObject::GetRoleText(std::wstring* role_text) { | 173 bool AccObject::GetRoleText(std::wstring* role_text) { |
| 174 DCHECK(role_text); | 174 DCHECK(role_text); |
| 175 ScopedVariant role_variant; | 175 base::win::ScopedVariant role_variant; |
| 176 if (SUCCEEDED(accessible_->get_accRole(child_id_, role_variant.Receive()))) { | 176 if (SUCCEEDED(accessible_->get_accRole(child_id_, role_variant.Receive()))) { |
| 177 if (role_variant.type() == VT_I4) { | 177 if (role_variant.type() == VT_I4) { |
| 178 wchar_t role_text_array[50]; | 178 wchar_t role_text_array[50]; |
| 179 UINT characters = ::GetRoleText(V_I4(&role_variant), role_text_array, | 179 UINT characters = ::GetRoleText(V_I4(&role_variant), role_text_array, |
| 180 arraysize(role_text_array)); | 180 arraysize(role_text_array)); |
| 181 if (characters) { | 181 if (characters) { |
| 182 *role_text = role_text_array; | 182 *role_text = role_text_array; |
| 183 return true; | 183 return true; |
| 184 } else { | 184 } else { |
| 185 DLOG(ERROR) << "GetRoleText failed for role: " | 185 DLOG(ERROR) << "GetRoleText failed for role: " |
| (...skipping 14 matching lines...) Expand all Loading... |
| 200 DCHECK(value); | 200 DCHECK(value); |
| 201 base::win::ScopedBstr value_bstr; | 201 base::win::ScopedBstr value_bstr; |
| 202 HRESULT result = accessible_->get_accValue(child_id_, value_bstr.Receive()); | 202 HRESULT result = accessible_->get_accValue(child_id_, value_bstr.Receive()); |
| 203 if (SUCCEEDED(result)) | 203 if (SUCCEEDED(result)) |
| 204 value->assign(value_bstr, value_bstr.Length()); | 204 value->assign(value_bstr, value_bstr.Length()); |
| 205 return SUCCEEDED(result); | 205 return SUCCEEDED(result); |
| 206 } | 206 } |
| 207 | 207 |
| 208 bool AccObject::GetState(int* state) { | 208 bool AccObject::GetState(int* state) { |
| 209 DCHECK(state); | 209 DCHECK(state); |
| 210 ScopedVariant state_variant; | 210 base::win::ScopedVariant state_variant; |
| 211 if (SUCCEEDED(accessible_->get_accState(child_id_, | 211 if (SUCCEEDED(accessible_->get_accState(child_id_, |
| 212 state_variant.Receive()))) { | 212 state_variant.Receive()))) { |
| 213 if (state_variant.type() == VT_I4) { | 213 if (state_variant.type() == VT_I4) { |
| 214 *state = V_I4(&state_variant); | 214 *state = V_I4(&state_variant); |
| 215 return true; | 215 return true; |
| 216 } | 216 } |
| 217 } | 217 } |
| 218 return false; | 218 return false; |
| 219 } | 219 } |
| 220 | 220 |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 } | 327 } |
| 328 return true; | 328 return true; |
| 329 } | 329 } |
| 330 | 330 |
| 331 bool AccObject::GetFromNavigation(long navigation_type, | 331 bool AccObject::GetFromNavigation(long navigation_type, |
| 332 scoped_refptr<AccObject>* object) { | 332 scoped_refptr<AccObject>* object) { |
| 333 DCHECK(object); | 333 DCHECK(object); |
| 334 bool is_child_navigation = navigation_type == NAVDIR_FIRSTCHILD || | 334 bool is_child_navigation = navigation_type == NAVDIR_FIRSTCHILD || |
| 335 navigation_type == NAVDIR_LASTCHILD; | 335 navigation_type == NAVDIR_LASTCHILD; |
| 336 DCHECK(!is_child_navigation || !IsSimpleElement()); | 336 DCHECK(!is_child_navigation || !IsSimpleElement()); |
| 337 ScopedVariant object_variant; | 337 base::win::ScopedVariant object_variant; |
| 338 HRESULT result = accessible_->accNavigate(navigation_type, | 338 HRESULT result = accessible_->accNavigate(navigation_type, |
| 339 child_id_, | 339 child_id_, |
| 340 object_variant.Receive()); | 340 object_variant.Receive()); |
| 341 if (FAILED(result)) { | 341 if (FAILED(result)) { |
| 342 LOG(WARNING) << "Navigation from accessibility object failed"; | 342 LOG(WARNING) << "Navigation from accessibility object failed"; |
| 343 return false; | 343 return false; |
| 344 } | 344 } |
| 345 if (result == S_FALSE || object_variant.type() == VT_EMPTY) { | 345 if (result == S_FALSE || object_variant.type() == VT_EMPTY) { |
| 346 // This indicates that there was no accessibility object found by the | 346 // This indicates that there was no accessibility object found by the |
| 347 // navigation. | 347 // navigation. |
| (...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 664 } | 664 } |
| 665 | 665 |
| 666 bool IsDesktopUnlocked() { | 666 bool IsDesktopUnlocked() { |
| 667 HDESK desk = ::OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP); | 667 HDESK desk = ::OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP); |
| 668 if (desk) | 668 if (desk) |
| 669 ::CloseDesktop(desk); | 669 ::CloseDesktop(desk); |
| 670 return desk; | 670 return desk; |
| 671 } | 671 } |
| 672 | 672 |
| 673 } // namespace chrome_frame_test | 673 } // namespace chrome_frame_test |
| OLD | NEW |