diff options
author | Marco Pesenti Gritti <marco@localhost.localdomain> | 2007-05-19 14:10:05 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@localhost.localdomain> | 2007-05-19 14:10:05 (GMT) |
commit | e77e975333ac47677c48b57cea0ef6f785609941 (patch) | |
tree | 81490b4c694c490a115d67e7f07947672b5342c5 /components |
Initial checkin
Diffstat (limited to 'components')
-rw-r--r-- | components/Makefile.am | 1 | ||||
-rw-r--r-- | components/browserhelper/Makefile.am | 32 | ||||
-rw-r--r-- | components/browserhelper/nsBrowserHelper.js | 100 | ||||
-rw-r--r-- | components/browserhelper/nsIBrowserHelper.idl | 13 |
4 files changed, 146 insertions, 0 deletions
diff --git a/components/Makefile.am b/components/Makefile.am new file mode 100644 index 0000000..4385e25 --- /dev/null +++ b/components/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = browserhelper diff --git a/components/browserhelper/Makefile.am b/components/browserhelper/Makefile.am new file mode 100644 index 0000000..e33b907 --- /dev/null +++ b/components/browserhelper/Makefile.am @@ -0,0 +1,32 @@ +sessionstoredir = $(pkgdatadir)/components + +sessionstore_DATA = \ + nsIBrowserHelper.xpt \ + nsBrowserHelper.js + +BUILT_SOURCES = \ + nsIBrowserHelper.xpt \ + nsIBrowserHelper.h + +stamp_files = \ + stamp-nsIBrowserHelper.xpt \ + stamp-nsIBrowserHelper.h + +nsIBrowserHelper.xpt: stamp-nsIBrowserHelper.xpt + @true +stamp-nsIBrowserHelper.xpt: nsIBrowserHelper.idl + $(XPIDL) -m typelib -w -v -I $(XPIDL_IDLDIR) -e nsIBrowserHelper.xpt \ + $(srcdir)/nsIBrowserHelper.idl \ + && echo timestamp > $(@F) + +nsIBrowserHelper.h: stamp-nsIBrowserHelper.h + @true +stamp-nsIBrowserHelper.h: nsIBrowserHelper.idl + $(XPIDL) -m header -w -v -I $(XPIDL_IDLDIR) -e nsIBrowserHelper.h \ + $(srcdir)/nsIBrowserHelper.idl \ + && echo timestamp > $(@F) + +CLEANFILES = $(stamp_files) $(BUILT_SOURCES) +DISTCLEANFILES = $(stamp_files) $(BUILT_SOURCES) +MAINTAINERCLEANFILES = $(stamp_files) $(BUILT_SOURCES) +EXTRA_DIST = nsIBrowserHelper.idl nsBrowserHelper.js diff --git a/components/browserhelper/nsBrowserHelper.js b/components/browserhelper/nsBrowserHelper.js new file mode 100644 index 0000000..f726ddf --- /dev/null +++ b/components/browserhelper/nsBrowserHelper.js @@ -0,0 +1,100 @@ +const Cc = Components.classes; +const Ci = Components.interfaces; +const Cr = Components.results; + +const CID = Components.ID("{475e1194-92bc-4e03-92f3-5ad6ccddaca3}"); +const CONTRACT_ID = "@laptop.org/browser/browserhelper;1"; +const CLASS_NAME = "Browser Helper"; + +var browsers = []; + +function BrowserHelperService() { +} + +BrowserHelperService.prototype = { + +/* ........ nsIBrowserHelper API .............. */ + + getBrowser: function bh_getBrowser(aId) { + return browsers[aId] + }, + + registerBrowser: function bh_registerBrowser(aId, aBrowser) { + browsers[aId] = aBrowser; + }, + + unregisterBrowser: function bh_unregisterBrowser(aId) { + browsers.pop(aId) + }, + + QueryInterface: function(aIID) { + if (!aIID.equals(Ci.nsISupports) && + !aIID.equals(Ci.nsIBrowserHelper)) { + Components.returnCode = Cr.NS_ERROR_NO_INTERFACE; + return null; + } + + return this; + } +} + +/* :::::::: Service Registration & Initialization ::::::::::::::: */ + +/* ........ nsIModule .............. */ + +const BrowserHelperModule = { + + getClassObject: function(aCompMgr, aCID, aIID) { + if (aCID.equals(CID)) { + return BrowserHelperFactory; + } + + Components.returnCode = Cr.NS_ERROR_NOT_REGISTERED; + return null; + }, + + registerSelf: function(aCompMgr, aFileSpec, aLocation, aType) { + aCompMgr.QueryInterface(Ci.nsIComponentRegistrar); + aCompMgr.registerFactoryLocation(CID, CLASS_NAME, CONTRACT_ID, aFileSpec, aLocation, aType); + }, + + unregisterSelf: function(aCompMgr, aLocation, aType) { + aCompMgr.QueryInterface(Ci.nsIComponentRegistrar); + aCompMgr.unregisterFactoryLocation(CID, aLocation); + }, + + canUnload: function(aCompMgr) { + return true; + } +} + +/* ........ nsIFactory .............. */ + +const BrowserHelperFactory = { + + createInstance: function(aOuter, aIID) { + if (aOuter != null) { + Components.returnCode = Cr.NS_ERROR_NO_AGGREGATION; + return null; + } + + return (new BrowserHelperService()).QueryInterface(aIID); + }, + + lockFactory: function(aLock) { }, + + QueryInterface: function(aIID) { + if (!aIID.equals(Ci.nsISupports) && !aIID.equals(Ci.nsIModule) && + !aIID.equals(Ci.nsIFactory) && !aIID.equals(Ci.nsIBrowserHelper)) { + Components.returnCode = Cr.NS_ERROR_NO_INTERFACE; + return null; + } + + return this; + } +}; + +function NSGetModule(aComMgr, aFileSpec) { + dump("nsBrowserHelper: NSGetModule\n") + return BrowserHelperModule; +} diff --git a/components/browserhelper/nsIBrowserHelper.idl b/components/browserhelper/nsIBrowserHelper.idl new file mode 100644 index 0000000..abe52b3 --- /dev/null +++ b/components/browserhelper/nsIBrowserHelper.idl @@ -0,0 +1,13 @@ +#include "nsISupports.idl" + +interface nsIWebBrowser; + +[scriptable, uuid(475e1194-92bc-4e03-92f3-5ad6ccddaca3)] +interface nsIBrowserHelper : nsISupports +{ + nsIWebBrowser getBrowser(in long id); + + void registerBrowser(in long id, in nsIWebBrowser browser); + + void unregisterBrowser(in long id); +}; |