URLMON: Added MIME type checking to FileProtocol::Start

Jacek Caban jack at itma.pwr.wroc.pl
Tue Sep 13 15:01:19 CDT 2005


Changelog:
    Added MIME type checking to FileProtocol::Start
-------------- next part --------------
Index: dlls/urlmon/file.c
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/file.c,v
retrieving revision 1.2
diff -u -p -r1.2 file.c
--- dlls/urlmon/file.c	12 Sep 2005 11:11:11 -0000	1.2
+++ dlls/urlmon/file.c	13 Sep 2005 19:55:58 -0000
@@ -103,7 +103,7 @@ static HRESULT WINAPI FileProtocol_Start
     DWORD grfBINDF = 0;
     LARGE_INTEGER size;
     DWORD len;
-    LPWSTR url;
+    LPWSTR url, mime = NULL;
     HRESULT hres;
 
     static const WCHAR wszFile[]  = {'f','i','l','e',':'};
@@ -127,9 +127,9 @@ static HRESULT WINAPI FileProtocol_Start
         return hres;
     }
 
-    /* FIXME:
-     * Implement MIME type checking
-     */
+    hres = FindMimeFromData(NULL, url, NULL, 0, NULL, 0, &mime, 0);
+    if(SUCCEEDED(hres))
+        IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_DIRECTBIND, mime);
 
     if(!This->file) {
         This->file = CreateFileW(url+sizeof(wszFile)/sizeof(WCHAR), GENERIC_READ, FILE_SHARE_READ,
@@ -140,16 +140,20 @@ static HRESULT WINAPI FileProtocol_Start
             IInternetProtocolSink_ReportResult(pOIProtSink, INET_E_RESOURCE_NOT_FOUND,
                     GetLastError(), NULL);
             HeapFree(GetProcessHeap(), 0, url);
+            CoTaskMemFree(mime);
             return INET_E_RESOURCE_NOT_FOUND;
         }
 
         IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_CACHEFILENAMEAVAILABLE,
                 url+sizeof(wszFile)/sizeof(WCHAR));
+        if(mime)
+            IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_MIMETYPEAVAILABLE, mime);
         IInternetProtocolSink_ReportResult(pOIProtSink, S_OK, 0, NULL);
-
-        HeapFree(GetProcessHeap(), 0, url);
     }
 
+    CoTaskMemFree(mime);
+    HeapFree(GetProcessHeap(), 0, url);
+
     if(GetFileSizeEx(This->file, &size))
         IInternetProtocolSink_ReportData(pOIProtSink,
                 BSCF_FIRSTDATANOTIFICATION|BSCF_LASTDATANOTIFICATION,
Index: dlls/urlmon/tests/protocol.c
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/tests/protocol.c,v
retrieving revision 1.3
diff -u -p -r1.3 protocol.c
--- dlls/urlmon/tests/protocol.c	12 Sep 2005 11:10:22 -0000	1.3
+++ dlls/urlmon/tests/protocol.c	13 Sep 2005 19:55:58 -0000
@@ -215,10 +215,10 @@ static void file_protocol_start(IInterne
     ok(hres == S_OK, "Start failed: %08lx\n", hres);
 
     CHECK_CALLED(GetBindInfo);
-    todo_wine { CHECK_CALLED(ReportProgress_DIRECTBIND); }
+    CHECK_CALLED(ReportProgress_DIRECTBIND);
     if(is_first) {
         CHECK_CALLED(ReportProgress_CACHEFILENAMEAVAILABLE);
-        todo_wine { CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE); }
+        CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE);
         CHECK_CALLED(ReportResult);
     }
     CHECK_CALLED(ReportData);
@@ -373,7 +373,7 @@ static void test_file_protocol(void) {
     ok(hres == INET_E_RESOURCE_NOT_FOUND,
             "Start failed: %08lx expected INET_E_RESOURCE_NOT_FOUND\n", hres);
     CHECK_CALLED(GetBindInfo);
-    todo_wine { CHECK_CALLED(ReportProgress_DIRECTBIND); }
+    CHECK_CALLED(ReportProgress_DIRECTBIND);
     CHECK_CALLED(ReportResult);
 
     IInternetProtocol_Release(protocol);
@@ -392,7 +392,7 @@ static void test_file_protocol(void) {
     ok(hres == INET_E_RESOURCE_NOT_FOUND,
             "Start failed: %08lx, expected INET_E_RESOURCE_NOT_FOUND\n", hres);
     CHECK_CALLED(GetBindInfo);
-    todo_wine { CHECK_CALLED(ReportProgress_DIRECTBIND); }
+    CHECK_CALLED(ReportProgress_DIRECTBIND);
     CHECK_CALLED(ReportResult);
 
     IInternetProtocol_Release(protocol);


More information about the wine-patches mailing list