| 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" |
| (...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 return E_INVALIDARG; | 298 return E_INVALIDARG; |
| 299 | 299 |
| 300 if ((nav_dir == NAVDIR_LASTCHILD || nav_dir == NAVDIR_FIRSTCHILD) && | 300 if ((nav_dir == NAVDIR_LASTCHILD || nav_dir == NAVDIR_FIRSTCHILD) && |
| 301 start.lVal != CHILDID_SELF) { | 301 start.lVal != CHILDID_SELF) { |
| 302 // MSAA states that navigating to first/last child can only be from self. | 302 // MSAA states that navigating to first/last child can only be from self. |
| 303 return E_INVALIDARG; | 303 return E_INVALIDARG; |
| 304 } | 304 } |
| 305 | 305 |
| 306 uint32 child_count = target->PlatformChildCount(); | 306 uint32 child_count = target->PlatformChildCount(); |
| 307 | 307 |
| 308 BrowserAccessibility* result = NULL; | 308 BrowserAccessibility* result = nullptr; |
| 309 switch (nav_dir) { | 309 switch (nav_dir) { |
| 310 case NAVDIR_DOWN: | 310 case NAVDIR_DOWN: |
| 311 case NAVDIR_UP: | 311 case NAVDIR_UP: |
| 312 case NAVDIR_LEFT: | 312 case NAVDIR_LEFT: |
| 313 case NAVDIR_RIGHT: | 313 case NAVDIR_RIGHT: |
| 314 // These directions are not implemented, matching Mozilla and IE. | 314 // These directions are not implemented, matching Mozilla and IE. |
| 315 return E_NOTIMPL; | 315 return E_NOTIMPL; |
| 316 case NAVDIR_FIRSTCHILD: | 316 case NAVDIR_FIRSTCHILD: |
| 317 if (child_count > 0) | 317 if (child_count > 0) |
| 318 result = target->PlatformGetChild(0); | 318 result = target->PlatformGetChild(0); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 340 } | 340 } |
| 341 | 341 |
| 342 STDMETHODIMP BrowserAccessibilityWin::get_accChild(VARIANT var_child, | 342 STDMETHODIMP BrowserAccessibilityWin::get_accChild(VARIANT var_child, |
| 343 IDispatch** disp_child) { | 343 IDispatch** disp_child) { |
| 344 if (!instance_active()) | 344 if (!instance_active()) |
| 345 return E_FAIL; | 345 return E_FAIL; |
| 346 | 346 |
| 347 if (!disp_child) | 347 if (!disp_child) |
| 348 return E_INVALIDARG; | 348 return E_INVALIDARG; |
| 349 | 349 |
| 350 *disp_child = NULL; | 350 *disp_child = nullptr; |
| 351 | 351 |
| 352 BrowserAccessibilityWin* target = GetTargetFromChildID(var_child); | 352 BrowserAccessibilityWin* target = GetTargetFromChildID(var_child); |
| 353 if (!target) | 353 if (!target) |
| 354 return E_INVALIDARG; | 354 return E_INVALIDARG; |
| 355 | 355 |
| 356 (*disp_child) = target->NewReference(); | 356 (*disp_child) = target->NewReference(); |
| 357 return S_OK; | 357 return S_OK; |
| 358 } | 358 } |
| 359 | 359 |
| 360 STDMETHODIMP BrowserAccessibilityWin::get_accChildCount(LONG* child_count) { | 360 STDMETHODIMP BrowserAccessibilityWin::get_accChildCount(LONG* child_count) { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 406 return E_FAIL; | 406 return E_FAIL; |
| 407 | 407 |
| 408 if (!focus_child) | 408 if (!focus_child) |
| 409 return E_INVALIDARG; | 409 return E_INVALIDARG; |
| 410 | 410 |
| 411 BrowserAccessibilityWin* focus = static_cast<BrowserAccessibilityWin*>( | 411 BrowserAccessibilityWin* focus = static_cast<BrowserAccessibilityWin*>( |
| 412 manager()->GetFocus(this)); | 412 manager()->GetFocus(this)); |
| 413 if (focus == this) { | 413 if (focus == this) { |
| 414 focus_child->vt = VT_I4; | 414 focus_child->vt = VT_I4; |
| 415 focus_child->lVal = CHILDID_SELF; | 415 focus_child->lVal = CHILDID_SELF; |
| 416 } else if (focus == NULL) { | 416 } else if (focus == nullptr) { |
| 417 focus_child->vt = VT_EMPTY; | 417 focus_child->vt = VT_EMPTY; |
| 418 } else { | 418 } else { |
| 419 focus_child->vt = VT_DISPATCH; | 419 focus_child->vt = VT_DISPATCH; |
| 420 focus_child->pdispVal = focus->NewReference(); | 420 focus_child->pdispVal = focus->NewReference(); |
| 421 } | 421 } |
| 422 | 422 |
| 423 return S_OK; | 423 return S_OK; |
| 424 } | 424 } |
| 425 | 425 |
| 426 STDMETHODIMP BrowserAccessibilityWin::get_accHelp(VARIANT var_id, BSTR* help) { | 426 STDMETHODIMP BrowserAccessibilityWin::get_accHelp(VARIANT var_id, BSTR* help) { |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 } | 489 } |
| 490 | 490 |
| 491 STDMETHODIMP BrowserAccessibilityWin::get_accParent(IDispatch** disp_parent) { | 491 STDMETHODIMP BrowserAccessibilityWin::get_accParent(IDispatch** disp_parent) { |
| 492 if (!instance_active()) | 492 if (!instance_active()) |
| 493 return E_FAIL; | 493 return E_FAIL; |
| 494 | 494 |
| 495 if (!disp_parent) | 495 if (!disp_parent) |
| 496 return E_INVALIDARG; | 496 return E_INVALIDARG; |
| 497 | 497 |
| 498 IAccessible* parent_obj = GetParent()->ToBrowserAccessibilityWin(); | 498 IAccessible* parent_obj = GetParent()->ToBrowserAccessibilityWin(); |
| 499 if (parent_obj == NULL) { | 499 if (parent_obj == nullptr) { |
| 500 // This happens if we're the root of the tree; | 500 // This happens if we're the root of the tree; |
| 501 // return the IAccessible for the window. | 501 // return the IAccessible for the window. |
| 502 parent_obj = | 502 parent_obj = |
| 503 manager()->ToBrowserAccessibilityManagerWin()->GetParentIAccessible(); | 503 manager()->ToBrowserAccessibilityManagerWin()->GetParentIAccessible(); |
| 504 // |parent| can only be NULL if the manager was created before the parent | 504 // |parent| can only be nullptr if the manager was created before the parent |
| 505 // IAccessible was known and it wasn't subsequently set before a client | 505 // IAccessible was known and it wasn't subsequently set before a client |
| 506 // requested it. This has been fixed. |parent| may also be NULL during | 506 // requested it. This has been fixed. |parent| may also be nullptr during |
| 507 // destruction. Possible cases where this could occur include tabs being | 507 // destruction. Possible cases where this could occur include tabs being |
| 508 // dragged to a new window, etc. | 508 // dragged to a new window, etc. |
| 509 if (!parent_obj) { | 509 if (!parent_obj) { |
| 510 DVLOG(1) << "In Function: " | 510 DVLOG(1) << "In Function: " |
| 511 << __FUNCTION__ | 511 << __FUNCTION__ |
| 512 << ". Parent IAccessible interface is NULL. Returning failure"; | 512 << ". Parent IAccessible interface is nullptr. Returning failure"
; |
| 513 return E_FAIL; | 513 return E_FAIL; |
| 514 } | 514 } |
| 515 } | 515 } |
| 516 parent_obj->AddRef(); | 516 parent_obj->AddRef(); |
| 517 *disp_parent = parent_obj; | 517 *disp_parent = parent_obj; |
| 518 return S_OK; | 518 return S_OK; |
| 519 } | 519 } |
| 520 | 520 |
| 521 STDMETHODIMP BrowserAccessibilityWin::get_accRole(VARIANT var_id, | 521 STDMETHODIMP BrowserAccessibilityWin::get_accRole(VARIANT var_id, |
| 522 VARIANT* role) { | 522 VARIANT* role) { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 547 | 547 |
| 548 if (!state) | 548 if (!state) |
| 549 return E_INVALIDARG; | 549 return E_INVALIDARG; |
| 550 | 550 |
| 551 BrowserAccessibilityWin* target = GetTargetFromChildID(var_id); | 551 BrowserAccessibilityWin* target = GetTargetFromChildID(var_id); |
| 552 if (!target) | 552 if (!target) |
| 553 return E_INVALIDARG; | 553 return E_INVALIDARG; |
| 554 | 554 |
| 555 state->vt = VT_I4; | 555 state->vt = VT_I4; |
| 556 state->lVal = target->ia_state_; | 556 state->lVal = target->ia_state_; |
| 557 if (manager()->GetFocus(NULL) == this) | 557 if (manager()->GetFocus(nullptr) == this) |
| 558 state->lVal |= STATE_SYSTEM_FOCUSED; | 558 state->lVal |= STATE_SYSTEM_FOCUSED; |
| 559 | 559 |
| 560 return S_OK; | 560 return S_OK; |
| 561 } | 561 } |
| 562 | 562 |
| 563 STDMETHODIMP BrowserAccessibilityWin::get_accValue(VARIANT var_id, | 563 STDMETHODIMP BrowserAccessibilityWin::get_accValue(VARIANT var_id, |
| 564 BSTR* value) { | 564 BSTR* value) { |
| 565 if (!instance_active()) | 565 if (!instance_active()) |
| 566 return E_FAIL; | 566 return E_FAIL; |
| 567 | 567 |
| (...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1062 ui::AX_ATTR_CELL_IDS); | 1062 ui::AX_ATTR_CELL_IDS); |
| 1063 DCHECK_EQ(columns * rows, static_cast<int>(cell_ids.size())); | 1063 DCHECK_EQ(columns * rows, static_cast<int>(cell_ids.size())); |
| 1064 | 1064 |
| 1065 int cell_id = cell_ids[row * columns + column]; | 1065 int cell_id = cell_ids[row * columns + column]; |
| 1066 BrowserAccessibilityWin* cell = GetFromID(cell_id); | 1066 BrowserAccessibilityWin* cell = GetFromID(cell_id); |
| 1067 if (cell) { | 1067 if (cell) { |
| 1068 *accessible = static_cast<IAccessible*>(cell->NewReference()); | 1068 *accessible = static_cast<IAccessible*>(cell->NewReference()); |
| 1069 return S_OK; | 1069 return S_OK; |
| 1070 } | 1070 } |
| 1071 | 1071 |
| 1072 *accessible = NULL; | 1072 *accessible = nullptr; |
| 1073 return E_INVALIDARG; | 1073 return E_INVALIDARG; |
| 1074 } | 1074 } |
| 1075 | 1075 |
| 1076 STDMETHODIMP BrowserAccessibilityWin::get_caption(IUnknown** accessible) { | 1076 STDMETHODIMP BrowserAccessibilityWin::get_caption(IUnknown** accessible) { |
| 1077 if (!instance_active()) | 1077 if (!instance_active()) |
| 1078 return E_FAIL; | 1078 return E_FAIL; |
| 1079 | 1079 |
| 1080 if (!accessible) | 1080 if (!accessible) |
| 1081 return E_INVALIDARG; | 1081 return E_INVALIDARG; |
| 1082 | 1082 |
| (...skipping 980 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2063 return E_FAIL; | 2063 return E_FAIL; |
| 2064 | 2064 |
| 2065 if (!start_offset || !end_offset || !text) | 2065 if (!start_offset || !end_offset || !text) |
| 2066 return E_INVALIDARG; | 2066 return E_INVALIDARG; |
| 2067 | 2067 |
| 2068 // The IAccessible2 spec says we don't have to implement the "sentence" | 2068 // The IAccessible2 spec says we don't have to implement the "sentence" |
| 2069 // boundary type, we can just let the screenreader handle it. | 2069 // boundary type, we can just let the screenreader handle it. |
| 2070 if (boundary_type == IA2_TEXT_BOUNDARY_SENTENCE) { | 2070 if (boundary_type == IA2_TEXT_BOUNDARY_SENTENCE) { |
| 2071 *start_offset = 0; | 2071 *start_offset = 0; |
| 2072 *end_offset = 0; | 2072 *end_offset = 0; |
| 2073 *text = NULL; | 2073 *text = nullptr; |
| 2074 return S_FALSE; | 2074 return S_FALSE; |
| 2075 } | 2075 } |
| 2076 | 2076 |
| 2077 const base::string16& text_str = TextForIAccessibleText(); | 2077 const base::string16& text_str = TextForIAccessibleText(); |
| 2078 | 2078 |
| 2079 *start_offset = FindBoundary( | 2079 *start_offset = FindBoundary( |
| 2080 text_str, boundary_type, offset, ui::BACKWARDS_DIRECTION); | 2080 text_str, boundary_type, offset, ui::BACKWARDS_DIRECTION); |
| 2081 *end_offset = FindBoundary( | 2081 *end_offset = FindBoundary( |
| 2082 text_str, boundary_type, offset, ui::FORWARDS_DIRECTION); | 2082 text_str, boundary_type, offset, ui::FORWARDS_DIRECTION); |
| 2083 return get_text(*start_offset, *end_offset, text); | 2083 return get_text(*start_offset, *end_offset, text); |
| 2084 } | 2084 } |
| 2085 | 2085 |
| 2086 STDMETHODIMP BrowserAccessibilityWin::get_textBeforeOffset( | 2086 STDMETHODIMP BrowserAccessibilityWin::get_textBeforeOffset( |
| 2087 LONG offset, | 2087 LONG offset, |
| 2088 enum IA2TextBoundaryType boundary_type, | 2088 enum IA2TextBoundaryType boundary_type, |
| 2089 LONG* start_offset, | 2089 LONG* start_offset, |
| 2090 LONG* end_offset, | 2090 LONG* end_offset, |
| 2091 BSTR* text) { | 2091 BSTR* text) { |
| 2092 if (!instance_active()) | 2092 if (!instance_active()) |
| 2093 return E_FAIL; | 2093 return E_FAIL; |
| 2094 | 2094 |
| 2095 if (!start_offset || !end_offset || !text) | 2095 if (!start_offset || !end_offset || !text) |
| 2096 return E_INVALIDARG; | 2096 return E_INVALIDARG; |
| 2097 | 2097 |
| 2098 // The IAccessible2 spec says we don't have to implement the "sentence" | 2098 // The IAccessible2 spec says we don't have to implement the "sentence" |
| 2099 // boundary type, we can just let the screenreader handle it. | 2099 // boundary type, we can just let the screenreader handle it. |
| 2100 if (boundary_type == IA2_TEXT_BOUNDARY_SENTENCE) { | 2100 if (boundary_type == IA2_TEXT_BOUNDARY_SENTENCE) { |
| 2101 *start_offset = 0; | 2101 *start_offset = 0; |
| 2102 *end_offset = 0; | 2102 *end_offset = 0; |
| 2103 *text = NULL; | 2103 *text = nullptr; |
| 2104 return S_FALSE; | 2104 return S_FALSE; |
| 2105 } | 2105 } |
| 2106 | 2106 |
| 2107 const base::string16& text_str = TextForIAccessibleText(); | 2107 const base::string16& text_str = TextForIAccessibleText(); |
| 2108 | 2108 |
| 2109 *start_offset = FindBoundary( | 2109 *start_offset = FindBoundary( |
| 2110 text_str, boundary_type, offset, ui::BACKWARDS_DIRECTION); | 2110 text_str, boundary_type, offset, ui::BACKWARDS_DIRECTION); |
| 2111 *end_offset = offset; | 2111 *end_offset = offset; |
| 2112 return get_text(*start_offset, *end_offset, text); | 2112 return get_text(*start_offset, *end_offset, text); |
| 2113 } | 2113 } |
| 2114 | 2114 |
| 2115 STDMETHODIMP BrowserAccessibilityWin::get_textAfterOffset( | 2115 STDMETHODIMP BrowserAccessibilityWin::get_textAfterOffset( |
| 2116 LONG offset, | 2116 LONG offset, |
| 2117 enum IA2TextBoundaryType boundary_type, | 2117 enum IA2TextBoundaryType boundary_type, |
| 2118 LONG* start_offset, | 2118 LONG* start_offset, |
| 2119 LONG* end_offset, | 2119 LONG* end_offset, |
| 2120 BSTR* text) { | 2120 BSTR* text) { |
| 2121 if (!instance_active()) | 2121 if (!instance_active()) |
| 2122 return E_FAIL; | 2122 return E_FAIL; |
| 2123 | 2123 |
| 2124 if (!start_offset || !end_offset || !text) | 2124 if (!start_offset || !end_offset || !text) |
| 2125 return E_INVALIDARG; | 2125 return E_INVALIDARG; |
| 2126 | 2126 |
| 2127 // The IAccessible2 spec says we don't have to implement the "sentence" | 2127 // The IAccessible2 spec says we don't have to implement the "sentence" |
| 2128 // boundary type, we can just let the screenreader handle it. | 2128 // boundary type, we can just let the screenreader handle it. |
| 2129 if (boundary_type == IA2_TEXT_BOUNDARY_SENTENCE) { | 2129 if (boundary_type == IA2_TEXT_BOUNDARY_SENTENCE) { |
| 2130 *start_offset = 0; | 2130 *start_offset = 0; |
| 2131 *end_offset = 0; | 2131 *end_offset = 0; |
| 2132 *text = NULL; | 2132 *text = nullptr; |
| 2133 return S_FALSE; | 2133 return S_FALSE; |
| 2134 } | 2134 } |
| 2135 | 2135 |
| 2136 const base::string16& text_str = TextForIAccessibleText(); | 2136 const base::string16& text_str = TextForIAccessibleText(); |
| 2137 | 2137 |
| 2138 *start_offset = offset; | 2138 *start_offset = offset; |
| 2139 *end_offset = FindBoundary( | 2139 *end_offset = FindBoundary( |
| 2140 text_str, boundary_type, offset, ui::FORWARDS_DIRECTION); | 2140 text_str, boundary_type, offset, ui::FORWARDS_DIRECTION); |
| 2141 return get_text(*start_offset, *end_offset, text); | 2141 return get_text(*start_offset, *end_offset, text); |
| 2142 } | 2142 } |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2439 | 2439 |
| 2440 if (!node_name || !name_space_id || !node_value || !num_children || | 2440 if (!node_name || !name_space_id || !node_value || !num_children || |
| 2441 !unique_id || !node_type) { | 2441 !unique_id || !node_type) { |
| 2442 return E_INVALIDARG; | 2442 return E_INVALIDARG; |
| 2443 } | 2443 } |
| 2444 | 2444 |
| 2445 base::string16 tag; | 2445 base::string16 tag; |
| 2446 if (GetString16Attribute(ui::AX_ATTR_HTML_TAG, &tag)) | 2446 if (GetString16Attribute(ui::AX_ATTR_HTML_TAG, &tag)) |
| 2447 *node_name = SysAllocString(tag.c_str()); | 2447 *node_name = SysAllocString(tag.c_str()); |
| 2448 else | 2448 else |
| 2449 *node_name = NULL; | 2449 *node_name = nullptr; |
| 2450 | 2450 |
| 2451 *name_space_id = 0; | 2451 *name_space_id = 0; |
| 2452 *node_value = SysAllocString(base::UTF8ToUTF16(value()).c_str()); | 2452 *node_value = SysAllocString(base::UTF8ToUTF16(value()).c_str()); |
| 2453 *num_children = PlatformChildCount(); | 2453 *num_children = PlatformChildCount(); |
| 2454 *unique_id = unique_id_win_; | 2454 *unique_id = unique_id_win_; |
| 2455 | 2455 |
| 2456 if (ia_role_ == ROLE_SYSTEM_DOCUMENT) { | 2456 if (ia_role_ == ROLE_SYSTEM_DOCUMENT) { |
| 2457 *node_type = NODETYPE_DOCUMENT; | 2457 *node_type = NODETYPE_DOCUMENT; |
| 2458 } else if (ia_role_ == ROLE_SYSTEM_TEXT && | 2458 } else if (ia_role_ == ROLE_SYSTEM_TEXT && |
| 2459 ((ia2_state_ & IA2_STATE_EDITABLE) == 0)) { | 2459 ((ia2_state_ & IA2_STATE_EDITABLE) == 0)) { |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2508 std::string name = base::UTF16ToUTF8((LPCWSTR)attrib_names[i]); | 2508 std::string name = base::UTF16ToUTF8((LPCWSTR)attrib_names[i]); |
| 2509 for (unsigned int j = 0; j < GetHtmlAttributes().size(); ++j) { | 2509 for (unsigned int j = 0; j < GetHtmlAttributes().size(); ++j) { |
| 2510 if (GetHtmlAttributes()[j].first == name) { | 2510 if (GetHtmlAttributes()[j].first == name) { |
| 2511 attrib_values[i] = SysAllocString( | 2511 attrib_values[i] = SysAllocString( |
| 2512 base::UTF8ToUTF16(GetHtmlAttributes()[j].second).c_str()); | 2512 base::UTF8ToUTF16(GetHtmlAttributes()[j].second).c_str()); |
| 2513 found = true; | 2513 found = true; |
| 2514 break; | 2514 break; |
| 2515 } | 2515 } |
| 2516 } | 2516 } |
| 2517 if (!found) { | 2517 if (!found) { |
| 2518 attrib_values[i] = NULL; | 2518 attrib_values[i] = nullptr; |
| 2519 } | 2519 } |
| 2520 } | 2520 } |
| 2521 return S_OK; | 2521 return S_OK; |
| 2522 } | 2522 } |
| 2523 | 2523 |
| 2524 STDMETHODIMP BrowserAccessibilityWin::get_computedStyle( | 2524 STDMETHODIMP BrowserAccessibilityWin::get_computedStyle( |
| 2525 unsigned short max_style_properties, | 2525 unsigned short max_style_properties, |
| 2526 boolean use_alternate_view, | 2526 boolean use_alternate_view, |
| 2527 BSTR* style_properties, | 2527 BSTR* style_properties, |
| 2528 BSTR* style_values, | 2528 BSTR* style_values, |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2563 // We only cache a single style property for now: DISPLAY | 2563 // We only cache a single style property for now: DISPLAY |
| 2564 | 2564 |
| 2565 for (unsigned short i = 0; i < num_style_properties; ++i) { | 2565 for (unsigned short i = 0; i < num_style_properties; ++i) { |
| 2566 base::string16 name = (LPCWSTR)style_properties[i]; | 2566 base::string16 name = (LPCWSTR)style_properties[i]; |
| 2567 base::StringToLowerASCII(&name); | 2567 base::StringToLowerASCII(&name); |
| 2568 if (name == L"display") { | 2568 if (name == L"display") { |
| 2569 base::string16 display = GetString16Attribute( | 2569 base::string16 display = GetString16Attribute( |
| 2570 ui::AX_ATTR_DISPLAY); | 2570 ui::AX_ATTR_DISPLAY); |
| 2571 style_values[i] = SysAllocString(display.c_str()); | 2571 style_values[i] = SysAllocString(display.c_str()); |
| 2572 } else { | 2572 } else { |
| 2573 style_values[i] = NULL; | 2573 style_values[i] = nullptr; |
| 2574 } | 2574 } |
| 2575 } | 2575 } |
| 2576 | 2576 |
| 2577 return S_OK; | 2577 return S_OK; |
| 2578 } | 2578 } |
| 2579 | 2579 |
| 2580 STDMETHODIMP BrowserAccessibilityWin::scrollTo(boolean placeTopLeft) { | 2580 STDMETHODIMP BrowserAccessibilityWin::scrollTo(boolean placeTopLeft) { |
| 2581 return scrollTo(placeTopLeft ? | 2581 return scrollTo(placeTopLeft ? |
| 2582 IA2_SCROLL_TYPE_TOP_LEFT : IA2_SCROLL_TYPE_ANYWHERE); | 2582 IA2_SCROLL_TYPE_TOP_LEFT : IA2_SCROLL_TYPE_ANYWHERE); |
| 2583 } | 2583 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2594 } | 2594 } |
| 2595 | 2595 |
| 2596 STDMETHODIMP BrowserAccessibilityWin::get_firstChild(ISimpleDOMNode** node) { | 2596 STDMETHODIMP BrowserAccessibilityWin::get_firstChild(ISimpleDOMNode** node) { |
| 2597 if (!instance_active()) | 2597 if (!instance_active()) |
| 2598 return E_FAIL; | 2598 return E_FAIL; |
| 2599 | 2599 |
| 2600 if (!node) | 2600 if (!node) |
| 2601 return E_INVALIDARG; | 2601 return E_INVALIDARG; |
| 2602 | 2602 |
| 2603 if (PlatformChildCount() == 0) { | 2603 if (PlatformChildCount() == 0) { |
| 2604 *node = NULL; | 2604 *node = nullptr; |
| 2605 return S_FALSE; | 2605 return S_FALSE; |
| 2606 } | 2606 } |
| 2607 | 2607 |
| 2608 *node = PlatformGetChild(0)->ToBrowserAccessibilityWin()->NewReference(); | 2608 *node = PlatformGetChild(0)->ToBrowserAccessibilityWin()->NewReference(); |
| 2609 return S_OK; | 2609 return S_OK; |
| 2610 } | 2610 } |
| 2611 | 2611 |
| 2612 STDMETHODIMP BrowserAccessibilityWin::get_lastChild(ISimpleDOMNode** node) { | 2612 STDMETHODIMP BrowserAccessibilityWin::get_lastChild(ISimpleDOMNode** node) { |
| 2613 if (!instance_active()) | 2613 if (!instance_active()) |
| 2614 return E_FAIL; | 2614 return E_FAIL; |
| 2615 | 2615 |
| 2616 if (!node) | 2616 if (!node) |
| 2617 return E_INVALIDARG; | 2617 return E_INVALIDARG; |
| 2618 | 2618 |
| 2619 if (PlatformChildCount() == 0) { | 2619 if (PlatformChildCount() == 0) { |
| 2620 *node = NULL; | 2620 *node = nullptr; |
| 2621 return S_FALSE; | 2621 return S_FALSE; |
| 2622 } | 2622 } |
| 2623 | 2623 |
| 2624 *node = PlatformGetChild(PlatformChildCount() - 1) | 2624 *node = PlatformGetChild(PlatformChildCount() - 1) |
| 2625 ->ToBrowserAccessibilityWin()->NewReference(); | 2625 ->ToBrowserAccessibilityWin()->NewReference(); |
| 2626 return S_OK; | 2626 return S_OK; |
| 2627 } | 2627 } |
| 2628 | 2628 |
| 2629 STDMETHODIMP BrowserAccessibilityWin::get_previousSibling( | 2629 STDMETHODIMP BrowserAccessibilityWin::get_previousSibling( |
| 2630 ISimpleDOMNode** node) { | 2630 ISimpleDOMNode** node) { |
| 2631 if (!instance_active()) | 2631 if (!instance_active()) |
| 2632 return E_FAIL; | 2632 return E_FAIL; |
| 2633 | 2633 |
| 2634 if (!node) | 2634 if (!node) |
| 2635 return E_INVALIDARG; | 2635 return E_INVALIDARG; |
| 2636 | 2636 |
| 2637 if (!GetParent() || GetIndexInParent() <= 0) { | 2637 if (!GetParent() || GetIndexInParent() <= 0) { |
| 2638 *node = NULL; | 2638 *node = nullptr; |
| 2639 return S_FALSE; | 2639 return S_FALSE; |
| 2640 } | 2640 } |
| 2641 | 2641 |
| 2642 *node = GetParent()->InternalGetChild(GetIndexInParent() - 1)-> | 2642 *node = GetParent()->InternalGetChild(GetIndexInParent() - 1)-> |
| 2643 ToBrowserAccessibilityWin()->NewReference(); | 2643 ToBrowserAccessibilityWin()->NewReference(); |
| 2644 return S_OK; | 2644 return S_OK; |
| 2645 } | 2645 } |
| 2646 | 2646 |
| 2647 STDMETHODIMP BrowserAccessibilityWin::get_nextSibling(ISimpleDOMNode** node) { | 2647 STDMETHODIMP BrowserAccessibilityWin::get_nextSibling(ISimpleDOMNode** node) { |
| 2648 if (!instance_active()) | 2648 if (!instance_active()) |
| 2649 return E_FAIL; | 2649 return E_FAIL; |
| 2650 | 2650 |
| 2651 if (!node) | 2651 if (!node) |
| 2652 return E_INVALIDARG; | 2652 return E_INVALIDARG; |
| 2653 | 2653 |
| 2654 if (!GetParent() || | 2654 if (!GetParent() || |
| 2655 GetIndexInParent() < 0 || | 2655 GetIndexInParent() < 0 || |
| 2656 GetIndexInParent() >= static_cast<int>( | 2656 GetIndexInParent() >= static_cast<int>( |
| 2657 GetParent()->InternalChildCount()) - 1) { | 2657 GetParent()->InternalChildCount()) - 1) { |
| 2658 *node = NULL; | 2658 *node = nullptr; |
| 2659 return S_FALSE; | 2659 return S_FALSE; |
| 2660 } | 2660 } |
| 2661 | 2661 |
| 2662 *node = GetParent()->InternalGetChild(GetIndexInParent() + 1)-> | 2662 *node = GetParent()->InternalGetChild(GetIndexInParent() + 1)-> |
| 2663 ToBrowserAccessibilityWin()->NewReference(); | 2663 ToBrowserAccessibilityWin()->NewReference(); |
| 2664 return S_OK; | 2664 return S_OK; |
| 2665 } | 2665 } |
| 2666 | 2666 |
| 2667 STDMETHODIMP BrowserAccessibilityWin::get_childAt( | 2667 STDMETHODIMP BrowserAccessibilityWin::get_childAt( |
| 2668 unsigned int child_index, | 2668 unsigned int child_index, |
| 2669 ISimpleDOMNode** node) { | 2669 ISimpleDOMNode** node) { |
| 2670 if (!instance_active()) | 2670 if (!instance_active()) |
| 2671 return E_FAIL; | 2671 return E_FAIL; |
| 2672 | 2672 |
| 2673 if (!node) | 2673 if (!node) |
| 2674 return E_INVALIDARG; | 2674 return E_INVALIDARG; |
| 2675 | 2675 |
| 2676 if (child_index >= PlatformChildCount()) | 2676 if (child_index >= PlatformChildCount()) |
| 2677 return E_INVALIDARG; | 2677 return E_INVALIDARG; |
| 2678 | 2678 |
| 2679 BrowserAccessibility* child = PlatformGetChild(child_index); | 2679 BrowserAccessibility* child = PlatformGetChild(child_index); |
| 2680 if (!child) { | 2680 if (!child) { |
| 2681 *node = NULL; | 2681 *node = nullptr; |
| 2682 return S_FALSE; | 2682 return S_FALSE; |
| 2683 } | 2683 } |
| 2684 | 2684 |
| 2685 *node = child->ToBrowserAccessibilityWin()->NewReference(); | 2685 *node = child->ToBrowserAccessibilityWin()->NewReference(); |
| 2686 return S_OK; | 2686 return S_OK; |
| 2687 } | 2687 } |
| 2688 | 2688 |
| 2689 // | 2689 // |
| 2690 // ISimpleDOMText methods. | 2690 // ISimpleDOMText methods. |
| 2691 // | 2691 // |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2808 | 2808 |
| 2809 // We only support the IAccessibleEx interface on Windows 8 and above. This | 2809 // We only support the IAccessibleEx interface on Windows 8 and above. This |
| 2810 // is needed for the on-screen Keyboard to show up in metro mode, when the | 2810 // is needed for the on-screen Keyboard to show up in metro mode, when the |
| 2811 // user taps an editable portion on the page. | 2811 // user taps an editable portion on the page. |
| 2812 // All methods in the IAccessibleEx interface are unimplemented. | 2812 // All methods in the IAccessibleEx interface are unimplemented. |
| 2813 if (riid == IID_IAccessibleEx && | 2813 if (riid == IID_IAccessibleEx && |
| 2814 base::win::GetVersion() >= base::win::VERSION_WIN8) { | 2814 base::win::GetVersion() >= base::win::VERSION_WIN8) { |
| 2815 return QueryInterface(riid, object); | 2815 return QueryInterface(riid, object); |
| 2816 } | 2816 } |
| 2817 | 2817 |
| 2818 *object = NULL; | 2818 *object = nullptr; |
| 2819 return E_FAIL; | 2819 return E_FAIL; |
| 2820 } | 2820 } |
| 2821 | 2821 |
| 2822 STDMETHODIMP BrowserAccessibilityWin::GetPatternProvider(PATTERNID id, | 2822 STDMETHODIMP BrowserAccessibilityWin::GetPatternProvider(PATTERNID id, |
| 2823 IUnknown** provider) { | 2823 IUnknown** provider) { |
| 2824 DVLOG(1) << "In Function: " | 2824 DVLOG(1) << "In Function: " |
| 2825 << __FUNCTION__ | 2825 << __FUNCTION__ |
| 2826 << " for pattern id: " | 2826 << " for pattern id: " |
| 2827 << id; | 2827 << id; |
| 2828 if (id == UIA_ValuePatternId || id == UIA_TextPatternId) { | 2828 if (id == UIA_ValuePatternId || id == UIA_TextPatternId) { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2859 // CComObjectRootEx methods. | 2859 // CComObjectRootEx methods. |
| 2860 // | 2860 // |
| 2861 | 2861 |
| 2862 HRESULT WINAPI BrowserAccessibilityWin::InternalQueryInterface( | 2862 HRESULT WINAPI BrowserAccessibilityWin::InternalQueryInterface( |
| 2863 void* this_ptr, | 2863 void* this_ptr, |
| 2864 const _ATL_INTMAP_ENTRY* entries, | 2864 const _ATL_INTMAP_ENTRY* entries, |
| 2865 REFIID iid, | 2865 REFIID iid, |
| 2866 void** object) { | 2866 void** object) { |
| 2867 if (iid == IID_IAccessibleImage) { | 2867 if (iid == IID_IAccessibleImage) { |
| 2868 if (ia_role_ != ROLE_SYSTEM_GRAPHIC) { | 2868 if (ia_role_ != ROLE_SYSTEM_GRAPHIC) { |
| 2869 *object = NULL; | 2869 *object = nullptr; |
| 2870 return E_NOINTERFACE; | 2870 return E_NOINTERFACE; |
| 2871 } | 2871 } |
| 2872 } else if (iid == IID_IAccessibleTable || iid == IID_IAccessibleTable2) { | 2872 } else if (iid == IID_IAccessibleTable || iid == IID_IAccessibleTable2) { |
| 2873 if (ia_role_ != ROLE_SYSTEM_TABLE) { | 2873 if (ia_role_ != ROLE_SYSTEM_TABLE) { |
| 2874 *object = NULL; | 2874 *object = nullptr; |
| 2875 return E_NOINTERFACE; | 2875 return E_NOINTERFACE; |
| 2876 } | 2876 } |
| 2877 } else if (iid == IID_IAccessibleTableCell) { | 2877 } else if (iid == IID_IAccessibleTableCell) { |
| 2878 if (ia_role_ != ROLE_SYSTEM_CELL) { | 2878 if (ia_role_ != ROLE_SYSTEM_CELL) { |
| 2879 *object = NULL; | 2879 *object = nullptr; |
| 2880 return E_NOINTERFACE; | 2880 return E_NOINTERFACE; |
| 2881 } | 2881 } |
| 2882 } else if (iid == IID_IAccessibleValue) { | 2882 } else if (iid == IID_IAccessibleValue) { |
| 2883 if (ia_role_ != ROLE_SYSTEM_PROGRESSBAR && | 2883 if (ia_role_ != ROLE_SYSTEM_PROGRESSBAR && |
| 2884 ia_role_ != ROLE_SYSTEM_SCROLLBAR && | 2884 ia_role_ != ROLE_SYSTEM_SCROLLBAR && |
| 2885 ia_role_ != ROLE_SYSTEM_SLIDER) { | 2885 ia_role_ != ROLE_SYSTEM_SLIDER) { |
| 2886 *object = NULL; | 2886 *object = nullptr; |
| 2887 return E_NOINTERFACE; | 2887 return E_NOINTERFACE; |
| 2888 } | 2888 } |
| 2889 } else if (iid == IID_ISimpleDOMDocument) { | 2889 } else if (iid == IID_ISimpleDOMDocument) { |
| 2890 if (ia_role_ != ROLE_SYSTEM_DOCUMENT) { | 2890 if (ia_role_ != ROLE_SYSTEM_DOCUMENT) { |
| 2891 *object = NULL; | 2891 *object = nullptr; |
| 2892 return E_NOINTERFACE; | 2892 return E_NOINTERFACE; |
| 2893 } | 2893 } |
| 2894 } | 2894 } |
| 2895 | 2895 |
| 2896 return CComObjectRootBase::InternalQueryInterface( | 2896 return CComObjectRootBase::InternalQueryInterface( |
| 2897 this_ptr, entries, iid, object); | 2897 this_ptr, entries, iid, object); |
| 2898 } | 2898 } |
| 2899 | 2899 |
| 2900 // | 2900 // |
| 2901 // Private methods. | 2901 // Private methods. |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3183 } | 3183 } |
| 3184 | 3184 |
| 3185 BrowserAccessibilityWin* BrowserAccessibilityWin::NewReference() { | 3185 BrowserAccessibilityWin* BrowserAccessibilityWin::NewReference() { |
| 3186 AddRef(); | 3186 AddRef(); |
| 3187 return this; | 3187 return this; |
| 3188 } | 3188 } |
| 3189 | 3189 |
| 3190 BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID( | 3190 BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID( |
| 3191 const VARIANT& var_id) { | 3191 const VARIANT& var_id) { |
| 3192 if (var_id.vt != VT_I4) | 3192 if (var_id.vt != VT_I4) |
| 3193 return NULL; | 3193 return nullptr; |
| 3194 | 3194 |
| 3195 LONG child_id = var_id.lVal; | 3195 LONG child_id = var_id.lVal; |
| 3196 if (child_id == CHILDID_SELF) | 3196 if (child_id == CHILDID_SELF) |
| 3197 return this; | 3197 return this; |
| 3198 | 3198 |
| 3199 if (child_id >= 1 && child_id <= static_cast<LONG>(PlatformChildCount())) | 3199 if (child_id >= 1 && child_id <= static_cast<LONG>(PlatformChildCount())) |
| 3200 return PlatformGetChild(child_id - 1)->ToBrowserAccessibilityWin(); | 3200 return PlatformGetChild(child_id - 1)->ToBrowserAccessibilityWin(); |
| 3201 | 3201 |
| 3202 return manager()->ToBrowserAccessibilityManagerWin()-> | 3202 return manager()->ToBrowserAccessibilityManagerWin()-> |
| 3203 GetFromUniqueIdWin(child_id); | 3203 GetFromUniqueIdWin(child_id); |
| (...skipping 621 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3825 // The role should always be set. | 3825 // The role should always be set. |
| 3826 DCHECK(!role_name_.empty() || ia_role_); | 3826 DCHECK(!role_name_.empty() || ia_role_); |
| 3827 | 3827 |
| 3828 // If we didn't explicitly set the IAccessible2 role, make it the same | 3828 // If we didn't explicitly set the IAccessible2 role, make it the same |
| 3829 // as the MSAA role. | 3829 // as the MSAA role. |
| 3830 if (!ia2_role_) | 3830 if (!ia2_role_) |
| 3831 ia2_role_ = ia_role_; | 3831 ia2_role_ = ia_role_; |
| 3832 } | 3832 } |
| 3833 | 3833 |
| 3834 } // namespace content | 3834 } // namespace content |
| OLD | NEW |