diff options
Diffstat (limited to 'image/test/mochitest/imgutils.js')
-rw-r--r-- | image/test/mochitest/imgutils.js | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/image/test/mochitest/imgutils.js b/image/test/mochitest/imgutils.js new file mode 100644 index 000000000..ab9c478df --- /dev/null +++ b/image/test/mochitest/imgutils.js @@ -0,0 +1,138 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +// Helper file for shared image functionality +// +// Note that this is use by tests elsewhere in the source tree. When in doubt, +// check mxr before removing or changing functionality. + +// Helper function to clear both the content and chrome image caches +function clearAllImageCaches() +{ + var tools = SpecialPowers.Cc["@mozilla.org/image/tools;1"] + .getService(SpecialPowers.Ci.imgITools); + var imageCache = tools.getImgCacheForDocument(window.document); + imageCache.clearCache(true); // true=chrome + imageCache.clearCache(false); // false=content +} + +// Helper function to clear the image cache of content images +function clearImageCache() +{ + var tools = SpecialPowers.Cc["@mozilla.org/image/tools;1"] + .getService(SpecialPowers.Ci.imgITools); + var imageCache = tools.getImgCacheForDocument(window.document); + imageCache.clearCache(false); // true=chrome, false=content +} + +// Helper function to determine if the frame is decoded for a given image id +function isFrameDecoded(id) +{ + return (getImageStatus(id) & + SpecialPowers.Ci.imgIRequest.STATUS_FRAME_COMPLETE) + ? true : false; +} + +// Helper function to determine if the image is loaded for a given image id +function isImageLoaded(id) +{ + return (getImageStatus(id) & + SpecialPowers.Ci.imgIRequest.STATUS_LOAD_COMPLETE) + ? true : false; +} + +// Helper function to get the status flags of an image +function getImageStatus(id) +{ + // Get the image + var img = SpecialPowers.wrap(document.getElementById(id)); + + // QI the image to nsImageLoadingContent + img.QueryInterface(SpecialPowers.Ci.nsIImageLoadingContent); + + // Get the request + var request = img.getRequest(SpecialPowers.Ci + .nsIImageLoadingContent + .CURRENT_REQUEST); + + // Return the status + return request.imageStatus; +} + +// Forces a synchronous decode of an image by drawing it to a canvas. Only +// really meaningful if the image is fully loaded first +function forceDecode(id) +{ + // Get the image + var img = document.getElementById(id); + + // Make a new canvas + var canvas = document.createElement("canvas"); + + // Draw the image to the canvas. This forces a synchronous decode + var ctx = canvas.getContext("2d"); + ctx.drawImage(img, 0, 0); +} + + +// Functions to facilitate getting/setting various image-related prefs +// +// If you change a pref in a mochitest, Don't forget to reset it to its +// original value! +// +// Null indicates no pref set + +const DISCARD_ENABLED_PREF = {name: "discardable", branch: "image.mem.", type: "bool"}; +const DECODEONDRAW_ENABLED_PREF = {name: "decodeondraw", branch: "image.mem.", type: "bool"}; +const DISCARD_TIMEOUT_PREF = {name: "min_discard_timeout_ms", branch: "image.mem.", type: "int"}; + +function setImagePref(pref, val) +{ + var prefService = SpecialPowers.Cc["@mozilla.org/preferences-service;1"] + .getService(SpecialPowers.Ci.nsIPrefService); + var branch = prefService.getBranch(pref.branch); + if (val != null) { + switch(pref.type) { + case "bool": + branch.setBoolPref(pref.name, val); + break; + case "int": + branch.setIntPref(pref.name, val); + break; + default: + throw new Error("Unknown pref type"); + } + } + else if (branch.prefHasUserValue(pref.name)) + branch.clearUserPref(pref.name); +} + +function getImagePref(pref) +{ + var prefService = SpecialPowers.Cc["@mozilla.org/preferences-service;1"] + .getService(SpecialPowers.Ci.nsIPrefService); + var branch = prefService.getBranch(pref.branch); + if (branch.prefHasUserValue(pref.name)) { + switch (pref.type) { + case "bool": + return branch.getBoolPref(pref.name); + case "int": + return branch.getIntPref(pref.name); + default: + throw new Error("Unknown pref type"); + } + } + else + return null; +} + +// JS implementation of imgIScriptedNotificationObserver with stubs for all of its methods. +function ImageDecoderObserverStub() +{ + this.sizeAvailable = function sizeAvailable(aRequest) {} + this.frameComplete = function frameComplete(aRequest) {} + this.decodeComplete = function decodeComplete(aRequest) {} + this.loadComplete = function loadComplete(aRequest) {} + this.frameUpdate = function frameUpdate(aRequest) {} + this.discard = function discard(aRequest) {} + this.isAnimated = function isAnimated(aRequest) {} + this.hasTransparency = function hasTransparency(aRequest) {} +} |