Bug 517787 Clicking a partially off-screen link shouldn't scroll the page (again) r=roc, b192=beltzner
authorMasayuki Nakano <masayuki@d-toybox.com>
Fri, 25 Sep 2009 13:28:34 +0900
changeset 31924 445de6143f106b2670c7f7e1abaab70d08301648
parent 31923 aecf09956fc51349b79649c5d87c7e41374cfc4b
child 31925 57bef4de57dd17366264f6b005906e129aaa3cec
push id240
push usermasayuki@d-toybox.com
push dateFri, 25 Sep 2009 04:37:45 +0000
reviewersroc
bugs517787
milestone1.9.2b1pre
Bug 517787 Clicking a partially off-screen link shouldn't scroll the page (again) r=roc, b192=beltzner
content/base/src/nsGenericElement.cpp
dom/tests/mochitest/chrome/Makefile.in
dom/tests/mochitest/chrome/test_focused_link_scroll.xul
--- a/content/base/src/nsGenericElement.cpp
+++ b/content/base/src/nsGenericElement.cpp
@@ -5002,17 +5002,18 @@ nsGenericElement::PostHandleEventForLink
           nsMouseEvent::eLeftButton) {
         // don't make the link grab the focus if there is no link handler
         nsILinkHandler *handler = aVisitor.mPresContext->GetLinkHandler();
         nsIDocument *document = GetCurrentDoc();
         if (handler && document) {
           nsIFocusManager* fm = nsFocusManager::GetFocusManager();
           if (fm) {
             nsCOMPtr<nsIDOMElement> elem = do_QueryInterface(this);
-            fm->SetFocus(elem, nsIFocusManager::FLAG_BYMOUSE);
+            fm->SetFocus(elem, nsIFocusManager::FLAG_BYMOUSE |
+                               nsIFocusManager::FLAG_NOSCROLL);
           }
 
           aVisitor.mPresContext->EventStateManager()->
             SetContentState(this, NS_EVENT_STATE_ACTIVE);
         }
       }
     }
     break;
--- a/dom/tests/mochitest/chrome/Makefile.in
+++ b/dom/tests/mochitest/chrome/Makefile.in
@@ -53,12 +53,13 @@ include $(topsrcdir)/config/rules.mk
 		domstorage_global.xul \
 		domstorage_global.js \
 		test_focus.xul \
 		window_focus.xul \
 		focus_window2.xul \
 		focus_frameset.html \
 		child_focus_frame.html \
 		test_focus_switchbinding.xul \
+		test_focused_link_scroll.xul \
 		$(NULL)
 
 libs:: $(_TEST_FILES)
 	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/chrome/$(relativesrcdir)
new file mode 100644
--- /dev/null
+++ b/dom/tests/mochitest/chrome/test_focused_link_scroll.xul
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
+
+<window title="Focus Scroll Tests"
+  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+  <script type="application/javascript" 
+          src="chrome://mochikit/content/MochiKit/packed.js"/>
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
+
+<body xmlns="http://www.w3.org/1999/xhtml">
+<div id="div" style="width:500px;height:48px;overflow:auto;font-size:16px;line-height:16px;">
+aaaaaaaaa<br/>bbbbbbbb<br/>
+<a href="about:blank;" id="a">ccccccccc<br/>ddddddddd</a>
+</div>
+<p id="display">
+</p>
+<div id="content" style="display: none">
+</div>
+<pre id="test">
+</pre>
+</body>
+
+<script>
+
+SimpleTest.waitForExplicitFinish();
+
+function runTest()
+{
+  var fm = Components.classes["@mozilla.org/focus-manager;1"].
+             getService(Components.interfaces.nsIFocusManager);
+  var div = document.getElementById('div');
+  var a = document.getElementById('a');
+  synthesizeMouse(a, 4, 4, { type: "mousedown" }, window);
+  is(fm.focusedElement, a,
+     "The anchor element isn't set focus by the mouse down event");
+  is(div.scrollTop, 0,
+     "The div element was scrolled by the mouse down event");
+  SimpleTest.finish();
+}
+
+SimpleTest.waitForFocus(runTest);
+
+</script>
+
+</window>