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

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

Issue 16903002: Allow AccessibilityHostMsg_Notifications messages to be sent from the renderer while it is swapped … (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address nits Created 7 years, 6 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 | « no previous file | content/renderer/accessibility/renderer_accessibility_complete.cc » ('j') | 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 "content/common/accessibility_node_data.h" 6 #include "content/common/accessibility_node_data.h"
7 #include "content/common/view_messages.h" 7 #include "content/common/view_messages.h"
8 #include "content/public/test/render_view_test.h" 8 #include "content/public/test/render_view_test.h"
9 #include "content/renderer/accessibility/renderer_accessibility_complete.h" 9 #include "content/renderer/accessibility/renderer_accessibility_complete.h"
10 #include "content/renderer/render_view_impl.h" 10 #include "content/renderer/render_view_impl.h"
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 sink_->ClearMessages(); 303 sink_->ClearMessages();
304 const WebAccessibilityObject& first_child = root_obj.childAt(0); 304 const WebAccessibilityObject& first_child = root_obj.childAt(0);
305 accessibility->HandleWebAccessibilityNotification( 305 accessibility->HandleWebAccessibilityNotification(
306 first_child, 306 first_child,
307 WebKit::WebAccessibilityNotificationLiveRegionChanged); 307 WebKit::WebAccessibilityNotificationLiveRegionChanged);
308 accessibility->SendPendingAccessibilityNotifications(); 308 accessibility->SendPendingAccessibilityNotifications();
309 EXPECT_EQ(4, accessibility->browser_tree_node_count()); 309 EXPECT_EQ(4, accessibility->browser_tree_node_count());
310 EXPECT_EQ(4, CountAccessibilityNodesSentToBrowser()); 310 EXPECT_EQ(4, CountAccessibilityNodesSentToBrowser());
311 } 311 }
312 312
313 TEST_F(RendererAccessibilityTest, AccessibilityMessagesQueueWhileSwappedOut) {
314 std::string html =
315 "<body>"
316 " <p>Hello, world.</p>"
317 "</body>";
318 LoadHTML(html.c_str());
319
320 // Creating a RendererAccessibilityComplete should send the tree
321 // to the browser.
322 scoped_ptr<TestRendererAccessibilityComplete> accessibility(
323 new TestRendererAccessibilityComplete(view()));
324 accessibility->SendPendingAccessibilityNotifications();
325 EXPECT_EQ(3, accessibility->browser_tree_node_count());
326 EXPECT_EQ(3, CountAccessibilityNodesSentToBrowser());
327
328 // Post a "value changed" notification, but then swap out
329 // before sending it. It shouldn't send the notification while
330 // swapped out.
331 sink_->ClearMessages();
332 WebDocument document = view()->GetWebView()->mainFrame()->document();
333 WebAccessibilityObject root_obj = document.accessibilityObject();
334 accessibility->HandleWebAccessibilityNotification(
335 root_obj,
336 WebKit::WebAccessibilityNotificationValueChanged);
337 view()->OnSwapOut();
338 accessibility->SendPendingAccessibilityNotifications();
339 EXPECT_FALSE(sink_->GetUniqueMessageMatching(
340 AccessibilityHostMsg_Notifications::ID));
341
342 // Navigate, so we're not swapped out anymore. Now we should
343 // send accessibility notifications again. Note that the
344 // message that was queued up before will be quickly discarded
345 // because the element it was referring to no longer exists,
346 // so the notification here is from loading this new page.
347 ViewMsg_Navigate_Params nav_params;
348 nav_params.url = GURL("data:text/html,<p>Hello, again.</p>");
349 nav_params.navigation_type = ViewMsg_Navigate_Type::NORMAL;
350 nav_params.transition = PAGE_TRANSITION_TYPED;
351 nav_params.current_history_list_length = 1;
352 nav_params.current_history_list_offset = 0;
353 nav_params.pending_history_list_offset = 1;
354 nav_params.page_id = -1;
355 view()->OnNavigate(nav_params);
356 accessibility->SendPendingAccessibilityNotifications();
357 EXPECT_TRUE(sink_->GetUniqueMessageMatching(
358 AccessibilityHostMsg_Notifications::ID));
359 }
360
313 TEST_F(RendererAccessibilityTest, HideAccessibilityObject) { 361 TEST_F(RendererAccessibilityTest, HideAccessibilityObject) {
314 // Test RendererAccessibilityComplete and make sure it sends the 362 // Test RendererAccessibilityComplete and make sure it sends the
315 // proper notification to the browser when an object in the tree 363 // proper notification to the browser when an object in the tree
316 // is hidden, but its children are not. 364 // is hidden, but its children are not.
317 std::string html = 365 std::string html =
318 "<body>" 366 "<body>"
319 " <div role='group' id='A'>" 367 " <div role='group' id='A'>"
320 " <div role='group' id='B'>" 368 " <div role='group' id='B'>"
321 " <div role='group' id='C' style='visibility:visible'>" 369 " <div role='group' id='C' style='visibility:visible'>"
322 " </div>" 370 " </div>"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 449
402 accessibility->SendPendingAccessibilityNotifications(); 450 accessibility->SendPendingAccessibilityNotifications();
403 EXPECT_EQ(4, accessibility->browser_tree_node_count()); 451 EXPECT_EQ(4, accessibility->browser_tree_node_count());
404 AccessibilityHostMsg_NotificationParams notification; 452 AccessibilityHostMsg_NotificationParams notification;
405 GetLastAccNotification(&notification); 453 GetLastAccNotification(&notification);
406 ASSERT_EQ(3U, notification.nodes.size()); 454 ASSERT_EQ(3U, notification.nodes.size());
407 EXPECT_EQ(3, CountAccessibilityNodesSentToBrowser()); 455 EXPECT_EQ(3, CountAccessibilityNodesSentToBrowser());
408 } 456 }
409 457
410 } // namespace content 458 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/renderer/accessibility/renderer_accessibility_complete.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698