Jacek Caban : urlmon: Use FindMimeFromData to determine MIME type.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed May 31 08:56:41 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: db24fff13ea96ff281077bb6e4f5ee2f16934e1e
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=db24fff13ea96ff281077bb6e4f5ee2f16934e1e
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed May 31 14:33:30 2006 +0200
urlmon: Use FindMimeFromData to determine MIME type.
---
dlls/urlmon/binding.c | 26 +++++++++++++++++++++-----
1 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c
index 11b067c..e64cef7 100644
--- a/dlls/urlmon/binding.c
+++ b/dlls/urlmon/binding.c
@@ -53,6 +53,7 @@ typedef struct {
DWORD bindf;
LPWSTR mime;
LPWSTR url;
+ BOOL verified_mime;
DWORD apartment_thread;
HWND notif_hwnd;
@@ -737,6 +738,7 @@ static HRESULT WINAPI InternetProtocolSi
on_progress(This, 0, 0, BINDSTATUS_SENDINGREQUEST, szStatusText);
break;
case BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE:
+ This->verified_mime = TRUE;
on_progress(This, 0, 0, BINDSTATUS_MIMETYPEAVAILABLE, szStatusText);
break;
case BINDSTATUS_CACHEFILENAMEAVAILABLE:
@@ -757,10 +759,25 @@ static HRESULT WINAPI InternetProtocolSi
TRACE("(%p)->(%ld %lu %lu)\n", This, grfBSCF, ulProgress, ulProgressMax);
- if(grfBSCF & BSCF_FIRSTDATANOTIFICATION) {
+ fill_stream_buffer(This->stream);
+
+ if(!This->verified_mime) {
+ LPWSTR mime;
+
+ This->verified_mime = TRUE;
+
+ /* FIXME: Always call FindMediaFromData (its implementation is not yet ready for this). */
if(This->mime)
- IBindStatusCallback_OnProgress(This->callback, ulProgress, ulProgressMax,
- BINDSTATUS_MIMETYPEAVAILABLE, This->mime);
+ mime = This->mime;
+ else
+ FindMimeFromData(NULL, This->url, This->stream->buf,
+ min(This->stream->buf_size, 255), This->mime, 0, &mime, 0);
+
+ IBindStatusCallback_OnProgress(This->callback, ulProgress, ulProgressMax,
+ BINDSTATUS_MIMETYPEAVAILABLE, mime);
+ }
+
+ if(grfBSCF & BSCF_FIRSTDATANOTIFICATION) {
IBindStatusCallback_OnProgress(This->callback, ulProgress, ulProgressMax,
BINDSTATUS_BEGINDOWNLOADDATA, This->url);
}
@@ -772,8 +789,6 @@ static HRESULT WINAPI InternetProtocolSi
if(grfBSCF & BSCF_FIRSTDATANOTIFICATION)
IInternetProtocol_LockRequest(This->protocol, 0);
- fill_stream_buffer(This->stream);
-
formatetc.cfFormat = 0; /* FIXME */
formatetc.ptd = NULL;
formatetc.dwAspect = 1;
@@ -1028,6 +1043,7 @@ static HRESULT Binding_Create(LPCWSTR ur
ret->url = NULL;
ret->apartment_thread = GetCurrentThreadId();
ret->notif_hwnd = get_notif_hwnd();
+ ret->verified_mime = FALSE;
memset(&ret->bindinfo, 0, sizeof(BINDINFO));
ret->bindinfo.cbSize = sizeof(BINDINFO);
More information about the wine-cvs
mailing list