--- /dev/null
+// Gets the size of a file
+function webdeveloper_getFileSize(url)
+{
+ var cacheService = Components.classes["@mozilla.org/network/cache-service;1"].getService(Components.interfaces.nsICacheService);
+ var cacheSession = null;
+ var file = null;
+ var fileSize = null;
+ var readAccess = Components.interfaces.nsICache.ACCESS_READ;
+
+ // Try to get the file size from the HTTP cache
+ try
+ {
+ cacheSession = cacheService.createSession("HTTP", 0, true);
+ cacheSession.doomEntriesIfExpired = false;
+ file = cacheSession.openCacheEntry(url, readAccess, false);
+
+ // If there is a file
+ if(file)
+ {
+ fileSize = file.dataSize;
+ }
+ }
+ catch(exception)
+ {
+ // Try to get the file size from the FTP cache
+ try
+ {
+ cacheSession = cacheService.createSession("FTP", 0, true);
+ cacheSession.doomEntriesIfExpired = false;
+ file = cacheSession.openCacheEntry(url, readAccess, false);
+
+ // If there is a file
+ if(file)
+ {
+ fileSize = file.dataSize;
+ }
+ }
+ catch(exception)
+ {
+ fileSize = null;
+ }
+ }
+
+ // If the file size could not be retrieved from the cache
+ if(!fileSize)
+ {
+ // Try to download the file
+ try
+ {
+ var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
+
+ fileSize = ioService.newChannelFromURI(ioService.newURI(url, null, null)).open().available();
+ }
+ catch(exception)
+ {
+ fileSize = null;
+ }
+ }
+
+ return fileSize;
+}
+
+// Gets the uncompressed size of a file
+function webdeveloper_getUncompressedFileSize(url)
+{
+ var cacheService = Components.classes["@mozilla.org/network/cache-service;1"].getService(Components.interfaces.nsICacheService);
+ var cacheSession = null;
+ var file = null;
+ var fileCompressed = true;
+ var fileSize = null;
+ var readAccess = Components.interfaces.nsICache.ACCESS_READ;
+
+ // Try to get the file size from the HTTP cache
+ try
+ {
+ cacheSession = cacheService.createSession("HTTP", 0, true);
+ cacheSession.doomEntriesIfExpired = false;
+ file = cacheSession.openCacheEntry(url, readAccess, false);
+ }
+ catch(exception)
+ {
+ // Try to get the file size from the FTP cache
+ try
+ {
+ cacheSession = cacheService.createSession("FTP", 0, true);
+ cacheSession.doomEntriesIfExpired = false;
+ file = cacheSession.openCacheEntry(url, readAccess, false);
+ }
+ catch(exception)
+ {
+ file = null;
+ }
+ }
+
+ // If there is a file
+ if(file)
+ {
+ var encoding = null;
+ var responseHeaders = null;
+
+ // Try to get the cache encoding
+ try
+ {
+ // Specific case-sensitive required
+ encoding = file.getMetaDataElement("request-Accept-Encoding");
+ }
+ catch(exception)
+ {
+ encoding = null;
+
+ // Try to get the response headers
+ try
+ {
+ // Specific case-sensitive required
+ responseHeaders = file.getMetaDataElement("response-head");
+ }
+ catch(exception)
+ {
+ responseHeaders = null;
+ }
+ }
+
+ // If the cache is not GZIP encoded
+ if((!encoding || encoding.indexOf("gzip") == -1) && (!responseHeaders || responseHeaders.indexOf("Content-Encoding: gzip") == -1))
+ {
+ fileCompressed = false;
+ }
+ }
+
+ // If the file is compressed
+ if(fileCompressed)
+ {
+ // Try to download the file
+ try
+ {
+ var request = new XMLHttpRequest();
+
+ request.open("get", url, false);
+ request.send(null);
+
+ fileSize = request.responseText.length;
+ }
+ catch(exception)
+ {
+ fileSize = null;
+ }
+ }
+
+ return fileSize;
+}
+
+// Retrieves the source from the given URL
+function webdeveloper_retrieveSource(url)
+{
+ var source = null;
+
+ // If the URL is not entirely generated
+ if(url.indexOf("wyciwyg://") != 0)
+ {
+ var cacheService = Components.classes["@mozilla.org/network/cache-service;1"].getService(Components.interfaces.nsICacheService);
+ var cacheSession = null;
+ var file = null;
+ var readAccess = Components.interfaces.nsICache.ACCESS_READ;
+
+ // Try to get the file size from the HTTP cache
+ try
+ {
+ cacheSession = cacheService.createSession("HTTP", 0, true);
+ cacheSession.doomEntriesIfExpired = false;
+ file = cacheSession.openCacheEntry(url, readAccess, false);
+ }
+ catch(exception)
+ {
+ // Try to get the file size from the FTP cache
+ try
+ {
+ cacheSession = cacheService.createSession("FTP", 0, true);
+ cacheSession.doomEntriesIfExpired = false;
+ file = cacheSession.openCacheEntry(url, readAccess, false);
+ }
+ catch(exception)
+ {
+ file = null;
+ }
+ }
+
+ // If there is a file
+ if(file)
+ {
+ var encoding = null;
+ var responseHeaders = null;
+
+ // Try to get the cache encoding
+ try
+ {
+ // Specific case-sensitive required
+ encoding = file.getMetaDataElement("request-Accept-Encoding");
+ }
+ catch(exception)
+ {
+ encoding = null;
+
+ // Try to get the response headers
+ try
+ {
+ // Specific case-sensitive required
+ responseHeaders = file.getMetaDataElement("response-head");
+ }
+ catch(exception)
+ {
+ responseHeaders = null;
+ }
+ }
+
+ // If the cache is not GZIP encoded
+ if((!encoding || encoding.indexOf("gzip") == -1) && (!responseHeaders || (responseHeaders.indexOf("Content-Encoding: deflate") == -1 && responseHeaders.indexOf("Content-Encoding: gzip") == -1)))
+ {
+ var inputStream = file.openInputStream(0);
+ var scriptableStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
+
+ scriptableStream.init(inputStream);
+
+ source = scriptableStream.read(scriptableStream.available());
+
+ scriptableStream.close();
+ inputStream.close();
+ }
+ }
+
+ // If the source has not been loaded
+ if(!source)
+ {
+ // Try to load the URL
+ try
+ {
+ var request = new XMLHttpRequest();
+
+ request.open("get", url, false);
+ request.send(null);
+
+ source = request.responseText;
+ }
+ catch(exception)
+ {
+ source = null;
+ }
+ }
+ }
+
+ return source;
+}