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

Side by Side Diff: content/renderer/accessibility/renderer_accessibility_browsertest.cc

Issue 1347243005: Make selection changes in a text field invalidate accessibility tree root. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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
« no previous file with comments | « content/renderer/accessibility/renderer_accessibility.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/strings/utf_string_conversions.h" 5 #include "base/strings/utf_string_conversions.h"
6 #include "base/time/time.h" 6 #include "base/time/time.h"
7 #include "content/common/accessibility_messages.h" 7 #include "content/common/accessibility_messages.h"
8 #include "content/common/frame_messages.h" 8 #include "content/common/frame_messages.h"
9 #include "content/common/site_isolation_policy.h" 9 #include "content/common/site_isolation_policy.h"
10 #include "content/common/view_message_enums.h" 10 #include "content/common/view_message_enums.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 // http://crbug.com/328552 59 // http://crbug.com/328552
60 __lsan_do_leak_check(); 60 __lsan_do_leak_check();
61 #endif 61 #endif
62 RenderViewTest::TearDown(); 62 RenderViewTest::TearDown();
63 } 63 }
64 64
65 void SetMode(AccessibilityMode mode) { 65 void SetMode(AccessibilityMode mode) {
66 frame()->OnSetAccessibilityMode(mode); 66 frame()->OnSetAccessibilityMode(mode);
67 } 67 }
68 68
69 void GetLastAccEvent( 69 void GetAllAccEvents(
70 AccessibilityHostMsg_EventParams* params) { 70 std::vector<AccessibilityHostMsg_EventParams>* param_list) {
71 const IPC::Message* message = 71 const IPC::Message* message =
72 sink_->GetUniqueMessageMatching(AccessibilityHostMsg_Events::ID); 72 sink_->GetUniqueMessageMatching(AccessibilityHostMsg_Events::ID);
73 ASSERT_TRUE(message); 73 ASSERT_TRUE(message);
74 base::Tuple<std::vector<AccessibilityHostMsg_EventParams>, int> param; 74 base::Tuple<std::vector<AccessibilityHostMsg_EventParams>, int> param;
75 AccessibilityHostMsg_Events::Read(message, &param); 75 AccessibilityHostMsg_Events::Read(message, &param);
76 ASSERT_GE(base::get<0>(param).size(), 1U); 76 *param_list = base::get<0>(param);
77 *params = base::get<0>(param)[0]; 77 }
78
79 void GetLastAccEvent(
80 AccessibilityHostMsg_EventParams* params) {
81 std::vector<AccessibilityHostMsg_EventParams> param_list;
82 GetAllAccEvents(&param_list);
83 ASSERT_GE(param_list.size(), 1U);
84 *params = param_list[0];
78 } 85 }
79 86
80 int CountAccessibilityNodesSentToBrowser() { 87 int CountAccessibilityNodesSentToBrowser() {
81 AccessibilityHostMsg_EventParams event; 88 AccessibilityHostMsg_EventParams event;
82 GetLastAccEvent(&event); 89 GetLastAccEvent(&event);
83 return event.update.nodes.size(); 90 return event.update.nodes.size();
84 } 91 }
85 92
86 protected: 93 protected:
87 IPC::TestSink* sink_; 94 IPC::TestSink* sink_;
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 accessibility->SendPendingAccessibilityEvents(); 428 accessibility->SendPendingAccessibilityEvents();
422 429
423 const IPC::Message* message = 430 const IPC::Message* message =
424 sink_->GetUniqueMessageMatching(AccessibilityHostMsg_Events::ID); 431 sink_->GetUniqueMessageMatching(AccessibilityHostMsg_Events::ID);
425 ASSERT_TRUE(message); 432 ASSERT_TRUE(message);
426 base::Tuple<std::vector<AccessibilityHostMsg_EventParams>, int> param; 433 base::Tuple<std::vector<AccessibilityHostMsg_EventParams>, int> param;
427 AccessibilityHostMsg_Events::Read(message, &param); 434 AccessibilityHostMsg_Events::Read(message, &param);
428 ASSERT_EQ(0U, base::get<0>(param).size()); 435 ASSERT_EQ(0U, base::get<0>(param).size());
429 } 436 }
430 437
438 TEST_F(RendererAccessibilityTest, TextSelectionShouldSendRoot) {
439 // A text selection change in a text field will be reflected in attributes
440 // of the root node. Verify that the root node is updated as the result
441 // of a text change event.
442 std::string html =
443 "<body>"
444 " <div role='group'>"
445 " <input id='input' type='text' value='hello there'>"
446 " </div>"
447 "</body>";
448 LoadHTML(html.c_str());
449
450 scoped_ptr<TestRendererAccessibility> accessibility(
451 new TestRendererAccessibility(frame()));
452 accessibility->SendPendingAccessibilityEvents();
453 sink_->ClearMessages();
454
455 WebDocument document = view()->GetWebView()->mainFrame()->document();
456 WebAXObject root_obj = document.accessibilityObject();
457 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
458 ASSERT_EQ(blink::WebAXRoleTextField, input_obj.role());
459 ExecuteJavaScriptForTests("document.getElementById('input').focus();");
460 accessibility->HandleAXEvent(
461 input_obj,
462 ui::AX_EVENT_TEXT_SELECTION_CHANGED);
463 accessibility->SendPendingAccessibilityEvents();
464 std::vector<AccessibilityHostMsg_EventParams> all_events;
465 GetAllAccEvents(&all_events);
466 EXPECT_EQ(2U, all_events.size());
467 bool had_root_update = false, had_input_update = false;
468 for (auto i = all_events.begin(); i != all_events.end(); ++i) {
469 ASSERT_EQ(ui::AX_EVENT_TEXT_SELECTION_CHANGED, i->event_type);
470 ASSERT_EQ(1U, i->update.nodes.size());
471 if (root_obj.axID() == i->update.nodes[0].id)
472 had_root_update = true;
473 if (input_obj.axID() == i->update.nodes[0].id)
474 had_input_update = true;
475 }
476 ASSERT_TRUE(had_root_update);
477 ASSERT_TRUE(had_input_update);
478 }
431 } // namespace content 479 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/accessibility/renderer_accessibility.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698