зеркало из https://github.com/mozilla/pjs.git
Bug 282958 - "toolkit/mozapps/downloads/content uses wrong contractid for the MIME service" [p=chpe@gnome.org (Christian Persch) r=biesi a1.9=schrep]
This commit is contained in:
Родитель
f0041bced9
Коммит
a988026096
|
@ -802,7 +802,7 @@ var gApplicationsPane = {
|
||||||
getService(Ci.nsIPrefBranch).
|
getService(Ci.nsIPrefBranch).
|
||||||
QueryInterface(Ci.nsIPrefBranch2),
|
QueryInterface(Ci.nsIPrefBranch2),
|
||||||
|
|
||||||
_mimeSvc : Cc["@mozilla.org/uriloader/external-helper-app-service;1"].
|
_mimeSvc : Cc["@mozilla.org/mime;1"].
|
||||||
getService(Ci.nsIMIMEService),
|
getService(Ci.nsIMIMEService),
|
||||||
|
|
||||||
_helperAppSvc : Cc["@mozilla.org/uriloader/external-helper-app-service;1"].
|
_helperAppSvc : Cc["@mozilla.org/uriloader/external-helper-app-service;1"].
|
||||||
|
|
|
@ -183,9 +183,7 @@ function downloadCompleted(aDownload)
|
||||||
// getTypeFromFile fails if it can't find a type for this file.
|
// getTypeFromFile fails if it can't find a type for this file.
|
||||||
try {
|
try {
|
||||||
// Refresh the icon, so that executable icons are shown.
|
// Refresh the icon, so that executable icons are shown.
|
||||||
const kExternalHelperAppServContractID =
|
var mimeService = Cc["@mozilla.org/mime;1"].
|
||||||
"@mozilla.org/uriloader/external-helper-app-service;1";
|
|
||||||
var mimeService = Cc[kExternalHelperAppServContractID].
|
|
||||||
getService(Ci.nsIMIMEService);
|
getService(Ci.nsIMIMEService);
|
||||||
var contentType = mimeService.getTypeFromFile(aDownload.targetFile);
|
var contentType = mimeService.getTypeFromFile(aDownload.targetFile);
|
||||||
|
|
||||||
|
|
|
@ -211,10 +211,7 @@ HelperApps.prototype = {
|
||||||
types = types.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
types = types.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
||||||
types = types.Value.split(", ");
|
types = types.Value.split(", ");
|
||||||
|
|
||||||
// We're using helper app service as our MIME Service here because the helper app service
|
mimeSvc = Components.classes["@mozilla.org/mime;1"].getService(Components.interfaces.nsIMIMEService);
|
||||||
// talks to OS Specific hooks that on some platforms (MacOS X) are required to get a
|
|
||||||
// fully populated MIME Info object. Thus it is this object that we return.
|
|
||||||
mimeSvc = Components.classes["@mozilla.org/uriloader/external-helper-app-service;1"].getService(Components.interfaces.nsIMIMEService);
|
|
||||||
return mimeSvc.getFromTypeAndExtension(types[0], null);
|
return mimeSvc.getFromTypeAndExtension(types[0], null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -454,10 +454,9 @@ nsUnknownContentTypeDialog.prototype = {
|
||||||
// data, rather, a data format that the system probably knows about,
|
// data, rather, a data format that the system probably knows about,
|
||||||
// we don't want to use the content-type provided by this dialog's
|
// we don't want to use the content-type provided by this dialog's
|
||||||
// opener, as that's the generic application/octet-stream that the
|
// opener, as that's the generic application/octet-stream that the
|
||||||
// uriloader has passed, rather we want to ask the External Helper App
|
// uriloader has passed, rather we want to ask the MIME Service.
|
||||||
// Service, which will ask the host OS. This is so we don't needlessly
|
// This is so we don't needlessly disable the "autohandle" checkbox.
|
||||||
// disable the "autohandle" checkbox.
|
var mimeService = Components.classes["@mozilla.org/mime;1"].getService(Components.interfaces.nsIMIMEService);
|
||||||
var mimeService = Components.classes["@mozilla.org/uriloader/external-helper-app-service;1"].getService(Components.interfaces.nsIMIMEService);
|
|
||||||
var type = mimeService.getTypeFromURI(this.mLauncher.source);
|
var type = mimeService.getTypeFromURI(this.mLauncher.source);
|
||||||
this.realMIMEInfo = mimeService.getFromTypeAndExtension(type, "");
|
this.realMIMEInfo = mimeService.getFromTypeAndExtension(type, "");
|
||||||
|
|
||||||
|
|
|
@ -585,12 +585,18 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const nsACString& aMimeConte
|
||||||
LOG(("HelperAppService::DoContent: mime '%s', extension '%s'\n",
|
LOG(("HelperAppService::DoContent: mime '%s', extension '%s'\n",
|
||||||
PromiseFlatCString(aMimeContentType).get(), fileExtension.get()));
|
PromiseFlatCString(aMimeContentType).get(), fileExtension.get()));
|
||||||
|
|
||||||
|
// we get the mime service here even though we're the default implementation of it,
|
||||||
|
// so it's possible to override only the mime service and not need to reimplement the
|
||||||
|
// whole external helper app service itself
|
||||||
|
nsCOMPtr<nsIMIMEService> mimeSvc(do_GetService(NS_MIMESERVICE_CONTRACTID));
|
||||||
|
NS_ENSURE_TRUE(mimeSvc, NS_ERROR_FAILURE);
|
||||||
|
|
||||||
// Try to find a mime object by looking at the mime type/extension
|
// Try to find a mime object by looking at the mime type/extension
|
||||||
nsCOMPtr<nsIMIMEInfo> mimeInfo;
|
nsCOMPtr<nsIMIMEInfo> mimeInfo;
|
||||||
if (aMimeContentType.Equals(APPLICATION_GUESS_FROM_EXT, nsCaseInsensitiveCStringComparator())) {
|
if (aMimeContentType.Equals(APPLICATION_GUESS_FROM_EXT, nsCaseInsensitiveCStringComparator())) {
|
||||||
nsCAutoString mimeType;
|
nsCAutoString mimeType;
|
||||||
if (!fileExtension.IsEmpty()) {
|
if (!fileExtension.IsEmpty()) {
|
||||||
GetFromTypeAndExtension(EmptyCString(), fileExtension, getter_AddRefs(mimeInfo));
|
mimeSvc->GetFromTypeAndExtension(EmptyCString(), fileExtension, getter_AddRefs(mimeInfo));
|
||||||
if (mimeInfo) {
|
if (mimeInfo) {
|
||||||
mimeInfo->GetMIMEType(mimeType);
|
mimeInfo->GetMIMEType(mimeType);
|
||||||
|
|
||||||
|
@ -601,7 +607,7 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const nsACString& aMimeConte
|
||||||
|
|
||||||
if (fileExtension.IsEmpty() || mimeType.IsEmpty()) {
|
if (fileExtension.IsEmpty() || mimeType.IsEmpty()) {
|
||||||
// Extension lookup gave us no useful match
|
// Extension lookup gave us no useful match
|
||||||
GetFromTypeAndExtension(NS_LITERAL_CSTRING(APPLICATION_OCTET_STREAM), fileExtension,
|
mimeSvc->GetFromTypeAndExtension(NS_LITERAL_CSTRING(APPLICATION_OCTET_STREAM), fileExtension,
|
||||||
getter_AddRefs(mimeInfo));
|
getter_AddRefs(mimeInfo));
|
||||||
mimeType.AssignLiteral(APPLICATION_OCTET_STREAM);
|
mimeType.AssignLiteral(APPLICATION_OCTET_STREAM);
|
||||||
}
|
}
|
||||||
|
@ -612,7 +618,7 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const nsACString& aMimeConte
|
||||||
reason = nsIHelperAppLauncherDialog::REASON_TYPESNIFFED;
|
reason = nsIHelperAppLauncherDialog::REASON_TYPESNIFFED;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
GetFromTypeAndExtension(aMimeContentType, fileExtension,
|
mimeSvc->GetFromTypeAndExtension(aMimeContentType, fileExtension,
|
||||||
getter_AddRefs(mimeInfo));
|
getter_AddRefs(mimeInfo));
|
||||||
}
|
}
|
||||||
LOG(("Type/Ext lookup found 0x%p\n", mimeInfo.get()));
|
LOG(("Type/Ext lookup found 0x%p\n", mimeInfo.get()));
|
||||||
|
|
|
@ -756,7 +756,7 @@ HandlerService.prototype = {
|
||||||
get _mimeSvc() {
|
get _mimeSvc() {
|
||||||
if (!this.__mimeSvc)
|
if (!this.__mimeSvc)
|
||||||
this.__mimeSvc =
|
this.__mimeSvc =
|
||||||
Cc["@mozilla.org/uriloader/external-helper-app-service;1"].
|
Cc["@mozilla.org/mime;1"].
|
||||||
getService(Ci.nsIMIMEService);
|
getService(Ci.nsIMIMEService);
|
||||||
return this.__mimeSvc;
|
return this.__mimeSvc;
|
||||||
},
|
},
|
||||||
|
|
|
@ -42,7 +42,7 @@ function run_test() {
|
||||||
const handlerSvc = Cc["@mozilla.org/uriloader/handler-service;1"].
|
const handlerSvc = Cc["@mozilla.org/uriloader/handler-service;1"].
|
||||||
getService(Ci.nsIHandlerService);
|
getService(Ci.nsIHandlerService);
|
||||||
|
|
||||||
const mimeSvc = Cc["@mozilla.org/uriloader/external-helper-app-service;1"].
|
const mimeSvc = Cc["@mozilla.org/mime;1"].
|
||||||
getService(Ci.nsIMIMEService);
|
getService(Ci.nsIMIMEService);
|
||||||
|
|
||||||
const prefSvc = Cc["@mozilla.org/preferences-service;1"].
|
const prefSvc = Cc["@mozilla.org/preferences-service;1"].
|
||||||
|
|
Загрузка…
Ссылка в новой задаче