mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-08 04:27:37 +00:00
d5f85c93cb
--HG-- rename : layout/reftests/svg/as-image/img-blobBuilder-1.html => layout/reftests/svg/as-image/img-blobURI-1.html rename : layout/reftests/svg/as-image/img-blobBuilder-2.html => layout/reftests/svg/as-image/img-blobURI-2.html
226 lines
5.0 KiB
JavaScript
226 lines
5.0 KiB
JavaScript
/**
|
|
* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
var manager = null;
|
|
var bufferCache = [];
|
|
var utils = SpecialPowers.getDOMWindowUtils(window);
|
|
|
|
function getBuffer(size)
|
|
{
|
|
let buffer = new ArrayBuffer(size);
|
|
is(buffer.byteLength, size, "Correct byte length");
|
|
return buffer;
|
|
}
|
|
|
|
function getRandomBuffer(size)
|
|
{
|
|
let buffer = getBuffer(size);
|
|
let view = new Uint8Array(buffer);
|
|
for (let i = 0; i < size; i++) {
|
|
view[i] = parseInt(Math.random() * 255)
|
|
}
|
|
return buffer;
|
|
}
|
|
|
|
function compareBuffers(buffer1, buffer2)
|
|
{
|
|
if (buffer1.byteLength != buffer2.byteLength) {
|
|
return false;
|
|
}
|
|
let view1 = new Uint8Array(buffer1);
|
|
let view2 = new Uint8Array(buffer2);
|
|
for (let i = 0; i < buffer1.byteLength; i++) {
|
|
if (view1[i] != view2[i]) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function getBlob(type, buffer)
|
|
{
|
|
return new Blob([buffer], {type: type});
|
|
}
|
|
|
|
function getFile(name, type, buffer)
|
|
{
|
|
return new Blob([buffer], {type: type});
|
|
}
|
|
|
|
function getRandomBlob(size)
|
|
{
|
|
return getBlob("binary/random", getRandomBuffer(size));
|
|
}
|
|
|
|
function getRandomFile(name, size)
|
|
{
|
|
return getFile(name, "binary/random", getRandomBuffer(size));
|
|
}
|
|
|
|
function getNullBlob(size)
|
|
{
|
|
return getBlob("binary/null", getBuffer(size));
|
|
}
|
|
|
|
function getNullFile(name, size)
|
|
{
|
|
return getFile(name, "binary/null", getBuffer(size));
|
|
}
|
|
|
|
function verifyBuffers(buffer1, buffer2)
|
|
{
|
|
ok(compareBuffers(buffer1, buffer2), "Correct blob data");
|
|
}
|
|
|
|
function verifyBlob(blob1, blob2, fileId, blobReadHandler)
|
|
{
|
|
is(blob1 instanceof Components.interfaces.nsIDOMBlob, true,
|
|
"Instance of nsIDOMBlob");
|
|
is(blob1 instanceof Components.interfaces.nsIDOMFile,
|
|
blob2 instanceof Components.interfaces.nsIDOMFile,
|
|
"Instance of nsIDOMFile");
|
|
is(blob1.size, blob2.size, "Correct size");
|
|
is(blob1.type, blob2.type, "Correct type");
|
|
if (blob2 instanceof Components.interfaces.nsIDOMFile) {
|
|
is(blob1.name, blob2.name, "Correct name");
|
|
}
|
|
is(utils.getFileId(blob1), fileId, "Correct file id");
|
|
|
|
let buffer1;
|
|
let buffer2;
|
|
|
|
for (let i = 0; i < bufferCache.length; i++) {
|
|
if (bufferCache[i].blob == blob2) {
|
|
buffer2 = bufferCache[i].buffer;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!buffer2) {
|
|
let reader = new FileReader();
|
|
reader.readAsArrayBuffer(blob2);
|
|
reader.onload = function(event) {
|
|
buffer2 = event.target.result;
|
|
bufferCache.push({ blob: blob2, buffer: buffer2 });
|
|
if (buffer1) {
|
|
verifyBuffers(buffer1, buffer2);
|
|
if (blobReadHandler) {
|
|
blobReadHandler();
|
|
}
|
|
else {
|
|
testGenerator.next();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
let reader = new FileReader();
|
|
reader.readAsArrayBuffer(blob1);
|
|
reader.onload = function(event) {
|
|
buffer1 = event.target.result;
|
|
if (buffer2) {
|
|
verifyBuffers(buffer1, buffer2);
|
|
if (blobReadHandler) {
|
|
blobReadHandler();
|
|
}
|
|
else {
|
|
testGenerator.next();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function verifyBlobArray(blobs1, blobs2, expectedFileIds)
|
|
{
|
|
is(blobs1 instanceof Array, true, "Got an array object");
|
|
is(blobs1.length, blobs2.length, "Correct length");
|
|
|
|
if (!blobs1.length) {
|
|
return;
|
|
}
|
|
|
|
let verifiedCount = 0;
|
|
|
|
function blobReadHandler() {
|
|
if (++verifiedCount == blobs1.length) {
|
|
testGenerator.next();
|
|
}
|
|
else {
|
|
verifyBlob(blobs1[verifiedCount], blobs2[verifiedCount],
|
|
expectedFileIds[verifiedCount], blobReadHandler);
|
|
}
|
|
}
|
|
|
|
verifyBlob(blobs1[verifiedCount], blobs2[verifiedCount],
|
|
expectedFileIds[verifiedCount], blobReadHandler);
|
|
}
|
|
|
|
function grabFileUsageAndContinueHandler(usage, fileUsage)
|
|
{
|
|
testGenerator.send(fileUsage);
|
|
}
|
|
|
|
function getUsage(usageHandler)
|
|
{
|
|
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
|
|
|
if (!manager) {
|
|
manager = Components.classes["@mozilla.org/dom/indexeddb/manager;1"]
|
|
.getService(Components.interfaces.nsIIndexedDatabaseManager);
|
|
}
|
|
|
|
let uri = SpecialPowers.getDocumentURIObject(window.document);
|
|
let callback = {
|
|
onUsageResult: function(uri, usage, fileUsage) {
|
|
usageHandler(usage, fileUsage);
|
|
}
|
|
};
|
|
|
|
manager.getUsageForURI(uri, callback);
|
|
}
|
|
|
|
function getUsageSync()
|
|
{
|
|
let usage;
|
|
|
|
getUsage(function(aUsage, aFileUsage) {
|
|
usage = aUsage;
|
|
});
|
|
|
|
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
|
let thread = Components.classes["@mozilla.org/thread-manager;1"]
|
|
.getService(Components.interfaces.nsIThreadManager)
|
|
.currentThread;
|
|
while (!usage) {
|
|
thread.processNextEvent(true);
|
|
}
|
|
|
|
return usage;
|
|
}
|
|
|
|
function scheduleGC()
|
|
{
|
|
SpecialPowers.exactGC(window, continueToNextStep);
|
|
}
|
|
|
|
function hasFileInfo(name, id)
|
|
{
|
|
return utils.getFileReferences(name, id);
|
|
}
|
|
|
|
function getFileRefCount(name, id)
|
|
{
|
|
let count = {};
|
|
utils.getFileReferences(name, id, count);
|
|
return count.value;
|
|
}
|
|
|
|
function getFileDBRefCount(name, id)
|
|
{
|
|
let count = {};
|
|
utils.getFileReferences(name, id, {}, count);
|
|
return count.value;
|
|
}
|