Jacek Caban : urlmon: Added [Un]RegisterMimeFilter implementation.
Alexandre Julliard
julliard at winehq.org
Fri Dec 28 07:38:43 CST 2007
Module: wine
Branch: master
Commit: 8a669c9a1905c33af6dacd7ce116d024a3072a51
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8a669c9a1905c33af6dacd7ce116d024a3072a51
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Dec 28 02:00:10 2007 +0100
urlmon: Added [Un]RegisterMimeFilter implementation.
---
dlls/urlmon/session.c | 53 ++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 48 insertions(+), 5 deletions(-)
diff --git a/dlls/urlmon/session.c b/dlls/urlmon/session.c
index f5a644f..a63509c 100644
--- a/dlls/urlmon/session.c
+++ b/dlls/urlmon/session.c
@@ -31,7 +31,16 @@ typedef struct name_space {
struct name_space *next;
} name_space;
+typedef struct mime_filter {
+ IClassFactory *cf;
+ CLSID clsid;
+ LPWSTR mime;
+
+ struct mime_filter *next;
+} mime_filter;
+
static name_space *name_space_list = NULL;
+static mime_filter *mime_filter_list = NULL;
static name_space *find_name_space(LPCWSTR protocol)
{
@@ -200,8 +209,8 @@ static HRESULT WINAPI InternetSession_RegisterNameSpace(IInternetSession *iface,
IClassFactory_AddRef(pCF);
new_name_space->cf = pCF;
- new_name_space->protocol = heap_strdupW(pwzProtocol);
new_name_space->clsid = *rclsid;
+ new_name_space->protocol = heap_strdupW(pwzProtocol);
new_name_space->next = name_space_list;
name_space_list = new_name_space;
@@ -242,15 +251,49 @@ static HRESULT WINAPI InternetSession_UnregisterNameSpace(IInternetSession *ifac
static HRESULT WINAPI InternetSession_RegisterMimeFilter(IInternetSession *iface,
IClassFactory *pCF, REFCLSID rclsid, LPCWSTR pwzType)
{
- FIXME("(%p %s %s)\n", pCF, debugstr_guid(rclsid), debugstr_w(pwzType));
- return E_NOTIMPL;
+ mime_filter *filter;
+
+ TRACE("(%p %s %s)\n", pCF, debugstr_guid(rclsid), debugstr_w(pwzType));
+
+ filter = heap_alloc(sizeof(mime_filter));
+
+ IClassFactory_AddRef(pCF);
+ filter->cf = pCF;
+ filter->clsid = *rclsid;
+ filter->mime = heap_strdupW(pwzType);
+
+ filter->next = mime_filter_list;
+ mime_filter_list = filter;
+
+ return S_OK;
}
static HRESULT WINAPI InternetSession_UnregisterMimeFilter(IInternetSession *iface,
IClassFactory *pCF, LPCWSTR pwzType)
{
- FIXME("(%p %s)\n", pCF, debugstr_w(pwzType));
- return E_NOTIMPL;
+ mime_filter *iter, *prev = NULL;
+
+ TRACE("(%p %s)\n", pCF, debugstr_w(pwzType));
+
+ for(iter = mime_filter_list; iter; iter = iter->next) {
+ if(iter->cf == pCF && !strcmpW(iter->mime, pwzType))
+ break;
+ prev = iter;
+ }
+
+ if(!iter)
+ return S_OK;
+
+ if(prev)
+ prev->next = iter->next;
+ else
+ mime_filter_list = iter->next;
+
+ IClassFactory_Release(iter->cf);
+ heap_free(iter->mime);
+ heap_free(iter);
+
+ return S_OK;
}
static HRESULT WINAPI InternetSession_CreateBinding(IInternetSession *iface,
More information about the wine-cvs
mailing list