mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 16:22:58 +00:00
[IEFRAME] Sync with Wine 3.0. CORE-14225
This commit is contained in:
parent
e399d3ec3e
commit
c4b0f2155f
6 changed files with 165 additions and 50 deletions
|
@ -329,13 +329,16 @@ TID_LIST
|
||||||
} tid_t;
|
} tid_t;
|
||||||
|
|
||||||
HRESULT get_typeinfo(tid_t,ITypeInfo**) DECLSPEC_HIDDEN;
|
HRESULT get_typeinfo(tid_t,ITypeInfo**) DECLSPEC_HIDDEN;
|
||||||
HRESULT register_class_object(BOOL) DECLSPEC_HIDDEN;
|
|
||||||
|
|
||||||
HRESULT WINAPI CUrlHistory_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
|
HRESULT WINAPI CUrlHistory_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
|
||||||
HRESULT WINAPI InternetExplorer_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
|
HRESULT WINAPI InternetExplorer_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
|
||||||
HRESULT WINAPI InternetShortcut_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
|
HRESULT WINAPI InternetShortcut_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
|
||||||
HRESULT WINAPI WebBrowser_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
|
HRESULT WINAPI WebBrowser_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
|
||||||
HRESULT WINAPI WebBrowserV1_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
|
HRESULT WINAPI WebBrowserV1_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
|
||||||
|
HRESULT WINAPI InternetExplorerManager_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
extern IClassFactory InternetExplorerFactory DECLSPEC_HIDDEN;
|
||||||
|
extern IClassFactory InternetExplorerManagerFactory DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
extern LONG module_ref DECLSPEC_HIDDEN;
|
extern LONG module_ref DECLSPEC_HIDDEN;
|
||||||
extern HINSTANCE ieframe_instance DECLSPEC_HIDDEN;
|
extern HINSTANCE ieframe_instance DECLSPEC_HIDDEN;
|
||||||
|
|
|
@ -42,6 +42,13 @@ HKCR
|
||||||
Control
|
Control
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
NoRemove Interface
|
||||||
|
{
|
||||||
|
'{acc84351-04ff-44f9-b23f-655ed168c6d5}'
|
||||||
|
{
|
||||||
|
ProxyStubClsid32 = s '{a4a1a128-768f-41e0-bf75-e4fddd701cba}'
|
||||||
|
}
|
||||||
|
}
|
||||||
'InternetShortcut'
|
'InternetShortcut'
|
||||||
{
|
{
|
||||||
val 'EditFlags' = s '2'
|
val 'EditFlags' = s '2'
|
||||||
|
|
|
@ -232,32 +232,17 @@ static const IClassFactoryVtbl InternetExplorerFactoryVtbl = {
|
||||||
ClassFactory_LockServer
|
ClassFactory_LockServer
|
||||||
};
|
};
|
||||||
|
|
||||||
static IClassFactory InternetExplorerFactory = { &InternetExplorerFactoryVtbl };
|
IClassFactory InternetExplorerFactory = { &InternetExplorerFactoryVtbl };
|
||||||
|
|
||||||
HRESULT register_class_object(BOOL do_reg)
|
static const IClassFactoryVtbl InternetExplorerManagerFactoryVtbl = {
|
||||||
{
|
ClassFactory_QueryInterface,
|
||||||
HRESULT hres;
|
ClassFactory_AddRef,
|
||||||
|
ClassFactory_Release,
|
||||||
|
InternetExplorerManager_Create,
|
||||||
|
ClassFactory_LockServer
|
||||||
|
};
|
||||||
|
|
||||||
static DWORD cookie;
|
IClassFactory InternetExplorerManagerFactory = { &InternetExplorerManagerFactoryVtbl };
|
||||||
|
|
||||||
if(do_reg) {
|
|
||||||
hres = CoRegisterClassObject(&CLSID_InternetExplorer,
|
|
||||||
(IUnknown*)&InternetExplorerFactory, CLSCTX_SERVER,
|
|
||||||
REGCLS_MULTIPLEUSE|REGCLS_SUSPENDED, &cookie);
|
|
||||||
if (FAILED(hres)) {
|
|
||||||
ERR("failed to register object %08x\n", hres);
|
|
||||||
return hres;
|
|
||||||
}
|
|
||||||
|
|
||||||
hres = CoResumeClassObjects();
|
|
||||||
if(SUCCEEDED(hres))
|
|
||||||
return hres;
|
|
||||||
|
|
||||||
ERR("failed to resume object %08x\n", hres);
|
|
||||||
}
|
|
||||||
|
|
||||||
return CoRevokeClassObject(cookie);
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DllCanUnloadNow (ieframe.@)
|
* DllCanUnloadNow (ieframe.@)
|
||||||
|
|
|
@ -24,6 +24,9 @@
|
||||||
#include <mshtmcid.h>
|
#include <mshtmcid.h>
|
||||||
#include <ddeml.h>
|
#include <ddeml.h>
|
||||||
|
|
||||||
|
#include <initguid.h>
|
||||||
|
#include <ieautomation.h>
|
||||||
|
|
||||||
#define IDI_APPICON 1
|
#define IDI_APPICON 1
|
||||||
|
|
||||||
#define WM_UPDATEADDRBAR (WM_APP+1)
|
#define WM_UPDATEADDRBAR (WM_APP+1)
|
||||||
|
@ -832,13 +835,99 @@ HRESULT WINAPI InternetExplorer_Create(IClassFactory *iface, IUnknown *pOuter, R
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************
|
||||||
|
* IInternetExplorerManager implementation
|
||||||
|
*/
|
||||||
|
struct InternetExplorerManager {
|
||||||
|
IInternetExplorerManager IInternetExplorerManager_iface;
|
||||||
|
LONG ref;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline InternetExplorerManager *impl_from_IInternetExplorerManager(IInternetExplorerManager *iface)
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD(iface, InternetExplorerManager, IInternetExplorerManager_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI InternetExplorerManager_QueryInterface(IInternetExplorerManager *iface, REFIID riid, void **out)
|
||||||
|
{
|
||||||
|
TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), out);
|
||||||
|
|
||||||
|
if (IsEqualGUID(riid, &IID_IInternetExplorerManager) || IsEqualGUID(riid, &IID_IUnknown))
|
||||||
|
{
|
||||||
|
IInternetExplorerManager_AddRef(iface);
|
||||||
|
*out = iface;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
FIXME("interface %s not implemented\n", debugstr_guid(riid));
|
||||||
|
*out = NULL;
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI InternetExplorerManager_AddRef(IInternetExplorerManager *iface)
|
||||||
|
{
|
||||||
|
InternetExplorerManager *This = impl_from_IInternetExplorerManager(iface);
|
||||||
|
ULONG ref = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
|
TRACE("(%p) increasing refcount to %u\n", iface, ref);
|
||||||
|
|
||||||
|
return ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI InternetExplorerManager_Release(IInternetExplorerManager *iface)
|
||||||
|
{
|
||||||
|
InternetExplorerManager *This = impl_from_IInternetExplorerManager(iface);
|
||||||
|
ULONG ref = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
|
TRACE("(%p) decreasing refcount to %u\n", iface, ref);
|
||||||
|
|
||||||
|
if (ref == 0)
|
||||||
|
HeapFree(GetProcessHeap(), 0, This);
|
||||||
|
|
||||||
|
return ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI InternetExplorerManager_CreateObject(IInternetExplorerManager *iface, DWORD config, LPCWSTR url, REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
FIXME("(%p)->(0x%x, %s, %s, %p) stub!\n", iface, config, debugstr_w(url), debugstr_guid(riid), ppv);
|
||||||
|
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IInternetExplorerManagerVtbl InternetExplorerManager_vtbl =
|
||||||
|
{
|
||||||
|
InternetExplorerManager_QueryInterface,
|
||||||
|
InternetExplorerManager_AddRef,
|
||||||
|
InternetExplorerManager_Release,
|
||||||
|
InternetExplorerManager_CreateObject,
|
||||||
|
};
|
||||||
|
|
||||||
|
HRESULT WINAPI InternetExplorerManager_Create(IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
InternetExplorerManager *ret;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
TRACE("(%p %s %p)\n", pOuter, debugstr_guid(riid), ppv);
|
||||||
|
|
||||||
|
if (!(ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ret))))
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
ret->IInternetExplorerManager_iface.lpVtbl = &InternetExplorerManager_vtbl;
|
||||||
|
ret->ref = 1;
|
||||||
|
|
||||||
|
hr = IInternetExplorerManager_QueryInterface(&ret->IInternetExplorerManager_iface, riid, ppv);
|
||||||
|
IInternetExplorerManager_Release(&ret->IInternetExplorerManager_iface);
|
||||||
|
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
void released_obj(void)
|
void released_obj(void)
|
||||||
{
|
{
|
||||||
if(!InterlockedDecrement(&obj_cnt))
|
if(!InterlockedDecrement(&obj_cnt))
|
||||||
PostQuitMessage(0);
|
PostQuitMessage(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL create_ie_window(const WCHAR *cmdline)
|
static BOOL create_ie_window(BOOL nohome, const WCHAR *cmdline)
|
||||||
{
|
{
|
||||||
InternetExplorer *ie;
|
InternetExplorer *ie;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
@ -851,26 +940,21 @@ static BOOL create_ie_window(const WCHAR *cmdline)
|
||||||
IWebBrowser2_put_MenuBar(&ie->IWebBrowser2_iface, VARIANT_TRUE);
|
IWebBrowser2_put_MenuBar(&ie->IWebBrowser2_iface, VARIANT_TRUE);
|
||||||
|
|
||||||
if(!*cmdline) {
|
if(!*cmdline) {
|
||||||
|
if (nohome)
|
||||||
|
ie->nohome = TRUE;
|
||||||
|
else
|
||||||
IWebBrowser2_GoHome(&ie->IWebBrowser2_iface);
|
IWebBrowser2_GoHome(&ie->IWebBrowser2_iface);
|
||||||
}else {
|
}else {
|
||||||
VARIANT var_url;
|
VARIANT var_url;
|
||||||
int cmdlen;
|
int cmdlen;
|
||||||
|
|
||||||
static const WCHAR nohomeW[] = {'-','n','o','h','o','m','e'};
|
|
||||||
|
|
||||||
while(*cmdline == ' ' || *cmdline == '\t')
|
|
||||||
cmdline++;
|
|
||||||
cmdlen = strlenW(cmdline);
|
cmdlen = strlenW(cmdline);
|
||||||
if(cmdlen > 2 && cmdline[0] == '"' && cmdline[cmdlen-1] == '"') {
|
if(cmdlen > 2 && cmdline[0] == '"' && cmdline[cmdlen-1] == '"') {
|
||||||
cmdline++;
|
cmdline++;
|
||||||
cmdlen -= 2;
|
cmdlen -= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cmdlen == sizeof(nohomeW)/sizeof(*nohomeW) && !memcmp(cmdline, nohomeW, sizeof(nohomeW))) {
|
|
||||||
ie->nohome = TRUE;
|
|
||||||
}else {
|
|
||||||
V_VT(&var_url) = VT_BSTR;
|
V_VT(&var_url) = VT_BSTR;
|
||||||
|
|
||||||
V_BSTR(&var_url) = SysAllocStringLen(cmdline, cmdlen);
|
V_BSTR(&var_url) = SysAllocStringLen(cmdline, cmdlen);
|
||||||
|
|
||||||
/* navigate to the first page */
|
/* navigate to the first page */
|
||||||
|
@ -878,7 +962,6 @@ static BOOL create_ie_window(const WCHAR *cmdline)
|
||||||
|
|
||||||
SysFreeString(V_BSTR(&var_url));
|
SysFreeString(V_BSTR(&var_url));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
IWebBrowser2_Release(&ie->IWebBrowser2_iface);
|
IWebBrowser2_Release(&ie->IWebBrowser2_iface);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -1035,23 +1118,60 @@ DWORD WINAPI IEWinMain(const WCHAR *cmdline, int nShowWindow)
|
||||||
{
|
{
|
||||||
MSG msg;
|
MSG msg;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
BOOL embedding = FALSE, nohome = FALSE, manager = FALSE;
|
||||||
|
DWORD reg_cookie;
|
||||||
|
|
||||||
static const WCHAR embeddingW[] = {'-','e','m','b','e','d','d','i','n','g',0};
|
static const WCHAR embeddingW[] = {'-','e','m','b','e','d','d','i','n','g',0};
|
||||||
|
static const WCHAR nohomeW[] = {'-','n','o','h','o','m','e',0};
|
||||||
|
static const WCHAR startmanagerW[] = {'-','s','t','a','r','t','m','a','n','a','g','e','r',0};
|
||||||
|
|
||||||
TRACE("%s %d\n", debugstr_w(cmdline), nShowWindow);
|
TRACE("%s %d\n", debugstr_w(cmdline), nShowWindow);
|
||||||
|
|
||||||
CoInitialize(NULL);
|
CoInitialize(NULL);
|
||||||
|
|
||||||
hres = register_class_object(TRUE);
|
init_dde();
|
||||||
if(FAILED(hres)) {
|
|
||||||
|
while (*cmdline)
|
||||||
|
{
|
||||||
|
int length = 0;
|
||||||
|
|
||||||
|
while (*cmdline == ' ' || *cmdline == '\t') cmdline++;
|
||||||
|
if (!*cmdline) break;
|
||||||
|
|
||||||
|
while (cmdline[length] && cmdline[length] != ' ' && cmdline[length] != '\t') length++;
|
||||||
|
|
||||||
|
if (!strncmpiW(cmdline, embeddingW, length))
|
||||||
|
embedding = TRUE;
|
||||||
|
else if (!strncmpiW(cmdline, nohomeW, length))
|
||||||
|
nohome = TRUE;
|
||||||
|
else if (!strncmpiW(cmdline, startmanagerW, length))
|
||||||
|
manager = TRUE;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
|
||||||
|
cmdline += length;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (manager)
|
||||||
|
hres = CoRegisterClassObject(&CLSID_InternetExplorerManager,
|
||||||
|
(IUnknown*)&InternetExplorerManagerFactory, CLSCTX_SERVER,
|
||||||
|
REGCLS_SINGLEUSE, ®_cookie);
|
||||||
|
else
|
||||||
|
hres = CoRegisterClassObject(&CLSID_InternetExplorer,
|
||||||
|
(IUnknown*)&InternetExplorerFactory, CLSCTX_SERVER,
|
||||||
|
REGCLS_MULTIPLEUSE, ®_cookie);
|
||||||
|
|
||||||
|
if (FAILED(hres))
|
||||||
|
{
|
||||||
|
ERR("failed to register CLSID_InternetExplorer%s: %08x\n", manager ? "Manager" : "", hres);
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
ExitProcess(1);
|
ExitProcess(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
init_dde();
|
if (!embedding)
|
||||||
|
{
|
||||||
if(strcmpiW(cmdline, embeddingW)) {
|
if(!create_ie_window(nohome, cmdline))
|
||||||
if(!create_ie_window(cmdline)) {
|
{
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
ExitProcess(1);
|
ExitProcess(1);
|
||||||
}
|
}
|
||||||
|
@ -1064,7 +1184,7 @@ DWORD WINAPI IEWinMain(const WCHAR *cmdline, int nShowWindow)
|
||||||
DispatchMessageW(&msg);
|
DispatchMessageW(&msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
register_class_object(FALSE);
|
CoRevokeClassObject(reg_cookie);
|
||||||
release_dde();
|
release_dde();
|
||||||
|
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
|
|
|
@ -56,7 +56,7 @@ static HRESULT WINAPI ViewObject_Draw(IViewObject2 *iface, DWORD dwDrawAspect,
|
||||||
FIXME("(%p)->(%d %d %p %p %p %p %p %p %p %08lx)\n", This, dwDrawAspect, lindex,
|
FIXME("(%p)->(%d %d %p %p %p %p %p %p %p %08lx)\n", This, dwDrawAspect, lindex,
|
||||||
pvAspect, ptd, hdcTargetDev, hdcDraw, lprcBounds, lprcWBounds, pfnContinue,
|
pvAspect, ptd, hdcTargetDev, hdcDraw, lprcBounds, lprcWBounds, pfnContinue,
|
||||||
dwContinue);
|
dwContinue);
|
||||||
return S_OK;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI ViewObject_GetColorSet(IViewObject2 *iface, DWORD dwAspect,
|
static HRESULT WINAPI ViewObject_GetColorSet(IViewObject2 *iface, DWORD dwAspect,
|
||||||
|
|
|
@ -74,7 +74,7 @@ reactos/dll/win32/hlink # Synced to Wine-3.0
|
||||||
reactos/dll/win32/hnetcfg # Synced to Wine-3.0
|
reactos/dll/win32/hnetcfg # Synced to Wine-3.0
|
||||||
reactos/dll/win32/httpapi # Synced to WineStaging-2.9
|
reactos/dll/win32/httpapi # Synced to WineStaging-2.9
|
||||||
reactos/dll/win32/iccvid # Synced to Wine-3.0
|
reactos/dll/win32/iccvid # Synced to Wine-3.0
|
||||||
reactos/dll/win32/ieframe # Synced to WineStaging-2.9
|
reactos/dll/win32/ieframe # Synced to Wine-3.0
|
||||||
reactos/dll/win32/imaadp32.acm # Synced to WineStaging-2.16
|
reactos/dll/win32/imaadp32.acm # Synced to WineStaging-2.16
|
||||||
reactos/dll/win32/imagehlp # Synced to WineStaging-2.9
|
reactos/dll/win32/imagehlp # Synced to WineStaging-2.9
|
||||||
reactos/dll/win32/imm32 # Synced to Wine-2.22
|
reactos/dll/win32/imm32 # Synced to Wine-2.22
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue