/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ var Ci = Components.interfaces; Components.utils.import("resource://gre/modules/Services.jsm"); /** * MockPlugin mimics the behaviour of a plugin. */ function MockPlugin(name, version, enabledState) { this.name = name; this.version = version; this.enabledState = enabledState; } MockPlugin.prototype = { get blocklisted() { let bls = Services.blocklist; return bls.getPluginBlocklistState(this) == bls.STATE_BLOCKED; }, get disabled() { return this.enabledState == Ci.nsIPluginTag.STATE_DISABLED; } }; // The mocked blocked plugin used to test the blocklist. const PLUGINS = [ new MockPlugin("test_with_infoURL", "5", Ci.nsIPluginTag.STATE_ENABLED), new MockPlugin("test_with_altInfoURL", "5", Ci.nsIPluginTag.STATE_ENABLED), new MockPlugin("test_no_infoURL", "5", Ci.nsIPluginTag.STATE_ENABLED), new MockPlugin("test_newVersion", "1", Ci.nsIPluginTag.STATE_ENABLED), new MockPlugin("test_newVersion", "3", Ci.nsIPluginTag.STATE_ENABLED) ]; /** * The entry point of the unit tests, which is also responsible of * copying the blocklist file to the profile folder. */ function run_test() { copyBlocklistToProfile(do_get_file("data/pluginInfoURL_block.xml")); createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "3", "8"); startupManager(); run_next_test(); } /** * Test that the blocklist service correctly loads and returns the infoURL for * a plugin that matches the first entry in the blocklist. */ add_task(function* test_infoURL() { // The testInfoURL must match the value within the // tag in pluginInfoURL_block.xml. let testInfoURL = "http://test.url.com/"; Assert.strictEqual(Services.blocklist.getPluginInfoURL(PLUGINS[0]), testInfoURL, "Should be the provided url when an infoURL tag is available"); }); /** * Test that the blocklist service correctly loads and returns the infoURL for * a plugin that partially matches an earlier entry in the blocklist. */ add_task(function* test_altInfoURL() { let altTestInfoURL = "http://alt.test.url.com/"; Assert.strictEqual(Services.blocklist.getPluginInfoURL(PLUGINS[1]), altTestInfoURL, "Should be the alternative infoURL"); }); /** * Test that the blocklist service correctly returns null * if the infoURL tag is missing in the blocklist.xml file. */ add_task(function* test_infoURL_missing() { Assert.strictEqual(Services.blocklist.getPluginInfoURL(PLUGINS[2]), null, "Should be null when no infoURL tag is available."); }); add_task(function* test_intoURL_newVersion() { let testInfoURL = "http://test.url2.com/"; Assert.strictEqual(Services.blocklist.getPluginInfoURL(PLUGINS[3]), testInfoURL, "Old plugin should match"); Assert.strictEqual(Services.blocklist.getPluginInfoURL(PLUGINS[4]), null, "New plugin should not match"); });