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

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

Issue 2870263002: Rename ScopedComPtr::Receive to ScopedComPtr::GetAddressOf (Closed)
Patch Set: Rebase to 2a6f440 Created 3 years, 7 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 <objbase.h>
7 #include <stdint.h> 8 #include <stdint.h>
8 9
9 #include <memory> 10 #include <memory>
10 #include <utility> 11 #include <utility>
11 12
12 #include "base/macros.h" 13 #include "base/macros.h"
13 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
14 #include "base/win/scoped_bstr.h" 15 #include "base/win/scoped_bstr.h"
15 #include "base/win/scoped_comptr.h" 16 #include "base/win/scoped_comptr.h"
16 #include "base/win/scoped_variant.h" 17 #include "base/win/scoped_variant.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 std::unique_ptr<BrowserAccessibilityManager> manager( 136 std::unique_ptr<BrowserAccessibilityManager> manager(
136 BrowserAccessibilityManager::Create(MakeAXTreeUpdate(root, text), nullptr, 137 BrowserAccessibilityManager::Create(MakeAXTreeUpdate(root, text), nullptr,
137 new BrowserAccessibilityFactory())); 138 new BrowserAccessibilityFactory()));
138 139
139 // Query for the text IAccessible and verify that it returns "old text" as its 140 // Query for the text IAccessible and verify that it returns "old text" as its
140 // value. 141 // value.
141 base::win::ScopedVariant one(1); 142 base::win::ScopedVariant one(1);
142 base::win::ScopedComPtr<IDispatch> text_dispatch; 143 base::win::ScopedComPtr<IDispatch> text_dispatch;
143 HRESULT hr = ToBrowserAccessibilityWin(manager->GetRoot()) 144 HRESULT hr = ToBrowserAccessibilityWin(manager->GetRoot())
144 ->GetCOM() 145 ->GetCOM()
145 ->get_accChild(one, text_dispatch.Receive()); 146 ->get_accChild(one, text_dispatch.GetAddressOf());
146 ASSERT_EQ(S_OK, hr); 147 ASSERT_EQ(S_OK, hr);
147 148
148 base::win::ScopedComPtr<IAccessible> text_accessible; 149 base::win::ScopedComPtr<IAccessible> text_accessible;
149 hr = text_dispatch.CopyTo(text_accessible.Receive()); 150 hr = text_dispatch.CopyTo(text_accessible.GetAddressOf());
150 ASSERT_EQ(S_OK, hr); 151 ASSERT_EQ(S_OK, hr);
151 152
152 base::win::ScopedVariant childid_self(CHILDID_SELF); 153 base::win::ScopedVariant childid_self(CHILDID_SELF);
153 base::win::ScopedBstr name; 154 base::win::ScopedBstr name;
154 hr = text_accessible->get_accName(childid_self, name.Receive()); 155 hr = text_accessible->get_accName(childid_self, name.Receive());
155 ASSERT_EQ(S_OK, hr); 156 ASSERT_EQ(S_OK, hr);
156 EXPECT_EQ(L"old text", base::string16(name)); 157 EXPECT_EQ(L"old text", base::string16(name));
157 name.Reset(); 158 name.Reset();
158 159
159 text_dispatch.Reset(); 160 text_dispatch.Reset();
160 text_accessible.Reset(); 161 text_accessible.Reset();
161 162
162 // Notify the BrowserAccessibilityManager that the text child has changed. 163 // Notify the BrowserAccessibilityManager that the text child has changed.
163 AXContentNodeData text2; 164 AXContentNodeData text2;
164 text2.id = 2; 165 text2.id = 2;
165 text2.role = ui::AX_ROLE_STATIC_TEXT; 166 text2.role = ui::AX_ROLE_STATIC_TEXT;
166 text2.SetName("new text"); 167 text2.SetName("new text");
167 AXEventNotificationDetails param; 168 AXEventNotificationDetails param;
168 param.event_type = ui::AX_EVENT_CHILDREN_CHANGED; 169 param.event_type = ui::AX_EVENT_CHILDREN_CHANGED;
169 param.update.nodes.push_back(text2); 170 param.update.nodes.push_back(text2);
170 param.id = text2.id; 171 param.id = text2.id;
171 std::vector<AXEventNotificationDetails> events; 172 std::vector<AXEventNotificationDetails> events;
172 events.push_back(param); 173 events.push_back(param);
173 manager->OnAccessibilityEvents(events); 174 manager->OnAccessibilityEvents(events);
174 175
175 // Query for the text IAccessible and verify that it now returns "new text" 176 // Query for the text IAccessible and verify that it now returns "new text"
176 // as its value. 177 // as its value.
177 hr = ToBrowserAccessibilityWin(manager->GetRoot()) 178 hr = ToBrowserAccessibilityWin(manager->GetRoot())
178 ->GetCOM() 179 ->GetCOM()
179 ->get_accChild(one, text_dispatch.Receive()); 180 ->get_accChild(one, text_dispatch.GetAddressOf());
180 ASSERT_EQ(S_OK, hr); 181 ASSERT_EQ(S_OK, hr);
181 182
182 hr = text_dispatch.CopyTo(text_accessible.Receive()); 183 hr = text_dispatch.CopyTo(text_accessible.GetAddressOf());
183 ASSERT_EQ(S_OK, hr); 184 ASSERT_EQ(S_OK, hr);
184 185
185 hr = text_accessible->get_accName(childid_self, name.Receive()); 186 hr = text_accessible->get_accName(childid_self, name.Receive());
186 ASSERT_EQ(S_OK, hr); 187 ASSERT_EQ(S_OK, hr);
187 EXPECT_EQ(L"new text", base::string16(name)); 188 EXPECT_EQ(L"new text", base::string16(name));
188 189
189 text_dispatch.Reset(); 190 text_dispatch.Reset();
190 text_accessible.Reset(); 191 text_accessible.Reset();
191 192
192 // Delete the manager and test that all BrowserAccessibility instances are 193 // Delete the manager and test that all BrowserAccessibility instances are
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 443
443 base::win::ScopedBstr text; 444 base::win::ScopedBstr text;
444 EXPECT_EQ(S_OK, root_obj->get_text(0, text_name_len, text.Receive())); 445 EXPECT_EQ(S_OK, root_obj->get_text(0, text_name_len, text.Receive()));
445 EXPECT_EQ(text1_name + text2_name, base::UTF16ToUTF8(base::string16(text))); 446 EXPECT_EQ(text1_name + text2_name, base::UTF16ToUTF8(base::string16(text)));
446 447
447 long hyperlink_count; 448 long hyperlink_count;
448 EXPECT_EQ(S_OK, root_obj->get_nHyperlinks(&hyperlink_count)); 449 EXPECT_EQ(S_OK, root_obj->get_nHyperlinks(&hyperlink_count));
449 EXPECT_EQ(0, hyperlink_count); 450 EXPECT_EQ(0, hyperlink_count);
450 451
451 base::win::ScopedComPtr<IAccessibleHyperlink> hyperlink; 452 base::win::ScopedComPtr<IAccessibleHyperlink> hyperlink;
452 EXPECT_EQ(E_INVALIDARG, root_obj->get_hyperlink(-1, hyperlink.Receive()));
453 EXPECT_EQ(E_INVALIDARG, root_obj->get_hyperlink(0, hyperlink.Receive()));
454 EXPECT_EQ(E_INVALIDARG, 453 EXPECT_EQ(E_INVALIDARG,
455 root_obj->get_hyperlink(text_name_len, hyperlink.Receive())); 454 root_obj->get_hyperlink(-1, hyperlink.GetAddressOf()));
455 EXPECT_EQ(E_INVALIDARG, root_obj->get_hyperlink(0, hyperlink.GetAddressOf()));
456 EXPECT_EQ(E_INVALIDARG, 456 EXPECT_EQ(E_INVALIDARG,
457 root_obj->get_hyperlink(text_name_len + 1, hyperlink.Receive())); 457 root_obj->get_hyperlink(text_name_len, hyperlink.GetAddressOf()));
458 EXPECT_EQ(E_INVALIDARG, root_obj->get_hyperlink(text_name_len + 1,
459 hyperlink.GetAddressOf()));
458 460
459 long hyperlink_index; 461 long hyperlink_index;
460 EXPECT_EQ(S_FALSE, root_obj->get_hyperlinkIndex(0, &hyperlink_index)); 462 EXPECT_EQ(S_FALSE, root_obj->get_hyperlinkIndex(0, &hyperlink_index));
461 EXPECT_EQ(-1, hyperlink_index); 463 EXPECT_EQ(-1, hyperlink_index);
462 // Invalid arguments should not be modified. 464 // Invalid arguments should not be modified.
463 hyperlink_index = -2; 465 hyperlink_index = -2;
464 EXPECT_EQ(E_INVALIDARG, 466 EXPECT_EQ(E_INVALIDARG,
465 root_obj->get_hyperlinkIndex(text_name_len, &hyperlink_index)); 467 root_obj->get_hyperlinkIndex(text_name_len, &hyperlink_index));
466 EXPECT_EQ(-2, hyperlink_index); 468 EXPECT_EQ(-2, hyperlink_index);
467 EXPECT_EQ(E_INVALIDARG, root_obj->get_hyperlinkIndex(-1, &hyperlink_index)); 469 EXPECT_EQ(E_INVALIDARG, root_obj->get_hyperlinkIndex(-1, &hyperlink_index));
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 EXPECT_EQ(S_OK, root_obj->get_text(0, root_hypertext_len, text.Receive())); 565 EXPECT_EQ(S_OK, root_obj->get_text(0, root_hypertext_len, text.Receive()));
564 EXPECT_STREQ(root_hypertext.c_str(), text); 566 EXPECT_STREQ(root_hypertext.c_str(), text);
565 text.Reset(); 567 text.Reset();
566 568
567 long hyperlink_count; 569 long hyperlink_count;
568 EXPECT_EQ(S_OK, root_obj->get_nHyperlinks(&hyperlink_count)); 570 EXPECT_EQ(S_OK, root_obj->get_nHyperlinks(&hyperlink_count));
569 EXPECT_EQ(4, hyperlink_count); 571 EXPECT_EQ(4, hyperlink_count);
570 572
571 base::win::ScopedComPtr<IAccessibleHyperlink> hyperlink; 573 base::win::ScopedComPtr<IAccessibleHyperlink> hyperlink;
572 base::win::ScopedComPtr<IAccessibleText> hypertext; 574 base::win::ScopedComPtr<IAccessibleText> hypertext;
573 EXPECT_EQ(E_INVALIDARG, root_obj->get_hyperlink(-1, hyperlink.Receive())); 575 EXPECT_EQ(E_INVALIDARG,
574 EXPECT_EQ(E_INVALIDARG, root_obj->get_hyperlink(4, hyperlink.Receive())); 576 root_obj->get_hyperlink(-1, hyperlink.GetAddressOf()));
577 EXPECT_EQ(E_INVALIDARG, root_obj->get_hyperlink(4, hyperlink.GetAddressOf()));
575 578
576 // Get the text of the combo box. 579 // Get the text of the combo box.
577 // It should be its value. 580 // It should be its value.
578 EXPECT_EQ(S_OK, root_obj->get_hyperlink(0, hyperlink.Receive())); 581 EXPECT_EQ(S_OK, root_obj->get_hyperlink(0, hyperlink.GetAddressOf()));
579 EXPECT_EQ(S_OK, hyperlink.CopyTo(hypertext.Receive())); 582 EXPECT_EQ(S_OK, hyperlink.CopyTo(hypertext.GetAddressOf()));
580 EXPECT_EQ(S_OK, 583 EXPECT_EQ(S_OK,
581 hypertext->get_text(0, IA2_TEXT_OFFSET_LENGTH, text.Receive())); 584 hypertext->get_text(0, IA2_TEXT_OFFSET_LENGTH, text.Receive()));
582 EXPECT_STREQ(combo_box_value.c_str(), text); 585 EXPECT_STREQ(combo_box_value.c_str(), text);
583 text.Reset(); 586 text.Reset();
584 hyperlink.Reset(); 587 hyperlink.Reset();
585 hypertext.Reset(); 588 hypertext.Reset();
586 589
587 // Get the text of the check box. 590 // Get the text of the check box.
588 // It should be its name. 591 // It should be its name.
589 EXPECT_EQ(S_OK, root_obj->get_hyperlink(1, hyperlink.Receive())); 592 EXPECT_EQ(S_OK, root_obj->get_hyperlink(1, hyperlink.GetAddressOf()));
590 EXPECT_EQ(S_OK, hyperlink.CopyTo(hypertext.Receive())); 593 EXPECT_EQ(S_OK, hyperlink.CopyTo(hypertext.GetAddressOf()));
591 EXPECT_EQ(S_OK, 594 EXPECT_EQ(S_OK,
592 hypertext->get_text(0, IA2_TEXT_OFFSET_LENGTH, text.Receive())); 595 hypertext->get_text(0, IA2_TEXT_OFFSET_LENGTH, text.Receive()));
593 EXPECT_STREQ(check_box_name.c_str(), text); 596 EXPECT_STREQ(check_box_name.c_str(), text);
594 text.Reset(); 597 text.Reset();
595 hyperlink.Reset(); 598 hyperlink.Reset();
596 hypertext.Reset(); 599 hypertext.Reset();
597 600
598 // Get the text of the button. 601 // Get the text of the button.
599 EXPECT_EQ(S_OK, root_obj->get_hyperlink(2, hyperlink.Receive())); 602 EXPECT_EQ(S_OK, root_obj->get_hyperlink(2, hyperlink.GetAddressOf()));
600 EXPECT_EQ(S_OK, hyperlink.CopyTo(hypertext.Receive())); 603 EXPECT_EQ(S_OK, hyperlink.CopyTo(hypertext.GetAddressOf()));
601 EXPECT_EQ(S_OK, 604 EXPECT_EQ(S_OK,
602 hypertext->get_text(0, IA2_TEXT_OFFSET_LENGTH, text.Receive())); 605 hypertext->get_text(0, IA2_TEXT_OFFSET_LENGTH, text.Receive()));
603 EXPECT_STREQ(button_text_name.c_str(), text); 606 EXPECT_STREQ(button_text_name.c_str(), text);
604 text.Reset(); 607 text.Reset();
605 hyperlink.Reset(); 608 hyperlink.Reset();
606 hypertext.Reset(); 609 hypertext.Reset();
607 610
608 // Get the text of the link. 611 // Get the text of the link.
609 EXPECT_EQ(S_OK, root_obj->get_hyperlink(3, hyperlink.Receive())); 612 EXPECT_EQ(S_OK, root_obj->get_hyperlink(3, hyperlink.GetAddressOf()));
610 EXPECT_EQ(S_OK, hyperlink.CopyTo(hypertext.Receive())); 613 EXPECT_EQ(S_OK, hyperlink.CopyTo(hypertext.GetAddressOf()));
611 EXPECT_EQ(S_OK, hypertext->get_text(0, 4, text.Receive())); 614 EXPECT_EQ(S_OK, hypertext->get_text(0, 4, text.Receive()));
612 EXPECT_STREQ(link_text_name.c_str(), text); 615 EXPECT_STREQ(link_text_name.c_str(), text);
613 text.Reset(); 616 text.Reset();
614 hyperlink.Reset(); 617 hyperlink.Reset();
615 hypertext.Reset(); 618 hypertext.Reset();
616 619
617 long hyperlink_index; 620 long hyperlink_index;
618 EXPECT_EQ(S_FALSE, root_obj->get_hyperlinkIndex(0, &hyperlink_index)); 621 EXPECT_EQ(S_FALSE, root_obj->get_hyperlinkIndex(0, &hyperlink_index));
619 EXPECT_EQ(-1, hyperlink_index); 622 EXPECT_EQ(-1, hyperlink_index);
620 // Invalid arguments should not be modified. 623 // Invalid arguments should not be modified.
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 BrowserAccessibilityWin* textarea_accessible = 1048 BrowserAccessibilityWin* textarea_accessible =
1046 ToBrowserAccessibilityWin(root_accessible->PlatformGetChild(0)); 1049 ToBrowserAccessibilityWin(root_accessible->PlatformGetChild(0));
1047 ASSERT_NE(nullptr, textarea_accessible); 1050 ASSERT_NE(nullptr, textarea_accessible);
1048 BrowserAccessibilityWin* text_field_accessible = 1051 BrowserAccessibilityWin* text_field_accessible =
1049 ToBrowserAccessibilityWin(root_accessible->PlatformGetChild(1)); 1052 ToBrowserAccessibilityWin(root_accessible->PlatformGetChild(1));
1050 ASSERT_NE(nullptr, text_field_accessible); 1053 ASSERT_NE(nullptr, text_field_accessible);
1051 1054
1052 base::win::ScopedComPtr<IAccessibleText> textarea_object; 1055 base::win::ScopedComPtr<IAccessibleText> textarea_object;
1053 EXPECT_HRESULT_SUCCEEDED(textarea_accessible->GetCOM()->QueryInterface( 1056 EXPECT_HRESULT_SUCCEEDED(textarea_accessible->GetCOM()->QueryInterface(
1054 IID_IAccessibleText, 1057 IID_IAccessibleText,
1055 reinterpret_cast<void**>(textarea_object.Receive()))); 1058 reinterpret_cast<void**>(textarea_object.GetAddressOf())));
1056 base::win::ScopedComPtr<IAccessibleText> text_field_object; 1059 base::win::ScopedComPtr<IAccessibleText> text_field_object;
1057 EXPECT_HRESULT_SUCCEEDED(text_field_accessible->GetCOM()->QueryInterface( 1060 EXPECT_HRESULT_SUCCEEDED(text_field_accessible->GetCOM()->QueryInterface(
1058 IID_IAccessibleText, 1061 IID_IAccessibleText,
1059 reinterpret_cast<void**>(text_field_object.Receive()))); 1062 reinterpret_cast<void**>(text_field_object.GetAddressOf())));
1060 1063
1061 LONG offset = 0; 1064 LONG offset = 0;
1062 while (offset < static_cast<LONG>(text.length())) { 1065 while (offset < static_cast<LONG>(text.length())) {
1063 LONG start, end; 1066 LONG start, end;
1064 base::win::ScopedBstr word; 1067 base::win::ScopedBstr word;
1065 EXPECT_EQ(S_OK, 1068 EXPECT_EQ(S_OK,
1066 textarea_object->get_textAtOffset(offset, IA2_TEXT_BOUNDARY_WORD, 1069 textarea_object->get_textAtOffset(offset, IA2_TEXT_BOUNDARY_WORD,
1067 &start, &end, word.Receive())); 1070 &start, &end, word.Receive()));
1068 EXPECT_EQ(offset, start); 1071 EXPECT_EQ(offset, start);
1069 EXPECT_LT(offset, end); 1072 EXPECT_LT(offset, end);
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
1533 1536
1534 base::win::ScopedComPtr<IAccessibleHyperlink> hyperlink; 1537 base::win::ScopedComPtr<IAccessibleHyperlink> hyperlink;
1535 base::win::ScopedVariant anchor; 1538 base::win::ScopedVariant anchor;
1536 base::win::ScopedVariant anchor_target; 1539 base::win::ScopedVariant anchor_target;
1537 base::win::ScopedBstr bstr; 1540 base::win::ScopedBstr bstr;
1538 1541
1539 base::string16 div_hypertext(L"Click "); 1542 base::string16 div_hypertext(L"Click ");
1540 div_hypertext.push_back(BrowserAccessibilityComWin::kEmbeddedCharacter); 1543 div_hypertext.push_back(BrowserAccessibilityComWin::kEmbeddedCharacter);
1541 1544
1542 // div_accessible and link_accessible are the only IA2 hyperlinks. 1545 // div_accessible and link_accessible are the only IA2 hyperlinks.
1543 EXPECT_HRESULT_FAILED(root_accessible->GetCOM()->QueryInterface( 1546 EXPECT_HRESULT_FAILED(
1544 IID_IAccessibleHyperlink, reinterpret_cast<void**>(hyperlink.Receive()))); 1547 root_accessible->GetCOM()->QueryInterface(IID_PPV_ARGS(&hyperlink)));
1545 hyperlink.Reset(); 1548 hyperlink.Reset();
1546 EXPECT_HRESULT_SUCCEEDED(div_accessible->GetCOM()->QueryInterface( 1549 EXPECT_HRESULT_SUCCEEDED(
1547 IID_IAccessibleHyperlink, reinterpret_cast<void**>(hyperlink.Receive()))); 1550 div_accessible->GetCOM()->QueryInterface(IID_PPV_ARGS(&hyperlink)));
1548 hyperlink.Reset(); 1551 hyperlink.Reset();
1549 EXPECT_HRESULT_FAILED(text_accessible->GetCOM()->QueryInterface( 1552 EXPECT_HRESULT_FAILED(
1550 IID_IAccessibleHyperlink, reinterpret_cast<void**>(hyperlink.Receive()))); 1553 text_accessible->GetCOM()->QueryInterface(IID_PPV_ARGS(&hyperlink)));
1551 hyperlink.Reset(); 1554 hyperlink.Reset();
1552 EXPECT_HRESULT_SUCCEEDED(link_accessible->GetCOM()->QueryInterface( 1555 EXPECT_HRESULT_SUCCEEDED(
1553 IID_IAccessibleHyperlink, reinterpret_cast<void**>(hyperlink.Receive()))); 1556 link_accessible->GetCOM()->QueryInterface(IID_PPV_ARGS(&hyperlink)));
1554 hyperlink.Reset(); 1557 hyperlink.Reset();
1555 1558
1556 EXPECT_HRESULT_SUCCEEDED(root_accessible->GetCOM()->nActions(&n_actions)); 1559 EXPECT_HRESULT_SUCCEEDED(root_accessible->GetCOM()->nActions(&n_actions));
1557 EXPECT_EQ(0, n_actions); 1560 EXPECT_EQ(0, n_actions);
1558 EXPECT_HRESULT_SUCCEEDED(div_accessible->GetCOM()->nActions(&n_actions)); 1561 EXPECT_HRESULT_SUCCEEDED(div_accessible->GetCOM()->nActions(&n_actions));
1559 EXPECT_EQ(1, n_actions); 1562 EXPECT_EQ(1, n_actions);
1560 EXPECT_HRESULT_SUCCEEDED(text_accessible->GetCOM()->nActions(&n_actions)); 1563 EXPECT_HRESULT_SUCCEEDED(text_accessible->GetCOM()->nActions(&n_actions));
1561 EXPECT_EQ(0, n_actions); 1564 EXPECT_EQ(0, n_actions);
1562 EXPECT_HRESULT_SUCCEEDED(link_accessible->GetCOM()->nActions(&n_actions)); 1565 EXPECT_HRESULT_SUCCEEDED(link_accessible->GetCOM()->nActions(&n_actions));
1563 EXPECT_EQ(1, n_actions); 1566 EXPECT_EQ(1, n_actions);
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after
2213 int32_t child_unique_id_2 = child->unique_id(); 2216 int32_t child_unique_id_2 = child->unique_id();
2214 2217
2215 // The nodes in the new tree should not have the same ids. 2218 // The nodes in the new tree should not have the same ids.
2216 EXPECT_NE(root_unique_id, root_unique_id_2); 2219 EXPECT_NE(root_unique_id, root_unique_id_2);
2217 EXPECT_NE(child_unique_id, child_unique_id_2); 2220 EXPECT_NE(child_unique_id, child_unique_id_2);
2218 2221
2219 // Trying to access the unique IDs of the old, deleted objects should fail. 2222 // Trying to access the unique IDs of the old, deleted objects should fail.
2220 base::win::ScopedVariant old_root_variant(-root_unique_id); 2223 base::win::ScopedVariant old_root_variant(-root_unique_id);
2221 base::win::ScopedComPtr<IDispatch> old_root_dispatch; 2224 base::win::ScopedComPtr<IDispatch> old_root_dispatch;
2222 HRESULT hr = ToBrowserAccessibilityWin(root)->GetCOM()->get_accChild( 2225 HRESULT hr = ToBrowserAccessibilityWin(root)->GetCOM()->get_accChild(
2223 old_root_variant, old_root_dispatch.Receive()); 2226 old_root_variant, old_root_dispatch.GetAddressOf());
2224 EXPECT_EQ(E_INVALIDARG, hr); 2227 EXPECT_EQ(E_INVALIDARG, hr);
2225 2228
2226 base::win::ScopedVariant old_child_variant(-child_unique_id); 2229 base::win::ScopedVariant old_child_variant(-child_unique_id);
2227 base::win::ScopedComPtr<IDispatch> old_child_dispatch; 2230 base::win::ScopedComPtr<IDispatch> old_child_dispatch;
2228 hr = ToBrowserAccessibilityWin(root)->GetCOM()->get_accChild( 2231 hr = ToBrowserAccessibilityWin(root)->GetCOM()->get_accChild(
2229 old_child_variant, old_child_dispatch.Receive()); 2232 old_child_variant, old_child_dispatch.GetAddressOf());
2230 EXPECT_EQ(E_INVALIDARG, hr); 2233 EXPECT_EQ(E_INVALIDARG, hr);
2231 2234
2232 // Trying to access the unique IDs of the new objects should succeed. 2235 // Trying to access the unique IDs of the new objects should succeed.
2233 base::win::ScopedVariant new_root_variant(-root_unique_id_2); 2236 base::win::ScopedVariant new_root_variant(-root_unique_id_2);
2234 base::win::ScopedComPtr<IDispatch> new_root_dispatch; 2237 base::win::ScopedComPtr<IDispatch> new_root_dispatch;
2235 hr = ToBrowserAccessibilityWin(root)->GetCOM()->get_accChild( 2238 hr = ToBrowserAccessibilityWin(root)->GetCOM()->get_accChild(
2236 new_root_variant, new_root_dispatch.Receive()); 2239 new_root_variant, new_root_dispatch.GetAddressOf());
2237 EXPECT_EQ(S_OK, hr); 2240 EXPECT_EQ(S_OK, hr);
2238 2241
2239 base::win::ScopedVariant new_child_variant(-child_unique_id_2); 2242 base::win::ScopedVariant new_child_variant(-child_unique_id_2);
2240 base::win::ScopedComPtr<IDispatch> new_child_dispatch; 2243 base::win::ScopedComPtr<IDispatch> new_child_dispatch;
2241 hr = ToBrowserAccessibilityWin(root)->GetCOM()->get_accChild( 2244 hr = ToBrowserAccessibilityWin(root)->GetCOM()->get_accChild(
2242 new_child_variant, new_child_dispatch.Receive()); 2245 new_child_variant, new_child_dispatch.GetAddressOf());
2243 EXPECT_EQ(S_OK, hr); 2246 EXPECT_EQ(S_OK, hr);
2244 } 2247 }
2245 2248
2246 TEST_F(BrowserAccessibilityTest, AccChildOnlyReturnsDescendants) { 2249 TEST_F(BrowserAccessibilityTest, AccChildOnlyReturnsDescendants) {
2247 ui::AXNodeData root_node; 2250 ui::AXNodeData root_node;
2248 root_node.id = 1; 2251 root_node.id = 1;
2249 root_node.role = ui::AX_ROLE_ROOT_WEB_AREA; 2252 root_node.role = ui::AX_ROLE_ROOT_WEB_AREA;
2250 2253
2251 ui::AXNodeData child_node; 2254 ui::AXNodeData child_node;
2252 child_node.id = 2; 2255 child_node.id = 2;
2253 root_node.child_ids.push_back(2); 2256 root_node.child_ids.push_back(2);
2254 2257
2255 std::unique_ptr<BrowserAccessibilityManagerWin> manager( 2258 std::unique_ptr<BrowserAccessibilityManagerWin> manager(
2256 new BrowserAccessibilityManagerWin( 2259 new BrowserAccessibilityManagerWin(
2257 MakeAXTreeUpdate(root_node, child_node), nullptr, 2260 MakeAXTreeUpdate(root_node, child_node), nullptr,
2258 new BrowserAccessibilityFactory())); 2261 new BrowserAccessibilityFactory()));
2259 2262
2260 BrowserAccessibility* root = manager->GetRoot(); 2263 BrowserAccessibility* root = manager->GetRoot();
2261 BrowserAccessibility* child = root->PlatformGetChild(0); 2264 BrowserAccessibility* child = root->PlatformGetChild(0);
2262 2265
2263 base::win::ScopedVariant root_unique_id_variant(-root->unique_id()); 2266 base::win::ScopedVariant root_unique_id_variant(-root->unique_id());
2264 base::win::ScopedComPtr<IDispatch> result; 2267 base::win::ScopedComPtr<IDispatch> result;
2265 EXPECT_EQ(E_INVALIDARG, 2268 EXPECT_EQ(E_INVALIDARG,
2266 ToBrowserAccessibilityWin(child)->GetCOM()->get_accChild( 2269 ToBrowserAccessibilityWin(child)->GetCOM()->get_accChild(
2267 root_unique_id_variant, result.Receive())); 2270 root_unique_id_variant, result.GetAddressOf()));
2268 2271
2269 base::win::ScopedVariant child_unique_id_variant(-child->unique_id()); 2272 base::win::ScopedVariant child_unique_id_variant(-child->unique_id());
2270 EXPECT_EQ(S_OK, ToBrowserAccessibilityWin(root)->GetCOM()->get_accChild( 2273 EXPECT_EQ(S_OK, ToBrowserAccessibilityWin(root)->GetCOM()->get_accChild(
2271 child_unique_id_variant, result.Receive())); 2274 child_unique_id_variant, result.GetAddressOf()));
2272 } 2275 }
2273 2276
2274 TEST_F(BrowserAccessibilityTest, TestIAccessible2Relations) { 2277 TEST_F(BrowserAccessibilityTest, TestIAccessible2Relations) {
2275 ui::AXNodeData root; 2278 ui::AXNodeData root;
2276 root.id = 1; 2279 root.id = 1;
2277 root.role = ui::AX_ROLE_ROOT_WEB_AREA; 2280 root.role = ui::AX_ROLE_ROOT_WEB_AREA;
2278 // Reflexive relations should be ignored. 2281 // Reflexive relations should be ignored.
2279 std::vector<int32_t> describedby_ids = {1, 2, 3}; 2282 std::vector<int32_t> describedby_ids = {1, 2, 3};
2280 root.AddIntListAttribute(ui::AX_ATTR_DESCRIBEDBY_IDS, describedby_ids); 2283 root.AddIntListAttribute(ui::AX_ATTR_DESCRIBEDBY_IDS, describedby_ids);
2281 2284
(...skipping 28 matching lines...) Expand all
2310 base::win::ScopedBstr relation_type; 2313 base::win::ScopedBstr relation_type;
2311 base::win::ScopedComPtr<IAccessibleRelation> describedby_relation; 2314 base::win::ScopedComPtr<IAccessibleRelation> describedby_relation;
2312 base::win::ScopedComPtr<IAccessibleRelation> description_for_relation; 2315 base::win::ScopedComPtr<IAccessibleRelation> description_for_relation;
2313 base::win::ScopedComPtr<IUnknown> target; 2316 base::win::ScopedComPtr<IUnknown> target;
2314 base::win::ScopedComPtr<IAccessible2> ax_target; 2317 base::win::ScopedComPtr<IAccessible2> ax_target;
2315 2318
2316 EXPECT_HRESULT_SUCCEEDED(ax_root->GetCOM()->get_nRelations(&n_relations)); 2319 EXPECT_HRESULT_SUCCEEDED(ax_root->GetCOM()->get_nRelations(&n_relations));
2317 EXPECT_EQ(1, n_relations); 2320 EXPECT_EQ(1, n_relations);
2318 2321
2319 EXPECT_HRESULT_SUCCEEDED( 2322 EXPECT_HRESULT_SUCCEEDED(
2320 ax_root->GetCOM()->get_relation(0, describedby_relation.Receive())); 2323 ax_root->GetCOM()->get_relation(0, describedby_relation.GetAddressOf()));
2321 EXPECT_HRESULT_SUCCEEDED( 2324 EXPECT_HRESULT_SUCCEEDED(
2322 describedby_relation->get_relationType(relation_type.Receive())); 2325 describedby_relation->get_relationType(relation_type.Receive()));
2323 EXPECT_EQ(L"describedBy", base::string16(relation_type)); 2326 EXPECT_EQ(L"describedBy", base::string16(relation_type));
2324 relation_type.Reset(); 2327 relation_type.Reset();
2325 2328
2326 EXPECT_HRESULT_SUCCEEDED(describedby_relation->get_nTargets(&n_targets)); 2329 EXPECT_HRESULT_SUCCEEDED(describedby_relation->get_nTargets(&n_targets));
2327 EXPECT_EQ(2, n_targets); 2330 EXPECT_EQ(2, n_targets);
2328 2331
2329 EXPECT_HRESULT_SUCCEEDED( 2332 EXPECT_HRESULT_SUCCEEDED(
2330 describedby_relation->get_target(0, target.Receive())); 2333 describedby_relation->get_target(0, target.GetAddressOf()));
2331 target.CopyTo(ax_target.Receive()); 2334 target.CopyTo(ax_target.GetAddressOf());
2332 EXPECT_HRESULT_SUCCEEDED(ax_target->get_uniqueID(&unique_id)); 2335 EXPECT_HRESULT_SUCCEEDED(ax_target->get_uniqueID(&unique_id));
2333 EXPECT_EQ(-ax_child1->unique_id(), unique_id); 2336 EXPECT_EQ(-ax_child1->unique_id(), unique_id);
2334 ax_target.Reset(); 2337 ax_target.Reset();
2335 target.Reset(); 2338 target.Reset();
2336 2339
2337 EXPECT_HRESULT_SUCCEEDED( 2340 EXPECT_HRESULT_SUCCEEDED(
2338 describedby_relation->get_target(1, target.Receive())); 2341 describedby_relation->get_target(1, target.GetAddressOf()));
2339 target.CopyTo(ax_target.Receive()); 2342 target.CopyTo(ax_target.GetAddressOf());
2340 EXPECT_HRESULT_SUCCEEDED(ax_target->get_uniqueID(&unique_id)); 2343 EXPECT_HRESULT_SUCCEEDED(ax_target->get_uniqueID(&unique_id));
2341 EXPECT_EQ(-ax_child2->unique_id(), unique_id); 2344 EXPECT_EQ(-ax_child2->unique_id(), unique_id);
2342 ax_target.Reset(); 2345 ax_target.Reset();
2343 target.Reset(); 2346 target.Reset();
2344 describedby_relation.Reset(); 2347 describedby_relation.Reset();
2345 2348
2346 // Test the reverse relations. 2349 // Test the reverse relations.
2347 EXPECT_HRESULT_SUCCEEDED(ax_child1->GetCOM()->get_nRelations(&n_relations)); 2350 EXPECT_HRESULT_SUCCEEDED(ax_child1->GetCOM()->get_nRelations(&n_relations));
2348 EXPECT_EQ(1, n_relations); 2351 EXPECT_EQ(1, n_relations);
2349 2352
2350 EXPECT_HRESULT_SUCCEEDED( 2353 EXPECT_HRESULT_SUCCEEDED(ax_child1->GetCOM()->get_relation(
2351 ax_child1->GetCOM()->get_relation(0, description_for_relation.Receive())); 2354 0, description_for_relation.GetAddressOf()));
2352 EXPECT_HRESULT_SUCCEEDED( 2355 EXPECT_HRESULT_SUCCEEDED(
2353 description_for_relation->get_relationType(relation_type.Receive())); 2356 description_for_relation->get_relationType(relation_type.Receive()));
2354 EXPECT_EQ(L"descriptionFor", base::string16(relation_type)); 2357 EXPECT_EQ(L"descriptionFor", base::string16(relation_type));
2355 relation_type.Reset(); 2358 relation_type.Reset();
2356 2359
2357 EXPECT_HRESULT_SUCCEEDED(description_for_relation->get_nTargets(&n_targets)); 2360 EXPECT_HRESULT_SUCCEEDED(description_for_relation->get_nTargets(&n_targets));
2358 EXPECT_EQ(1, n_targets); 2361 EXPECT_EQ(1, n_targets);
2359 2362
2360 EXPECT_HRESULT_SUCCEEDED( 2363 EXPECT_HRESULT_SUCCEEDED(
2361 description_for_relation->get_target(0, target.Receive())); 2364 description_for_relation->get_target(0, target.GetAddressOf()));
2362 target.CopyTo(ax_target.Receive()); 2365 target.CopyTo(ax_target.GetAddressOf());
2363 EXPECT_HRESULT_SUCCEEDED(ax_target->get_uniqueID(&unique_id)); 2366 EXPECT_HRESULT_SUCCEEDED(ax_target->get_uniqueID(&unique_id));
2364 EXPECT_EQ(-ax_root->unique_id(), unique_id); 2367 EXPECT_EQ(-ax_root->unique_id(), unique_id);
2365 ax_target.Reset(); 2368 ax_target.Reset();
2366 target.Reset(); 2369 target.Reset();
2367 description_for_relation.Reset(); 2370 description_for_relation.Reset();
2368 2371
2369 EXPECT_HRESULT_SUCCEEDED(ax_child2->GetCOM()->get_nRelations(&n_relations)); 2372 EXPECT_HRESULT_SUCCEEDED(ax_child2->GetCOM()->get_nRelations(&n_relations));
2370 EXPECT_EQ(1, n_relations); 2373 EXPECT_EQ(1, n_relations);
2371 2374
2372 EXPECT_HRESULT_SUCCEEDED( 2375 EXPECT_HRESULT_SUCCEEDED(ax_child2->GetCOM()->get_relation(
2373 ax_child2->GetCOM()->get_relation(0, description_for_relation.Receive())); 2376 0, description_for_relation.GetAddressOf()));
2374 EXPECT_HRESULT_SUCCEEDED( 2377 EXPECT_HRESULT_SUCCEEDED(
2375 description_for_relation->get_relationType(relation_type.Receive())); 2378 description_for_relation->get_relationType(relation_type.Receive()));
2376 EXPECT_EQ(L"descriptionFor", base::string16(relation_type)); 2379 EXPECT_EQ(L"descriptionFor", base::string16(relation_type));
2377 relation_type.Reset(); 2380 relation_type.Reset();
2378 2381
2379 EXPECT_HRESULT_SUCCEEDED(description_for_relation->get_nTargets(&n_targets)); 2382 EXPECT_HRESULT_SUCCEEDED(description_for_relation->get_nTargets(&n_targets));
2380 EXPECT_EQ(1, n_targets); 2383 EXPECT_EQ(1, n_targets);
2381 2384
2382 EXPECT_HRESULT_SUCCEEDED( 2385 EXPECT_HRESULT_SUCCEEDED(
2383 description_for_relation->get_target(0, target.Receive())); 2386 description_for_relation->get_target(0, target.GetAddressOf()));
2384 target.CopyTo(ax_target.Receive()); 2387 target.CopyTo(ax_target.GetAddressOf());
2385 EXPECT_HRESULT_SUCCEEDED(ax_target->get_uniqueID(&unique_id)); 2388 EXPECT_HRESULT_SUCCEEDED(ax_target->get_uniqueID(&unique_id));
2386 EXPECT_EQ(-ax_root->unique_id(), unique_id); 2389 EXPECT_EQ(-ax_root->unique_id(), unique_id);
2387 ax_target.Reset(); 2390 ax_target.Reset();
2388 target.Reset(); 2391 target.Reset();
2389 2392
2390 // Try adding one more relation. 2393 // Try adding one more relation.
2391 std::vector<int32_t> labelledby_ids = {3}; 2394 std::vector<int32_t> labelledby_ids = {3};
2392 child1.AddIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS, labelledby_ids); 2395 child1.AddIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS, labelledby_ids);
2393 AXEventNotificationDetails event; 2396 AXEventNotificationDetails event;
2394 event.event_type = ui::AX_EVENT_ARIA_ATTRIBUTE_CHANGED; 2397 event.event_type = ui::AX_EVENT_ARIA_ATTRIBUTE_CHANGED;
2395 event.update.nodes.push_back(child1); 2398 event.update.nodes.push_back(child1);
2396 event.id = child1.id; 2399 event.id = child1.id;
2397 std::vector<AXEventNotificationDetails> events = {event}; 2400 std::vector<AXEventNotificationDetails> events = {event};
2398 manager->OnAccessibilityEvents(events); 2401 manager->OnAccessibilityEvents(events);
2399 2402
2400 EXPECT_HRESULT_SUCCEEDED(ax_child1->GetCOM()->get_nRelations(&n_relations)); 2403 EXPECT_HRESULT_SUCCEEDED(ax_child1->GetCOM()->get_nRelations(&n_relations));
2401 EXPECT_EQ(2, n_relations); 2404 EXPECT_EQ(2, n_relations);
2402 EXPECT_HRESULT_SUCCEEDED(ax_child2->GetCOM()->get_nRelations(&n_relations)); 2405 EXPECT_HRESULT_SUCCEEDED(ax_child2->GetCOM()->get_nRelations(&n_relations));
2403 EXPECT_EQ(2, n_relations); 2406 EXPECT_EQ(2, n_relations);
2404 } 2407 }
2405 2408
2406 } // namespace content 2409 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698