2 * Copyright 2011 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
24 #include "wine/debug.h"
26 WINE_DEFAULT_DEBUG_CHANNEL(ieframe
);
29 HINSTANCE ieframe_instance
;
31 const char *debugstr_variant(const VARIANT
*v
)
42 return wine_dbg_sprintf("{VT_I4: %d}", V_I4(v
));
44 return wine_dbg_sprintf("{VT_R8: %lf}", V_R8(v
));
46 return wine_dbg_sprintf("{VT_BSTR: %s}", debugstr_w(V_BSTR(v
)));
48 return wine_dbg_sprintf("{VT_DISPATCH: %p}", V_DISPATCH(v
));
50 return wine_dbg_sprintf("{VT_BOOL: %x}", V_BOOL(v
));
52 return wine_dbg_sprintf("{vt %d}", V_VT(v
));
56 static ITypeInfo
*wb_typeinfo
= NULL
;
58 HRESULT
get_typeinfo(ITypeInfo
**typeinfo
)
64 *typeinfo
= wb_typeinfo
;
68 hres
= LoadRegTypeLib(&LIBID_SHDocVw
, 1, 1, LOCALE_SYSTEM_DEFAULT
, &typelib
);
70 ERR("LoadRegTypeLib failed: %08x\n", hres
);
74 hres
= ITypeLib_GetTypeInfoOfGuid(typelib
, &IID_IWebBrowser2
, &wb_typeinfo
);
75 ITypeLib_Release(typelib
);
77 *typeinfo
= wb_typeinfo
;
81 static HRESULT WINAPI
ClassFactory_QueryInterface(IClassFactory
*iface
, REFIID riid
, void **ppv
)
85 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
86 TRACE("(%p)->(IID_IUnknown %p)\n", iface
, ppv
);
88 }else if(IsEqualGUID(&IID_IClassFactory
, riid
)) {
89 TRACE("(%p)->(IID_IClassFactory %p)\n", iface
, ppv
);
94 IUnknown_AddRef((IUnknown
*)*ppv
);
98 FIXME("(%p)->(%s %p)\n", iface
, debugstr_guid(riid
), ppv
);
102 static ULONG WINAPI
ClassFactory_AddRef(IClassFactory
*iface
)
104 TRACE("(%p)\n", iface
);
108 static ULONG WINAPI
ClassFactory_Release(IClassFactory
*iface
)
110 TRACE("(%p)\n", iface
);
114 static HRESULT WINAPI
ClassFactory_LockServer(IClassFactory
*iface
, BOOL fLock
)
116 TRACE("(%p)->(%x)\n", iface
, fLock
);
120 static const IClassFactoryVtbl WebBrowserFactoryVtbl
= {
121 ClassFactory_QueryInterface
,
123 ClassFactory_Release
,
125 ClassFactory_LockServer
128 static IClassFactory WebBrowserFactory
= { &WebBrowserFactoryVtbl
};
130 static const IClassFactoryVtbl WebBrowserV1FactoryVtbl
= {
131 ClassFactory_QueryInterface
,
133 ClassFactory_Release
,
135 ClassFactory_LockServer
138 static IClassFactory WebBrowserV1Factory
= { &WebBrowserV1FactoryVtbl
};
140 static const IClassFactoryVtbl InternetShortcutFactoryVtbl
= {
141 ClassFactory_QueryInterface
,
143 ClassFactory_Release
,
144 InternetShortcut_Create
,
145 ClassFactory_LockServer
148 static IClassFactory InternetShortcutFactory
= { &InternetShortcutFactoryVtbl
};
150 static const IClassFactoryVtbl CUrlHistoryFactoryVtbl
= {
151 ClassFactory_QueryInterface
,
153 ClassFactory_Release
,
155 ClassFactory_LockServer
158 static IClassFactory CUrlHistoryFactory
= { &CUrlHistoryFactoryVtbl
};
160 static const IClassFactoryVtbl TaskbarListFactoryVtbl
= {
161 ClassFactory_QueryInterface
,
163 ClassFactory_Release
,
165 ClassFactory_LockServer
168 static IClassFactory TaskbarListFactory
= { &TaskbarListFactoryVtbl
};
170 /******************************************************************
171 * DllMain (ieframe.@)
173 BOOL WINAPI
DllMain(HINSTANCE hInstDLL
, DWORD fdwReason
, LPVOID lpv
)
175 TRACE("(%p %d %p)\n", hInstDLL
, fdwReason
, lpv
);
179 case DLL_WINE_PREATTACH
:
180 return FALSE
; /* prefer native version */
181 case DLL_PROCESS_ATTACH
:
182 ieframe_instance
= hInstDLL
;
183 register_iewindow_class();
184 DisableThreadLibraryCalls(ieframe_instance
);
186 case DLL_PROCESS_DETACH
:
187 unregister_iewindow_class();
189 ITypeInfo_Release(wb_typeinfo
);
195 /***********************************************************************
196 * DllGetClassObject (ieframe.@)
198 HRESULT WINAPI
DllGetClassObject(REFCLSID rclsid
, REFIID riid
, LPVOID
*ppv
)
200 if(IsEqualGUID(&CLSID_WebBrowser
, rclsid
)) {
201 TRACE("(CLSID_WebBrowser %s %p)\n", debugstr_guid(riid
), ppv
);
202 return IClassFactory_QueryInterface(&WebBrowserFactory
, riid
, ppv
);
205 if(IsEqualGUID(&CLSID_WebBrowser_V1
, rclsid
)) {
206 TRACE("(CLSID_WebBrowser_V1 %s %p)\n", debugstr_guid(riid
), ppv
);
207 return IClassFactory_QueryInterface(&WebBrowserV1Factory
, riid
, ppv
);
211 if(IsEqualGUID(rclsid
, &CLSID_InternetShortcut
)) {
212 TRACE("(CLSID_InternetShortcut %s %p)\n", debugstr_guid(riid
), ppv
);
213 return IClassFactory_QueryInterface(&InternetShortcutFactory
, riid
, ppv
);
216 if(IsEqualGUID(&CLSID_CUrlHistory
, rclsid
)) {
217 TRACE("(CLSID_CUrlHistory %s %p)\n", debugstr_guid(riid
), ppv
);
218 return IClassFactory_QueryInterface(&CUrlHistoryFactory
, riid
, ppv
);
221 if(IsEqualGUID(&CLSID_TaskbarList
, rclsid
)) {
222 TRACE("(CLSID_TaskbarList %s %p)\n", debugstr_guid(riid
), ppv
);
223 return IClassFactory_QueryInterface(&TaskbarListFactory
, riid
, ppv
);
227 FIXME("%s %s %p\n", debugstr_guid(rclsid
), debugstr_guid(riid
), ppv
);
228 return CLASS_E_CLASSNOTAVAILABLE
;
231 static const IClassFactoryVtbl InternetExplorerFactoryVtbl
= {
232 ClassFactory_QueryInterface
,
234 ClassFactory_Release
,
235 InternetExplorer_Create
,
236 ClassFactory_LockServer
239 static IClassFactory InternetExplorerFactory
= { &InternetExplorerFactoryVtbl
};
241 HRESULT
register_class_object(BOOL do_reg
)
248 hres
= CoRegisterClassObject(&CLSID_InternetExplorer
,
249 (IUnknown
*)&InternetExplorerFactory
, CLSCTX_SERVER
,
250 REGCLS_MULTIPLEUSE
|REGCLS_SUSPENDED
, &cookie
);
252 ERR("failed to register object %08x\n", hres
);
256 hres
= CoResumeClassObjects();
260 ERR("failed to resume object %08x\n", hres
);
263 return CoRevokeClassObject(cookie
);
266 /***********************************************************************
267 * DllCanUnloadNow (ieframe.@)
269 HRESULT WINAPI
DllCanUnloadNow(void)
272 return module_ref
? S_FALSE
: S_OK
;
275 /***********************************************************************
276 * DllRegisterServer (ieframe.@)
278 HRESULT WINAPI
DllRegisterServer(void)
284 /***********************************************************************
285 * DllUnregisterServer (ieframe.@)
287 HRESULT WINAPI
DllUnregisterServer(void)