Jacek Caban : mshtml: Added IOmNavigator::get_mimeTypes implementation.

Alexandre Julliard julliard at winehq.org
Tue May 31 13:08:19 CDT 2011


Module: wine
Branch: master
Commit: 9dcceab0618114f5c40332ed6bb32d6246b54d43
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9dcceab0618114f5c40332ed6bb32d6246b54d43

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue May 31 12:19:40 2011 +0200

mshtml: Added IOmNavigator::get_mimeTypes implementation.

---

 dlls/mshtml/omnavigator.c |  146 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 144 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c
index f5a3573..95e8930 100644
--- a/dlls/mshtml/omnavigator.c
+++ b/dlls/mshtml/omnavigator.c
@@ -32,6 +32,7 @@
 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
 
 typedef struct HTMLPluginsCollection HTMLPluginsCollection;
+typedef struct HTMLMimeTypesCollection HTMLMimeTypesCollection;
 
 typedef struct {
     DispatchEx dispex;
@@ -40,6 +41,7 @@ typedef struct {
     LONG ref;
 
     HTMLPluginsCollection *plugins;
+    HTMLMimeTypesCollection *mime_types;
 } OmNavigator;
 
 static inline OmNavigator *impl_from_IOmNavigator(IOmNavigator *iface)
@@ -196,6 +198,131 @@ static HRESULT create_plugins_collection(OmNavigator *navigator, HTMLPluginsColl
     return S_OK;
 }
 
+struct HTMLMimeTypesCollection {
+    IHTMLMimeTypesCollection IHTMLMimeTypesCollection_iface;
+
+    LONG ref;
+
+    OmNavigator *navigator;
+};
+
+static inline HTMLMimeTypesCollection *impl_from_IHTMLMimeTypesCollection(IHTMLMimeTypesCollection *iface)
+{
+    return CONTAINING_RECORD(iface, HTMLMimeTypesCollection, IHTMLMimeTypesCollection_iface);
+}
+
+static HRESULT WINAPI HTMLMimeTypesCollection_QueryInterface(IHTMLMimeTypesCollection *iface, REFIID riid, void **ppv)
+{
+    HTMLMimeTypesCollection *This = impl_from_IHTMLMimeTypesCollection(iface);
+
+    if(IsEqualGUID(&IID_IUnknown, riid)) {
+        TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
+        *ppv = &This->IHTMLMimeTypesCollection_iface;
+    }else if(IsEqualGUID(&IID_IHTMLMimeTypesCollection, riid)) {
+        TRACE("(%p)->(IID_IHTMLMimeTypesCollection %p)\n", This, ppv);
+        *ppv = &This->IHTMLMimeTypesCollection_iface;
+    }else {
+        *ppv = NULL;
+        WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
+        return E_NOINTERFACE;
+    }
+
+    IUnknown_AddRef((IUnknown*)*ppv);
+    return S_OK;
+}
+
+static ULONG WINAPI HTMLMimeTypesCollection_AddRef(IHTMLMimeTypesCollection *iface)
+{
+    HTMLMimeTypesCollection *This = impl_from_IHTMLMimeTypesCollection(iface);
+    LONG ref = InterlockedIncrement(&This->ref);
+
+    TRACE("(%p) ref=%d\n", This, ref);
+
+    return ref;
+}
+
+static ULONG WINAPI HTMLMimeTypesCollection_Release(IHTMLMimeTypesCollection *iface)
+{
+    HTMLMimeTypesCollection *This = impl_from_IHTMLMimeTypesCollection(iface);
+    LONG ref = InterlockedDecrement(&This->ref);
+
+    TRACE("(%p) ref=%d\n", This, ref);
+
+    if(!ref) {
+        if(This->navigator)
+            This->navigator->mime_types = NULL;
+        heap_free(This);
+    }
+
+    return ref;
+}
+
+static HRESULT WINAPI HTMLMimeTypesCollection_GetTypeInfoCount(IHTMLMimeTypesCollection *iface, UINT *pctinfo)
+{
+    HTMLMimeTypesCollection *This = impl_from_IHTMLMimeTypesCollection(iface);
+    FIXME("%p\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLMimeTypesCollection_GetTypeInfo(IHTMLMimeTypesCollection *iface, UINT iTInfo,
+                                              LCID lcid, ITypeInfo **ppTInfo)
+{
+    HTMLMimeTypesCollection *This = impl_from_IHTMLMimeTypesCollection(iface);
+    FIXME("%p\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLMimeTypesCollection_GetIDsOfNames(IHTMLMimeTypesCollection *iface, REFIID riid,
+        LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+    HTMLMimeTypesCollection *This = impl_from_IHTMLMimeTypesCollection(iface);
+    FIXME("%p\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLMimeTypesCollection_Invoke(IHTMLMimeTypesCollection *iface, DISPID dispIdMember,
+        REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+    HTMLMimeTypesCollection *This = impl_from_IHTMLMimeTypesCollection(iface);
+    FIXME("%p\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLMimeTypesCollection_get_length(IHTMLMimeTypesCollection *iface, LONG *p)
+{
+    HTMLMimeTypesCollection *This = impl_from_IHTMLMimeTypesCollection(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static const IHTMLMimeTypesCollectionVtbl HTMLMimeTypesCollectionVtbl = {
+    HTMLMimeTypesCollection_QueryInterface,
+    HTMLMimeTypesCollection_AddRef,
+    HTMLMimeTypesCollection_Release,
+    HTMLMimeTypesCollection_GetTypeInfoCount,
+    HTMLMimeTypesCollection_GetTypeInfo,
+    HTMLMimeTypesCollection_GetIDsOfNames,
+    HTMLMimeTypesCollection_Invoke,
+    HTMLMimeTypesCollection_get_length
+};
+
+static HRESULT create_mime_types_collection(OmNavigator *navigator, HTMLMimeTypesCollection **ret)
+{
+    HTMLMimeTypesCollection *col;
+
+    col = heap_alloc_zero(sizeof(*col));
+    if(!col)
+        return E_OUTOFMEMORY;
+
+    col->IHTMLMimeTypesCollection_iface.lpVtbl = &HTMLMimeTypesCollectionVtbl;
+    col->ref = 1;
+    col->navigator = navigator;
+
+    *ret = col;
+    return S_OK;
+}
+
 static HRESULT WINAPI OmNavigator_QueryInterface(IOmNavigator *iface, REFIID riid, void **ppv)
 {
     OmNavigator *This = impl_from_IOmNavigator(iface);
@@ -243,6 +370,8 @@ static ULONG WINAPI OmNavigator_Release(IOmNavigator *iface)
             This->plugins->navigator = NULL;
             IHTMLPluginsCollection_Release(&This->plugins->IHTMLPluginsCollection_iface);
         }
+        if(This->mime_types)
+            This->mime_types->navigator = NULL;
         release_dispex(&This->dispex);
         heap_free(This);
     }
@@ -387,8 +516,21 @@ static HRESULT WINAPI OmNavigator_taintEnabled(IOmNavigator *iface, VARIANT_BOOL
 static HRESULT WINAPI OmNavigator_get_mimeTypes(IOmNavigator *iface, IHTMLMimeTypesCollection **p)
 {
     OmNavigator *This = impl_from_IOmNavigator(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    if(!This->mime_types) {
+        HRESULT hres;
+
+        hres = create_mime_types_collection(This, &This->mime_types);
+        if(FAILED(hres))
+            return hres;
+    }else {
+        IHTMLMimeTypesCollection_AddRef(&This->mime_types->IHTMLMimeTypesCollection_iface);
+    }
+
+    *p = &This->mime_types->IHTMLMimeTypesCollection_iface;
+    return S_OK;
 }
 
 static HRESULT WINAPI OmNavigator_get_plugins(IOmNavigator *iface, IHTMLPluginsCollection **p)




More information about the wine-cvs mailing list