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

Side by Side Diff: chrome/browser/accessibility/browser_accessibility_manager_unittest.cc

Issue 8804001: Move a bunch of accessibility tests in chrome that have no chrome dependencies to content. We wan... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/accessibility/browser_accessibility_win_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/string16.h"
6 #include "base/utf_string_conversions.h"
7 #include "content/browser/accessibility/browser_accessibility.h"
8 #include "content/browser/accessibility/browser_accessibility_manager.h"
9 #include "content/common/view_messages.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "webkit/glue/webaccessibility.h"
12
13 using webkit_glue::WebAccessibility;
14
15 namespace {
16
17 // Subclass of BrowserAccessibility that counts the number of instances.
18 class CountedBrowserAccessibility : public BrowserAccessibility {
19 public:
20 CountedBrowserAccessibility() {
21 global_obj_count_++;
22 native_ref_count_ = 1;
23 }
24 virtual ~CountedBrowserAccessibility() {
25 global_obj_count_--;
26 }
27
28 virtual void NativeAddReference() OVERRIDE {
29 native_ref_count_++;
30 }
31
32 virtual void NativeReleaseReference() OVERRIDE {
33 native_ref_count_--;
34 if (native_ref_count_ == 0)
35 delete this;
36 }
37
38 int native_ref_count_;
39 static int global_obj_count_;
40 };
41
42 int CountedBrowserAccessibility::global_obj_count_ = 0;
43
44 // Factory that creates a CountedBrowserAccessibility.
45 class CountedBrowserAccessibilityFactory
46 : public BrowserAccessibilityFactory {
47 public:
48 virtual ~CountedBrowserAccessibilityFactory() {}
49 virtual BrowserAccessibility* Create() {
50 return new CountedBrowserAccessibility();
51 }
52 };
53
54 } // anonymous namespace
55
56 TEST(BrowserAccessibilityManagerTest, TestNoLeaks) {
57 // Create WebAccessibility objects for a simple document tree,
58 // representing the accessibility information used to initialize
59 // BrowserAccessibilityManager.
60 WebAccessibility button;
61 button.id = 2;
62 button.name = UTF8ToUTF16("Button");
63 button.role = WebAccessibility::ROLE_BUTTON;
64 button.state = 0;
65
66 WebAccessibility checkbox;
67 checkbox.id = 3;
68 checkbox.name = UTF8ToUTF16("Checkbox");
69 checkbox.role = WebAccessibility::ROLE_CHECKBOX;
70 checkbox.state = 0;
71
72 WebAccessibility root;
73 root.id = 1;
74 root.name = UTF8ToUTF16("Document");
75 root.role = WebAccessibility::ROLE_DOCUMENT;
76 root.state = 0;
77 root.children.push_back(button);
78 root.children.push_back(checkbox);
79
80 // Construct a BrowserAccessibilityManager with this WebAccessibility tree
81 // and a factory for an instance-counting BrowserAccessibility, and ensure
82 // that exactly 3 instances were created. Note that the manager takes
83 // ownership of the factory.
84 CountedBrowserAccessibility::global_obj_count_ = 0;
85 BrowserAccessibilityManager* manager =
86 BrowserAccessibilityManager::Create(
87 NULL,
88 root,
89 NULL,
90 new CountedBrowserAccessibilityFactory());
91
92 ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_);
93
94 // Delete the manager and test that all 3 instances are deleted.
95 delete manager;
96 ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
97
98 // Construct a manager again, and this time save references to two of
99 // the three nodes in the tree.
100 manager =
101 BrowserAccessibilityManager::Create(
102 NULL,
103 root,
104 NULL,
105 new CountedBrowserAccessibilityFactory());
106 ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_);
107
108 CountedBrowserAccessibility* root_accessible =
109 static_cast<CountedBrowserAccessibility*>(manager->GetRoot());
110 root_accessible->NativeAddReference();
111 CountedBrowserAccessibility* child1_accessible =
112 static_cast<CountedBrowserAccessibility*>(root_accessible->GetChild(1));
113 child1_accessible->NativeAddReference();
114
115 // Now delete the manager, and only one of the three nodes in the tree
116 // should be released.
117 delete manager;
118 ASSERT_EQ(2, CountedBrowserAccessibility::global_obj_count_);
119
120 // Release each of our references and make sure that each one results in
121 // the instance being deleted as its reference count hits zero.
122 root_accessible->NativeReleaseReference();
123 ASSERT_EQ(1, CountedBrowserAccessibility::global_obj_count_);
124 child1_accessible->NativeReleaseReference();
125 ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
126 }
127
128 TEST(BrowserAccessibilityManagerTest, TestReuseBrowserAccessibilityObjects) {
129 // Make sure that changes to a subtree reuse as many objects as possible.
130
131 // Tree 1:
132 //
133 // root
134 // child1
135 // child2
136 // child3
137
138 WebAccessibility tree1_child1;
139 tree1_child1.id = 2;
140 tree1_child1.name = UTF8ToUTF16("Child1");
141 tree1_child1.role = WebAccessibility::ROLE_BUTTON;
142 tree1_child1.state = 0;
143
144 WebAccessibility tree1_child2;
145 tree1_child2.id = 3;
146 tree1_child2.name = UTF8ToUTF16("Child2");
147 tree1_child2.role = WebAccessibility::ROLE_BUTTON;
148 tree1_child2.state = 0;
149
150 WebAccessibility tree1_child3;
151 tree1_child3.id = 4;
152 tree1_child3.name = UTF8ToUTF16("Child3");
153 tree1_child3.role = WebAccessibility::ROLE_BUTTON;
154 tree1_child3.state = 0;
155
156 WebAccessibility tree1_root;
157 tree1_root.id = 1;
158 tree1_root.name = UTF8ToUTF16("Document");
159 tree1_root.role = WebAccessibility::ROLE_DOCUMENT;
160 tree1_root.state = 0;
161 tree1_root.children.push_back(tree1_child1);
162 tree1_root.children.push_back(tree1_child2);
163 tree1_root.children.push_back(tree1_child3);
164
165 // Tree 2:
166 //
167 // root
168 // child0 <-- inserted
169 // child1
170 // child2
171 // <-- child3 deleted
172
173 WebAccessibility tree2_child0;
174 tree2_child0.id = 5;
175 tree2_child0.name = UTF8ToUTF16("Child0");
176 tree2_child0.role = WebAccessibility::ROLE_BUTTON;
177 tree2_child0.state = 0;
178
179 WebAccessibility tree2_child1;
180 tree2_child1.id = 2;
181 tree2_child1.name = UTF8ToUTF16("Child1");
182 tree2_child1.role = WebAccessibility::ROLE_BUTTON;
183 tree2_child1.state = 0;
184
185 WebAccessibility tree2_child2;
186 tree2_child2.id = 3;
187 tree2_child2.name = UTF8ToUTF16("Child2");
188 tree2_child2.role = WebAccessibility::ROLE_BUTTON;
189 tree2_child2.state = 0;
190
191 WebAccessibility tree2_root;
192 tree2_root.id = 1;
193 tree2_root.name = UTF8ToUTF16("DocumentChanged");
194 tree2_root.role = WebAccessibility::ROLE_DOCUMENT;
195 tree2_root.state = 0;
196 tree2_root.children.push_back(tree2_child0);
197 tree2_root.children.push_back(tree2_child1);
198 tree2_root.children.push_back(tree2_child2);
199
200 // Construct a BrowserAccessibilityManager with tree1.
201 CountedBrowserAccessibility::global_obj_count_ = 0;
202 BrowserAccessibilityManager* manager =
203 BrowserAccessibilityManager::Create(
204 NULL,
205 tree1_root,
206 NULL,
207 new CountedBrowserAccessibilityFactory());
208 ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_);
209
210 // Save references to all of the objects.
211 CountedBrowserAccessibility* root_accessible =
212 static_cast<CountedBrowserAccessibility*>(manager->GetRoot());
213 root_accessible->NativeAddReference();
214 CountedBrowserAccessibility* child1_accessible =
215 static_cast<CountedBrowserAccessibility*>(root_accessible->GetChild(0));
216 child1_accessible->NativeAddReference();
217 CountedBrowserAccessibility* child2_accessible =
218 static_cast<CountedBrowserAccessibility*>(root_accessible->GetChild(1));
219 child2_accessible->NativeAddReference();
220 CountedBrowserAccessibility* child3_accessible =
221 static_cast<CountedBrowserAccessibility*>(root_accessible->GetChild(2));
222 child3_accessible->NativeAddReference();
223
224 // Check the index in parent.
225 EXPECT_EQ(0, child1_accessible->index_in_parent());
226 EXPECT_EQ(1, child2_accessible->index_in_parent());
227 EXPECT_EQ(2, child3_accessible->index_in_parent());
228
229 // Process a notification containing the changed subtree.
230 std::vector<ViewHostMsg_AccessibilityNotification_Params> params;
231 params.push_back(ViewHostMsg_AccessibilityNotification_Params());
232 ViewHostMsg_AccessibilityNotification_Params* msg = &params[0];
233 msg->notification_type = ViewHostMsg_AccEvent::CHILDREN_CHANGED;
234 msg->acc_tree = tree2_root;
235 msg->includes_children = true;
236 msg->id = tree2_root.id;
237 manager->OnAccessibilityNotifications(params);
238
239 // There should be 5 objects now: the 4 from the new tree, plus the
240 // reference to child3 we kept.
241 EXPECT_EQ(5, CountedBrowserAccessibility::global_obj_count_);
242
243 // Check that our references to the root, child1, and child2 are still valid,
244 // but that the reference to child3 is now invalid.
245 EXPECT_TRUE(root_accessible->instance_active());
246 EXPECT_TRUE(child1_accessible->instance_active());
247 EXPECT_TRUE(child2_accessible->instance_active());
248 EXPECT_FALSE(child3_accessible->instance_active());
249
250 // Check that the index in parent has been updated.
251 EXPECT_EQ(1, child1_accessible->index_in_parent());
252 EXPECT_EQ(2, child2_accessible->index_in_parent());
253
254 // Release our references. The object count should only decrease by 1
255 // for child3.
256 root_accessible->NativeReleaseReference();
257 child1_accessible->NativeReleaseReference();
258 child2_accessible->NativeReleaseReference();
259 child3_accessible->NativeReleaseReference();
260
261 EXPECT_EQ(4, CountedBrowserAccessibility::global_obj_count_);
262
263 // Delete the manager and make sure all memory is cleaned up.
264 delete manager;
265 ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
266 }
267
268 TEST(BrowserAccessibilityManagerTest, TestReuseBrowserAccessibilityObjects2) {
269 // Similar to the test above, but with a more complicated tree.
270
271 // Tree 1:
272 //
273 // root
274 // container
275 // child1
276 // grandchild1
277 // child2
278 // grandchild2
279 // child3
280 // grandchild3
281
282 WebAccessibility tree1_grandchild1;
283 tree1_grandchild1.id = 4;
284 tree1_grandchild1.name = UTF8ToUTF16("GrandChild1");
285 tree1_grandchild1.role = WebAccessibility::ROLE_BUTTON;
286 tree1_grandchild1.state = 0;
287
288 WebAccessibility tree1_child1;
289 tree1_child1.id = 3;
290 tree1_child1.name = UTF8ToUTF16("Child1");
291 tree1_child1.role = WebAccessibility::ROLE_BUTTON;
292 tree1_child1.state = 0;
293 tree1_child1.children.push_back(tree1_grandchild1);
294
295 WebAccessibility tree1_grandchild2;
296 tree1_grandchild2.id = 6;
297 tree1_grandchild2.name = UTF8ToUTF16("GrandChild1");
298 tree1_grandchild2.role = WebAccessibility::ROLE_BUTTON;
299 tree1_grandchild2.state = 0;
300
301 WebAccessibility tree1_child2;
302 tree1_child2.id = 5;
303 tree1_child2.name = UTF8ToUTF16("Child2");
304 tree1_child2.role = WebAccessibility::ROLE_BUTTON;
305 tree1_child2.state = 0;
306 tree1_child2.children.push_back(tree1_grandchild2);
307
308 WebAccessibility tree1_grandchild3;
309 tree1_grandchild3.id = 8;
310 tree1_grandchild3.name = UTF8ToUTF16("GrandChild3");
311 tree1_grandchild3.role = WebAccessibility::ROLE_BUTTON;
312 tree1_grandchild3.state = 0;
313
314 WebAccessibility tree1_child3;
315 tree1_child3.id = 7;
316 tree1_child3.name = UTF8ToUTF16("Child3");
317 tree1_child3.role = WebAccessibility::ROLE_BUTTON;
318 tree1_child3.state = 0;
319 tree1_child3.children.push_back(tree1_grandchild3);
320
321 WebAccessibility tree1_container;
322 tree1_container.id = 2;
323 tree1_container.name = UTF8ToUTF16("Container");
324 tree1_container.role = WebAccessibility::ROLE_GROUP;
325 tree1_container.state = 0;
326 tree1_container.children.push_back(tree1_child1);
327 tree1_container.children.push_back(tree1_child2);
328 tree1_container.children.push_back(tree1_child3);
329
330 WebAccessibility tree1_root;
331 tree1_root.id = 1;
332 tree1_root.name = UTF8ToUTF16("Document");
333 tree1_root.role = WebAccessibility::ROLE_DOCUMENT;
334 tree1_root.state = 0;
335 tree1_root.children.push_back(tree1_container);
336
337 // Tree 2:
338 //
339 // root
340 // container
341 // child0 <-- inserted
342 // grandchild0 <--
343 // child1
344 // grandchild1
345 // child2
346 // grandchild2
347 // <-- child3 (and grandchild3) deleted
348
349 WebAccessibility tree2_grandchild0;
350 tree2_grandchild0.id = 9;
351 tree2_grandchild0.name = UTF8ToUTF16("GrandChild0");
352 tree2_grandchild0.role = WebAccessibility::ROLE_BUTTON;
353 tree2_grandchild0.state = 0;
354
355 WebAccessibility tree2_child0;
356 tree2_child0.id = 10;
357 tree2_child0.name = UTF8ToUTF16("Child0");
358 tree2_child0.role = WebAccessibility::ROLE_BUTTON;
359 tree2_child0.state = 0;
360 tree2_child0.children.push_back(tree2_grandchild0);
361
362 WebAccessibility tree2_grandchild1;
363 tree2_grandchild1.id = 4;
364 tree2_grandchild1.name = UTF8ToUTF16("GrandChild1");
365 tree2_grandchild1.role = WebAccessibility::ROLE_BUTTON;
366 tree2_grandchild1.state = 0;
367
368 WebAccessibility tree2_child1;
369 tree2_child1.id = 3;
370 tree2_child1.name = UTF8ToUTF16("Child1");
371 tree2_child1.role = WebAccessibility::ROLE_BUTTON;
372 tree2_child1.state = 0;
373 tree2_child1.children.push_back(tree2_grandchild1);
374
375 WebAccessibility tree2_grandchild2;
376 tree2_grandchild2.id = 6;
377 tree2_grandchild2.name = UTF8ToUTF16("GrandChild1");
378 tree2_grandchild2.role = WebAccessibility::ROLE_BUTTON;
379 tree2_grandchild2.state = 0;
380
381 WebAccessibility tree2_child2;
382 tree2_child2.id = 5;
383 tree2_child2.name = UTF8ToUTF16("Child2");
384 tree2_child2.role = WebAccessibility::ROLE_BUTTON;
385 tree2_child2.state = 0;
386 tree2_child2.children.push_back(tree2_grandchild2);
387
388 WebAccessibility tree2_container;
389 tree2_container.id = 2;
390 tree2_container.name = UTF8ToUTF16("Container");
391 tree2_container.role = WebAccessibility::ROLE_GROUP;
392 tree2_container.state = 0;
393 tree2_container.children.push_back(tree2_child0);
394 tree2_container.children.push_back(tree2_child1);
395 tree2_container.children.push_back(tree2_child2);
396
397 WebAccessibility tree2_root;
398 tree2_root.id = 1;
399 tree2_root.name = UTF8ToUTF16("Document");
400 tree2_root.role = WebAccessibility::ROLE_DOCUMENT;
401 tree2_root.state = 0;
402 tree2_root.children.push_back(tree2_container);
403
404 // Construct a BrowserAccessibilityManager with tree1.
405 CountedBrowserAccessibility::global_obj_count_ = 0;
406 BrowserAccessibilityManager* manager =
407 BrowserAccessibilityManager::Create(
408 NULL,
409 tree1_root,
410 NULL,
411 new CountedBrowserAccessibilityFactory());
412 ASSERT_EQ(8, CountedBrowserAccessibility::global_obj_count_);
413
414 // Save references to some objects.
415 CountedBrowserAccessibility* root_accessible =
416 static_cast<CountedBrowserAccessibility*>(manager->GetRoot());
417 root_accessible->NativeAddReference();
418 CountedBrowserAccessibility* container_accessible =
419 static_cast<CountedBrowserAccessibility*>(root_accessible->GetChild(0));
420 container_accessible->NativeAddReference();
421 CountedBrowserAccessibility* child2_accessible =
422 static_cast<CountedBrowserAccessibility*>(
423 container_accessible->GetChild(1));
424 child2_accessible->NativeAddReference();
425 CountedBrowserAccessibility* child3_accessible =
426 static_cast<CountedBrowserAccessibility*>(
427 container_accessible->GetChild(2));
428 child3_accessible->NativeAddReference();
429
430 // Check the index in parent.
431 EXPECT_EQ(1, child2_accessible->index_in_parent());
432 EXPECT_EQ(2, child3_accessible->index_in_parent());
433
434 // Process a notification containing the changed subtree rooted at
435 // the container.
436 std::vector<ViewHostMsg_AccessibilityNotification_Params> params;
437 params.push_back(ViewHostMsg_AccessibilityNotification_Params());
438 ViewHostMsg_AccessibilityNotification_Params* msg = &params[0];
439 msg->notification_type = ViewHostMsg_AccEvent::CHILDREN_CHANGED;
440 msg->acc_tree = tree2_container;
441 msg->includes_children = true;
442 msg->id = tree2_container.id;
443 manager->OnAccessibilityNotifications(params);
444
445 // There should be 9 objects now: the 8 from the new tree, plus the
446 // reference to child3 we kept.
447 EXPECT_EQ(9, CountedBrowserAccessibility::global_obj_count_);
448
449 // Check that our references to the root and container and child2 are
450 // still valid, but that the reference to child3 is now invalid.
451 EXPECT_TRUE(root_accessible->instance_active());
452 EXPECT_TRUE(container_accessible->instance_active());
453 EXPECT_TRUE(child2_accessible->instance_active());
454 EXPECT_FALSE(child3_accessible->instance_active());
455
456 // Ensure that we retain the parent of the detached subtree.
457 EXPECT_EQ(root_accessible, container_accessible->parent());
458 EXPECT_EQ(0, container_accessible->index_in_parent());
459
460 // Check that the index in parent has been updated.
461 EXPECT_EQ(2, child2_accessible->index_in_parent());
462
463 // Release our references. The object count should only decrease by 1
464 // for child3.
465 root_accessible->NativeReleaseReference();
466 container_accessible->NativeReleaseReference();
467 child2_accessible->NativeReleaseReference();
468 child3_accessible->NativeReleaseReference();
469
470 EXPECT_EQ(8, CountedBrowserAccessibility::global_obj_count_);
471
472 // Delete the manager and make sure all memory is cleaned up.
473 delete manager;
474 ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
475 }
476
477 TEST(BrowserAccessibilityManagerTest, TestMoveChildUp) {
478 // Tree 1:
479 //
480 // 1
481 // 2
482 // 3
483 // 4
484
485 WebAccessibility tree1_4;
486 tree1_4.id = 4;
487 tree1_4.state = 0;
488
489 WebAccessibility tree1_3;
490 tree1_3.id = 3;
491 tree1_3.state = 0;
492 tree1_3.children.push_back(tree1_4);
493
494 WebAccessibility tree1_2;
495 tree1_2.id = 2;
496 tree1_2.state = 0;
497
498 WebAccessibility tree1_1;
499 tree1_1.id = 1;
500 tree1_1.state = 0;
501 tree1_1.children.push_back(tree1_2);
502 tree1_1.children.push_back(tree1_3);
503
504 // Tree 2:
505 //
506 // 1
507 // 4 <-- moves up a level and gains child
508 // 6 <-- new
509 // 5 <-- new
510
511 WebAccessibility tree2_6;
512 tree2_6.id = 6;
513 tree2_6.state = 0;
514
515 WebAccessibility tree2_5;
516 tree2_5.id = 5;
517 tree2_5.state = 0;
518
519 WebAccessibility tree2_4;
520 tree2_4.id = 4;
521 tree2_4.state = 0;
522 tree2_4.children.push_back(tree2_6);
523
524 WebAccessibility tree2_1;
525 tree2_1.id = 1;
526 tree2_1.state = 0;
527 tree2_1.children.push_back(tree2_4);
528 tree2_1.children.push_back(tree2_5);
529
530 // Construct a BrowserAccessibilityManager with tree1.
531 CountedBrowserAccessibility::global_obj_count_ = 0;
532 BrowserAccessibilityManager* manager =
533 BrowserAccessibilityManager::Create(
534 NULL,
535 tree1_1,
536 NULL,
537 new CountedBrowserAccessibilityFactory());
538 ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_);
539
540 // Process a notification containing the changed subtree.
541 std::vector<ViewHostMsg_AccessibilityNotification_Params> params;
542 params.push_back(ViewHostMsg_AccessibilityNotification_Params());
543 ViewHostMsg_AccessibilityNotification_Params* msg = &params[0];
544 msg->notification_type = ViewHostMsg_AccEvent::CHILDREN_CHANGED;
545 msg->acc_tree = tree2_1;
546 msg->includes_children = true;
547 msg->id = tree2_1.id;
548 manager->OnAccessibilityNotifications(params);
549
550 // There should be 4 objects now.
551 EXPECT_EQ(4, CountedBrowserAccessibility::global_obj_count_);
552
553 // Delete the manager and make sure all memory is cleaned up.
554 delete manager;
555 ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
556 }
557
558 TEST(BrowserAccessibilityManagerTest, TestCreateEmptyDocument) {
559 // Try creating an empty document with busy state.
560 scoped_ptr<BrowserAccessibilityManager> manager;
561 manager.reset(BrowserAccessibilityManager::CreateEmptyDocument(
562 NULL,
563 WebAccessibility::STATE_BUSY,
564 NULL,
565 new CountedBrowserAccessibilityFactory()));
566
567 // Verify the root is as we expect by default.
568 BrowserAccessibility* root = manager->GetRoot();
569 EXPECT_EQ(0, root->renderer_id());
570 EXPECT_EQ(WebAccessibility::ROLE_ROOT_WEB_AREA, root->role());
571 EXPECT_EQ(WebAccessibility::STATE_BUSY, root->state());
572
573 // Tree with a child textfield.
574 WebAccessibility tree1_1;
575 tree1_1.id = 1;
576 tree1_1.role = WebAccessibility::ROLE_ROOT_WEB_AREA;
577
578 WebAccessibility tree1_2;
579 tree1_2.id = 2;
580 tree1_2.role = WebAccessibility::ROLE_TEXT_FIELD;
581
582 tree1_1.children.push_back(tree1_2);
583
584 // Process a load complete.
585 std::vector<ViewHostMsg_AccessibilityNotification_Params> params;
586 params.push_back(ViewHostMsg_AccessibilityNotification_Params());
587 ViewHostMsg_AccessibilityNotification_Params* msg = &params[0];
588 msg->notification_type = ViewHostMsg_AccEvent::LOAD_COMPLETE;
589 msg->acc_tree = tree1_1;
590 msg->includes_children = true;
591 msg->id = tree1_1.id;
592 manager->OnAccessibilityNotifications(params);
593
594 // Save for later comparison.
595 BrowserAccessibility* acc1_2 = manager->GetFromRendererID(2);
596
597 // Verify the root has changed.
598 EXPECT_NE(root, manager->GetRoot());
599
600 // And the proper child remains.
601 EXPECT_EQ(WebAccessibility::ROLE_TEXT_FIELD, acc1_2->role());
602 EXPECT_EQ(2, acc1_2->renderer_id());
603
604 // Tree with a child button.
605 WebAccessibility tree2_1;
606 tree2_1.id = 1;
607 tree2_1.role = WebAccessibility::ROLE_ROOT_WEB_AREA;
608
609 WebAccessibility tree2_2;
610 tree2_2.id = 3;
611 tree2_2.role = WebAccessibility::ROLE_BUTTON;
612
613 tree2_1.children.push_back(tree2_2);
614
615 msg->acc_tree = tree2_1;
616 msg->includes_children = true;
617 msg->id = tree2_1.id;
618
619 // Fire another load complete.
620 manager->OnAccessibilityNotifications(params);
621
622 BrowserAccessibility* acc2_2 = manager->GetFromRendererID(3);
623
624 // Verify the root has changed.
625 EXPECT_NE(root, manager->GetRoot());
626
627 // And the new child exists.
628 EXPECT_EQ(WebAccessibility::ROLE_BUTTON, acc2_2->role());
629 EXPECT_EQ(3, acc2_2->renderer_id());
630
631 // Ensure we properly cleaned up.
632 manager.reset();
633 ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
634 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/accessibility/browser_accessibility_win_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698