Bug 984037 - Make sure we respect the general.autoScroll pref (r=felipe)

This commit is contained in:
Bill McCloskey 2014-03-18 08:00:33 -07:00
parent ad707c964f
commit 3bf0611bcb
4 changed files with 91 additions and 4 deletions

View File

@ -107,14 +107,20 @@ let ClickEventHandler = {
}
}
let [enabled] = sendSyncMessage("Autoscroll:Start",
{scrolldir: this._scrolldir,
screenX: event.screenX,
screenY: event.screenY});
if (!enabled) {
this._scrollable = null;
return;
}
Cc["@mozilla.org/eventlistenerservice;1"]
.getService(Ci.nsIEventListenerService)
.addSystemEventListener(global, "mousemove", this, true);
addEventListener("pagehide", this, true);
sendAsyncMessage("Autoscroll:Start", {scrolldir: this._scrolldir,
screenX: event.screenX,
screenY: event.screenY});
this._ignoreMouseEvents = true;
this._startX = event.screenX;
this._startY = event.screenY;

View File

@ -1,5 +1,6 @@
[DEFAULT]
[browser_autoscroll_disabled.js]
[browser_browserDrop.js]
[browser_bug295977_autoscroll_overflow.js]
[browser_bug594509.js]

View File

@ -0,0 +1,77 @@
function test()
{
const kPrefName_AutoScroll = "general.autoScroll";
Services.prefs.setBoolPref(kPrefName_AutoScroll, false);
var doc;
function startLoad(dataUri) {
gBrowser.selectedBrowser.addEventListener("pageshow", onLoad, false);
gBrowser.loadURI(dataUri);
}
function onLoad() {
gBrowser.selectedBrowser.removeEventListener("pageshow", onLoad, false);
waitForFocus(onFocus, content);
}
function onFocus() {
doc = gBrowser.contentDocument;
runChecks();
}
function endTest() {
// restore the changed prefs
if (Services.prefs.prefHasUserValue(kPrefName_AutoScroll))
Services.prefs.clearUserPref(kPrefName_AutoScroll);
// cleaning-up
gBrowser.addTab("about:blank");
gBrowser.removeCurrentTab();
// waitForFocus() fixes a failure in the next test if the latter runs too soon.
waitForFocus(finish);
}
waitForExplicitFinish();
let dataUri = 'data:text/html,<html><body id="i" style="overflow-y: scroll"><div style="height: 2000px"></div>\
<iframe id="iframe" style="display: none;"></iframe>\
</body></html>';
startLoad(dataUri);
function runChecks() {
var elem = doc.getElementById('i');
// Skip the first callback as it's the same callback that the browser
// uses to kick off the scrolling.
var skipFrames = 1;
var checkScroll = function () {
if (skipFrames--) {
window.mozRequestAnimationFrame(checkScroll);
return;
}
ok(elem.scrollTop == 0, "element should not have scrolled vertically");
ok(elem.scrollLeft == 0, "element should not have scrolled horizontally");
endTest();
};
EventUtils.synthesizeMouse(elem, 50, 50, { button: 1 },
gBrowser.contentWindow);
var iframe = gBrowser.contentDocument.getElementById("iframe");
var e = iframe.contentDocument.createEvent("pagetransition");
e.initPageTransitionEvent("pagehide", true, true, false);
iframe.contentDocument.dispatchEvent(e);
iframe.contentDocument.documentElement.dispatchEvent(e);
EventUtils.synthesizeMouse(elem, 100, 100,
{ type: "mousemove", clickCount: "0" },
gBrowser.contentWindow);
/*
* if scrolling didnt work, we wouldnt do any redraws and thus time out.
* so request and force redraws to get the chance to check for scrolling at
* all.
*/
window.mozRequestAnimationFrame(checkScroll);
}
}

View File

@ -851,9 +851,12 @@
let data = aMessage.data;
switch (aMessage.name) {
case "Autoscroll:Start": {
if (!this.autoscrollEnabled) {
return false;
}
let pos = this.mapScreenCoordinatesFromContent(data.screenX, data.screenY);
this.startScroll(data.scrolldir, pos.x, pos.y);
break;
return true;
}
case "Autoscroll:Cancel":
this._autoScrollPopup.hidePopup();