Chromium Code Reviews| 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 a0b65509c49630faa18a089183ffc321ccee2b36..3b7744d488dbac30463955c373fc7902b2d4e58c 100644 |
| --- a/content/renderer/accessibility/renderer_accessibility_browsertest.cc |
| +++ b/content/renderer/accessibility/renderer_accessibility_browsertest.cc |
| @@ -66,15 +66,22 @@ class RendererAccessibilityTest : public RenderViewTest { |
| frame()->OnSetAccessibilityMode(mode); |
| } |
| - void GetLastAccEvent( |
| - AccessibilityHostMsg_EventParams* params) { |
| + void GetAllAccEvents( |
| + std::vector<AccessibilityHostMsg_EventParams>* param_list) { |
| const IPC::Message* message = |
| sink_->GetUniqueMessageMatching(AccessibilityHostMsg_Events::ID); |
| ASSERT_TRUE(message); |
| base::Tuple<std::vector<AccessibilityHostMsg_EventParams>, int> param; |
| AccessibilityHostMsg_Events::Read(message, ¶m); |
| - ASSERT_GE(base::get<0>(param).size(), 1U); |
| - *params = base::get<0>(param)[0]; |
| + *param_list = base::get<0>(param); |
| + } |
| + |
| + void GetLastAccEvent( |
| + AccessibilityHostMsg_EventParams* params) { |
| + std::vector<AccessibilityHostMsg_EventParams> param_list; |
| + GetAllAccEvents(¶m_list); |
| + ASSERT_GE(param_list.size(), 1U); |
| + *params = param_list[0]; |
| } |
| int CountAccessibilityNodesSentToBrowser() { |
| @@ -428,4 +435,45 @@ TEST_F(RendererAccessibilityTest, EventOnObjectNotInTree) { |
| ASSERT_EQ(0U, base::get<0>(param).size()); |
| } |
| +TEST_F(RendererAccessibilityTest, TextSelectionShouldSendRoot) { |
| + // A text selection change in a text field will be reflected in attributes |
| + // of the root node. Verify that the root node is updated as the result |
| + // of a text change event. |
| + std::string html = |
| + "<body>" |
| + " <div role='group'>" |
| + " <input id='input' type='text' value='hello there'>" |
| + " </div>" |
| + "</body>"; |
| + LoadHTML(html.c_str()); |
| + |
| + scoped_ptr<TestRendererAccessibility> accessibility( |
| + new TestRendererAccessibility(frame())); |
| + accessibility->SendPendingAccessibilityEvents(); |
| + sink_->ClearMessages(); |
| + |
| + WebDocument document = view()->GetWebView()->mainFrame()->document(); |
| + WebAXObject root_obj = document.accessibilityObject(); |
| + WebAXObject input_obj = root_obj.childAt(0).childAt(0); |
|
dmazzoni
2015/09/17 16:36:58
This test is unlikely to ever present a problem, b
|
| + ASSERT_EQ(blink::WebAXRoleTextField, input_obj.role()); |
| + ExecuteJavaScriptForTests("document.getElementById('input').focus();"); |
| + accessibility->HandleAXEvent( |
| + input_obj, |
| + ui::AX_EVENT_TEXT_SELECTION_CHANGED); |
| + accessibility->SendPendingAccessibilityEvents(); |
| + std::vector<AccessibilityHostMsg_EventParams> all_events; |
| + GetAllAccEvents(&all_events); |
| + EXPECT_EQ(2U, all_events.size()); |
| + bool had_root_update = false, had_input_update = false; |
| + for (auto i = all_events.begin(); i != all_events.end(); ++i) { |
| + ASSERT_EQ(ui::AX_EVENT_TEXT_SELECTION_CHANGED, i->event_type); |
| + ASSERT_EQ(1U, i->update.nodes.size()); |
| + if (root_obj.axID() == i->update.nodes[0].id) |
| + had_root_update = true; |
| + if (input_obj.axID() == i->update.nodes[0].id) |
| + had_input_update = true; |
| + } |
| + ASSERT_TRUE(had_root_update); |
| + ASSERT_TRUE(had_input_update); |
| +} |
| } // namespace content |