nsresult
sbAlbumArtService::GetAlbumArtFileExtension(const nsACString& aMimeType,
                                            nsACString&        aFileExtension)
{
  TRACE(("sbAlbumArtService[0x%8.x] - GetAlbumArtFileExtension", this));
  nsresult      rv;

  // Look up the file extension from the MIME type.
  rv = mMIMEService->GetPrimaryExtension(aMimeType,
                                         NS_LITERAL_CSTRING(""),
                                         aFileExtension);
  if (NS_FAILED(rv))
    aFileExtension.Truncate();

  // Extract the file extension from the MIME type.
  if (aFileExtension.IsEmpty()) {
    PRInt32 mimeSubTypeIndex = aMimeType.RFind("/");
    if (mimeSubTypeIndex >= 0) {
      aFileExtension.Assign(nsDependentCSubstring(aMimeType,
                                                  mimeSubTypeIndex + 1));
    } else {
      aFileExtension.Assign(aMimeType);
    }
  }

  // Convert file extension to lower-case.
  ToLowerCase(aFileExtension);

  // Validate the extension.
  if (!mValidExtensionList.Contains(aFileExtension))
    return NS_ERROR_FAILURE;

  return NS_OK;
}