Helper Apps
|
URILoader tries to find a content listener for the
MIME type in question.URILoader asks an
nsIExternalHelperAppService to handle the load.nsExternalHelperAppService looks up the
nsIMIMEInfo for the load and creates an
nsIHelperAppLauncher to manage the load.nsExternalAppHandler (which implements
nsIHelperAppLauncher) uses the nsIMIMEInfo
and an nsIHelperAppLauncherDialog to decide what to do
with the data.nsExternalAppHandler does whatever it decided to
do.nsIMIMEInfo lookupmailcap/mime.types on Linux.nsExternalAppHandler detailsnsIStreamListener.nsIHelperAppLauncherDialog in
OnStartRequest.OnDataAvailable
notifications come in.nsIMIMEInfo.nsExternalAppHandler::OnStartRequestShow() on the
nsIHelperAppLauncherDialog, which asynchronously puts up
the helper app dialog.nsExternalAppHandler::OnDataAvailablensExternalAppHandler::OnStopRequestSet a flag that we're done, then do whatever the user wants if the user has decided (save to disk and open in helper are the current options the user has).
This is our implementation of nsIHelperAppLauncherDialog
It calls back to the nsExternalAppHandler to let it
know what the user picked
If a user decides to "save to disk", we just move/copy the temporary file over to the chosen location once the download completes. If an error occurs while we do this we delete the temp file and put up an error dialog.
This is delegated to the nsPIExternalAppLauncher (also
implemented by the nsExternalHelperAppHandler):
nsIProcess or
via the ::ShellExecute() method depending on where the
MIMEInfo came from. Last-ditch check for executable files
here.LaunchWithDoc() method on nsILocalFileMac.nsIProcess.::ShellExecute(). Checks
happen in OnStartRequest, in the helper app dialog, and
as a last ditch in the launching code.
nsIMIMEInfonsIMIMEService API to improve the
quality of the MIMEInfo we get.nsIMIMEInfo.mailcap syntax.