From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- ...browser_ext_contentscript_dataTransfer_files.js | 104 +++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_contentscript_dataTransfer_files.js (limited to 'browser/components/extensions/test/browser/browser_ext_contentscript_dataTransfer_files.js') diff --git a/browser/components/extensions/test/browser/browser_ext_contentscript_dataTransfer_files.js b/browser/components/extensions/test/browser/browser_ext_contentscript_dataTransfer_files.js new file mode 100644 index 0000000000..4819f98475 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_contentscript_dataTransfer_files.js @@ -0,0 +1,104 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +const TEST_ORIGIN = "http://mochi.test:8888"; +const TEST_BASEURL = getRootDirectory(gTestPath).replace( + "chrome://mochitests/content", + TEST_ORIGIN +); + +const TEST_URL = `${TEST_BASEURL}file_dataTransfer_files.html`; + +// This test ensure that we don't cache the DataTransfer files instances when +// they are being accessed by an extension content or user script (regression +// test related to Bug 1707214). +add_task(async function test_contentAndUserScripts_dataTransfer_files() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["http://mochi.test/"], + user_scripts: {}, + }, + + background: async function () { + await browser.contentScripts.register({ + js: [{ file: "content_script.js" }], + matches: ["http://mochi.test/*"], + runAt: "document_start", + }); + + await browser.userScripts.register({ + js: [{ file: "user_script.js" }], + matches: ["http://mochi.test/*"], + runAt: "document_start", + }); + + browser.test.sendMessage("scripts-registered"); + }, + + files: { + "content_script.js": function () { + document.addEventListener( + "drop", + function (e) { + const files = e.dataTransfer.files || []; + document.querySelector("#result-content-script").textContent = + files[0]?.name; + }, + { once: true, capture: true } + ); + + // Export a function that will be called by the drop event listener subscribed + // by the test page itself, which is the last one to be registered and then + // executed. This function retrieve the test results and send them to be + // asserted for the expected filenames. + this.exportFunction( + () => { + const results = { + contentScript: document.querySelector("#result-content-script") + .textContent, + userScript: document.querySelector("#result-user-script") + .textContent, + pageScript: document.querySelector("#result-page-script") + .textContent, + }; + browser.test.sendMessage("test-done", results); + }, + window, + { defineAs: "testDone" } + ); + }, + "user_script.js": function () { + document.addEventListener( + "drop", + function (e) { + const files = e.dataTransfer.files || []; + document.querySelector("#result-user-script").textContent = + files[0]?.name; + }, + { once: true, capture: true } + ); + }, + }, + }); + + await extension.startup(); + await extension.awaitMessage("scripts-registered"); + + let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_URL); + + const results = await extension.awaitMessage("test-done"); + const expectedFilename = "testfile.html"; + Assert.deepEqual( + results, + { + contentScript: expectedFilename, + userScript: expectedFilename, + pageScript: expectedFilename, + }, + "Got the expected drag and drop filenames" + ); + + BrowserTestUtils.removeTab(tab); + await extension.unload(); +}); -- cgit v1.2.3