toolkit/mozapps/extensions/test/xpcshell/test_duplicateplugins.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* Any copyright is dedicated to the Public Domain.
     2  * http://creativecommons.org/publicdomain/zero/1.0/
     3  */
     5 const Ci = Components.interfaces;
     7 // This verifies that duplicate plugins are coalesced and maintain their ID
     8 // across restarts.
    10 var PLUGINS = [{
    11   name: "Duplicate Plugin 1",
    12   description: "A duplicate plugin",
    13   version: "1",
    14   blocklisted: false,
    15   enabledState: Ci.nsIPluginTag.STATE_ENABLED,
    16   get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
    17   filename: "/home/mozilla/.plugins/dupplugin1.so"
    18 }, {
    19   name: "Duplicate Plugin 1",
    20   description: "A duplicate plugin",
    21   version: "1",
    22   blocklisted: false,
    23   enabledState: Ci.nsIPluginTag.STATE_ENABLED,
    24   get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
    25   filename: "",
    26   filename: "/usr/lib/plugins/dupplugin1.so"
    27 }, {
    28   name: "Duplicate Plugin 2",
    29   description: "Another duplicate plugin",
    30   version: "1",
    31   blocklisted: false,
    32   enabledState: Ci.nsIPluginTag.STATE_ENABLED,
    33   get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
    34   filename: "/home/mozilla/.plugins/dupplugin2.so"
    35 }, {
    36   name: "Duplicate Plugin 2",
    37   description: "Another duplicate plugin",
    38   version: "1",
    39   blocklisted: false,
    40   enabledState: Ci.nsIPluginTag.STATE_ENABLED,
    41   get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
    42   filename: "",
    43   filename: "/usr/lib/plugins/dupplugin2.so"
    44 }, {
    45   name: "Non-duplicate Plugin", // 3
    46   description: "Not a duplicate plugin",
    47   version: "1",
    48   blocklisted: false,
    49   enabledState: Ci.nsIPluginTag.STATE_ENABLED,
    50   get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
    51   filename: "/home/mozilla/.plugins/dupplugin3.so"
    52 }, {
    53   name: "Non-duplicate Plugin", // 4
    54   description: "Not a duplicate because the descriptions are different",
    55   version: "1",
    56   blocklisted: false,
    57   enabledState: Ci.nsIPluginTag.STATE_ENABLED,
    58   get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
    59   filename: "",
    60   filename: "/usr/lib/plugins/dupplugin4.so"
    61 }, {
    62   name: "Another Non-duplicate Plugin", // 5
    63   description: "Not a duplicate plugin",
    64   version: "1",
    65   blocklisted: false,
    66   enabledState: Ci.nsIPluginTag.STATE_ENABLED,
    67   get disabled() this.enabledState == Ci.nsIPluginTag.STATE_DISABLED,
    68   filename: "/home/mozilla/.plugins/dupplugin5.so"
    69 }];
    71 // A fake plugin host to return the plugins defined above
    72 var PluginHost = {
    73   getPluginTags: function(countRef) {
    74     countRef.value = PLUGINS.length;
    75     return PLUGINS;
    76   },
    78   QueryInterface: function(iid) {
    79     if (iid.equals(Components.interfaces.nsIPluginHost)
    80      || iid.equals(Components.interfaces.nsISupports))
    81       return this;
    83     throw Components.results.NS_ERROR_NO_INTERFACE;
    84   }
    85 }
    87 var PluginHostFactory = {
    88   createInstance: function (outer, iid) {
    89     if (outer != null)
    90       throw Components.results.NS_ERROR_NO_AGGREGATION;
    91     return PluginHost.QueryInterface(iid);
    92   }
    93 };
    95 var registrar = Components.manager.QueryInterface(Components.interfaces.nsIComponentRegistrar);
    96 registrar.registerFactory(Components.ID("{721c3e73-969e-474b-a6dc-059fd288c428}"),
    97                           "Fake Plugin Host",
    98                           "@mozilla.org/plugin/host;1", PluginHostFactory);
   100 var gPluginIDs = [null, null, null, null, null];
   102 function run_test() {
   103   do_test_pending();
   104   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
   106   startupManager();
   108   run_test_1();
   109 }
   111 function found_plugin(aNum, aId) {
   112   if (gPluginIDs[aNum])
   113     do_throw("Found duplicate of plugin " + aNum);
   114   gPluginIDs[aNum] = aId;
   115 }
   117 // Test that the plugins were coalesced and all appear in the returned list
   118 function run_test_1() {
   119   AddonManager.getAddonsByTypes(["plugin"], function(aAddons) {
   120     do_check_eq(aAddons.length, 5);
   121     aAddons.forEach(function(aAddon) {
   122       if (aAddon.name == "Duplicate Plugin 1") {
   123         found_plugin(0, aAddon.id);
   124         do_check_eq(aAddon.description, "A duplicate plugin");
   125       }
   126       else if (aAddon.name == "Duplicate Plugin 2") {
   127         found_plugin(1, aAddon.id);
   128         do_check_eq(aAddon.description, "Another duplicate plugin");
   129       }
   130       else if (aAddon.name == "Another Non-duplicate Plugin") {
   131         found_plugin(5, aAddon.id);
   132         do_check_eq(aAddon.description, "Not a duplicate plugin");
   133       }
   134       else if (aAddon.name == "Non-duplicate Plugin") {
   135         if (aAddon.description == "Not a duplicate plugin")
   136           found_plugin(3, aAddon.id);
   137         else if (aAddon.description == "Not a duplicate because the descriptions are different")
   138           found_plugin(4, aAddon.id);
   139         else
   140           do_throw("Found unexpected plugin with description " + aAddon.description);
   141       }
   142       else {
   143         do_throw("Found unexpected plugin " + aAddon.name);
   144       }
   145     });
   147     run_test_2();
   148   });
   149 }
   151 // Test that disabling a coalesced plugin disables all its tags
   152 function run_test_2() {
   153   AddonManager.getAddonByID(gPluginIDs[0], function(p) {
   154     do_check_false(p.userDisabled);
   155     p.userDisabled = true;
   156     do_check_true(PLUGINS[0].disabled);
   157     do_check_true(PLUGINS[1].disabled);
   159     do_execute_soon(run_test_3);
   160   });
   161 }
   163 // Test that IDs persist across restart
   164 function run_test_3() {
   165   restartManager();
   167   AddonManager.getAddonByID(gPluginIDs[0], callback_soon(function(p) {
   168     do_check_neq(p, null);
   169     do_check_eq(p.name, "Duplicate Plugin 1");
   170     do_check_eq(p.description, "A duplicate plugin");
   172     // Reorder the plugins and restart again
   173     [PLUGINS[0], PLUGINS[1]] = [PLUGINS[1], PLUGINS[0]];
   174     restartManager();
   176     AddonManager.getAddonByID(gPluginIDs[0], function(p) {
   177       do_check_neq(p, null);
   178       do_check_eq(p.name, "Duplicate Plugin 1");
   179       do_check_eq(p.description, "A duplicate plugin");
   181       do_execute_soon(do_test_finished);
   182     });
   183   }));
   184 }

mercurial