OLD | NEW |
---|---|
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 Loading... | |
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, ¶m); | 75 AccessibilityHostMsg_Events::Read(message, ¶m); |
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(¶m_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 Loading... | |
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, ¶m); | 434 AccessibilityHostMsg_Events::Read(message, ¶m); |
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 |
OLD | NEW |