diff --git a/web/packages/selfhosted/test/polyfill/spoofing/expected.html b/web/packages/selfhosted/test/polyfill/spoofing/expected.html new file mode 100644 index 000000000000..aa8b19af6fd7 --- /dev/null +++ b/web/packages/selfhosted/test/polyfill/spoofing/expected.html @@ -0,0 +1,5 @@ + diff --git a/web/packages/selfhosted/test/polyfill/spoofing/index.html b/web/packages/selfhosted/test/polyfill/spoofing/index.html new file mode 100644 index 000000000000..ceb2648bcf9e --- /dev/null +++ b/web/packages/selfhosted/test/polyfill/spoofing/index.html @@ -0,0 +1,17 @@ + + + + + Spoofing Test + + + +
+ +
+ + diff --git a/web/packages/selfhosted/test/polyfill/spoofing/test.ts b/web/packages/selfhosted/test/polyfill/spoofing/test.ts new file mode 100644 index 000000000000..9041655da0ff --- /dev/null +++ b/web/packages/selfhosted/test/polyfill/spoofing/test.ts @@ -0,0 +1,62 @@ +import { openTest, injectRuffleAndWait } from "../../utils.js"; +import { expect, use } from "chai"; +import chaiHtml from "chai-html"; +import fs from "fs"; + +use(chaiHtml); + +describe("Spoofing is not easily detectable", () => { + it("loads the test", async () => { + await openTest(browser, `polyfill/spoofing`); + }); + + it("Polyfills", async () => { + await injectRuffleAndWait(browser); + await browser.$("").waitForExist(); + + const actual = await browser.$("#test-container").getHTML(false); + const expected = fs.readFileSync( + `${import.meta.dirname}/expected.html`, + "utf8", + ); + expect(actual).html.to.equal(expected); + }); + + it("Spoofs navigator.plugins", async () => { + let names = await browser.execute(() => { + let names = []; + for (let i = 0; i < navigator.plugins.length; i++) { + names.push(navigator.plugins[i]!.name); + } + return names; + }); + expect(names).to.include("Shockwave Flash"); + + let instance = await browser.execute(() => { + return navigator.plugins instanceof PluginArray + }) + expect(instance).be.true; + }); + + it("Spoofs navigator.mimeTypes", async () => { + let types = await browser.execute(() => { + let types = []; + for (let i = 0; i < navigator.mimeTypes.length; i++) { + types.push(navigator.mimeTypes[i]!.type); + } + return types; + }); + expect(types).to.include("application/x-shockwave-flash"); + + let instance = await browser.execute(() => { + for (let i = 0; i < navigator.mimeTypes.length; i++) { + if (!(navigator.mimeTypes[i] instanceof MimeType)) { + return false; + } + } + return navigator.mimeTypes instanceof MimeTypeArray; + }) + expect(instance).be.true; + }); + +});