I want to extend nsIProxyAutoConfig with an extra interface
nsIProxyAutoConfigFoxview.
below is what I have modified, nsIProxyAutoConfigFoxview is the extra
interface.
#1, file netwerk/base/public/nsIProxyAutoConfig.idl
[scriptable, uuid(ec142454-de53-4f4c-aef7-37f79865b79d)]
interface nsIProxyAutoConfigFoxview : nsISupports
{
ACString getProxyForURIFoxview(in ACString aTestURI, in ACString
aTestHost, in ACString aTestFrom);
};
#2, file netwerk/base/public/nsIProxyAutoConfig.js
const nsISupports = Components.interfaces.nsISupports;
const nsIProxyAutoConfig = Components.interfaces.nsIProxyAutoConfig;
const nsIProxyAutoConfigFoxview =
Components.interfaces.nsIProxyAutoConfigFoxview;
const nsIDNSService = Components.interfaces.nsIDNSService;
function nsProxyAutoConfig() {};
nsProxyAutoConfig.prototype = {
QueryInterface: function(iid) {
if (iid.Equals(nsIProxyAutoConfig) ||
iid.Equals(nsIProxyAutoConfigFoxview) ||
iid.Equals(nsISupports))
return this;
throw Components.results.NS_ERROR_NO_INTERFACE;
},
// nsIProxyAutoConfigFoxview
getProxyForURIFoxview: function(testURI, testHost, testFrom) {
// ...
}
}
var pacFactory = new Object();
pacFactory.createInstance =
function (outer, iid) {
if (outer != null)
throw Components.results.NS_ERROR_NO_AGGREGATION;
if (!iid.equals(nsIProxyAutoConfig) &&
!iid.equals(nsIProxyAutoConfigFoxview) &&
!iid.equals(Components.interfaces.nsISupports)) {
throw Components.results.NS_ERROR_NO_INTERFACE;
}
return pac;
}
after re-compile firefox, in xpcshell, I can get nsIProxyAutoConfig or
nsIProxyAutoConfigFoxview, but I can't QueryInterface from one the
another, can anyone tell me what's wrong?
js> var pac =
Components.classes["@mozilla.org/network/proxy-auto-config;1"].createInstance(Components.interfaces.nsIProxyAutoConfig);
js> pac
[xpconnect wrapped nsIProxyAutoConfig @ 0x70c320 (native @ 0x6a7950)]
when I QueryInterface on pac, I got error:
js> var foxview =
pac.QueryInterface(Components.interfaces.nsIProxyAutoConfigFoxview);
uncaught exception: [Exception... "Component returned failure code:
0x80004002 (NS_NOINTERFACE) [nsISupports.QueryInterface]" nsresult:
"0x80004002 (NS_NOINTERFACE)" location: "JS frame :: typein ::
<TOP_LEVEL> :: line 7" data: no]
but after I createInstance a nsIProxyAutoConfigFoxview
js> var foxview2 =
Components.classes["@mozilla.org/network/proxy-auto-config;1"].createInstance(Components.interfaces.nsIProxyAutoConfigFoxview);
js> foxview2
[xpconnect wrapped (nsISupports, nsIProxyAutoConfig,
nsIProxyAutoConfigFoxview) @ 0x70c320 (native @ 0x6a7950)]
everything works.
js> foxview2
[xpconnect wrapped (nsISupports, nsIProxyAutoConfig,
nsIProxyAutoConfigFoxview) @ 0x70c320 (native @ 0x6a7950)]
js> pac
[xpconnect wrapped (nsISupports, nsIProxyAutoConfig,
nsIProxyAutoConfigFoxview) @ 0x70c320 (native @ 0x6a7950)]
js> foxview3 =
pac.QueryInterface(Components.interfaces.nsIProxyAutoConfigFoxview);
[xpconnect wrapped (nsISupports, nsIProxyAutoConfig,
nsIProxyAutoConfigFoxview) @ 0x70c320 (native @ 0x6a7950)]
js> pac2 =
foxview2.QueryInterface(Components.interfaces.nsIProxyAutoConfig);
[xpconnect wrapped (nsISupports, nsIProxyAutoConfig,
nsIProxyAutoConfigFoxview) @ 0x70c320 (native @ 0x6a7950)]
please tell me why this happens? tks
_______________________________________________
dev-tech-network mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-network