diff -r 000000000000 -r 6474c204b198 image/test/browser/browser_bug666317.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/image/test/browser/browser_bug666317.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,62 @@ +waitForExplicitFinish(); + +let pageSource = + '' + + '' + + ''; + +let oldDiscardingPref, oldTab, newTab; +let prefBranch = Cc["@mozilla.org/preferences-service;1"] + .getService(Ci.nsIPrefService) + .getBranch('image.mem.'); + +function isImgDecoded() { + let img = gBrowser.getBrowserForTab(newTab).contentWindow + .document.getElementById('testImg'); + img.QueryInterface(Ci.nsIImageLoadingContent); + let request = img.getRequest(Ci.nsIImageLoadingContent.CURRENT_REQUEST); + return request.imageStatus & Ci.imgIRequest.STATUS_FRAME_COMPLETE ? true : false; +} + +// Ensure that the image is decoded by drawing it to a canvas. +function forceDecodeImg() { + let doc = gBrowser.getBrowserForTab(newTab).contentWindow.document; + let img = doc.getElementById('testImg'); + let canvas = doc.createElement('canvas'); + let ctx = canvas.getContext('2d'); + ctx.drawImage(img, 0, 0); +} + +function test() { + // Enable the discarding pref. + oldDiscardingPref = prefBranch.getBoolPref('discardable'); + prefBranch.setBoolPref('discardable', true); + + // Create and focus a new tab. + oldTab = gBrowser.selectedTab; + newTab = gBrowser.addTab('data:text/html,' + pageSource); + gBrowser.selectedTab = newTab; + + // Run step2 after the tab loads. + gBrowser.getBrowserForTab(newTab) + .addEventListener("pageshow", step2 ); +} + +function step2() { + // Check that the image is decoded. + forceDecodeImg(); + ok(isImgDecoded(), 'Image should initially be decoded.'); + + // Focus the old tab, then fire a memory-pressure notification. This should + // cause the decoded image in the new tab to be discarded. + gBrowser.selectedTab = oldTab; + var os = Cc["@mozilla.org/observer-service;1"] + .getService(Ci.nsIObserverService); + os.notifyObservers(null, 'memory-pressure', 'heap-minimize'); + ok(!isImgDecoded(), 'Image should be discarded.'); + + // And we're done. + gBrowser.removeTab(newTab); + prefBranch.setBoolPref('discardable', oldDiscardingPref); + finish(); +}