explorer: Added stub IServiceProvider support for shell browser window.
This commit is contained in:
parent
68c5fed5cc
commit
3c7bf0350a
@ -572,12 +572,12 @@ if (hr == S_OK) {
|
|||||||
ok(hr == E_NOINTERFACE, "got 0x%08x\n", hr);
|
ok(hr == E_NOINTERFACE, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
hr = IDispatch_QueryInterface(disp, &IID_IServiceProvider, (void**)&sp);
|
hr = IDispatch_QueryInterface(disp, &IID_IServiceProvider, (void**)&sp);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
hr = IServiceProvider_QueryService(sp, &SID_STopLevelBrowser, &IID_IShellBrowser, (void**)&sb);
|
||||||
todo_wine
|
todo_wine
|
||||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
if (hr == S_OK) {
|
if (hr == S_OK) {
|
||||||
hr = IServiceProvider_QueryService(sp, &SID_STopLevelBrowser, &IID_IShellBrowser, (void**)&sb);
|
|
||||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
|
||||||
|
|
||||||
hr = IServiceProvider_QueryService(sp, &SID_STopLevelBrowser, &IID_IShellBrowser, (void**)&sb2);
|
hr = IServiceProvider_QueryService(sp, &SID_STopLevelBrowser, &IID_IShellBrowser, (void**)&sb2);
|
||||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
ok(sb == sb2, "got %p, %p\n", sb, sb2);
|
ok(sb == sb2, "got %p, %p\n", sb, sb2);
|
||||||
|
@ -139,6 +139,7 @@ struct shellwindows
|
|||||||
struct shellbrowserwindow
|
struct shellbrowserwindow
|
||||||
{
|
{
|
||||||
IWebBrowser2 IWebBrowser2_iface;
|
IWebBrowser2 IWebBrowser2_iface;
|
||||||
|
IServiceProvider IServiceProvider_iface;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct shellwindows shellwindows;
|
static struct shellwindows shellwindows;
|
||||||
@ -154,6 +155,11 @@ static inline struct shellbrowserwindow *impl_from_IWebBrowser2(IWebBrowser2 *if
|
|||||||
return CONTAINING_RECORD(iface, struct shellbrowserwindow, IWebBrowser2_iface);
|
return CONTAINING_RECORD(iface, struct shellbrowserwindow, IWebBrowser2_iface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline struct shellbrowserwindow *impl_from_IServiceProvider(IServiceProvider *iface)
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD(iface, struct shellbrowserwindow, IServiceProvider_iface);
|
||||||
|
}
|
||||||
|
|
||||||
static void shellwindows_init(void);
|
static void shellwindows_init(void);
|
||||||
static void desktopshellbrowserwindow_init(void);
|
static void desktopshellbrowserwindow_init(void);
|
||||||
|
|
||||||
@ -1281,6 +1287,10 @@ static HRESULT WINAPI webbrowser_QueryInterface(IWebBrowser2 *iface, REFIID riid
|
|||||||
{
|
{
|
||||||
*ppv = &This->IWebBrowser2_iface;
|
*ppv = &This->IWebBrowser2_iface;
|
||||||
}
|
}
|
||||||
|
else if (IsEqualGUID(&IID_IServiceProvider, riid))
|
||||||
|
{
|
||||||
|
*ppv = &This->IServiceProvider_iface;
|
||||||
|
}
|
||||||
|
|
||||||
if (*ppv)
|
if (*ppv)
|
||||||
{
|
{
|
||||||
@ -1908,9 +1918,43 @@ static const IWebBrowser2Vtbl webbrowser2vtbl =
|
|||||||
webbrowser_put_Resizable
|
webbrowser_put_Resizable
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static HRESULT WINAPI serviceprovider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
struct shellbrowserwindow *This = impl_from_IServiceProvider(iface);
|
||||||
|
return IWebBrowser2_QueryInterface(&This->IWebBrowser2_iface, riid, ppv);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI serviceprovider_AddRef(IServiceProvider *iface)
|
||||||
|
{
|
||||||
|
struct shellbrowserwindow *This = impl_from_IServiceProvider(iface);
|
||||||
|
return IWebBrowser2_AddRef(&This->IWebBrowser2_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI serviceprovider_Release(IServiceProvider *iface)
|
||||||
|
{
|
||||||
|
struct shellbrowserwindow *This = impl_from_IServiceProvider(iface);
|
||||||
|
return IWebBrowser2_Release(&This->IWebBrowser2_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI serviceprovider_QueryService(IServiceProvider *iface, REFGUID service,
|
||||||
|
REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
FIXME("%s %s %p\n", debugstr_guid(service), debugstr_guid(riid), ppv);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IServiceProviderVtbl serviceprovidervtbl =
|
||||||
|
{
|
||||||
|
serviceprovider_QueryInterface,
|
||||||
|
serviceprovider_AddRef,
|
||||||
|
serviceprovider_Release,
|
||||||
|
serviceprovider_QueryService
|
||||||
|
};
|
||||||
|
|
||||||
static void desktopshellbrowserwindow_init(void)
|
static void desktopshellbrowserwindow_init(void)
|
||||||
{
|
{
|
||||||
desktopshellbrowserwindow.IWebBrowser2_iface.lpVtbl = &webbrowser2vtbl;
|
desktopshellbrowserwindow.IWebBrowser2_iface.lpVtbl = &webbrowser2vtbl;
|
||||||
|
desktopshellbrowserwindow.IServiceProvider_iface.lpVtbl = &serviceprovidervtbl;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void shellwindows_init(void)
|
static void shellwindows_init(void)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user