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