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

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

Issue 1761633002: One accessibility tree per frame. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix is-richly-editable test Created 4 years, 9 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
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/macros.h" 5 #include "base/macros.h"
6 #include "base/strings/utf_string_conversions.h" 6 #include "base/strings/utf_string_conversions.h"
7 #include "base/time/time.h" 7 #include "base/time/time.h"
8 #include "build/build_config.h" 8 #include "build/build_config.h"
9 #include "content/common/accessibility_messages.h" 9 #include "content/common/accessibility_messages.h"
10 #include "content/common/frame_messages.h" 10 #include "content/common/frame_messages.h"
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 AccessibilityHostMsg_EventParams event; 396 AccessibilityHostMsg_EventParams event;
397 GetLastAccEvent(&event); 397 GetLastAccEvent(&event);
398 ASSERT_EQ(5U, event.update.nodes.size()); 398 ASSERT_EQ(5U, event.update.nodes.size());
399 399
400 EXPECT_EQ(body.axID(), event.update.nodes[0].id); 400 EXPECT_EQ(body.axID(), event.update.nodes[0].id);
401 EXPECT_EQ(text_1.axID(), event.update.nodes[1].id); 401 EXPECT_EQ(text_1.axID(), event.update.nodes[1].id);
402 // The third event is to update text_2, but its id changes 402 // The third event is to update text_2, but its id changes
403 // so we don't have a test expectation for it. 403 // so we don't have a test expectation for it.
404 } 404 }
405 405
406 TEST_F(RendererAccessibilityTest, EventOnDetachedNodeTriggersMainFrameLayout) {
407 std::string html =
408 "<body>"
409 " <iframe srcdoc='<input>'></iframe>"
410 " <button>Button</button>"
411 "</body>";
412 LoadHTML(html.c_str());
413
414 scoped_ptr<TestRendererAccessibility> accessibility(
415 new TestRendererAccessibility(frame()));
416 accessibility->SendPendingAccessibilityEvents();
417
418 WebDocument document = view()->GetWebView()->mainFrame()->document();
419 WebAXObject root_obj = document.accessibilityObject();
420 ASSERT_EQ(blink::WebAXRoleWebArea, root_obj.role());
421 WebAXObject group = root_obj.childAt(0);
422 ASSERT_EQ(blink::WebAXRoleGroup, group.role());
423 WebAXObject iframe = group.childAt(0);
424 ASSERT_EQ(blink::WebAXRoleIframe, iframe.role());
425 WebAXObject child_doc = iframe.childAt(0);
426 ASSERT_EQ(blink::WebAXRoleWebArea, child_doc.role());
427 WebAXObject child_group = child_doc.childAt(0);
428 ASSERT_EQ(blink::WebAXRoleGroup, child_group.role());
429 WebAXObject child_textfield = child_group.childAt(0);
430 ASSERT_EQ(blink::WebAXRoleTextField, child_textfield.role());
431
432 // Hide the input element inside the iframe.
433 ExecuteJavaScriptForTests(
434 "document.querySelector('iframe').contentDocument"
435 ".querySelector('input').style.display = 'none';");
436 accessibility->HandleAXEvent(
437 child_textfield,
438 ui::AX_EVENT_LAYOUT_COMPLETE);
439 accessibility->SendPendingAccessibilityEvents();
440
441 // Make sure |child_textfield| is invalid now.
442 ASSERT_TRUE(child_textfield.isDetached());
443
444 // Now do a random style change in the iframe to make its layout not clean.
445 ExecuteJavaScriptForTests(
446 "var doc = document.querySelector('iframe').contentDocument; "
447 "doc.body.style.backgroundColor = '#f00';");
448
449 // Now try to handle a "layout complete" event on the detached textfield
450 // object. The event handling will be a no-op, but the layout complete
451 // will trigger calling SendLocationChanges. Make sure that
452 // SendLocationChanges doesn't depend on layout in the main frame being
453 // clean.
454 //
455 // If this doesn't crash, the test passes.
456 accessibility->HandleAXEvent(child_textfield,
457 ui::AX_EVENT_LAYOUT_COMPLETE);
458 accessibility->SendPendingAccessibilityEvents();
459 }
460
461 } // namespace content 406 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698