Bug 731779: Integrate the Add-on SDK loader and API libraries into Firefox (uplifting from addon-sdk a16bbd5772880b578a939eeb65102bca6560d494)
This commit is contained in:
73
addon-sdk/source/lib/sdk/test/tmp-file.js
Normal file
73
addon-sdk/source/lib/sdk/test/tmp-file.js
Normal file
@@ -0,0 +1,73 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
"use strict";
|
||||
|
||||
const { Cc, Ci } = require("chrome");
|
||||
|
||||
const system = require("sdk/system");
|
||||
const file = require("sdk/io/file");
|
||||
const unload = require("sdk/system/unload");
|
||||
|
||||
// Retrieve the path to the OS temporary directory:
|
||||
const tmpDir = require("sdk/system").pathFor("TmpD");
|
||||
|
||||
// List of all tmp file created
|
||||
let files = [];
|
||||
|
||||
// Remove all tmp files on addon disabling
|
||||
unload.when(function () {
|
||||
files.forEach(function (path){
|
||||
// Catch exception in order to avoid leaking following files
|
||||
try {
|
||||
if (file.exists(path))
|
||||
file.remove(path);
|
||||
}
|
||||
catch(e) {
|
||||
console.exception(e);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Utility function that synchronously reads local resource from the given
|
||||
// `uri` and returns content string. Read in binary mode.
|
||||
function readBinaryURI(uri) {
|
||||
let ioservice = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
|
||||
let channel = ioservice.newChannel(uri, "UTF-8", null);
|
||||
let stream = Cc["@mozilla.org/binaryinputstream;1"].
|
||||
createInstance(Ci.nsIBinaryInputStream);
|
||||
stream.setInputStream(channel.open());
|
||||
|
||||
let data = "";
|
||||
while (true) {
|
||||
let available = stream.available();
|
||||
if (available <= 0)
|
||||
break;
|
||||
data += stream.readBytes(available);
|
||||
}
|
||||
stream.close();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
// Create a temporary file from a given string and returns its path
|
||||
exports.createFromString = function createFromString(data, tmpName) {
|
||||
let filename = (tmpName ? tmpName : "tmp-file") + "-" + (new Date().getTime());
|
||||
let path = file.join(tmpDir, filename);
|
||||
|
||||
let tmpFile = file.open(path, "wb");
|
||||
tmpFile.write(data);
|
||||
tmpFile.close();
|
||||
|
||||
// Register tmp file path
|
||||
files.push(path);
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
// Create a temporary file from a given URL and returns its path
|
||||
exports.createFromURL = function createFromURL(url, tmpName) {
|
||||
let data = readBinaryURI(url);
|
||||
return exports.createFromString(data, tmpName);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user