Module: wine Branch: refs/heads/master Commit: db24fff13ea96ff281077bb6e4f5ee2f16934e1e URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=db24fff13ea96ff281077bb6...
Author: Jacek Caban jacek@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);