diff options
Diffstat (limited to 'toolkit/mozapps/webextensions/test/xpcshell/test_bug514327_3.js')
-rw-r--r-- | toolkit/mozapps/webextensions/test/xpcshell/test_bug514327_3.js | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/toolkit/mozapps/webextensions/test/xpcshell/test_bug514327_3.js b/toolkit/mozapps/webextensions/test/xpcshell/test_bug514327_3.js new file mode 100644 index 000000000..634361991 --- /dev/null +++ b/toolkit/mozapps/webextensions/test/xpcshell/test_bug514327_3.js @@ -0,0 +1,139 @@ +/* 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 Cc = Components.classes; +var Ci = Components.interfaces; +var Cu = Components.utils; +var Cr = Components.results; + +Cu.import("resource://testing-common/httpd.js"); +Cu.import("resource://testing-common/MockRegistrar.jsm"); + +const nsIBLS = Ci.nsIBlocklistService; +const URI_EXTENSION_BLOCKLIST_DIALOG = "chrome://mozapps/content/extensions/blocklist.xul"; + +var gBlocklist = null; +var gPrefs = null; +var gTestserver = null; + +var gNextTestPart = null; + + +var PLUGINS = [{ + // Tests a plugin whose state goes from not-blocked, to outdated + name: "test_bug514327_outdated", + version: "5", + disabled: false, + blocklisted: false +}, { + // Used to trigger the blocklist dialog, which indicates the blocklist has updated + name: "test_bug514327_1", + version: "5", + disabled: false, + blocklisted: false +}, { + // Used to trigger the blocklist dialog, which indicates the blocklist has updated + name: "test_bug514327_2", + version: "5", + disabled: false, + blocklisted: false +} ]; + + +// A fake plugin host for the blocklist service to use +var PluginHost = { + getPluginTags: function(countRef) { + countRef.value = PLUGINS.length; + return PLUGINS; + }, + + QueryInterface: function(iid) { + if (iid.equals(Ci.nsIPluginHost) + || iid.equals(Ci.nsISupports)) + return this; + + throw Components.results.NS_ERROR_NO_INTERFACE; + } +} + +// Don't need the full interface, attempts to call other methods will just +// throw which is just fine +var WindowWatcher = { + openWindow: function(parent, url, name, features, args) { + // Should be called to list the newly blocklisted items + do_check_eq(url, URI_EXTENSION_BLOCKLIST_DIALOG); + // Should only include one item + do_check_eq(args.wrappedJSObject.list.length, 1); + // And that item should be the blocked plugin, not the outdated one + var item = args.wrappedJSObject.list[0]; + do_check_true(item.item instanceof Ci.nsIPluginTag); + do_check_neq(item.name, "test_bug514327_outdated"); + + // Call the next test after the blocklist has finished up + do_timeout(0, gNextTestPart); + }, + + QueryInterface: function(iid) { + if (iid.equals(Ci.nsIWindowWatcher) + || iid.equals(Ci.nsISupports)) + return this; + + throw Cr.NS_ERROR_NO_INTERFACE; + } +} + +MockRegistrar.register("@mozilla.org/plugin/host;1", PluginHost); +MockRegistrar.register("@mozilla.org/embedcomp/window-watcher;1", WindowWatcher); + + +function do_update_blocklist(aDatafile, aNextPart) { + gNextTestPart = aNextPart; + + gPrefs.setCharPref("extensions.blocklist.url", "http://localhost:" + gPort + "/data/" + aDatafile); + gBlocklist.QueryInterface(Ci.nsITimerCallback).notify(null); +} + +function run_test() { + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9"); + + gTestserver = new HttpServer(); + gTestserver.registerDirectory("/data/", do_get_file("data")); + gTestserver.start(-1); + gPort = gTestserver.identity.primaryPort; + + startupManager(); + + // initialize the blocklist with no entries + copyBlocklistToProfile(do_get_file("data/test_bug514327_3_empty.xml")); + + gPrefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch); + gBlocklist = Cc["@mozilla.org/extensions/blocklist;1"].getService(nsIBLS); + + // should NOT be marked as outdated by the blocklist + do_check_true(gBlocklist.getPluginBlocklistState(PLUGINS[0], "1", "1.9") == nsIBLS.STATE_NOT_BLOCKED); + + do_test_pending(); + + // update blocklist with data that marks the plugin as outdated + do_update_blocklist("test_bug514327_3_outdated_1.xml", test_part_1); +} + +function test_part_1() { + // plugin should now be marked as outdated + do_check_true(gBlocklist.getPluginBlocklistState(PLUGINS[0], "1", "1.9") == nsIBLS.STATE_OUTDATED); + + // update blocklist with data that marks the plugin as outdated + do_update_blocklist("test_bug514327_3_outdated_2.xml", test_part_2); +} + +function test_part_2() { + // plugin should still be marked as outdated + do_check_true(gBlocklist.getPluginBlocklistState(PLUGINS[0], "1", "1.9") == nsIBLS.STATE_OUTDATED); + + finish(); +} + +function finish() { + gTestserver.stop(do_test_finished); +} |