diff options
Diffstat (limited to 'browser/GeckoDocumentObject.cpp')
-rw-r--r-- | browser/GeckoDocumentObject.cpp | 75 |
1 files changed, 62 insertions, 13 deletions
diff --git a/browser/GeckoDocumentObject.cpp b/browser/GeckoDocumentObject.cpp index fe4a824..26eb13d 100644 --- a/browser/GeckoDocumentObject.cpp +++ b/browser/GeckoDocumentObject.cpp @@ -116,32 +116,47 @@ FilenameFromContentDisposition(nsCString contentDisposition, nsCString &fileName return NS_OK; } -char * -GeckoDocumentObject::GetImageName() +static nsresult +GetImageProperties(char *imgURIStr, nsIProperties **properties) { - if(!IsImage()) { - return NULL; - } - nsresult rv; - char *imgURIStr = GetImageURI(); nsCOMPtr<nsIURI> imageURI; rv = NewURI(imgURIStr, getter_AddRefs(imageURI)); - NS_ENSURE_SUCCESS(rv, NULL); + if(NS_FAILED(rv)) return rv; nsCOMPtr<nsIServiceManager> mgr; - NS_GetServiceManager (getter_AddRefs (mgr)); - NS_ENSURE_TRUE(mgr, NULL); + NS_GetServiceManager(getter_AddRefs(mgr)); + NS_ENSURE_TRUE(mgr, NS_ERROR_FAILURE); nsCOMPtr<imgICache> imgCache; rv = mgr->GetServiceByContractID("@mozilla.org/image/cache;1", - NS_GET_IID (imgICache), + NS_GET_IID(imgICache), getter_AddRefs(imgCache)); - NS_ENSURE_SUCCESS(rv, NULL); + if(NS_FAILED(rv)) return rv; + + imgCache->FindEntryProperties(imageURI, properties); + NS_ENSURE_TRUE(mgr, NS_ERROR_FAILURE); + return NS_OK; +} + +char * +GeckoDocumentObject::GetImageName() +{ + if(!IsImage()) { + return NULL; + } + + if(mImageName.Length()) { + return g_strdup(mImageName.get()); + } + + nsresult rv; + char *imgURIStr = GetImageURI(); nsCOMPtr<nsIProperties> imgProperties; - imgCache->FindEntryProperties(imageURI, getter_AddRefs(imgProperties)); + rv = GetImageProperties(imgURIStr, getter_AddRefs(imgProperties)); + NS_ENSURE_SUCCESS(rv, NULL); if (imgProperties) { nsCOMPtr<nsISupportsCString> dispositionCString; imgProperties->Get("content-disposition", @@ -155,6 +170,10 @@ GeckoDocumentObject::GetImageName() } if (!mImageName.Length()) { + nsCOMPtr<nsIURI> imageURI; + rv = NewURI(imgURIStr, getter_AddRefs(imageURI)); + NS_ENSURE_SUCCESS(rv, NULL); + nsCOMPtr<nsIURL> url(do_QueryInterface(imageURI)); if (url) { url->GetFileName(mImageName); @@ -165,6 +184,36 @@ GeckoDocumentObject::GetImageName() } char * +GeckoDocumentObject::GetImageMimeType() +{ + if(!IsImage()) { + return NULL; + } + + if(mImageMimeType.Length()) { + return g_strdup(mImageMimeType.get()); + } + + nsresult rv; + char *imgURIStr = GetImageURI(); + + nsCOMPtr<nsIProperties> imgProperties; + rv = GetImageProperties(imgURIStr, getter_AddRefs(imgProperties)); + NS_ENSURE_SUCCESS(rv, NULL); + if (imgProperties) { + nsCOMPtr<nsISupportsCString> typeCString; + imgProperties->Get("type", + NS_GET_IID(nsISupportsCString), + getter_AddRefs(typeCString)); + if (typeCString) { + typeCString->GetData(mImageMimeType); + } + } + + return mImageMimeType.Length() ? g_strdup(mImageMimeType.get()) : NULL; +} + +char * GeckoDocumentObject::GetImageURI() { if(!IsImage()) { |