| 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..c20ee53636cb4b83e44927596976a8019421d063 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,46 @@ 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 =
|
| + document.getElementById("input").accessibilityObject();
|
| + 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
|
|
|