forked from mirrors/gecko-dev
Backed out changeset 8781a0d1254d (bug 1810141) Backed out changeset 131037295784 (bug 1810141) Backed out changeset 3852fbe290f4 (bug 1810141) Backed out changeset 118f131a524a (bug 1810141) Backed out changeset ab5d76846e10 (bug 1810141) Backed out changeset dce3aa683445 (bug 1810141) Backed out changeset 4dc41d90dbb3 (bug 1810141) Backed out changeset 50b57ba1a061 (bug 1810141) Backed out changeset 569de94781e4 (bug 1810141)
261 lines
7 KiB
JavaScript
261 lines
7 KiB
JavaScript
waitForExplicitFinish();
|
|
requestLongerTimeout(2); // see bug 660123 -- this test is slow on Mac.
|
|
|
|
// A hold on the current timer, so it doesn't get GCed out from
|
|
// under us
|
|
var gTimer;
|
|
|
|
// Browsing to a new URL - pushing us into the bfcache - should cause
|
|
// animations to stop, and resume when we return
|
|
/* global yield */
|
|
function testBFCache() {
|
|
function theTest() {
|
|
var abort = false;
|
|
var chances, gImage, gFrames;
|
|
gBrowser.selectedTab = BrowserTestUtils.addTab(
|
|
gBrowser,
|
|
TESTROOT + "image.html"
|
|
);
|
|
gBrowser.selectedBrowser.addEventListener(
|
|
"pageshow",
|
|
function() {
|
|
var window = gBrowser.contentWindow;
|
|
// If false, we are in an optimized build, and we abort this and
|
|
// all further tests
|
|
if (
|
|
!actOnMozImage(window.document, "img1", function(image) {
|
|
gImage = image;
|
|
gFrames = gImage.framesNotified;
|
|
})
|
|
) {
|
|
gBrowser.removeCurrentTab();
|
|
abort = true;
|
|
}
|
|
goer.next();
|
|
},
|
|
{ capture: true, once: true }
|
|
);
|
|
yield;
|
|
if (abort) {
|
|
finish();
|
|
yield; // optimized build
|
|
}
|
|
|
|
// Let animation run for a bit
|
|
chances = 120;
|
|
do {
|
|
gTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
|
gTimer.initWithCallback(
|
|
function() {
|
|
if (gImage.framesNotified >= 20) {
|
|
goer.send(true);
|
|
} else {
|
|
chances--;
|
|
goer.send(chances == 0); // maybe if we wait a bit, it will happen
|
|
}
|
|
},
|
|
500,
|
|
Ci.nsITimer.TYPE_ONE_SHOT
|
|
);
|
|
} while (!yield);
|
|
is(chances > 0, true, "Must have animated a few frames so far");
|
|
|
|
// Browse elsewhere; push our animating page into the bfcache
|
|
gBrowser.loadURI("about:blank");
|
|
|
|
// Wait a bit for page to fully load, then wait a while and
|
|
// see that no animation occurs.
|
|
gTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
|
gTimer.initWithCallback(
|
|
function() {
|
|
gFrames = gImage.framesNotified;
|
|
gTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
|
gTimer.initWithCallback(
|
|
function() {
|
|
// Might have a few stray frames, until other page totally loads
|
|
var additionalFrames = gImage.framesNotified - gFrames;
|
|
is(
|
|
additionalFrames == 0,
|
|
true,
|
|
"Must have not animated in bfcache! Got " +
|
|
additionalFrames +
|
|
" additional frames"
|
|
);
|
|
goer.next();
|
|
},
|
|
4000,
|
|
Ci.nsITimer.TYPE_ONE_SHOT
|
|
); // 4 seconds - expect 40 frames
|
|
},
|
|
0,
|
|
Ci.nsITimer.TYPE_ONE_SHOT
|
|
); // delay of 0 - wait for next event loop
|
|
yield;
|
|
|
|
// Go back
|
|
gBrowser.goBack();
|
|
|
|
chances = 120;
|
|
do {
|
|
gTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
|
gTimer.initWithCallback(
|
|
function() {
|
|
if (gImage.framesNotified - gFrames >= 20) {
|
|
goer.send(true);
|
|
} else {
|
|
chances--;
|
|
goer.send(chances == 0); // maybe if we wait a bit, it will happen
|
|
}
|
|
},
|
|
500,
|
|
Ci.nsITimer.TYPE_ONE_SHOT
|
|
);
|
|
} while (!yield);
|
|
is(chances > 0, true, "Must have animated once out of bfcache!");
|
|
|
|
// Finally, check that the css background image has essentially the same
|
|
// # of frames, implying that it animated at the same times as the regular
|
|
// image. We can easily retrieve regular images through their HTML image
|
|
// elements, which is what we did before. For the background image, we
|
|
// create a regular image now, and read the current frame count.
|
|
var doc = gBrowser.selectedBrowser.contentWindow.document;
|
|
var div = doc.getElementById("background_div");
|
|
div.innerHTML += '<img src="animated2.gif" id="img3">';
|
|
actOnMozImage(doc, "img3", function(image) {
|
|
is(
|
|
Math.abs(image.framesNotified - gImage.framesNotified) /
|
|
gImage.framesNotified <
|
|
0.5,
|
|
true,
|
|
"Must have also animated the background image, and essentially the same # of frames. " +
|
|
"Regular image got " +
|
|
gImage.framesNotified +
|
|
" frames but background image got " +
|
|
image.framesNotified
|
|
);
|
|
});
|
|
|
|
gBrowser.removeCurrentTab();
|
|
|
|
nextTest();
|
|
}
|
|
|
|
var goer = theTest();
|
|
goer.next();
|
|
}
|
|
|
|
// Check that imgContainers are shared on the same page and
|
|
// between tabs
|
|
function testSharedContainers() {
|
|
function theTest() {
|
|
var gImages = [];
|
|
var gFrames;
|
|
|
|
gBrowser.selectedTab = BrowserTestUtils.addTab(
|
|
gBrowser,
|
|
TESTROOT + "image.html"
|
|
);
|
|
gBrowser.selectedBrowser.addEventListener(
|
|
"pageshow",
|
|
function() {
|
|
actOnMozImage(gBrowser.contentDocument, "img1", function(image) {
|
|
gImages[0] = image;
|
|
gFrames = image.framesNotified; // May in theory have frames from last test
|
|
// in this counter - so subtract them out
|
|
});
|
|
goer.next();
|
|
},
|
|
{ capture: true, once: true }
|
|
);
|
|
yield;
|
|
|
|
// Load next tab somewhat later
|
|
gTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
|
gTimer.initWithCallback(
|
|
function() {
|
|
goer.next();
|
|
},
|
|
1500,
|
|
Ci.nsITimer.TYPE_ONE_SHOT
|
|
);
|
|
yield;
|
|
|
|
gBrowser.selectedTab = BrowserTestUtils.addTab(
|
|
gBrowser,
|
|
TESTROOT + "imageX2.html"
|
|
);
|
|
gBrowser.selectedBrowser.addEventListener(
|
|
"pageshow",
|
|
function() {
|
|
[1, 2].forEach(function(i) {
|
|
actOnMozImage(gBrowser.contentDocument, "img" + i, function(image) {
|
|
gImages[i] = image;
|
|
});
|
|
});
|
|
goer.next();
|
|
},
|
|
{ capture: true, once: true }
|
|
);
|
|
yield;
|
|
|
|
var chances = 120;
|
|
do {
|
|
gTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
|
gTimer.initWithCallback(
|
|
function() {
|
|
if (gImages[0].framesNotified - gFrames >= 10) {
|
|
goer.send(true);
|
|
} else {
|
|
chances--;
|
|
goer.send(chances == 0); // maybe if we wait a bit, it will happen
|
|
}
|
|
},
|
|
500,
|
|
Ci.nsITimer.TYPE_ONE_SHOT
|
|
);
|
|
} while (!yield);
|
|
is(
|
|
chances > 0,
|
|
true,
|
|
"Must have been animating while showing several images"
|
|
);
|
|
|
|
// Check they all have the same frame counts
|
|
var theFrames = null;
|
|
[0, 1, 2].forEach(function(i) {
|
|
var frames = gImages[i].framesNotified;
|
|
if (theFrames == null) {
|
|
theFrames = frames;
|
|
} else {
|
|
is(
|
|
theFrames,
|
|
frames,
|
|
"Sharing the same imgContainer means *exactly* the same frame counts!"
|
|
);
|
|
}
|
|
});
|
|
|
|
gBrowser.removeCurrentTab();
|
|
gBrowser.removeCurrentTab();
|
|
|
|
nextTest();
|
|
}
|
|
|
|
var goer = theTest();
|
|
goer.next();
|
|
}
|
|
|
|
var tests = [testBFCache, testSharedContainers];
|
|
|
|
function nextTest() {
|
|
if (!tests.length) {
|
|
finish();
|
|
return;
|
|
}
|
|
tests.shift()();
|
|
}
|
|
|
|
function test() {
|
|
ignoreAllUncaughtExceptions();
|
|
nextTest();
|
|
}
|