Bug 759833 - ARIA documents should fire document loading events, r=tbsaunde, f=davidb
authorAlexander Surkov <surkov.alexander@gmail.com>
Fri, 08 Jun 2012 22:36:41 +0900
changeset 101453 0f29f00df2ff986b72a58b1ff5f2784881223673
parent 101452 b8ed7040597f91295d93d933c41dddb44ae2a05e
child 101454 8853952874789c3d4a61763c8deb2d3c84699424
push id191
push userlsblakk@mozilla.com
push dateFri, 05 Oct 2012 17:12:53 +0000
treeherdermozilla-release@ddb22ac6c03b [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerstbsaunde
bugs759833
milestone16.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 759833 - ARIA documents should fire document loading events, r=tbsaunde, f=davidb
accessible/src/generic/DocAccessible.cpp
accessible/tests/mochitest/events/Makefile.in
accessible/tests/mochitest/events/test_docload_aria.html
--- a/accessible/src/generic/DocAccessible.cpp
+++ b/accessible/src/generic/DocAccessible.cpp
@@ -2001,16 +2001,25 @@ DocAccessible::CacheChildrenInSubtree(Ac
   PRUint32 count = aRoot->ContentChildCount();
   for (PRUint32 idx = 0; idx < count; idx++) {
     Accessible* child = aRoot->ContentChildAt(idx);
     NS_ASSERTION(child, "Illicit tree change while tree is created!");
     // Don't cross document boundaries.
     if (child && child->IsContent())
       CacheChildrenInSubtree(child);
   }
+
+  // Fire document load complete on ARIA documents.
+  // XXX: we should delay an event if the ARIA document has aria-busy.
+  if (aRoot->HasARIARole() && !aRoot->IsDoc()) {
+    a11y::role role = aRoot->ARIARole();
+    if (role == roles::DIALOG || role == roles::DOCUMENT)
+      FireDelayedAccessibleEvent(nsIAccessibleEvent::EVENT_DOCUMENT_LOAD_COMPLETE,
+                                 aRoot->GetContent());
+  }
 }
 
 void
 DocAccessible::UncacheChildrenInSubtree(Accessible* aRoot)
 {
   if (aRoot->IsElement())
     RemoveDependentIDsFor(aRoot);
 
--- a/accessible/tests/mochitest/events/Makefile.in
+++ b/accessible/tests/mochitest/events/Makefile.in
@@ -20,16 +20,17 @@ include $(topsrcdir)/config/rules.mk
 		test_aria_menu.html \
 		test_aria_objattr.html \
 		test_aria_statechange.html \
 		test_attrs.html \
 		test_caretmove.html \
 		test_caretmove.xul \
 		test_coalescence.html \
 		test_contextmenu.html \
+		test_docload_aria.html \
 		test_docload.html \
 		test_docload.xul \
 		test_dragndrop.html \
 		test_flush.html \
 		test_focus_aria_activedescendant.html \
 		test_focus_autocomplete.xul \
 		test_focus_browserui.xul \
 		test_focus_canvas.html \
new file mode 100644
--- /dev/null
+++ b/accessible/tests/mochitest/events/test_docload_aria.html
@@ -0,0 +1,83 @@
+<html>
+
+<head>
+  <title>Accessible events testing for ARIA document</title>
+
+  <link rel="stylesheet" type="text/css"
+        href="chrome://mochikit/content/tests/SimpleTest/test.css" />
+
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+
+  <script type="application/javascript"
+          src="../common.js"></script>
+  <script type="application/javascript"
+          src="../role.js"></script>
+  <script type="application/javascript"
+          src="../states.js"></script>
+  <script type="application/javascript"
+          src="../events.js"></script>
+
+  <script type="application/javascript">
+    ////////////////////////////////////////////////////////////////////////////
+    // Invokers
+
+    function showARIADialog(aID)
+    {
+      this.dialogNode = getNode(aID);
+
+      this.eventSeq = [
+        new invokerChecker(EVENT_DOCUMENT_LOAD_COMPLETE, this.dialogNode)
+      ];
+
+      this.invoke = function showARIADialog_invoke()
+      {
+        this.dialogNode.style.display = "block";
+      }
+
+      this.getID = function showARIADialog_getID()
+      {
+        return "show ARIA dialog";
+      }
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    // Do tests
+
+    var gQueue = null;
+
+    // Debug stuff.
+    //gA11yEventDumpToConsole = true;
+
+    function doTests()
+    {
+      gQueue = new eventQueue();
+
+      gQueue.push(new showARIADialog("dialog"));
+      gQueue.push(new showARIADialog("document"));
+
+      gQueue.invoke(); // Will call SimpleTest.finish();
+    }
+
+    SimpleTest.waitForExplicitFinish();
+    addA11yLoadEvent(doTests);
+  </script>
+</head>
+
+<body>
+
+  <a target="_blank"
+     href="https://bugzilla.mozilla.org/show_bug.cgi?id=759833"
+     title="ARIA documents should fire document loading events">
+    Mozilla Bug 759833
+  </a>
+
+  <p id="display"></p>
+  <div id="content" style="display: none"></div>
+  <pre id="test">
+  </pre>
+
+  <div role="dialog" id="dialog" style="display: none;">It's a dialog</div>
+  <div role="document" id="document" style="display: none;">It's a document</div>
+</body>
+</html>