Bug 506389 - Some same page links do not fire EVENT_SYSTEM_SCROLLINGSTART, r=marcoz, davidb
authorAlexander Surkov <surkov.alexander@gmail.com>
Tue, 01 Sep 2009 10:49:15 +0800
changeset 32121 beecc75d100198d2e66702341ffbfd65de952107
parent 32120 a3f91fac11aa886b7c00df29fa467d4556fa92d5
child 32122 370ff63d1a86161c536cb514a1ce19131440b411
push id8857
push usersurkov.alexander@gmail.com
push dateTue, 01 Sep 2009 01:50:11 +0000
treeherderautoland@beecc75d1001 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmarcoz, davidb
bugs506389
milestone1.9.3a1pre
Bug 506389 - Some same page links do not fire EVENT_SYSTEM_SCROLLINGSTART, r=marcoz, davidb
accessible/src/base/nsAccUtils.h
accessible/tests/mochitest/Makefile.in
accessible/tests/mochitest/events.js
accessible/tests/mochitest/test_actions_anchors.html
--- a/accessible/src/base/nsAccUtils.h
+++ b/accessible/src/base/nsAccUtils.h
@@ -424,21 +424,21 @@ public:
     return role != nsIAccessibleRole::ROLE_TEXT_LEAF &&
            role != nsIAccessibleRole::ROLE_WHITESPACE &&
            role != nsIAccessibleRole::ROLE_STATICTEXT;
   }
 
   /**
    * Return true if the given accessible hasn't children.
    */
-  static PRBool IsLeaf(nsIAccessible *aAcc)
+  static inline PRBool IsLeaf(nsIAccessible *aAcc)
   {
-    PRInt32 numChildren;
+    PRInt32 numChildren = 0;
     aAcc->GetChildCount(&numChildren);
-    return numChildren > 0;
+    return numChildren == 0;
   }
 
   /**
    * Return true if the given accessible can't have children. Used when exposing
    * to platform accessibility APIs, should the children be pruned off?
    */
   static PRBool MustPrune(nsIAccessible *aAccessible);
 
--- a/accessible/tests/mochitest/Makefile.in
+++ b/accessible/tests/mochitest/Makefile.in
@@ -65,16 +65,17 @@ include $(topsrcdir)/config/rules.mk
 		nsIAccessibleEditableText.js \
 		relations.js \
 		role.js \
 		states.js \
 		table.js \
 		value.js \
 		test_accessnode_invalidation.html \
 		test_actions.xul \
+		test_actions_anchors.html \
 		test_actions_aria.html \
 		test_actions_inputs.html \
 		test_actions_tree.xul \
 		test_actions_treegrid.xul \
 		test_aria_activedescendant.html \
 		test_aria_role_article.html \
 		test_aria_role_equation.html \
 		test_aria_role_grid.html \
--- a/accessible/tests/mochitest/events.js
+++ b/accessible/tests/mochitest/events.js
@@ -1,16 +1,17 @@
 ////////////////////////////////////////////////////////////////////////////////
 // Constants
 
 const EVENT_DOCUMENT_LOAD_COMPLETE =
   nsIAccessibleEvent.EVENT_DOCUMENT_LOAD_COMPLETE;
 const EVENT_DOM_DESTROY = nsIAccessibleEvent.EVENT_DOM_DESTROY;
 const EVENT_FOCUS = nsIAccessibleEvent.EVENT_FOCUS;
 const EVENT_NAME_CHANGE = nsIAccessibleEvent.EVENT_NAME_CHANGE;
+const EVENT_SCROLLING_START = nsIAccessibleEvent.EVENT_SCROLLING_START;
 const EVENT_STATE_CHANGE = nsIAccessibleEvent.EVENT_STATE_CHANGE;
 const EVENT_REORDER = nsIAccessibleEvent.EVENT_REORDER;
 
 ////////////////////////////////////////////////////////////////////////////////
 // General
 
 /**
  * Set up this variable to dump events into DOM.
new file mode 100644
--- /dev/null
+++ b/accessible/tests/mochitest/test_actions_anchors.html
@@ -0,0 +1,138 @@
+<html>
+
+<head>
+  <title>nsIAccessible actions testing for anchors</title>
+
+  <link rel="stylesheet" type="text/css"
+        href="chrome://mochikit/content/tests/SimpleTest/test.css" />
+
+  <script type="application/javascript"
+          src="chrome://mochikit/content/MochiKit/packed.js"></script>
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+
+  <script type="application/javascript"
+          src="chrome://mochikit/content/a11y/accessible/common.js"></script>
+  <script type="application/javascript"
+          src="chrome://mochikit/content/a11y/accessible/events.js"></script>
+  <script type="application/javascript"
+          src="chrome://mochikit/content/a11y/accessible/actions.js"></script>
+
+  <script type="application/javascript">
+    ////////////////////////////////////////////////////////////////////////////
+    // Event checkers
+
+    function scrollingChecker(aAcc)
+    {
+      this.type = EVENT_SCROLLING_START;
+      this.target = aAcc;
+      this.getID = function scrollingChecker_getID()
+      {
+        return "scrolling start handling for " + prettyName(aAcc);
+      }
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    // Test
+
+    // gA11yEventDumpID = "debug"; // debug stuff
+
+    function doTest()
+    {
+      if (!WIN) {
+        ok(true,
+           "Nothing to test because scolling events are fired on Windows only");
+
+        SimpleTest.finish();
+        return;
+      }
+
+      var actionsArray = [
+        {
+          ID: "anchor1",
+          actionName: "jump",
+          actionIndex: 0,
+          events: CLICK_EVENTS,
+          eventSeq: [
+            new scrollingChecker(getAccessible("bottom1"))
+          ]
+        },
+        {
+          ID: "anchor2",
+          actionName: "jump",
+          actionIndex: 0,
+          events: CLICK_EVENTS,
+          eventSeq: [
+            new scrollingChecker(getAccessible("bottom2").firstChild)
+          ]
+        }
+      ];
+
+      testActions(actionsArray);
+    }
+
+    SimpleTest.waitForExplicitFinish();
+    addA11yLoadEvent(doTest);
+  </script>
+</head>
+
+<body>
+
+  <a target="_blank"
+     href="https://bugzilla.mozilla.org/show_bug.cgi?id=506389"
+     title="Some same page links do not fire EVENT_SYSTEM_SCROLLINGSTART">
+    Mozilla Bug 506389
+  </a>
+  <p id="display"></p>
+  <div id="content" style="display: none"></div>
+  <pre id="test">
+  </pre>
+
+  <div id="debug"></div>
+
+  <h1>This is a test page for anchors</h1>
+  This is a top anchor<a name="Top">
+  </a><a id="anchor1" href="#bottom1">Link to anchor</a>
+  <a id="anchor2" href="#bottom2">Link to div</a>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br>This is some text in the middle<br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  This is some text.
+  This is a bottom anchor<a id="bottom1"></a>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <br><br><br><br><br><br><br><br><br><br>
+  <div id="bottom2">This is a div</div>
+</body>
+</html>