gecko/modules/libpr0n/test/mochitest/imgutils.js
2009-09-12 16:44:19 -06:00

102 lines
3.3 KiB
JavaScript

// 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 the image cache of content images
function clearImageCache()
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var imageCache = Components.classes["@mozilla.org/image/cache;1"]
.getService(Components.interfaces.imgICache);
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) &
Components.interfaces.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) &
Components.interfaces.imgIRequest.STATUS_LOAD_COMPLETE)
? true : false;
}
// Helper function to get the status flags of an image
function getImageStatus(id)
{
// Escalate
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
// Get the image
var img = document.getElementById(id);
// QI the image to nsImageLoadingContent
img.QueryInterface(Components.interfaces.nsIImageLoadingContent);
// Get the request
var request = img.getRequest(Components.interfaces
.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)
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
// 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 the discard timer pref
//
// Don't forget to reset the pref to the original value!
//
// Null indicates no pref set
const DISCARD_BRANCH_NAME = "image.cache.";
const DISCARD_PREF_NAME = "discard_timer_ms";
function setDiscardTimerPref(timeMS)
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var prefService = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefService);
var branch = prefService.getBranch(DISCARD_BRANCH_NAME);
if (timeMS != null)
branch.setIntPref(DISCARD_PREF_NAME, timeMS);
else if (branch.prefHasUserValue(DISCARD_PREF_NAME))
branch.clearUserPref(DISCARD_PREF_NAME);
}
function getDiscardTimerPref()
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var prefService = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefService);
var branch = prefService.getBranch(DISCARD_BRANCH_NAME);
if (branch.prefHasUserValue(DISCARD_PREF_NAME))
return branch.getIntPref("discard_timeout_ms");
else
return null;
}