urlmon: Use FindMimeFromData to determine MIME type.
This commit is contained in:
parent
bb835ae438
commit
db24fff13e
|
@ -53,6 +53,7 @@ typedef struct {
|
||||||
DWORD bindf;
|
DWORD bindf;
|
||||||
LPWSTR mime;
|
LPWSTR mime;
|
||||||
LPWSTR url;
|
LPWSTR url;
|
||||||
|
BOOL verified_mime;
|
||||||
|
|
||||||
DWORD apartment_thread;
|
DWORD apartment_thread;
|
||||||
HWND notif_hwnd;
|
HWND notif_hwnd;
|
||||||
|
@ -737,6 +738,7 @@ static HRESULT WINAPI InternetProtocolSink_ReportProgress(IInternetProtocolSink
|
||||||
on_progress(This, 0, 0, BINDSTATUS_SENDINGREQUEST, szStatusText);
|
on_progress(This, 0, 0, BINDSTATUS_SENDINGREQUEST, szStatusText);
|
||||||
break;
|
break;
|
||||||
case BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE:
|
case BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE:
|
||||||
|
This->verified_mime = TRUE;
|
||||||
on_progress(This, 0, 0, BINDSTATUS_MIMETYPEAVAILABLE, szStatusText);
|
on_progress(This, 0, 0, BINDSTATUS_MIMETYPEAVAILABLE, szStatusText);
|
||||||
break;
|
break;
|
||||||
case BINDSTATUS_CACHEFILENAMEAVAILABLE:
|
case BINDSTATUS_CACHEFILENAMEAVAILABLE:
|
||||||
|
@ -757,10 +759,25 @@ static HRESULT WINAPI InternetProtocolSink_ReportData(IInternetProtocolSink *ifa
|
||||||
|
|
||||||
TRACE("(%p)->(%ld %lu %lu)\n", This, grfBSCF, ulProgress, ulProgressMax);
|
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)
|
if(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,
|
IBindStatusCallback_OnProgress(This->callback, ulProgress, ulProgressMax,
|
||||||
BINDSTATUS_MIMETYPEAVAILABLE, This->mime);
|
BINDSTATUS_MIMETYPEAVAILABLE, mime);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(grfBSCF & BSCF_FIRSTDATANOTIFICATION) {
|
||||||
IBindStatusCallback_OnProgress(This->callback, ulProgress, ulProgressMax,
|
IBindStatusCallback_OnProgress(This->callback, ulProgress, ulProgressMax,
|
||||||
BINDSTATUS_BEGINDOWNLOADDATA, This->url);
|
BINDSTATUS_BEGINDOWNLOADDATA, This->url);
|
||||||
}
|
}
|
||||||
|
@ -772,8 +789,6 @@ static HRESULT WINAPI InternetProtocolSink_ReportData(IInternetProtocolSink *ifa
|
||||||
if(grfBSCF & BSCF_FIRSTDATANOTIFICATION)
|
if(grfBSCF & BSCF_FIRSTDATANOTIFICATION)
|
||||||
IInternetProtocol_LockRequest(This->protocol, 0);
|
IInternetProtocol_LockRequest(This->protocol, 0);
|
||||||
|
|
||||||
fill_stream_buffer(This->stream);
|
|
||||||
|
|
||||||
formatetc.cfFormat = 0; /* FIXME */
|
formatetc.cfFormat = 0; /* FIXME */
|
||||||
formatetc.ptd = NULL;
|
formatetc.ptd = NULL;
|
||||||
formatetc.dwAspect = 1;
|
formatetc.dwAspect = 1;
|
||||||
|
@ -1028,6 +1043,7 @@ static HRESULT Binding_Create(LPCWSTR url, IBindCtx *pbc, REFIID riid, Binding *
|
||||||
ret->url = NULL;
|
ret->url = NULL;
|
||||||
ret->apartment_thread = GetCurrentThreadId();
|
ret->apartment_thread = GetCurrentThreadId();
|
||||||
ret->notif_hwnd = get_notif_hwnd();
|
ret->notif_hwnd = get_notif_hwnd();
|
||||||
|
ret->verified_mime = FALSE;
|
||||||
|
|
||||||
memset(&ret->bindinfo, 0, sizeof(BINDINFO));
|
memset(&ret->bindinfo, 0, sizeof(BINDINFO));
|
||||||
ret->bindinfo.cbSize = sizeof(BINDINFO);
|
ret->bindinfo.cbSize = sizeof(BINDINFO);
|
||||||
|
|
Loading…
Reference in New Issue