Linux Mac OSX Windows

Implemented by

 The external protocol service is used for finding and launching
 platform specific applications for particular protocols.

 You can ask the external protocol service if it has an external
 handler for a given protocol scheme. And you can ask it to load 
 the url using the default handler.
[scriptable, uuid(a49813a4-98b7-4bdb-998c-8bd9704af0c0)]
interface nsIExternalProtocolService : nsISupports

Methods

 Check whether a handler for a specific protocol exists.
 @param aProtocolScheme The scheme from a url: http, ftp, mailto, etc.
 @return true if we have a handler and false otherwise.
boolean externalProtocolHandlerExists(in string aProtocolScheme)
 Gets a human-readable description for the application responsible for
 handling a specific protocol.

 @param aScheme The scheme to look up. For example, "mms".

 @throw NS_ERROR_NOT_IMPLEMENTED
        If getting descriptions for protocol helpers is not supported
 @throw NS_ERROR_NOT_AVAILABLE
        If no protocol helper exists for this scheme, or if it is not
        possible to get a description for it.
AString getApplicationDescription(in AUTF8String aScheme)
 Check whether a handler for a specific protocol is "exposed" as a visible
 feature of the current application.

 An exposed protocol handler is one that can be used in all contexts.  A
 non-exposed protocol handler is one that can only be used internally by the
 application.  For example, a non-exposed protocol would not be loaded by the
 application in response to a link click or a X-remote openURL command.
 Instead, it would be deferred to the system's external protocol handler.
boolean isExposedProtocol(in string aProtocolScheme)
 Used to load a URI via an external application. Might prompt the user for
 permission to load the external application. Replaces loadUrl()

 @param aURI    The URI to load
 @param aPrompt If null we grab one from windowwatcher if we need it
void loadURI(in nsIURI aURI, in nsIPrompt aPrompt)
 Used to load a url via an external protocol handler (if one exists)
 @param aURL The url to load
void loadUrl(in nsIURI aURL)