diff --git a/dlls/urlmon/file.c b/dlls/urlmon/file.c index d426f195d5e..80d9dd6a9aa 100644 --- a/dlls/urlmon/file.c +++ b/dlls/urlmon/file.c @@ -251,7 +251,7 @@ static HRESULT WINAPI FileProtocol_StartEx(IInternetProtocolEx *iface, IUri *pUr DWORD scheme, size; LPWSTR mime = NULL; WCHAR null_char = 0; - BSTR url; + BSTR ext; HRESULT hres; TRACE("(%p)->(%p %p %p %08x %p)\n", This, pUri, pOIProtSink, @@ -300,17 +300,19 @@ static HRESULT WINAPI FileProtocol_StartEx(IInternetProtocolEx *iface, IUri *pUr if(FAILED(hres)) return hres; - hres = IUri_GetDisplayUri(pUri, &url); - if(hres == S_OK) { - hres = FindMimeFromData(NULL, url, NULL, 0, NULL, 0, &mime, 0); - SysFreeString(url); - if(SUCCEEDED(hres)) { - IInternetProtocolSink_ReportProgress(pOIProtSink, - (grfBINDF & BINDF_FROMURLMON) ? - BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE : BINDSTATUS_MIMETYPEAVAILABLE, - mime); - CoTaskMemFree(mime); + hres = IUri_GetExtension(pUri, &ext); + if(SUCCEEDED(hres)) { + if(hres == S_OK && *ext) { + hres = find_mime_from_ext(ext, &mime); + if(SUCCEEDED(hres)) { + IInternetProtocolSink_ReportProgress(pOIProtSink, + (grfBINDF & BINDF_FROMURLMON) ? + BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE : BINDSTATUS_MIMETYPEAVAILABLE, + mime); + CoTaskMemFree(mime); + } } + SysFreeString(ext); } IInternetProtocolSink_ReportData(pOIProtSink, diff --git a/dlls/urlmon/mimefilter.c b/dlls/urlmon/mimefilter.c index 1e06fc3f555..cee1a19da05 100644 --- a/dlls/urlmon/mimefilter.c +++ b/dlls/urlmon/mimefilter.c @@ -422,7 +422,7 @@ static BOOL application_octet_stream_filter(const BYTE *b, DWORD size) return TRUE; } -static HRESULT find_mime_from_ext(const WCHAR *ext, WCHAR **ret) +HRESULT find_mime_from_ext(const WCHAR *ext, WCHAR **ret) { DWORD res, size; WCHAR mime[64]; diff --git a/dlls/urlmon/urlmon_main.h b/dlls/urlmon/urlmon_main.h index e13476166ca..12be0edbeb1 100644 --- a/dlls/urlmon/urlmon_main.h +++ b/dlls/urlmon/urlmon_main.h @@ -76,6 +76,8 @@ WCHAR *get_useragent(void) DECLSPEC_HIDDEN; void update_user_agent(WCHAR*) DECLSPEC_HIDDEN; void free_session(void) DECLSPEC_HIDDEN; +HRESULT find_mime_from_ext(const WCHAR*,WCHAR**) DECLSPEC_HIDDEN; + HRESULT bind_to_storage(IUri*,IBindCtx*,REFIID,void**) DECLSPEC_HIDDEN; HRESULT bind_to_object(IMoniker*,IUri*,IBindCtx*,REFIID,void**ppv) DECLSPEC_HIDDEN;