Neil, thanks for the suggestion. This is what I thought I was doing (and I was), but if you really redefine the contract (instead of defining a new one), it looks like the answer is that you need to go to nsIComponentRegistrar and register your factory (instead of rely on chrome.manifest to handle this for you). An example of this might be:
Components.manager.nsIComponentRegistrar.registerFactory(CLASS_ID, CLASS_NAME, CONTRACT_ID, MyPromptServiceFactory);
Where were the constants:
const CLASS_ID = Components.ID("{a2112d6a-0e28-421f-b46a-25c0b308cbd0}"); // description const CLASS_NAME = "My Prompt Service"; // textual unique identifier const CONTRACT_ID = "@mozilla.org/embedcomp/prompt-service;1";
If the identifiers CLASS_ID / CONTRACT_ID were identifiers for an existing service.
source share