diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /widget/tests/file_test_clipboard_asyncGetData.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'widget/tests/file_test_clipboard_asyncGetData.js')
-rw-r--r-- | widget/tests/file_test_clipboard_asyncGetData.js | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/widget/tests/file_test_clipboard_asyncGetData.js b/widget/tests/file_test_clipboard_asyncGetData.js new file mode 100644 index 0000000000..e7f2e5f0f1 --- /dev/null +++ b/widget/tests/file_test_clipboard_asyncGetData.js @@ -0,0 +1,170 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/* import-globals-from clipboard_helper.js */ + +"use strict"; + +clipboardTypes.forEach(function (type) { + if (!clipboard.isClipboardTypeSupported(type)) { + add_task(async function test_clipboard_asyncGetData_not_support() { + info(`Test asyncGetData request throwing on ${type}`); + SimpleTest.doesThrow( + () => clipboard.asyncGetData(["text/plain"], type, {}), + "Passing unsupported clipboard type should throw" + ); + }); + return; + } + + add_task(async function test_clipboard_asyncGetData_throw() { + info(`Test asyncGetData request throwing on ${type}`); + SimpleTest.doesThrow( + () => clipboard.asyncGetData([], type, {}), + "Passing empty flavor list should throw" + ); + + SimpleTest.doesThrow( + () => clipboard.asyncGetData(["text/plain"], type, null), + "Passing no callback should throw" + ); + }); + + add_task(async function test_clipboard_asyncGetData_no_matched_flavor() { + info(`Test asyncGetData have no matched flavor on ${type}`); + cleanupAllClipboard(); + is(getClipboardData("text/plain", type), null, "ensure clipboard is empty"); + + writeRandomStringToClipboard("text/plain", type); + let request = await new Promise(resolve => { + clipboard.asyncGetData( + ["text/html"], + type, + null, + SpecialPowers.Services.scriptSecurityManager.getSystemPrincipal(), + { + QueryInterface: SpecialPowers.ChromeUtils.generateQI([ + "nsIAsyncClipboardGetCallback", + ]), + // nsIAsyncClipboardGetCallback + onSuccess: SpecialPowers.wrapCallback(function ( + aAsyncGetClipboardData + ) { + resolve(aAsyncGetClipboardData); + }), + } + ); + }); + isDeeply(request.flavorList, [], "Check flavorList"); + }); + + add_task(async function test_empty_data() { + info(`Test asyncGetData request with empty data on ${type}`); + cleanupAllClipboard(); + is(getClipboardData("text/plain", type), null, "ensure clipboard is empty"); + + let request = await asyncGetClipboardData(type); + isDeeply(request.flavorList, [], "Check flavorList"); + await asyncClipboardRequestGetData(request, "text/plain", true).catch( + () => {} + ); + }); + + add_task(async function test_clipboard_asyncGetData_after_write() { + info(`Test asyncGetData request after write on ${type}`); + + let str = writeRandomStringToClipboard("text/plain", type); + let request = await asyncGetClipboardData(type); + isDeeply(request.flavorList, ["text/plain"], "Check flavorList"); + is( + await asyncClipboardRequestGetData(request, "text/plain"), + str, + "Check data" + ); + ok(request.valid, "request should still be valid"); + // Requesting a flavor that is not in the list should throw error. + await asyncClipboardRequestGetData(request, "text/html", true).catch( + () => {} + ); + ok(request.valid, "request should still be valid"); + + // Writing a new data should invalid existing get request. + str = writeRandomStringToClipboard("text/plain", type); + await asyncClipboardRequestGetData(request, "text/plain").then( + () => { + ok(false, "asyncClipboardRequestGetData should not success"); + }, + e => { + ok(true, "asyncClipboardRequestGetData should reject"); + } + ); + ok(!request.valid, "request should no longer be valid"); + + info(`check clipboard data again`); + request = await asyncGetClipboardData(type); + isDeeply(request.flavorList, ["text/plain"], "Check flavorList"); + is( + await asyncClipboardRequestGetData(request, "text/plain"), + str, + "Check data" + ); + + cleanupAllClipboard(); + }); + + add_task(async function test_clipboard_asyncGetData_after_empty() { + info(`Test asyncGetData request after empty on ${type}`); + + let str = writeRandomStringToClipboard("text/plain", type); + let request = await asyncGetClipboardData(type); + isDeeply(request.flavorList, ["text/plain"], "Check flavorList"); + is( + await asyncClipboardRequestGetData(request, "text/plain"), + str, + "Check data" + ); + ok(request.valid, "request should still be valid"); + + // Empty clipboard data + emptyClipboardData(type); + is(getClipboardData("text/plain", type), null, "ensure clipboard is empty"); + + await asyncClipboardRequestGetData(request, "text/plain").then( + () => { + ok(false, "asyncClipboardRequestGetData should not success"); + }, + e => { + ok(true, "asyncClipboardRequestGetData should reject"); + } + ); + ok(!request.valid, "request should no longer be valid"); + + info(`check clipboard data again`); + request = await asyncGetClipboardData(type); + isDeeply(request.flavorList, [], "Check flavorList"); + + cleanupAllClipboard(); + }); +}); + +add_task(async function test_html_data() { + info(`Test asyncGetData request with html data`); + + const html_str = `<img src="https://example.com/oops">`; + writeStringToClipboard(html_str, "text/html", clipboard.kGlobalClipboard); + + let request = await asyncGetClipboardData(clipboard.kGlobalClipboard); + isDeeply(request.flavorList, ["text/html"], "Check flavorList"); + is( + await asyncClipboardRequestGetData(request, "text/html"), + // On Windows, widget adds extra data into HTML clipboard. + navigator.platform.includes("Win") + ? `<html><body>\n<!--StartFragment-->${html_str}<!--EndFragment-->\n</body>\n</html>` + : html_str, + "Check data" + ); + // Requesting a flavor that is not in the list should throw error. + await asyncClipboardRequestGetData(request, "text/plain", true).catch( + () => {} + ); +}); |