diff --git a/xul/content/commands.js b/xul/content/commands.js --- a/xul/content/commands.js +++ b/xul/content/commands.js @@ -764,7 +764,7 @@ /* parse function for parameters */ function parsePlugin(e, name) { - var ary = e.unparsedData.match (/(?:(\d+)|(\S+))(?:\s+(.*))?$/); + var ary = e.unparsedData.match(/(?:(\S+))(?:\s+(.*))?$/); if (!ary) return false; @@ -772,21 +772,13 @@ if (ary[1]) { - var i = parseInt(ary[1]); - if (!(i in client.plugins)) - return false; - - plugin = client.plugins[i]; - } - else - { - plugin = getPluginById(ary[2]); + plugin = getPluginById(ary[1]); if (!plugin) return false; } - e.unparsedData = arrayHasElementAt(ary, 3) ? ary[3] : ""; + e.unparsedData = ary[2] || ""; e[name] = plugin; return true; } @@ -1975,15 +1967,12 @@ return; } - if (client.plugins.length > 0) - { - for (var i = 0; i < client.plugins.length; ++i) - listPlugin(client.plugins[i], i); - } - else - { + var i = 0; + for (var k in client.plugins) + listPlugin(client.plugins[k], i++); + + if (i == 0) display(MSG_NO_PLUGINS); - } } function cmdRlist(e) @@ -2494,11 +2483,10 @@ { var oldPlugin; - var i = getPluginIndexByURL(url); - if (i == -1) - return -1; - - oldPlugin = client.plugins[i]; + var oldPlugin = getPluginByURL(url); + if (!oldPlugin) + return; + if (oldPlugin.enabled) { if (oldPlugin.API > 0) @@ -2524,8 +2512,6 @@ } display(getMsg(MSG_PLUGIN_DISABLED, oldPlugin.id)); } - - return i; } if (!e.scope) @@ -2546,10 +2532,7 @@ { var rvStr; var rv = rvStr = client.load(e.url, e.scope); - var index = removeOldPlugin(e.url); - - if (index == null) - return null; + removeOldPlugin(e.url); if ("init" in plugin) { @@ -2598,15 +2581,15 @@ if (typeof rv == "function") rvStr = "function"; - if (index != -1) - client.plugins[index] = plugin; - else - index = client.plugins.push(plugin) - 1; + if (!plugin.id) + plugin.id = 'plugin' + randomString(8); + + client.plugins[plugin.id] = plugin; feedback(e, getMsg(MSG_SUBSCRIPT_LOADED, [e.url, rvStr]), MT_INFO); if ((plugin.API > 0) && plugin.prefs["enabled"]) - dispatch("enable-plugin " + index); + dispatch("enable-plugin " + plugin.id); return {rv: rv}; } catch (ex) diff --git a/xul/content/handlers.js b/xul/content/handlers.js --- a/xul/content/handlers.js +++ b/xul/content/handlers.js @@ -123,18 +123,18 @@ * errors are disregarded as there's nothing we can do at this point. * Wipe the plugin list afterwards for safety. */ - for (var i = 0; i < client.plugins.length; ++i) + for (var k in client.plugins) { - if ((client.plugins[i].API > 0) && client.plugins[i].enabled) + if ((client.plugins[k].API > 0) && client.plugins[k].enabled) { try { - client.plugins[i].disable(); + client.plugins[k].disable(); } catch(ex) {} } } - client.plugins = new Array(); + client.plugins = new Object(); // Close all dialogs. if ("joinDialog" in client) diff --git a/xul/content/static.js b/xul/content/static.js --- a/xul/content/static.js +++ b/xul/content/static.js @@ -737,7 +737,7 @@ function processStartupScripts() { - client.plugins = new Array(); + client.plugins = new Object(); var scripts = client.prefs["initialScripts"]; var basePath = getURLSpecFromFile(client.prefs["profilePath"]); var baseURL = client.iosvc.newURI(basePath, null, null); @@ -807,51 +807,22 @@ function getPluginById(id) { - for (var i = 0; i < client.plugins.length; ++i) - { - if (client.plugins[i].id == id) - return client.plugins[i]; + return client.plugins[id] || null; +} + + +function getPluginByURL(url) +{ + for (var k in client.plugins) + { + if (client.plugins[k].url == url) + return client.plugins[k]; } return null; } -function getPluginIndexById(id) -{ - for (var i = 0; i < client.plugins.length; ++i) - { - if (client.plugins[i].id == id) - return i; - - } - - return -1; -} - -function getPluginByURL(url) -{ - for (var i = 0; i < client.plugins.length; ++i) - { - if (client.plugins[i].url == url) - return client.plugins[i]; - - } - - return null; -} - -function getPluginIndexByURL(url) -{ - for (var i = 0; i < client.plugins.length; ++i) - { - if (client.plugins[i].url == url) - return i; - - } - - return -1; -} function processStartupAutoperform() { @@ -3260,8 +3231,7 @@ function checkPluginInstalled(name, path) { var installed = path.exists(); - for (var i = 0; i < client.plugins.length; i++) - installed |= (client.plugins[i].id == name); + installed |= (name in client.plugins); if (installed) {