mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-27 12:50:09 +00:00
fixing scriptability of IPC interfaces
fixing critical bug in DConnectStub::QueryInterface adding JavaScript testcase for DConnect NOT PART OF THE BUILD
This commit is contained in:
parent
cb74580d03
commit
333b83915b
@ -44,10 +44,10 @@ VPATH = @srcdir@
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
MODULE = ipcd
|
||||
XPIDL_MODULE= ipcd_dconnect
|
||||
|
||||
XPIDLSRCS = \
|
||||
ipcIDConnectService.idl \
|
||||
$(NULL)
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
|
@ -999,7 +999,7 @@ DConnectStub::QueryInterface(const nsID &aIID, void **aInstancePtr)
|
||||
}
|
||||
|
||||
// else, we need to query the peer object
|
||||
LOG(("calling QueryInteface on peer object\n"));
|
||||
LOG(("calling QueryInterface on peer object\n"));
|
||||
|
||||
DConnectSetupQueryInterface msg;
|
||||
msg.opcode_minor = DCON_OP_SETUP_QUERY_INTERFACE;
|
||||
@ -1207,10 +1207,18 @@ public:
|
||||
|
||||
LOG(("got SETUP_REPLY: status=%x instance=%p\n", reply->status, reply->instance));
|
||||
|
||||
nsresult rv = CreateStub(mSetup->iid, sender, reply->instance,
|
||||
getter_AddRefs(mStub));
|
||||
if (NS_FAILED(rv))
|
||||
mStatus = rv;
|
||||
if (NS_FAILED(reply->status))
|
||||
{
|
||||
NS_ASSERTION(!reply->instance, "non-null instance on failure");
|
||||
mStatus = reply->status;
|
||||
}
|
||||
else
|
||||
{
|
||||
nsresult rv = CreateStub(mSetup->iid, sender, reply->instance,
|
||||
getter_AddRefs(mStub));
|
||||
if (NS_FAILED(rv))
|
||||
mStatus = rv;
|
||||
}
|
||||
}
|
||||
|
||||
nsresult GetStub(void **aInstancePtr)
|
||||
|
69
ipc/ipcd/extensions/dconnect/test/TestClient.js
Normal file
69
ipc/ipcd/extensions/dconnect/test/TestClient.js
Normal file
@ -0,0 +1,69 @@
|
||||
/**
|
||||
* This file contains code that mirrors the code in TestDConnect.cpp:DoTest
|
||||
*/
|
||||
|
||||
const ipcIService = Components.interfaces.ipcIService;
|
||||
const ipcIDConnectService = Components.interfaces.ipcIDConnectService;
|
||||
const nsIFile = Components.interfaces.nsIFile;
|
||||
const nsILocalFile = Components.interfaces.nsILocalFile;
|
||||
const nsIEventQueueService = Components.interfaces.nsIEventQueueService;
|
||||
|
||||
// XXX use directory service for this
|
||||
const TEST_PATH = "/tmp";
|
||||
|
||||
var serverID = 0;
|
||||
|
||||
function findServer()
|
||||
{
|
||||
var ipc = Components.classes["@mozilla.org/ipc/service;1"].getService(ipcIService);
|
||||
serverID = ipc.resolveClientName("test-server");
|
||||
}
|
||||
|
||||
function doTest()
|
||||
{
|
||||
var dcon = Components.classes["@mozilla.org/ipc/dconnect-service;1"]
|
||||
.getService(ipcIDConnectService);
|
||||
|
||||
var file = dcon.createInstanceByContractID(serverID, "@mozilla.org/file/local;1", nsIFile);
|
||||
|
||||
var localFile = file.QueryInterface(nsILocalFile);
|
||||
|
||||
localFile.initWithPath(TEST_PATH);
|
||||
|
||||
if (file.path != TEST_PATH)
|
||||
{
|
||||
dump("*** path test failed [path=" + file.path + "]\n");
|
||||
return;
|
||||
}
|
||||
|
||||
dump("file exists: " + file.exists() + "\n");
|
||||
|
||||
var clone = file.clone();
|
||||
|
||||
const node = "hello.txt";
|
||||
clone.append(node);
|
||||
dump("files are equal: " + file.equals(clone) + "\n");
|
||||
|
||||
if (!clone.exists())
|
||||
clone.create(nsIFile.NORMAL_FILE_TYPE, 0600);
|
||||
|
||||
clone.moveTo(null, "helloworld.txt");
|
||||
|
||||
var localObj = Components.classes["@mozilla.org/file/local;1"].createInstance(nsILocalFile);
|
||||
localObj.initWithPath(TEST_PATH);
|
||||
dump("file.equals(localObj) = " + file.equals(localObj) + "\n");
|
||||
dump("localObj.equals(file) = " + localObj.equals(file) + "\n");
|
||||
}
|
||||
|
||||
function setupEventQ()
|
||||
{
|
||||
var eqs = Components.classes["@mozilla.org/event-queue-service;1"]
|
||||
.getService(nsIEventQueueService);
|
||||
eqs.createMonitoredThreadEventQueue();
|
||||
}
|
||||
|
||||
setupEventQ();
|
||||
findServer();
|
||||
dump("\n---------------------------------------------------\n");
|
||||
doTest();
|
||||
dump("---------------------------------------------------\n\n");
|
29
ipc/ipcd/extensions/dconnect/test/TestServer.js
Normal file
29
ipc/ipcd/extensions/dconnect/test/TestServer.js
Normal file
@ -0,0 +1,29 @@
|
||||
/**
|
||||
* This file contains code for a "server" that does nothing more
|
||||
* than set a name for itself on the IPC system so that the client
|
||||
* can connect and control this process.
|
||||
*/
|
||||
|
||||
const ipcIService = Components.interfaces.ipcIService;
|
||||
const nsIEventQueueService = Components.interfaces.nsIEventQueueService;
|
||||
const nsIEventQueue = Components.interfaces.nsIEventQueue;
|
||||
|
||||
function registerServer()
|
||||
{
|
||||
var ipc = Components.classes["@mozilla.org/ipc/service;1"].getService(ipcIService);
|
||||
ipc.addName("test-server");
|
||||
}
|
||||
|
||||
function runEventQ()
|
||||
{
|
||||
var eqs = Components.classes["@mozilla.org/event-queue-service;1"]
|
||||
.getService(nsIEventQueueService);
|
||||
eqs.createMonitoredThreadEventQueue();
|
||||
var queue = eqs.getSpecialEventQueue(eqs.CURRENT_THREAD_EVENT_QUEUE);
|
||||
|
||||
// this never returns
|
||||
queue.eventLoop();
|
||||
}
|
||||
|
||||
registerServer();
|
||||
runEventQ();
|
@ -43,7 +43,7 @@ VPATH = @srcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
MODULE = ipcd
|
||||
MODULE = ipcd_lock
|
||||
|
||||
EXPORTS = \
|
||||
ipcLockCID.h \
|
||||
|
@ -42,7 +42,7 @@ VPATH = @srcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
MODULE = ipcd
|
||||
MODULE = ipcd_transmngr
|
||||
|
||||
XPIDLSRCS = \
|
||||
ipcITransactionService.idl \
|
||||
@ -50,4 +50,3 @@ XPIDLSRCS = \
|
||||
$(NULL)
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user