From a90a5cba08fdf6c0ceb95101c275108a152a3aed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 12 Jun 2024 07:35:37 +0200 Subject: Merging upstream version 127.0. Signed-off-by: Daniel Baumann --- ...lipboard_paste_noformatting_content_analysis.js | 92 ++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 toolkit/components/contentanalysis/tests/browser/browser_clipboard_paste_noformatting_content_analysis.js (limited to 'toolkit/components/contentanalysis/tests/browser/browser_clipboard_paste_noformatting_content_analysis.js') diff --git a/toolkit/components/contentanalysis/tests/browser/browser_clipboard_paste_noformatting_content_analysis.js b/toolkit/components/contentanalysis/tests/browser/browser_clipboard_paste_noformatting_content_analysis.js new file mode 100644 index 0000000000..0eedcddd17 --- /dev/null +++ b/toolkit/components/contentanalysis/tests/browser/browser_clipboard_paste_noformatting_content_analysis.js @@ -0,0 +1,92 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +let mockCA = makeMockContentAnalysis(); + +add_setup(async function test_setup() { + mockCA = mockContentAnalysisService(mockCA); +}); + +const PAGE_URL = + "https://example.com/browser/toolkit/components/contentanalysis/tests/browser/clipboard_paste_noformatting.html"; +async function testClipboardPasteNoFormatting(allowPaste) { + mockCA.setupForTest(allowPaste); + + const trans = Cc["@mozilla.org/widget/transferable;1"].createInstance( + Ci.nsITransferable + ); + trans.init(null); + const CLIPBOARD_TEXT_STRING = "Some text"; + const CLIPBOARD_HTML_STRING = "Some HTML"; + { + trans.addDataFlavor("text/plain"); + const str = Cc["@mozilla.org/supports-string;1"].createInstance( + Ci.nsISupportsString + ); + str.data = CLIPBOARD_TEXT_STRING; + trans.setTransferData("text/plain", str); + } + { + trans.addDataFlavor("text/html"); + const str = Cc["@mozilla.org/supports-string;1"].createInstance( + Ci.nsISupportsString + ); + str.data = CLIPBOARD_HTML_STRING; + trans.setTransferData("text/html", str); + } + + // Write to clipboard. + Services.clipboard.setData(trans, null, Ci.nsIClipboard.kGlobalClipboard); + + let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, PAGE_URL); + let browser = tab.linkedBrowser; + let result = await SpecialPowers.spawn(browser, [allowPaste], allowPaste => { + return new Promise(resolve => { + content.document.addEventListener("testresult", event => { + resolve(event.detail.result); + }); + content.document.getElementById("pasteAllowed").checked = allowPaste; + content.document.dispatchEvent(new content.CustomEvent("teststart", {})); + }); + }); + is(result, true, "Got unexpected result from page"); + + // Because we call event.clipboardData.getData in the test, this causes another call to + // content analysis. + is(mockCA.calls.length, 2, "Correct number of calls to Content Analysis"); + assertContentAnalysisRequest(mockCA.calls[0], CLIPBOARD_TEXT_STRING); + assertContentAnalysisRequest(mockCA.calls[1], CLIPBOARD_TEXT_STRING); + + BrowserTestUtils.removeTab(tab); +} + +function assertContentAnalysisRequest(request, expectedText) { + is(request.url.spec, PAGE_URL, "request has correct URL"); + is( + request.analysisType, + Ci.nsIContentAnalysisRequest.eBulkDataEntry, + "request has correct analysisType" + ); + is( + request.operationTypeForDisplay, + Ci.nsIContentAnalysisRequest.eClipboard, + "request has correct operationTypeForDisplay" + ); + is(request.filePath, "", "request filePath should match"); + is(request.textContent, expectedText, "request textContent should match"); + is(request.printDataHandle, 0, "request printDataHandle should not be 0"); + is(request.printDataSize, 0, "request printDataSize should not be 0"); + ok(!!request.requestToken.length, "request requestToken should not be empty"); +} + +add_task( + async function testClipboardPasteNoFormattingWithContentAnalysisAllow() { + await testClipboardPasteNoFormatting(true); + } +); + +add_task( + async function testClipboardPasteNoFormattingWithContentAnalysisBlock() { + await testClipboardPasteNoFormatting(false); + } +); -- cgit v1.2.3