diff --git a/mozilla/xpcom/sample/nsSample.js b/mozilla/xpcom/sample/nsSample.js new file mode 100644 index 00000000000..f22459c9e64 --- /dev/null +++ b/mozilla/xpcom/sample/nsSample.js @@ -0,0 +1,86 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ + +function mySample() { + /* use this to execute code a la C++'s SetValue */ + this.value getter= function () { + dump ("Getting value\n"); + return this.val; + }; + + this.value setter= function (newval) { + dump("Setting value to " + newval + "\n"); + return this.val = newval; + }; +} + +mySample.prototype.val = ""; +mySample.prototype.writeValue = function (aPrefix) { + dump("mySample::writeValue => " + aPrefix + this.val + "\n"); +} +mySample.prototype.poke = function (aValue) { + this.val = aValue; +} +/* until bug 14460 is fixed, must use QueryInterface, not queryInterface */ +mySample.prototype.QueryInterface = function(iid) { + if (iid.equals(Components.interfaces.nsISample) || + iid.equals(Components.interfaces.nsISupports)) + return this; + throw Components.results.NS_ERROR_NO_INTERFACE; +} + +var myModule = { + RegisterSelf:function (compMgr, fileSpec, location) { + dump("RegisterSelf(" + Array.prototype.join.apply(arguments, ",") + + ")\n"); + try { + compMgr.registerComponentWithType(this.myCID, + "Sample JS Component", + "mozilla.jssample.1", fileSpec, + location, true, true, + "text/javascript"); + } catch (e) { + dump(" FAILURE[" + e + "]"); + } + dump("RegisterSelf done\n"); + }, + + GetClassObject:function (compMgr, cid, iid) { + dump("GetClassObject(" + Array.prototype.join.apply(arguments, ",") + + ")\n"); + + if (!cid.equals(this.myCID)) { + dump("GetClassObject: CID mismatch:\nmine:\t" + this.myCID + + "\nin:\t" + cid + "\n"); + throw Components.results.NS_ERROR_NO_INTERFACE; + } + + dump("GetClassObject: have right CID\n"); + if (iid.equals(Components.interfaces.nsIFactory)) { + dump("JS: looking for factory (" + iid + ")\n"); + return this.myFactory; + } + dump("GetClassObject: IID mismatch:\nfact:\t" + + Components.interfaces.nsIFactory + "\nin:\t" + + iid + "\n"); + throw Components.results.NS_ERROR_NOT_IMPLEMENTED; + }, + + /* CID for this class */ + myCID:Components.ID("{dea98e50-1dd1-11b2-9344-8902b4805a2e}"), + + /* factory object */ + myFactory:{ + CreateInstance:function (outer, iid) { + dump ("JS: CreateInstance(" + + Array.prototype.join.apply(arguments, ",") + ")\n"); + if (outer != null) { + throw Components.results.NS_ERROR_NO_AGGREGATION; + } + return new mySample(); + } + } +}; + +function NSGetModule(compMgr, fileSpec) { + return myModule; +}