bug 223990. Should have a getPrimaryExtensionForType function
r=bzbarsky sr=darin also changes nsIMIMEService functions to start with a lowercase letter (only affects JS Callers)
This commit is contained in:
Родитель
ba8abce8d4
Коммит
26c72f348f
|
@ -766,7 +766,7 @@ function GetExtensionBasedOnMimeType(aMIMEType)
|
|||
mimeService = Components.classes["@mozilla.org/mime;1"].getService();
|
||||
mimeService = mimeService.QueryInterface(Components.interfaces.nsIMIMEService);
|
||||
|
||||
var mimeInfo = mimeService.GetFromTypeAndExtension(aMIMEType, null);
|
||||
var mimeInfo = mimeService.getFromTypeAndExtension(aMIMEType, null);
|
||||
if (!mimeInfo) return "";
|
||||
|
||||
var fileExtension = mimeInfo.primaryExtension;
|
||||
|
|
|
@ -1287,16 +1287,13 @@ nsWebBrowserPersist::GetExtensionForContentType(const PRUnichar *aContentType, P
|
|||
nsCOMPtr<nsIMIMEInfo> mimeInfo;
|
||||
nsCAutoString contentType;
|
||||
contentType.AssignWithConversion(aContentType);
|
||||
mMIMEService->GetFromTypeAndExtension(contentType.get(), nsnull, getter_AddRefs(mimeInfo));
|
||||
if (mimeInfo)
|
||||
nsXPIDLCString ext;
|
||||
rv = mMIMEService->GetPrimaryExtension(contentType.get(), nsnull, getter_Copies(ext));
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsXPIDLCString ext;
|
||||
if (NS_SUCCEEDED(mimeInfo->GetPrimaryExtension(getter_Copies(ext))))
|
||||
{
|
||||
*aExt = ToNewUnicode(ext);
|
||||
NS_ENSURE_TRUE(*aExt, NS_ERROR_OUT_OF_MEMORY);
|
||||
return NS_OK;
|
||||
}
|
||||
*aExt = ToNewUnicode(ext);
|
||||
NS_ENSURE_TRUE(*aExt, NS_ERROR_OUT_OF_MEMORY);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return NS_ERROR_FAILURE;
|
||||
|
|
|
@ -1892,19 +1892,15 @@ mime_decompose_file_init_fn ( void *stream_closure, MimeHeaders *headers )
|
|||
nsCOMPtr<nsIMIMEService> mimeFinder (do_GetService(NS_MIMESERVICE_CONTRACTID, &rv));
|
||||
if (NS_SUCCEEDED(rv) && mimeFinder)
|
||||
{
|
||||
nsCOMPtr<nsIMIMEInfo> mimeInfo = nsnull;
|
||||
rv = mimeFinder->GetFromTypeAndExtension(contentType.get(), nsnull, getter_AddRefs(mimeInfo));
|
||||
if (NS_SUCCEEDED(rv) && mimeInfo)
|
||||
{
|
||||
nsXPIDLCString fileExtension;
|
||||
nsXPIDLCString fileExtension;
|
||||
rv = mimeFinder->GetPrimaryExtension(contentType.get(), nsnull, getter_Copies(fileExtension));
|
||||
|
||||
if ( (NS_SUCCEEDED(mimeInfo->GetPrimaryExtension(getter_Copies(fileExtension)))) && fileExtension)
|
||||
{
|
||||
newAttachName.Append(".");
|
||||
newAttachName.Append(fileExtension);
|
||||
extensionAdded = PR_TRUE;
|
||||
}
|
||||
}
|
||||
if (NS_SUCCEEDED(rv) && !fileExtension.IsEmpty())
|
||||
{
|
||||
newAttachName.Append(".");
|
||||
newAttachName.Append(fileExtension);
|
||||
extensionAdded = PR_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (!extensionAdded)
|
||||
|
|
|
@ -279,21 +279,16 @@ ValidateRealName(nsMsgAttachmentData *aAttach, MimeHeaders *aHdrs)
|
|||
contentType.Truncate(pos);
|
||||
|
||||
nsCOMPtr<nsIMIMEService> mimeFinder (do_GetService(NS_MIMESERVICE_CONTRACTID, &rv));
|
||||
if (NS_SUCCEEDED(rv) && mimeFinder)
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsIMIMEInfo *mimeInfo = nsnull;
|
||||
rv = mimeFinder->GetFromTypeAndExtension(contentType.get(), nsnull, &mimeInfo);
|
||||
if (NS_SUCCEEDED(rv) && mimeInfo)
|
||||
{
|
||||
char *aFileExtension = nsnull;
|
||||
nsXPIDLCString fileExtension;
|
||||
rv = mimeFinder->GetPrimaryExtension(contentType.get(), nsnull, getter_Copies(fileExtension));
|
||||
|
||||
if ( (NS_SUCCEEDED(mimeInfo->GetPrimaryExtension(&aFileExtension))) && aFileExtension)
|
||||
{
|
||||
newAttachName.Append(NS_LITERAL_STRING("."));
|
||||
newAttachName.AppendWithConversion(aFileExtension);
|
||||
PR_FREEIF(aFileExtension);
|
||||
}
|
||||
}
|
||||
if (NS_SUCCEEDED(rv) && !fileExtension.IsEmpty())
|
||||
{
|
||||
newAttachName.Append(PRUnichar('.'));
|
||||
newAttachName.AppendWithConversion(fileExtension);
|
||||
}
|
||||
}
|
||||
|
||||
aAttach->real_name = ToNewCString(newAttachName);
|
||||
|
|
|
@ -35,17 +35,6 @@
|
|||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/* The MIME service is responsible for mapping file extensions to MIME-types
|
||||
* (see RFC 2045). It also provides access to nsIMIMEInfo interfaces and
|
||||
* acts as a general convenience wrapper of nsIMIMEInfo interfaces.
|
||||
*
|
||||
* The MIME service maintains a database with a <b>one</b> MIME type <b>to many</b>
|
||||
* file extensions rule. Adding the same file extension to multiple MIME types
|
||||
* is illegal and behavior is undefined.
|
||||
*
|
||||
* @see nsIMIMEInfo
|
||||
*/
|
||||
|
||||
#include "nsISupports.idl"
|
||||
#include "nsIMIMEInfo.idl"
|
||||
#include "nsIURI.idl"
|
||||
|
@ -61,25 +50,39 @@
|
|||
}
|
||||
%}
|
||||
|
||||
/**
|
||||
* The MIME service is responsible for mapping file extensions to MIME-types
|
||||
* (see RFC 2045). It also provides access to nsIMIMEInfo interfaces and
|
||||
* acts as a general convenience wrapper of nsIMIMEInfo interfaces.
|
||||
*
|
||||
* The MIME service maintains a database with a <b>one</b> MIME type <b>to many</b>
|
||||
* file extensions rule. Adding the same file extension to multiple MIME types
|
||||
* is illegal and behavior is undefined.
|
||||
*
|
||||
* @see nsIMIMEInfo
|
||||
*/
|
||||
[scriptable, uuid(6C424C90-2FE7-11d3-A164-0050041CAF44)]
|
||||
interface nsIMIMEService : nsISupports {
|
||||
/* Retrieves an nsIMIMEInfo using both the extension
|
||||
/**
|
||||
* Retrieves an nsIMIMEInfo using both the extension
|
||||
* and the type of a file. The type is given preference
|
||||
* during the lookup. One of aMIMEType and aFileExt
|
||||
* can be null. At least one of aMIMEType and aFileExt
|
||||
* must be non-null and nonempty.
|
||||
*/
|
||||
nsIMIMEInfo GetFromTypeAndExtension(in string aMIMEType, in string aFileExt);
|
||||
nsIMIMEInfo getFromTypeAndExtension(in string aMIMEType, in string aFileExt);
|
||||
|
||||
/* Retrieves a string representation of the MIME type
|
||||
/**
|
||||
* Retrieves a string representation of the MIME type
|
||||
* associated with this file extension.
|
||||
*
|
||||
* @param A file extension (excluding the dot ('.')).
|
||||
* @return The MIME type, if any.
|
||||
*/
|
||||
string GetTypeFromExtension(in string aFileExt);
|
||||
string getTypeFromExtension(in string aFileExt);
|
||||
|
||||
/* Retrieves a string representation of the MIME type
|
||||
/**
|
||||
* Retrieves a string representation of the MIME type
|
||||
* associated with this URI. The association is purely
|
||||
* file extension to MIME type based. No attempt to determine
|
||||
* the type via server headers or byte scanning is made.
|
||||
|
@ -87,9 +90,17 @@ interface nsIMIMEService : nsISupports {
|
|||
* @param The URI the user wants MIME info on.
|
||||
* @return The MIME type, if any.
|
||||
*/
|
||||
string GetTypeFromURI(in nsIURI aURI);
|
||||
string getTypeFromURI(in nsIURI aURI);
|
||||
|
||||
//
|
||||
string GetTypeFromFile ( in nsIFile aFile );
|
||||
|
||||
string getTypeFromFile(in nsIFile aFile);
|
||||
|
||||
/**
|
||||
* Given a Type/Extension combination, returns the default extension
|
||||
* for this type. This may be identical to the passed-in extension.
|
||||
*
|
||||
* @param aMIMEType The Type to get information on. Must not be null.
|
||||
* @param aFileExt File Extension. Can be null.
|
||||
*/
|
||||
string getPrimaryExtension(in string aMIMEType, in string aFileExt);
|
||||
};
|
||||
|
|
|
@ -2325,6 +2325,18 @@ NS_IMETHODIMP nsExternalHelperAppService::GetTypeFromExtension(const char *aFile
|
|||
return info->GetMIMEType(aContentType);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsExternalHelperAppService::GetPrimaryExtension(const char* aMIMEType, const char* aFileExt, char** _retval)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aMIMEType);
|
||||
|
||||
nsCOMPtr<nsIMIMEInfo> mi;
|
||||
nsresult rv = GetFromTypeAndExtension(aMIMEType, aFileExt, getter_AddRefs(mi));
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
return mi->GetPrimaryExtension(_retval);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsExternalHelperAppService::GetTypeFromURI(nsIURI *aURI, char **aContentType)
|
||||
{
|
||||
NS_PRECONDITION(aContentType, "Null out param!");
|
||||
|
|
|
@ -737,7 +737,7 @@ function getMIMEService()
|
|||
function getMIMETypeForURI(aURI)
|
||||
{
|
||||
try {
|
||||
return getMIMEService().GetTypeFromURI(aURI);
|
||||
return getMIMEService().getTypeFromURI(aURI);
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
|
@ -747,7 +747,7 @@ function getMIMETypeForURI(aURI)
|
|||
function getMIMEInfoForType(aMIMEType)
|
||||
{
|
||||
try {
|
||||
return getMIMEService().GetFromTypeAndExtension(aMIMEType, null);
|
||||
return getMIMEService().getFromTypeAndExtension(aMIMEType, null);
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче