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

Reply via email to