clipboardTypes.forEach(function (type) { if (clipboard.isClipboardTypeSupported(type)) {
clipboardTypes.forEach(function (otherType) { if (clipboard.isClipboardTypeSupported(otherType)) {
[true, false].forEach(async function (async) {
add_task(async function test_clipboard_pending_asyncSetData() {
info(
`Test having a pending asyncSetData request on ${type} and then make a new ${
async ? "asyncSetData" : "setData"
} request on ${otherType}`
);
// Create a pending asyncSetData request
let priorResult;
let priorRequest;
let priorPromise = new Promise(resolve => {
priorRequest = clipboard.asyncSetData(type, null, {
QueryInterface: SpecialPowers.ChromeUtils.generateQI([ "nsIAsyncSetClipboardDataCallback",
]),
onComplete(rv) {
priorResult = rv;
resolve();
},
});
});
// Create a new request
let str = writeRandomStringToClipboard( "text/plain",
otherType, null,
async
);
if (type === otherType) {
info( "The new request to the same clipboard type should cancel the prior pending request"
);
await priorPromise;
is(
priorResult,
Cr.NS_ERROR_ABORT, "The pending asyncSetData request should be canceled"
); try {
priorRequest.setData(
generateNewTransferable("text/plain", generateRandomString())
);
ok( false, "An error should be thrown if setData is called on a canceled clipboard request"
);
} catch (e) {
is(
e.result,
Cr.NS_ERROR_FAILURE, "An error should be thrown if setData is called on a canceled clipboard request"
);
}
} else {
info( "The new request to the different clipboard type should not cancel the prior pending request"
);
str = generateRandomString();
priorRequest.setData(
generateNewTransferable("text/plain", str), null
);
await priorPromise;
is(
priorResult,
Cr.NS_OK, "The pending asyncSetData request should success"
);
try {
priorRequest.setData(
generateNewTransferable("text/plain", generateRandomString())
);
ok( false, "Calling setData multiple times should throw an error"
);
} catch (e) {
is(
e.result,
Cr.NS_ERROR_FAILURE, "Calling setData multiple times should throw an error"
);
}
}
// Test clipboard data.
is(
getClipboardData("text/plain", type),
str,
`Test clipboard data for type ${type}`
);
add_task(async function test_clipboard_asyncSetData_abort() {
info(`Test abort asyncSetData request on ${type}`);
// Create a pending asyncSetData request
let result;
let request = clipboard.asyncSetData(type, null, rv => {
result = rv;
});
// Abort with NS_OK. try {
request.abort(Cr.NS_OK);
ok(false, "Throw an error when attempting to abort with NS_OK");
} catch (e) {
is(
e.result,
Cr.NS_ERROR_FAILURE, "Should throw an error when attempting to abort with NS_OK"
);
}
is(result, undefined, "The asyncSetData request should not be canceled");
// Abort with NS_ERROR_ABORT.
request.abort(Cr.NS_ERROR_ABORT);
is(
result,
Cr.NS_ERROR_ABORT, "The asyncSetData request should be canceled"
); try {
request.abort(Cr.NS_ERROR_FAILURE);
ok(false, "Throw an error when attempting to abort again");
} catch (e) {
is(
e.result,
Cr.NS_ERROR_FAILURE, "Should throw an error when attempting to abort again"
);
}
is(
result,
Cr.NS_ERROR_ABORT, "The callback should not be notified again"
);
try {
request.setData(
generateNewTransferable("text/plain", generateRandomString())
);
ok( false, "An error should be thrown if setData is called on a canceled clipboard request"
);
} catch (e) {
is(
e.result,
Cr.NS_ERROR_FAILURE, "An error should be thrown if setData is called on a canceled clipboard request"
);
}
});
}
});
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.17Angebot
Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können
¤
Die farbliche Syntaxdarstellung ist noch experimentell.
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.