mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 02:09:05 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			208 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			208 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
 | 
						|
/* vim: set sts=2 sw=2 et tw=80: */
 | 
						|
"use strict";
 | 
						|
 | 
						|
AddonTestUtils.init(this);
 | 
						|
AddonTestUtils.overrideCertDB();
 | 
						|
AddonTestUtils.createAppInfo(
 | 
						|
  "xpcshell@tests.mozilla.org",
 | 
						|
  "XPCShell",
 | 
						|
  "1",
 | 
						|
  "43"
 | 
						|
);
 | 
						|
 | 
						|
add_task(async function test_simple() {
 | 
						|
  let extensionData = {
 | 
						|
    manifest: {
 | 
						|
      name: "Simple extension test",
 | 
						|
      version: "1.0",
 | 
						|
      manifest_version: 2,
 | 
						|
      description: "",
 | 
						|
    },
 | 
						|
  };
 | 
						|
 | 
						|
  let extension = ExtensionTestUtils.loadExtension(extensionData);
 | 
						|
  await extension.startup();
 | 
						|
  await extension.unload();
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_manifest_V3_disabled() {
 | 
						|
  Services.prefs.setBoolPref("extensions.manifestV3.enabled", false);
 | 
						|
  let extensionData = {
 | 
						|
    manifest: {
 | 
						|
      manifest_version: 3,
 | 
						|
    },
 | 
						|
  };
 | 
						|
 | 
						|
  let extension = ExtensionTestUtils.loadExtension(extensionData);
 | 
						|
  await Assert.rejects(
 | 
						|
    extension.startup(),
 | 
						|
    /Unsupported manifest version: 3/,
 | 
						|
    "manifest V3 cannot be loaded"
 | 
						|
  );
 | 
						|
  Services.prefs.clearUserPref("extensions.manifestV3.enabled");
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_manifest_V3_enabled() {
 | 
						|
  Services.prefs.setBoolPref("extensions.manifestV3.enabled", true);
 | 
						|
  let extensionData = {
 | 
						|
    manifest: {
 | 
						|
      manifest_version: 3,
 | 
						|
    },
 | 
						|
  };
 | 
						|
 | 
						|
  let extension = ExtensionTestUtils.loadExtension(extensionData);
 | 
						|
  await extension.startup();
 | 
						|
  equal(extension.extension.manifest.manifest_version, 3, "manifest V3 loads");
 | 
						|
  await extension.unload();
 | 
						|
  Services.prefs.clearUserPref("extensions.manifestV3.enabled");
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_background() {
 | 
						|
  function background() {
 | 
						|
    browser.test.log("running background script");
 | 
						|
 | 
						|
    browser.test.onMessage.addListener((x, y) => {
 | 
						|
      browser.test.assertEq(x, 10, "x is 10");
 | 
						|
      browser.test.assertEq(y, 20, "y is 20");
 | 
						|
 | 
						|
      browser.test.notifyPass("background test passed");
 | 
						|
    });
 | 
						|
 | 
						|
    browser.test.sendMessage("running", 1);
 | 
						|
  }
 | 
						|
 | 
						|
  let extensionData = {
 | 
						|
    background,
 | 
						|
    manifest: {
 | 
						|
      name: "Simple extension test",
 | 
						|
      version: "1.0",
 | 
						|
      manifest_version: 2,
 | 
						|
      description: "",
 | 
						|
    },
 | 
						|
  };
 | 
						|
 | 
						|
  let extension = ExtensionTestUtils.loadExtension(extensionData);
 | 
						|
 | 
						|
  let [, x] = await Promise.all([
 | 
						|
    extension.startup(),
 | 
						|
    extension.awaitMessage("running"),
 | 
						|
  ]);
 | 
						|
  equal(x, 1, "got correct value from extension");
 | 
						|
 | 
						|
  extension.sendMessage(10, 20);
 | 
						|
  await extension.awaitFinish();
 | 
						|
  await extension.unload();
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_extensionTypes() {
 | 
						|
  let extensionData = {
 | 
						|
    background: function () {
 | 
						|
      browser.test.assertEq(
 | 
						|
        typeof browser.extensionTypes,
 | 
						|
        "object",
 | 
						|
        "browser.extensionTypes exists"
 | 
						|
      );
 | 
						|
      browser.test.assertEq(
 | 
						|
        typeof browser.extensionTypes.RunAt,
 | 
						|
        "object",
 | 
						|
        "browser.extensionTypes.RunAt exists"
 | 
						|
      );
 | 
						|
      browser.test.notifyPass("extentionTypes test passed");
 | 
						|
    },
 | 
						|
  };
 | 
						|
 | 
						|
  let extension = ExtensionTestUtils.loadExtension(extensionData);
 | 
						|
 | 
						|
  await extension.startup();
 | 
						|
  await extension.awaitFinish();
 | 
						|
  await extension.unload();
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_policy_temporarilyInstalled() {
 | 
						|
  await AddonTestUtils.promiseStartupManager();
 | 
						|
 | 
						|
  let extensionData = {
 | 
						|
    manifest: {
 | 
						|
      manifest_version: 2,
 | 
						|
    },
 | 
						|
  };
 | 
						|
 | 
						|
  async function runTest(useAddonManager) {
 | 
						|
    let extension = ExtensionTestUtils.loadExtension({
 | 
						|
      ...extensionData,
 | 
						|
      useAddonManager,
 | 
						|
    });
 | 
						|
 | 
						|
    const expected = useAddonManager === "temporary";
 | 
						|
    await extension.startup();
 | 
						|
    const { temporarilyInstalled } = WebExtensionPolicy.getByID(extension.id);
 | 
						|
    equal(
 | 
						|
      temporarilyInstalled,
 | 
						|
      expected,
 | 
						|
      `Got the expected WebExtensionPolicy.temporarilyInstalled value on "${useAddonManager}"`
 | 
						|
    );
 | 
						|
    await extension.unload();
 | 
						|
  }
 | 
						|
 | 
						|
  await runTest("temporary");
 | 
						|
  await runTest("permanent");
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_manifest_allowInsecureRequests() {
 | 
						|
  Services.prefs.setBoolPref("extensions.manifestV3.enabled", true);
 | 
						|
  let extensionData = {
 | 
						|
    allowInsecureRequests: true,
 | 
						|
    manifest: {
 | 
						|
      manifest_version: 3,
 | 
						|
    },
 | 
						|
  };
 | 
						|
 | 
						|
  let extension = ExtensionTestUtils.loadExtension(extensionData);
 | 
						|
  await extension.startup();
 | 
						|
  equal(
 | 
						|
    extension.extension.manifest.content_security_policy.extension_pages,
 | 
						|
    `script-src 'self'`,
 | 
						|
    "insecure allowed"
 | 
						|
  );
 | 
						|
  await extension.unload();
 | 
						|
  Services.prefs.clearUserPref("extensions.manifestV3.enabled");
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_manifest_allowInsecureRequests_throws() {
 | 
						|
  Services.prefs.setBoolPref("extensions.manifestV3.enabled", true);
 | 
						|
  let extensionData = {
 | 
						|
    allowInsecureRequests: true,
 | 
						|
    manifest: {
 | 
						|
      manifest_version: 3,
 | 
						|
      content_security_policy: {
 | 
						|
        extension_pages: `script-src 'self'`,
 | 
						|
      },
 | 
						|
    },
 | 
						|
  };
 | 
						|
 | 
						|
  await Assert.throws(
 | 
						|
    () => ExtensionTestUtils.loadExtension(extensionData),
 | 
						|
    /allowInsecureRequests cannot be used with manifest.content_security_policy/,
 | 
						|
    "allowInsecureRequests with content_security_policy cannot be loaded"
 | 
						|
  );
 | 
						|
  Services.prefs.clearUserPref("extensions.manifestV3.enabled");
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_gecko_android_key_in_applications() {
 | 
						|
  const extensionData = {
 | 
						|
    manifest: {
 | 
						|
      manifest_version: 2,
 | 
						|
      applications: {
 | 
						|
        gecko_android: {},
 | 
						|
      },
 | 
						|
    },
 | 
						|
  };
 | 
						|
  const extension = ExtensionTestUtils.loadExtension(extensionData);
 | 
						|
 | 
						|
  await Assert.rejects(
 | 
						|
    extension.startup(),
 | 
						|
    /applications: Property "gecko_android" is unsupported by Firefox/,
 | 
						|
    "expected applications.gecko_android to be invalid"
 | 
						|
  );
 | 
						|
});
 |