Making extensions available to multiple GRE applications

Benjamin Smedberg <[email protected]> Wed, 02 Jul 2003 14:21:39 -0400
Newsgroups gmane.comp.mozilla.devel.xpinstall,gmane.comp.mozilla.devel.xpfe,gmane.comp.mozilla.devel.seamonkey,gmane.comp.mozilla.devel.plugins,gmane.comp.mozilla.devel.xpcom
Organization Another Netscape Collabra Server User
Message-ID <[email protected]>
I have filed and taken several bugs having to do with extensions and the 
GRE, and I would like to outline my plans for GRE extensions (and 
extensions in general) so that people may comment. Please reply to 
n.p.m.xpinstall, and not to the bugs, unless you have a patch or 
implementation comment. The overarching bug is bug 209439.

Definitions:
"extension" == a browser addon or utility (installed with XPInstall)

My plan has the following goals:

1) allow extensions to be registered with a GRE, so that they can be 
made available to multiple applications using the GRE
2) allow extensions to be installed into their own directories, instead 
of being installed in the same directory as an application
3) allow extensions (which use only frozen interfaces) to work with 
multiple versions of the GRE
4) allow extensions to be un-installed

Currently, extensions "piggyback" on top of an application's chrome and 
components directories. This makes it difficult/impossible to un-install 
extensions. Instead, it should not be difficult for extensions to 
maintain their own chrome and components locations.

Implementation-prerequisites:
1) The chrome: service needs to be extended to register arbitrary chrome 
directories (bug 210838)

Implementation:
Each extension would have an RDF file describing itself. The GRE would 
include an nsIExtensionManager service, which would allow applications 
to enumerate/discover available extensions, register extensions, and 
enable/disable extensions as necessary. The GRE would not contain any UI 
for extensions; any UI would be managed by applications. There would 
also be a little command-line utility with the GRE that would register 
extensions.

Extensions would not be enabled by default; instead, after the 
application initializes the GRE, it would need to use the 
nsIExtensionManager to enable the extensions that it wished to use.

Although every extension could use this mechanism, extensions meant for 
multiple applications would benefit most from this scheme. Some 
important examples would include:
DOM Inspector
Venkman
JSLib
tranformiix

I feel that GRE extensions are necessary, in order for the new roadmap 
to be implemented effectively.

--BDS

P.S. Can I also argue that there ought to be a second alpha before 
1.5beta? Not much of the current roadmap has been completed yet, and 
we're going to freeze 1.5a on Wednesday... how about another month and 
then 1.5a2?