アドオンマネージャの仕様変更に追従( https://bugzilla.mozilla.org/show_bug.cgi?id=550048

git-svn-id: http://www.cozmixng.org/repos/piro/treestyletab/trunk@6646 599a83e7-65a4-db11-8015-0010dcdd6dc2
This commit is contained in:
piro 2010-05-02 03:57:59 +00:00
parent 6f71c5ab94
commit 2cb98eb3f8

View File

@ -9,13 +9,13 @@
// window['piro.sakura.ne.jp'].extensions.isEnabled('my.extension.id@example.com')) // window['piro.sakura.ne.jp'].extensions.isEnabled('my.extension.id@example.com'))
// window['piro.sakura.ne.jp'].extensions.goToOptions('my.extension.id@example.com'); // window['piro.sakura.ne.jp'].extensions.goToOptions('my.extension.id@example.com');
lisence: The MIT License, Copyright (c) 2009 SHIMODA "Piro" Hiroshi lisence: The MIT License, Copyright (c) 2009-2010 SHIMODA "Piro" Hiroshi
http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/license.txt http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/license.txt
original: original:
http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/extensions.js http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/extensions.js
*/ */
(function() { (function() {
const currentRevision = 2; const currentRevision = 3;
if (!('piro.sakura.ne.jp' in window)) window['piro.sakura.ne.jp'] = {}; if (!('piro.sakura.ne.jp' in window)) window['piro.sakura.ne.jp'] = {};
@ -26,11 +26,35 @@
return; return;
} }
// Firefox 3.7 or later
var AM = {};
if ('@mozilla.org/addons/integration;1' in Components.classes)
Components.utils.import('resource://gre/modules/AddonManager.jsm', AM);
window['piro.sakura.ne.jp'].extensions = { window['piro.sakura.ne.jp'].extensions = {
revision : currentRevision, revision : currentRevision,
ExtensionManager : Components.classes['@mozilla.org/extensions/manager;1'] // Firefox 3.7 or later
.getService(Components.interfaces.nsIExtensionManager), getInstalledAddon : function(aId)
{
var addon;
AM.AddonManager.getAddonByID(aId, function(aAddon) {
addon = aAddon;
});
var thread = Components.classes['@mozilla.org/thread-manager;1']
.getService()
.mainThread;
while (addon === void(0)) {
thread.processNextEvent(true);
}
return addon;
},
// Firefox 3.6 or older
ExtensionManager : ('@mozilla.org/extensions/manager;1' in Components.classes) ?
Components.classes['@mozilla.org/extensions/manager;1']
.getService(Components.interfaces.nsIExtensionManager) :
null,
RDF : Components.classes['@mozilla.org/rdf/rdf-service;1'] RDF : Components.classes['@mozilla.org/rdf/rdf-service;1']
.getService(Components.interfaces.nsIRDFService), .getService(Components.interfaces.nsIRDFService),
WindowMediator : Components.classes['@mozilla.org/appshell/window-mediator;1'] WindowMediator : Components.classes['@mozilla.org/appshell/window-mediator;1']
@ -39,16 +63,38 @@
.getService(Components.interfaces.nsIPrefBranch), .getService(Components.interfaces.nsIPrefBranch),
isAvailable : function(aId) isAvailable : function(aId)
{
return this.ExtensionManager ? this.isAvailable_EM(aId) : this.isAvailable_AM(aId) ;
},
isAvailable_EM : function(aId)
{ {
return this.isInstalled(aId) && this.isEnabled(aId); return this.isInstalled(aId) && this.isEnabled(aId);
}, },
isAvailable_AM : function(aId)
{
var addon = this.getInstalledAddon(aId);
if (!addon) return false;
return addon.isActive;
},
isInstalled : function(aId) isInstalled : function(aId)
{
return this.ExtensionManager ? this.isInstalled_EM(aId) : this.isInstalled_AM(aId) ;
},
isInstalled_EM : function(aId)
{ {
return this.ExtensionManager.getInstallLocation(aId); return this.ExtensionManager.getInstallLocation(aId);
}, },
isInstalled_AM : function(aId)
{
return this.getInstalledAddon(aId);
},
isEnabled : function(aId) isEnabled : function(aId)
{
return this.ExtensionManager ? this.isEnabled_EM(aId) : this.isEnabled_AM(aId) ;
},
isEnabled_EM : function(aId)
{ {
var res = this.RDF.GetResource('urn:mozilla:item:'+aId); var res = this.RDF.GetResource('urn:mozilla:item:'+aId);
var appDisabled = false; var appDisabled = false;
@ -76,21 +122,14 @@
return !appDisabled && !userDisabled; return !appDisabled && !userDisabled;
}, },
isEnabled_AM : function(aId)
{
return false;
},
goToOptions : function(aId) goToOptions : function(aId)
{ {
var res = this.RDF.GetResource('urn:mozilla:item:'+aId); var uri = this.ExtensionManager ? this.getOptionsURI_EM(aId) : this.getOptionsURI_AM(aId) ;
var uri;
try {
uri = this.ExtensionManager.datasource.GetTarget(
res,
this.RDF.GetResource('http://www.mozilla.org/2004/em-rdf#optionsURL'),
true
).QueryInterface(Components.interfaces.nsIRDFLiteral)
.Value;
}
catch(e) {
}
if (!uri) return; if (!uri) return;
var windows = this.WindowMediator.getEnumerator(null); var windows = this.WindowMediator.getEnumerator(null);
@ -113,6 +152,28 @@
'', '',
'chrome,titlebar,toolbar,centerscreen,' + (instantApply ? 'dialog=no' : 'modal' ) 'chrome,titlebar,toolbar,centerscreen,' + (instantApply ? 'dialog=no' : 'modal' )
); );
},
getOptionsURI_EM : function(aId)
{
var res = this.RDF.GetResource('urn:mozilla:item:'+aId);
var uri;
try {
uri = this.ExtensionManager.datasource.GetTarget(
res,
this.RDF.GetResource('http://www.mozilla.org/2004/em-rdf#optionsURL'),
true
).QueryInterface(Components.interfaces.nsIRDFLiteral)
.Value;
}
catch(e) {
}
return uri;
},
getOptionsURI_AM : function(aId)
{
var addon = this.getInstalledAddon(aId);
if (!addon || !addon.isActive) return null;
return addon.optionsURL;
} }
}; };
})(); })();