function test() { const kPrefName_AutoScroll = "general.autoScroll"; Services.prefs.setBoolPref(kPrefName_AutoScroll, true); const expectScrollNone = 0; const expectScrollVert = 1; const expectScrollHori = 2; const expectScrollBoth = 3; var allTests = [ {elem: 'a', expected: expectScrollNone}, {elem: 'b', expected: expectScrollBoth}, {elem: 'c', expected: expectScrollHori}, {elem: 'd', expected: expectScrollVert}, {elem: 'e', expected: expectScrollVert}, {elem: 'f', expected: expectScrollNone}, {elem: 'g', expected: expectScrollBoth}, {elem: 'h', expected: expectScrollNone} ]; var doc; function nextTest() { var test = allTests.shift(); if (!test) { endTest(); return; } var elem = doc.getElementById(test.elem); // skip a few frames before checking the tests var skipFrames = 3; var checkScroll = function () { if (skipFrames--) { window.mozRequestAnimationFrame(); return; } EventUtils.synthesizeKey("VK_ESCAPE", {}, gBrowser.contentWindow); var scrollVert = test.expected & expectScrollVert; ok((scrollVert && elem.scrollTop > 0) || (!scrollVert && elem.scrollTop == 0), test.elem+' should'+(scrollVert ? '' : ' not')+' have scrolled vertically'); var scrollHori = test.expected & expectScrollHori; ok((scrollHori && elem.scrollLeft > 0) || (!scrollHori && elem.scrollLeft == 0), test.elem+' should'+(scrollHori ? '' : ' not')+' have scrolled horizontally'); window.removeEventListener("MozAfterPaint", checkScroll, false); nextTest(); }; 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); window.addEventListener("MozAfterPaint", checkScroll, false); /* * if scrolling didn’t work, we wouldn’t do any redraws and thus time out. * so request and force redraws to get the chance to check for scrolling at * all. */ window.mozRequestAnimationFrame(); } waitForExplicitFinish(); var dataUri = 'data:text/html,\
\
\
\
\
\ \ \
\
\ \ '; 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; // force redraws, so we actually get AfterPaint events window.addEventListener("MozBeforePaint", function(ev) { doc.getElementById("forceredraw").style.left = ev.timeStamp % 100; }, false); nextTest(); } 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); } }