| Index: content/renderer/accessibility/renderer_accessibility_browsertest.cc
|
| diff --git a/content/renderer/accessibility/renderer_accessibility_browsertest.cc b/content/renderer/accessibility/renderer_accessibility_browsertest.cc
|
| index f1b559b4ae504f1d1662c142f0076695e8698a5d..95f2c42a61a1d4d6da89a650756e2c932cd648b6 100644
|
| --- a/content/renderer/accessibility/renderer_accessibility_browsertest.cc
|
| +++ b/content/renderer/accessibility/renderer_accessibility_browsertest.cc
|
| @@ -23,12 +23,36 @@
|
| class TestRendererAccessibilityComplete : public RendererAccessibilityComplete {
|
| public:
|
| explicit TestRendererAccessibilityComplete(RenderViewImpl* render_view)
|
| - : RendererAccessibilityComplete(render_view) {
|
| + : RendererAccessibilityComplete(render_view),
|
| + browser_tree_node_count_(0) {
|
| + }
|
| +
|
| + int browser_tree_node_count() { return browser_tree_node_count_; }
|
| +
|
| + struct TestBrowserTreeNode : public BrowserTreeNode {
|
| + TestBrowserTreeNode(TestRendererAccessibilityComplete* owner)
|
| + : owner_(owner) {
|
| + owner_->browser_tree_node_count_++;
|
| + }
|
| +
|
| + virtual ~TestBrowserTreeNode() {
|
| + owner_->browser_tree_node_count_--;
|
| + }
|
| +
|
| + private:
|
| + TestRendererAccessibilityComplete* owner_;
|
| + };
|
| +
|
| + virtual BrowserTreeNode* CreateBrowserTreeNode() OVERRIDE {
|
| + return new TestBrowserTreeNode(this);
|
| }
|
|
|
| void SendPendingAccessibilityEvents() {
|
| RendererAccessibilityComplete::SendPendingAccessibilityEvents();
|
| }
|
| +
|
| +private:
|
| + int browser_tree_node_count_;
|
| };
|
|
|
| class RendererAccessibilityTest : public RenderViewTest {
|
| @@ -66,7 +90,7 @@
|
| int CountAccessibilityNodesSentToBrowser() {
|
| AccessibilityHostMsg_EventParams event;
|
| GetLastAccEvent(&event);
|
| - return event.update.nodes.size();
|
| + return event.nodes.size();
|
| }
|
|
|
| protected:
|
| @@ -109,15 +133,15 @@
|
| EXPECT_EQ(event.event_type,
|
| ui::AX_EVENT_LAYOUT_COMPLETE);
|
| EXPECT_EQ(event.id, 1);
|
| - EXPECT_EQ(event.update.nodes.size(), 2U);
|
| - EXPECT_EQ(event.update.nodes[0].id, 1);
|
| - EXPECT_EQ(event.update.nodes[0].role,
|
| + EXPECT_EQ(event.nodes.size(), 2U);
|
| + EXPECT_EQ(event.nodes[0].id, 1);
|
| + EXPECT_EQ(event.nodes[0].role,
|
| ui::AX_ROLE_ROOT_WEB_AREA);
|
| - EXPECT_EQ(event.update.nodes[0].state,
|
| + EXPECT_EQ(event.nodes[0].state,
|
| (1U << ui::AX_STATE_READ_ONLY) |
|
| (1U << ui::AX_STATE_FOCUSABLE) |
|
| (1U << ui::AX_STATE_FOCUSED));
|
| - EXPECT_EQ(event.update.nodes[0].child_ids.size(), 1U);
|
| + EXPECT_EQ(event.nodes[0].child_ids.size(), 1U);
|
| }
|
|
|
| // Now focus the input element, and check everything again.
|
| @@ -130,17 +154,17 @@
|
| EXPECT_EQ(event.event_type,
|
| ui::AX_EVENT_FOCUS);
|
| EXPECT_EQ(event.id, 3);
|
| - EXPECT_EQ(event.update.nodes[0].id, 1);
|
| - EXPECT_EQ(event.update.nodes[0].role,
|
| + EXPECT_EQ(event.nodes[0].id, 1);
|
| + EXPECT_EQ(event.nodes[0].role,
|
| ui::AX_ROLE_ROOT_WEB_AREA);
|
| - EXPECT_EQ(event.update.nodes[0].state,
|
| + EXPECT_EQ(event.nodes[0].state,
|
| (1U << ui::AX_STATE_READ_ONLY) |
|
| (1U << ui::AX_STATE_FOCUSABLE));
|
| - EXPECT_EQ(event.update.nodes[0].child_ids.size(), 1U);
|
| - EXPECT_EQ(event.update.nodes[1].id, 3);
|
| - EXPECT_EQ(event.update.nodes[1].role,
|
| + EXPECT_EQ(event.nodes[0].child_ids.size(), 1U);
|
| + EXPECT_EQ(event.nodes[1].id, 3);
|
| + EXPECT_EQ(event.nodes[1].role,
|
| ui::AX_ROLE_GROUP);
|
| - EXPECT_EQ(event.update.nodes[1].state,
|
| + EXPECT_EQ(event.nodes[1].state,
|
| (1U << ui::AX_STATE_FOCUSABLE) |
|
| (1U << ui::AX_STATE_FOCUSED));
|
| }
|
| @@ -153,7 +177,7 @@
|
| AccessibilityHostMsg_EventParams event;
|
| GetLastAccEvent(&event);
|
| EXPECT_EQ(event.id, 4);
|
| - EXPECT_EQ(event.update.nodes[1].state,
|
| + EXPECT_EQ(event.nodes[1].state,
|
| (1U << ui::AX_STATE_FOCUSABLE) |
|
| (1U << ui::AX_STATE_FOCUSED));
|
| }
|
| @@ -165,7 +189,7 @@
|
| AccessibilityHostMsg_EventParams event;
|
| GetLastAccEvent(&event);
|
| EXPECT_EQ(event.id, 5);
|
| - EXPECT_EQ(event.update.nodes[1].state,
|
| + EXPECT_EQ(event.nodes[1].state,
|
| (1U << ui::AX_STATE_FOCUSABLE) |
|
| (1U << ui::AX_STATE_FOCUSED));
|
| }
|
| @@ -177,7 +201,7 @@
|
| AccessibilityHostMsg_EventParams event;
|
| GetLastAccEvent(&event);
|
| EXPECT_EQ(event.id, 6);
|
| - EXPECT_EQ(event.update.nodes[1].state,
|
| + EXPECT_EQ(event.nodes[1].state,
|
| (1U << ui::AX_STATE_FOCUSABLE) |
|
| (1U << ui::AX_STATE_FOCUSED));
|
| }
|
| @@ -190,7 +214,7 @@
|
| AccessibilityHostMsg_EventParams event;
|
| GetLastAccEvent(&event);
|
| EXPECT_EQ(event.id, 7);
|
| - EXPECT_EQ(event.update.nodes[1].state,
|
| + EXPECT_EQ(event.nodes[1].state,
|
| (1U << ui::AX_STATE_FOCUSABLE) |
|
| (1U << ui::AX_STATE_FOCUSED) |
|
| (1U << ui::AX_STATE_READ_ONLY));
|
| @@ -203,7 +227,7 @@
|
| AccessibilityHostMsg_EventParams event;
|
| GetLastAccEvent(&event);
|
| EXPECT_EQ(event.id, 8);
|
| - EXPECT_EQ(event.update.nodes[1].state,
|
| + EXPECT_EQ(event.nodes[1].state,
|
| (1U << ui::AX_STATE_FOCUSABLE) |
|
| (1U << ui::AX_STATE_FOCUSED) |
|
| (1U << ui::AX_STATE_READ_ONLY));
|
| @@ -241,6 +265,7 @@
|
| scoped_ptr<TestRendererAccessibilityComplete> accessibility(
|
| new TestRendererAccessibilityComplete(view()));
|
| accessibility->SendPendingAccessibilityEvents();
|
| + EXPECT_EQ(4, accessibility->browser_tree_node_count());
|
| EXPECT_EQ(4, CountAccessibilityNodesSentToBrowser());
|
|
|
| // If we post another event but the tree doesn't change,
|
| @@ -252,12 +277,13 @@
|
| root_obj,
|
| ui::AX_EVENT_LAYOUT_COMPLETE);
|
| accessibility->SendPendingAccessibilityEvents();
|
| + EXPECT_EQ(4, accessibility->browser_tree_node_count());
|
| EXPECT_EQ(1, CountAccessibilityNodesSentToBrowser());
|
| {
|
| // Make sure it's the root object that was updated.
|
| AccessibilityHostMsg_EventParams event;
|
| GetLastAccEvent(&event);
|
| - EXPECT_EQ(root_obj.axID(), event.update.nodes[0].id);
|
| + EXPECT_EQ(root_obj.axID(), event.nodes[0].id);
|
| }
|
|
|
| // If we reload the page and send a event, we should send
|
| @@ -271,6 +297,7 @@
|
| root_obj,
|
| ui::AX_EVENT_LAYOUT_COMPLETE);
|
| accessibility->SendPendingAccessibilityEvents();
|
| + EXPECT_EQ(4, accessibility->browser_tree_node_count());
|
| EXPECT_EQ(4, CountAccessibilityNodesSentToBrowser());
|
|
|
| // Even if the first event is sent on an element other than
|
| @@ -285,6 +312,7 @@
|
| first_child,
|
| ui::AX_EVENT_LIVE_REGION_CHANGED);
|
| accessibility->SendPendingAccessibilityEvents();
|
| + EXPECT_EQ(4, accessibility->browser_tree_node_count());
|
| EXPECT_EQ(4, CountAccessibilityNodesSentToBrowser());
|
| }
|
|
|
| @@ -310,6 +338,7 @@
|
| scoped_ptr<TestRendererAccessibilityComplete> accessibility(
|
| new TestRendererAccessibilityComplete(view()));
|
| accessibility->SendPendingAccessibilityEvents();
|
| + EXPECT_EQ(5, accessibility->browser_tree_node_count());
|
| EXPECT_EQ(5, CountAccessibilityNodesSentToBrowser());
|
|
|
| // Post a "value changed" event, but then swap out
|
| @@ -363,6 +392,7 @@
|
| scoped_ptr<TestRendererAccessibilityComplete> accessibility(
|
| new TestRendererAccessibilityComplete(view()));
|
| accessibility->SendPendingAccessibilityEvents();
|
| + EXPECT_EQ(4, accessibility->browser_tree_node_count());
|
| EXPECT_EQ(4, CountAccessibilityNodesSentToBrowser());
|
|
|
| WebDocument document = view()->GetWebView()->mainFrame()->document();
|
| @@ -384,16 +414,18 @@
|
| ui::AX_EVENT_CHILDREN_CHANGED);
|
|
|
| accessibility->SendPendingAccessibilityEvents();
|
| + EXPECT_EQ(3, accessibility->browser_tree_node_count());
|
| AccessibilityHostMsg_EventParams event;
|
| GetLastAccEvent(&event);
|
| - ASSERT_EQ(2U, event.update.nodes.size());
|
| + ASSERT_EQ(3U, event.nodes.size());
|
|
|
| // RendererAccessibilityComplete notices that 'C' is being reparented,
|
| - // so it clears the subtree rooted at 'A', then updates 'A' and then 'C'.
|
| - EXPECT_EQ(node_a.axID(), event.update.node_id_to_clear);
|
| - EXPECT_EQ(node_a.axID(), event.update.nodes[0].id);
|
| - EXPECT_EQ(node_c.axID(), event.update.nodes[1].id);
|
| - EXPECT_EQ(2, CountAccessibilityNodesSentToBrowser());
|
| + // so it updates 'B' first to remove 'C' as a child, then 'A' to add it,
|
| + // and finally it updates 'C'.
|
| + EXPECT_EQ(node_b.axID(), event.nodes[0].id);
|
| + EXPECT_EQ(node_a.axID(), event.nodes[1].id);
|
| + EXPECT_EQ(node_c.axID(), event.nodes[2].id);
|
| + EXPECT_EQ(3, CountAccessibilityNodesSentToBrowser());
|
| }
|
|
|
| TEST_F(RendererAccessibilityTest, ShowAccessibilityObject) {
|
| @@ -415,6 +447,7 @@
|
| scoped_ptr<TestRendererAccessibilityComplete> accessibility(
|
| new TestRendererAccessibilityComplete(view()));
|
| accessibility->SendPendingAccessibilityEvents();
|
| + EXPECT_EQ(3, accessibility->browser_tree_node_count());
|
| EXPECT_EQ(3, CountAccessibilityNodesSentToBrowser());
|
|
|
| // Show node 'B', then send a childrenChanged on 'A'.
|
| @@ -426,22 +459,15 @@
|
| WebDocument document = view()->GetWebView()->mainFrame()->document();
|
| WebAXObject root_obj = document.accessibilityObject();
|
| WebAXObject node_a = root_obj.childAt(0);
|
| - WebAXObject node_b = node_a.childAt(0);
|
| - WebAXObject node_c = node_b.childAt(0);
|
| -
|
| accessibility->HandleAXEvent(
|
| node_a,
|
| ui::AX_EVENT_CHILDREN_CHANGED);
|
|
|
| accessibility->SendPendingAccessibilityEvents();
|
| + EXPECT_EQ(4, accessibility->browser_tree_node_count());
|
| AccessibilityHostMsg_EventParams event;
|
| GetLastAccEvent(&event);
|
| -
|
| - ASSERT_EQ(3U, event.update.nodes.size());
|
| - EXPECT_EQ(node_a.axID(), event.update.node_id_to_clear);
|
| - EXPECT_EQ(node_a.axID(), event.update.nodes[0].id);
|
| - EXPECT_EQ(node_b.axID(), event.update.nodes[1].id);
|
| - EXPECT_EQ(node_c.axID(), event.update.nodes[2].id);
|
| + ASSERT_EQ(3U, event.nodes.size());
|
| EXPECT_EQ(3, CountAccessibilityNodesSentToBrowser());
|
| }
|
|
|
| @@ -459,6 +485,7 @@
|
| scoped_ptr<TestRendererAccessibilityComplete> accessibility(
|
| new TestRendererAccessibilityComplete(view()));
|
| accessibility->SendPendingAccessibilityEvents();
|
| + EXPECT_EQ(7, accessibility->browser_tree_node_count());
|
| EXPECT_EQ(7, CountAccessibilityNodesSentToBrowser());
|
|
|
| // Initially, the accessibility tree looks like this:
|
| @@ -505,13 +532,14 @@
|
| // accessibility tree and that only three nodes needed
|
| // to be updated (the body, the static text 1, and
|
| // the static text 2).
|
| + EXPECT_EQ(6, accessibility->browser_tree_node_count());
|
|
|
| AccessibilityHostMsg_EventParams event;
|
| GetLastAccEvent(&event);
|
| - ASSERT_EQ(5U, event.update.nodes.size());
|
| -
|
| - EXPECT_EQ(body.axID(), event.update.nodes[0].id);
|
| - EXPECT_EQ(text_1.axID(), event.update.nodes[1].id);
|
| + ASSERT_EQ(5U, event.nodes.size());
|
| +
|
| + EXPECT_EQ(body.axID(), event.nodes[0].id);
|
| + EXPECT_EQ(text_1.axID(), event.nodes[1].id);
|
| // The third event is to update text_2, but its id changes
|
| // so we don't have a test expectation for it.
|
| }
|
|
|