ReactOS 0.4.15-dev-7961-gdcf9eb0
ebrowser.c File Reference
#include <stdio.h>
#include "shlobj.h"
#include "shlwapi.h"
#include "wine/heap.h"
#include "wine/test.h"
#include "initguid.h"
#include "mshtml.h"
Include dependency graph for ebrowser.c:

Go to the source code of this file.

Classes

struct  IExplorerBrowserEventsImpl
 
struct  IExplorerPaneVisibilityImpl
 
struct  ICommDlgBrowser3Impl
 
struct  IServiceProviderImpl
 
struct  IServiceProviderImpl::services
 

Macros

#define COBJMACROS
 
#define CONST_VTABLE
 
#define test_qinterface(iid, exp)
 
#define test_browse_pidl(peb, ebev, pidl, uFlags, hr, p, cr, f, co)    test_browse_pidl_(peb, ebev, pidl, uFlags, hr, p, cr, f, co, __FILE__, __LINE__)
 
#define test_browse_pidl_sb(peb, ebev, pidl, uFlags, hr, p, cr, f, co)    test_browse_pidl_sb_(peb, ebev, pidl, uFlags, hr, p, cr, f, co, __FILE__, __LINE__)
 
#define test_gcv(iid, exp)
 

Functions

 DEFINE_GUID (IID_IBrowserSettings, 0xDD1E21CC, 0xE2C7, 0x402C, 0xBF, 0x05, 0x10, 0x32, 0x8D, 0x3F, 0x6B, 0xAD)
 
 DEFINE_GUID (IID_IShellBrowserService, 0xDFBC7E30, 0xF9E5, 0x455F, 0x88, 0xF8, 0xFA, 0x98, 0xC1, 0xE4, 0x94, 0xCA)
 
 DEFINE_GUID (IID_IShellTaskScheduler, 0x6CCB7BE0, 0x6807, 0x11D0, 0xB8, 0x10, 0x00, 0xC0, 0x4F, 0xD7, 0x06, 0xEC)
 
 DEFINE_GUID (IID_IBrowserWithActivationNotification, 0x6DB89131, 0x7B4C, 0x4E1C, 0x8B, 0x01, 0x5D, 0x31, 0x2C, 0x9C, 0x73, 0x88)
 
 DEFINE_GUID (IID_ILayoutModifier, 0x90B4135A, 0x95BA, 0x46EA, 0x8C, 0xAA, 0xE0, 0x5B, 0x45, 0xCD, 0x80, 0x1E)
 
 DEFINE_GUID (CLSID_Desktop, 0x00021400, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)
 
 DEFINE_GUID (IID_IFileDialogPrivate, 0xAC92FFC5, 0xF0E9, 0x455A, 0x90, 0x6B, 0x4A, 0x83, 0xE7, 0x4A, 0x80, 0x3B)
 
 DEFINE_GUID (IID_IWebbrowserApp, 0x0002df05, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)
 
 DEFINE_GUID (IID_IBrowserSettings_Vista, 0xF81B80BC, 0x29D1, 0x4734, 0xB5, 0x15, 0x77, 0x24, 0xBF, 0xF1, 0x60, 0x01)
 
 DEFINE_GUID (IID_IFolderTypeModifier, 0x04BA120E, 0xAD52, 0x4A2D, 0x98, 0x07, 0x2D, 0xA1, 0x78, 0xD0, 0xC3, 0xE1)
 
 DEFINE_GUID (IID_IShellBrowserService_Vista, 0xF5A24314, 0x5B8B, 0x44FA, 0xBC, 0x2E, 0x31, 0x28, 0x55, 0x44, 0xB5, 0x20)
 
 DEFINE_GUID (IID_IFileDialogPrivate_Vista, 0x2539E31C, 0x857F, 0x43C4, 0x88, 0x72, 0x45, 0xBD, 0x6A, 0x02, 0x48, 0x92)
 
 DEFINE_GUID (SID_SMenuBandParent, 0x8C278EEC, 0x3EAB, 0x11D1, 0x8C, 0xB0, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0)
 
 DEFINE_GUID (SID_SMenuPopup, 0xD1E7AFEB, 0x6A2E, 0x11D0, 0x8C, 0x78, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xB4)
 
 DEFINE_GUID (IID_IShellMenu, 0xEE1F7637, 0xE138, 0x11D1, 0x83, 0x79, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0)
 
 DEFINE_GUID (IID_UnknownInterface1, 0x3934E4C2, 0x8143, 0x4E4C, 0xA1, 0xDC, 0x71, 0x8F, 0x85, 0x63, 0xF3, 0x37)
 
 DEFINE_GUID (IID_UnknownInterface2, 0x3E24A11C, 0x15B2, 0x4F71, 0xB8, 0x1E, 0x00, 0x8F, 0x77, 0x99, 0x8E, 0x9F)
 
 DEFINE_GUID (IID_UnknownInterface3, 0xE38FE0F3, 0x3DB0, 0x47EE, 0xA3, 0x14, 0x25, 0xCF, 0x7F, 0x4B, 0xF5, 0x21)
 
 DEFINE_GUID (IID_UnknownInterface4, 0xFAD451C2, 0xAF58, 0x4161, 0xB9, 0xFF, 0x57, 0xAF, 0xBB, 0xED, 0x0A, 0xD2)
 
 DEFINE_GUID (IID_UnknownInterface5, 0xF80C2137, 0x5829, 0x4CE9, 0x9F, 0x81, 0xA9, 0x5E, 0x15, 0x9D, 0xD8, 0xD5)
 
 DEFINE_GUID (IID_UnknownInterface6, 0xD7F81F62, 0x491F, 0x49BC, 0x89, 0x1D, 0x56, 0x65, 0x08, 0x5D, 0xF9, 0x69)
 
 DEFINE_GUID (IID_UnknownInterface7, 0x68A4FDBA, 0xA48A, 0x4A86, 0xA3, 0x29, 0x1B, 0x69, 0xB9, 0xB1, 0x9E, 0x89)
 
 DEFINE_GUID (IID_UnknownInterface8, 0xD3B1CAF5, 0xEC4F, 0x4B2E, 0xBC, 0xB0, 0x60, 0xD7, 0x15, 0xC9, 0x3C, 0xB2)
 
 DEFINE_GUID (IID_UnknownInterface9, 0x9536CA39, 0x1ACB, 0x4AE6, 0xAD, 0x27, 0x24, 0x03, 0xD0, 0x4C, 0xA2, 0x8F)
 
 DEFINE_GUID (IID_UnknownInterface10, 0xB722BE00, 0x4E68, 0x101B, 0xA2, 0xBC, 0x00, 0xAA, 0x00, 0x40, 0x47, 0x70)
 
 DEFINE_GUID (IID_UnknownInterface11, 0x691ecf9f, 0x6b9c, 0x4311, 0xa1, 0x7b, 0xad, 0x15, 0x4c, 0x30, 0xe9, 0x1f)
 
 DEFINE_GUID (IID_UnknownInterface12, 0x7e3159f5, 0x21ca, 0x4ec2, 0x8f, 0xbe, 0x66, 0x2d, 0x08, 0x2c, 0xa3, 0xeb)
 
 DEFINE_GUID (IID_UnknownInterface13, 0xa36a3ace, 0x8332, 0x45ce, 0xaa, 0x29, 0x50, 0x3c, 0xb7, 0x6b, 0x25, 0x87)
 
 DEFINE_GUID (IID_UnknownInterface14, 0x16770868, 0x239c, 0x445b, 0xa0, 0x1d, 0xf2, 0x6c, 0x7f, 0xbb, 0xf2, 0x6c)
 
 DEFINE_GUID (IID_UnknownInterface15, 0x05a89298, 0x6246, 0x4c63, 0xbb, 0x0d, 0x9b, 0xda, 0xf1, 0x40, 0xbf, 0x3b)
 
 DEFINE_GUID (IID_UnknownInterface16, 0x35094a87, 0x8bb1, 0x4237, 0x96, 0xc6, 0xc4, 0x17, 0xee, 0xbd, 0xb0, 0x78)
 
 DEFINE_GUID (IID_UnknownInterface17, 0x3d5d8c60, 0x21e4, 0x4b03, 0x83, 0xb8, 0xc7, 0x3f, 0x8c, 0x94, 0x00, 0x78)
 
 DEFINE_GUID (IID_UnknownInterface18, 0x1fc45c07, 0x9e35, 0x4276, 0xad, 0x7f, 0x08, 0x60, 0x3a, 0xa0, 0xf6, 0x0f)
 
 DEFINE_GUID (IID_UnknownInterface19, 0xacd9b67a, 0xceab, 0x4c6c, 0x90, 0xa1, 0xe8, 0x57, 0xc6, 0x59, 0xe3, 0x9d)
 
 DEFINE_GUID (IID_UnknownInterface20, 0xd0fe6f62, 0xdea4, 0x46c9, 0x9d, 0xae, 0x36, 0xcb, 0x13, 0x99, 0x78, 0xfa)
 
 DEFINE_GUID (IID_UnknownInterface21, 0x732c1ccd, 0xbc5c, 0x4065, 0x88, 0xcb, 0xfb, 0x5b, 0xce, 0xa7, 0x1f, 0x66)
 
 DEFINE_GUID (IID_UnknownInterface22, 0xc13b3d3a, 0x10d6, 0x43f5, 0x98, 0xdb, 0xb7, 0xdd, 0xd9, 0x87, 0xb3, 0x3d)
 
 DEFINE_GUID (IID_UnknownInterface23, 0x2e228ba3, 0xea25, 0x4378, 0x97, 0xb6, 0xd5, 0x74, 0xfa, 0xeb, 0xa3, 0x56)
 
 DEFINE_GUID (IID_UnknownInterface24, 0xd56a2092, 0x7dbf, 0x4144, 0xa1, 0x10, 0xc2, 0x96, 0x3a, 0x70, 0x98, 0x32)
 
static HRESULT (WINAPI *pSHCreateShellItem)(LPCITEMIDLIST
 
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF *static void init_function_pointers (void)
 
static HRESULT ebrowser_instantiate (IExplorerBrowser **peb)
 
static HRESULT ebrowser_initialize (IExplorerBrowser *peb)
 
static HRESULT ebrowser_browse_to_desktop (IExplorerBrowser *peb)
 
static void process_msgs (void)
 
static IExplorerBrowserEventsImplimpl_from_IExplorerBrowserEvents (IExplorerBrowserEvents *iface)
 
static HRESULT WINAPI IExplorerBrowserEvents_fnQueryInterface (IExplorerBrowserEvents *iface, REFIID riid, void **ppvObj)
 
static ULONG WINAPI IExplorerBrowserEvents_fnAddRef (IExplorerBrowserEvents *iface)
 
static ULONG WINAPI IExplorerBrowserEvents_fnRelease (IExplorerBrowserEvents *iface)
 
static HRESULT WINAPI IExplorerBrowserEvents_fnOnNavigationPending (IExplorerBrowserEvents *iface, PCIDLIST_ABSOLUTE pidlFolder)
 
static HRESULT WINAPI IExplorerBrowserEvents_fnOnNavigationComplete (IExplorerBrowserEvents *iface, PCIDLIST_ABSOLUTE pidlFolder)
 
static HRESULT WINAPI IExplorerBrowserEvents_fnOnNavigationFailed (IExplorerBrowserEvents *iface, PCIDLIST_ABSOLUTE pidlFolder)
 
static HRESULT WINAPI IExplorerBrowserEvents_fnOnViewCreated (IExplorerBrowserEvents *iface, IShellView *psv)
 
static IExplorerPaneVisibilityImplimpl_from_IExplorerPaneVisibility (IExplorerPaneVisibility *iface)
 
static HRESULT WINAPI IExplorerPaneVisibility_fnQueryInterface (IExplorerPaneVisibility *iface, REFIID riid, LPVOID *ppvObj)
 
static ULONG WINAPI IExplorerPaneVisibility_fnAddRef (IExplorerPaneVisibility *iface)
 
static ULONG WINAPI IExplorerPaneVisibility_fnRelease (IExplorerPaneVisibility *iface)
 
static HRESULT WINAPI IExplorerPaneVisibility_fnGetPaneState (IExplorerPaneVisibility *iface, REFEXPLORERPANE ep, EXPLORERPANESTATE *peps)
 
static IExplorerPaneVisibilityImplcreate_explorerpanevisibility (void)
 
static ICommDlgBrowser3Implimpl_from_ICommDlgBrowser3 (ICommDlgBrowser3 *iface)
 
static HRESULT WINAPI ICommDlgBrowser3_fnQueryInterface (ICommDlgBrowser3 *iface, REFIID riid, LPVOID *ppvObj)
 
static ULONG WINAPI ICommDlgBrowser3_fnAddRef (ICommDlgBrowser3 *iface)
 
static ULONG WINAPI ICommDlgBrowser3_fnRelease (ICommDlgBrowser3 *iface)
 
static HRESULT WINAPI ICommDlgBrowser3_fnOnDefaultCommand (ICommDlgBrowser3 *iface, IShellView *shv)
 
static HRESULT WINAPI ICommDlgBrowser3_fnOnStateChange (ICommDlgBrowser3 *iface, IShellView *shv, ULONG uChange)
 
static HRESULT WINAPI ICommDlgBrowser3_fnIncludeObject (ICommDlgBrowser3 *iface, IShellView *shv, LPCITEMIDLIST pidl)
 
static HRESULT WINAPI ICommDlgBrowser3_fnNotify (ICommDlgBrowser3 *iface, IShellView *ppshv, DWORD dwNotifyType)
 
static HRESULT WINAPI ICommDlgBrowser3_fnGetDefaultMenuText (ICommDlgBrowser3 *iface, IShellView *ppshv, LPWSTR pszText, int cchMax)
 
static HRESULT WINAPI ICommDlgBrowser3_fnGetViewFlags (ICommDlgBrowser3 *iface, DWORD *pdwFlags)
 
static HRESULT WINAPI ICommDlgBrowser3_fnOnColumnClicked (ICommDlgBrowser3 *iface, IShellView *ppshv, int iColumn)
 
static HRESULT WINAPI ICommDlgBrowser3_fnGetCurrentFilter (ICommDlgBrowser3 *iface, LPWSTR pszFileSpec, int cchFileSpec)
 
static HRESULT WINAPI ICommDlgBrowser3_fnOnPreviewCreated (ICommDlgBrowser3 *iface, IShellView *ppshv)
 
static ICommDlgBrowser3Implcreate_commdlgbrowser3 (void)
 
static IServiceProviderImplimpl_from_IServiceProvider (IServiceProvider *iface)
 
static HRESULT WINAPI IServiceProvider_fnQueryInterface (IServiceProvider *iface, REFIID riid, LPVOID *ppvObj)
 
static ULONG WINAPI IServiceProvider_fnAddRef (IServiceProvider *iface)
 
static ULONG WINAPI IServiceProvider_fnRelease (IServiceProvider *iface)
 
static HRESULT WINAPI IServiceProvider_fnQueryService (IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
 
static IServiceProviderImplcreate_serviceprovider (void)
 
static void test_QueryInterface (void)
 
static void test_SB_misc (void)
 
static void test_initialization (void)
 
static void test_SetSite (void)
 
static void test_basics (void)
 
static void test_Advise (void)
 
static LPWSTR myPathAddBackslashW (LPWSTR lpszPath)
 
static void test_browse_pidl_ (IExplorerBrowser *peb, IExplorerBrowserEventsImpl *ebev, LPITEMIDLIST pidl, UINT uFlags, HRESULT hr_exp, UINT pending, UINT created, UINT failed, UINT completed, const char *file, int line)
 
static void test_browse_pidl_sb_ (IExplorerBrowser *peb, IExplorerBrowserEventsImpl *ebev, LPITEMIDLIST pidl, UINT uFlags, HRESULT hr_exp, UINT pending, UINT created, UINT failed, UINT completed, const char *file, int line)
 
static void test_navigation (void)
 
static void test_GetCurrentView (void)
 
static void test_InputObject (void)
 
static BOOL test_instantiate_control (void)
 
static void setup_window (void)
 
 START_TEST (ebrowser)
 

Variables

static HWND hwnd
 
static IShellFolder LPCITEMIDLIST
 
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
 
static IExplorerBrowserEventsImpl ebev
 
static const IExplorerBrowserEventsVtbl ebevents
 
static const IExplorerPaneVisibilityVtbl epvvt
 
static const ICommDlgBrowser3Vtbl cdbvtbl
 
static const IServiceProviderVtbl spvtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 23 of file ebrowser.c.

◆ CONST_VTABLE

#define CONST_VTABLE

Definition at line 24 of file ebrowser.c.

◆ test_browse_pidl

#define test_browse_pidl (   peb,
  ebev,
  pidl,
  uFlags,
  hr,
  p,
  cr,
  f,
  co 
)     test_browse_pidl_(peb, ebev, pidl, uFlags, hr, p, cr, f, co, __FILE__, __LINE__)

Definition at line 1364 of file ebrowser.c.

◆ test_browse_pidl_sb

#define test_browse_pidl_sb (   peb,
  ebev,
  pidl,
  uFlags,
  hr,
  p,
  cr,
  f,
  co 
)     test_browse_pidl_sb_(peb, ebev, pidl, uFlags, hr, p, cr, f, co, __FILE__, __LINE__)

Definition at line 1394 of file ebrowser.c.

◆ test_gcv

#define test_gcv (   iid,
  exp 
)
Value:
do { \
hr = IExplorerBrowser_GetCurrentView(peb, &iid, (void**)&punk); \
ok(hr == exp, "(%s:)Expected (0x%08x), got: (0x%08x)\n", \
#iid ,exp, hr); \
if(SUCCEEDED(hr)) IUnknown_Release(punk); \
} while(0)
#define SUCCEEDED(hr)
Definition: intsafe.h:50
DWORD exp
Definition: msg.c:16058
HRESULT hr
Definition: shlfolder.c:183

◆ test_qinterface

#define test_qinterface (   iid,
  exp 
)
Value:
do { \
hr = IExplorerBrowser_QueryInterface(peb, &iid, (void**)&punk); \
ok(hr == exp, "(%s:)Expected (0x%08x), got (0x%08x)\n", \
#iid, exp, hr); \
if(SUCCEEDED(hr)) IUnknown_Release(punk); \
} while(0)

Function Documentation

◆ create_commdlgbrowser3()

static ICommDlgBrowser3Impl * create_commdlgbrowser3 ( void  )
static

Definition at line 439 of file ebrowser.c.

440{
442
443 cdb = heap_alloc_zero(sizeof(*cdb));
444 cdb->ICommDlgBrowser3_iface.lpVtbl = &cdbvtbl;
445 cdb->ref = 1;
446
447 return cdb;
448}
static const ICommDlgBrowser3Vtbl cdbvtbl
Definition: ebrowser.c:423
ICommDlgBrowser3 ICommDlgBrowser3_iface
Definition: ebrowser.c:301

Referenced by test_SetSite().

◆ create_explorerpanevisibility()

static IExplorerPaneVisibilityImpl * create_explorerpanevisibility ( void  )
static

Definition at line 285 of file ebrowser.c.

286{
288
289 epv = heap_alloc_zero(sizeof(*epv));
291 epv->ref = 1;
292
293 return epv;
294}
static const IExplorerPaneVisibilityVtbl epvvt
Definition: ebrowser.c:277
IExplorerPaneVisibility IExplorerPaneVisibility_iface
Definition: ebrowser.c:212

Referenced by test_SetSite().

◆ create_serviceprovider()

static IServiceProviderImpl * create_serviceprovider ( void  )
static

Definition at line 550 of file ebrowser.c.

551{
553 sp->IServiceProvider_iface.lpVtbl = &spvtbl;
554 sp->ref = 1;
555 return sp;
556}
static void * heap_alloc(size_t len)
Definition: appwiz.h:66
static const IServiceProviderVtbl spvtbl
Definition: ebrowser.c:542
static const WCHAR sp[]
Definition: suminfo.c:287

Referenced by test_SetSite().

◆ DEFINE_GUID() [1/39]

DEFINE_GUID ( CLSID_Desktop  ,
0x00021400  ,
0x0000  ,
0x0000  ,
0xC0  ,
0x00  ,
0x00  ,
0x00  ,
0x00  ,
0x00  ,
0x00  ,
0x46   
)

◆ DEFINE_GUID() [2/39]

DEFINE_GUID ( IID_IBrowserSettings  ,
0xDD1E21CC  ,
0xE2C7  ,
0x402C  ,
0xBF  ,
0x05  ,
0x10  ,
0x32  ,
0x8D  ,
0x3F  ,
0x6B  ,
0xAD   
)

◆ DEFINE_GUID() [3/39]

DEFINE_GUID ( IID_IBrowserSettings_Vista  ,
0xF81B80BC  ,
0x29D1  ,
0x4734  ,
0xB5  ,
0x15  ,
0x77  ,
0x24  ,
0xBF  ,
0xF1  ,
0x60  ,
0x01   
)

◆ DEFINE_GUID() [4/39]

DEFINE_GUID ( IID_IBrowserWithActivationNotification  ,
0x6DB89131  ,
0x7B4C  ,
0x4E1C  ,
0x8B  ,
0x01  ,
0x5D  ,
0x31  ,
0x2C  ,
0x9C  ,
0x73  ,
0x88   
)

◆ DEFINE_GUID() [5/39]

DEFINE_GUID ( IID_IFileDialogPrivate  ,
0xAC92FFC5  ,
0xF0E9  ,
0x455A  ,
0x90  ,
0x6B  ,
0x4A  ,
0x83  ,
0xE7  ,
0x4A  ,
0x80  ,
0x3B   
)

◆ DEFINE_GUID() [6/39]

DEFINE_GUID ( IID_IFileDialogPrivate_Vista  ,
0x2539E31C  ,
0x857F  ,
0x43C4  ,
0x88  ,
0x72  ,
0x45  ,
0xBD  ,
0x6A  ,
0x02  ,
0x48  ,
0x92   
)

◆ DEFINE_GUID() [7/39]

DEFINE_GUID ( IID_IFolderTypeModifier  ,
0x04BA120E  ,
0xAD52  ,
0x4A2D  ,
0x98  ,
0x07  ,
0x2D  ,
0xA1  ,
0x78  ,
0xD0  ,
0xC3  ,
0xE1   
)

◆ DEFINE_GUID() [8/39]

DEFINE_GUID ( IID_ILayoutModifier  ,
0x90B4135A  ,
0x95BA  ,
0x46EA  ,
0x8C  ,
0xAA  ,
0xE0  ,
0x5B  ,
0x45  ,
0xCD  ,
0x80  ,
0x1E   
)

◆ DEFINE_GUID() [9/39]

DEFINE_GUID ( IID_IShellBrowserService  ,
0xDFBC7E30  ,
0xF9E5  ,
0x455F  ,
0x88  ,
0xF8  ,
0xFA  ,
0x98  ,
0xC1  ,
0xE4  ,
0x94  ,
0xCA   
)

◆ DEFINE_GUID() [10/39]

DEFINE_GUID ( IID_IShellBrowserService_Vista  ,
0xF5A24314  ,
0x5B8B  ,
0x44FA  ,
0xBC  ,
0x2E  ,
0x31  ,
0x28  ,
0x55  ,
0x44  ,
0xB5  ,
0x20   
)

◆ DEFINE_GUID() [11/39]

DEFINE_GUID ( IID_IShellMenu  ,
0xEE1F7637  ,
0xE138  ,
0x11D1  ,
0x83  ,
0x79  ,
0x00  ,
0xC0  ,
0x4F  ,
0xD9  ,
0x18  ,
0xD0   
)

◆ DEFINE_GUID() [12/39]

DEFINE_GUID ( IID_IShellTaskScheduler  ,
0x6CCB7BE0  ,
0x6807  ,
0x11D0  ,
0xB8  ,
0x10  ,
0x00  ,
0xC0  ,
0x4F  ,
0xD7  ,
0x06  ,
0xEC   
)

◆ DEFINE_GUID() [13/39]

DEFINE_GUID ( IID_IWebbrowserApp  ,
0x0002df05  ,
0x0000  ,
0x0000  ,
0xc0  ,
0x00  ,
0x00  ,
0x00  ,
0x00  ,
0x00  ,
0x00  ,
0x46   
)

◆ DEFINE_GUID() [14/39]

DEFINE_GUID ( IID_UnknownInterface1  ,
0x3934E4C2  ,
0x8143  ,
0x4E4C  ,
0xA1  ,
0xDC  ,
0x71  ,
0x8F  ,
0x85  ,
0x63  ,
0xF3  ,
0x37   
)

◆ DEFINE_GUID() [15/39]

DEFINE_GUID ( IID_UnknownInterface10  ,
0xB722BE00  ,
0x4E68  ,
0x101B  ,
0xA2  ,
0xBC  ,
0x00  ,
0xAA  ,
0x00  ,
0x40  ,
0x47  ,
0x70   
)

◆ DEFINE_GUID() [16/39]

DEFINE_GUID ( IID_UnknownInterface11  ,
0x691ecf9f  ,
0x6b9c  ,
0x4311  ,
0xa1  ,
0x7b  ,
0xad  ,
0x15  ,
0x4c  ,
0x30  ,
0xe9  ,
0x1f   
)

◆ DEFINE_GUID() [17/39]

DEFINE_GUID ( IID_UnknownInterface12  ,
0x7e3159f5  ,
0x21ca  ,
0x4ec2  ,
0x8f  ,
0xbe  ,
0x66  ,
0x2d  ,
0x08  ,
0x2c  ,
0xa3  ,
0xeb   
)

◆ DEFINE_GUID() [18/39]

DEFINE_GUID ( IID_UnknownInterface13  ,
0xa36a3ace  ,
0x8332  ,
0x45ce  ,
0xaa  ,
0x29  ,
0x50  ,
0x3c  ,
0xb7  ,
0x6b  ,
0x25  ,
0x87   
)

◆ DEFINE_GUID() [19/39]

DEFINE_GUID ( IID_UnknownInterface14  ,
0x16770868  ,
0x239c  ,
0x445b  ,
0xa0  ,
0x1d  ,
0xf2  ,
0x6c  ,
0x7f  ,
0xbb  ,
0xf2  ,
0x6c   
)

◆ DEFINE_GUID() [20/39]

DEFINE_GUID ( IID_UnknownInterface15  ,
0x05a89298  ,
0x6246  ,
0x4c63  ,
0xbb  ,
0x0d  ,
0x9b  ,
0xda  ,
0xf1  ,
0x40  ,
0xbf  ,
0x3b   
)

◆ DEFINE_GUID() [21/39]

DEFINE_GUID ( IID_UnknownInterface16  ,
0x35094a87  ,
0x8bb1  ,
0x4237  ,
0x96  ,
0xc6  ,
0xc4  ,
0x17  ,
0xee  ,
0xbd  ,
0xb0  ,
0x78   
)

◆ DEFINE_GUID() [22/39]

DEFINE_GUID ( IID_UnknownInterface17  ,
0x3d5d8c60  ,
0x21e4  ,
0x4b03  ,
0x83  ,
0xb8  ,
0xc7  ,
0x3f  ,
0x8c  ,
0x94  ,
0x00  ,
0x78   
)

◆ DEFINE_GUID() [23/39]

DEFINE_GUID ( IID_UnknownInterface18  ,
0x1fc45c07  ,
0x9e35  ,
0x4276  ,
0xad  ,
0x7f  ,
0x08  ,
0x60  ,
0x3a  ,
0xa0  ,
0xf6  ,
0x0f   
)

◆ DEFINE_GUID() [24/39]

DEFINE_GUID ( IID_UnknownInterface19  ,
0xacd9b67a  ,
0xceab  ,
0x4c6c  ,
0x90  ,
0xa1  ,
0xe8  ,
0x57  ,
0xc6  ,
0x59  ,
0xe3  ,
0x9d   
)

◆ DEFINE_GUID() [25/39]

DEFINE_GUID ( IID_UnknownInterface2  ,
0x3E24A11C  ,
0x15B2  ,
0x4F71  ,
0xB8  ,
0x1E  ,
0x00  ,
0x8F  ,
0x77  ,
0x99  ,
0x8E  ,
0x9F   
)

◆ DEFINE_GUID() [26/39]

DEFINE_GUID ( IID_UnknownInterface20  ,
0xd0fe6f62  ,
0xdea4  ,
0x46c9  ,
0x9d  ,
0xae  ,
0x36  ,
0xcb  ,
0x13  ,
0x99  ,
0x78  ,
0xfa   
)

◆ DEFINE_GUID() [27/39]

DEFINE_GUID ( IID_UnknownInterface21  ,
0x732c1ccd  ,
0xbc5c  ,
0x4065  ,
0x88  ,
0xcb  ,
0xfb  ,
0x5b  ,
0xce  ,
0xa7  ,
0x1f  ,
0x66   
)

◆ DEFINE_GUID() [28/39]

DEFINE_GUID ( IID_UnknownInterface22  ,
0xc13b3d3a  ,
0x10d6  ,
0x43f5  ,
0x98  ,
0xdb  ,
0xb7  ,
0xdd  ,
0xd9  ,
0x87  ,
0xb3  ,
0x3d   
)

◆ DEFINE_GUID() [29/39]

DEFINE_GUID ( IID_UnknownInterface23  ,
0x2e228ba3  ,
0xea25  ,
0x4378  ,
0x97  ,
0xb6  ,
0xd5  ,
0x74  ,
0xfa  ,
0xeb  ,
0xa3  ,
0x56   
)

◆ DEFINE_GUID() [30/39]

DEFINE_GUID ( IID_UnknownInterface24  ,
0xd56a2092  ,
0x7dbf  ,
0x4144  ,
0xa1  ,
0x10  ,
0xc2  ,
0x96  ,
0x3a  ,
0x70  ,
0x98  ,
0x32   
)

◆ DEFINE_GUID() [31/39]

DEFINE_GUID ( IID_UnknownInterface3  ,
0xE38FE0F3  ,
0x3DB0  ,
0x47EE  ,
0xA3  ,
0x14  ,
0x25  ,
0xCF  ,
0x7F  ,
0x4B  ,
0xF5  ,
0x21   
)

◆ DEFINE_GUID() [32/39]

DEFINE_GUID ( IID_UnknownInterface4  ,
0xFAD451C2  ,
0xAF58  ,
0x4161  ,
0xB9  ,
0xFF  ,
0x57  ,
0xAF  ,
0xBB  ,
0xED  ,
0x0A  ,
0xD2   
)

◆ DEFINE_GUID() [33/39]

DEFINE_GUID ( IID_UnknownInterface5  ,
0xF80C2137  ,
0x5829  ,
0x4CE9  ,
0x9F  ,
0x81  ,
0xA9  ,
0x5E  ,
0x15  ,
0x9D  ,
0xD8  ,
0xD5   
)

◆ DEFINE_GUID() [34/39]

DEFINE_GUID ( IID_UnknownInterface6  ,
0xD7F81F62  ,
0x491F  ,
0x49BC  ,
0x89  ,
0x1D  ,
0x56  ,
0x65  ,
0x08  ,
0x5D  ,
0xF9  ,
0x69   
)

◆ DEFINE_GUID() [35/39]

DEFINE_GUID ( IID_UnknownInterface7  ,
0x68A4FDBA  ,
0xA48A  ,
0x4A86  ,
0xA3  ,
0x29  ,
0x1B  ,
0x69  ,
0xB9  ,
0xB1  ,
0x9E  ,
0x89   
)

◆ DEFINE_GUID() [36/39]

DEFINE_GUID ( IID_UnknownInterface8  ,
0xD3B1CAF5  ,
0xEC4F  ,
0x4B2E  ,
0xBC  ,
0xB0  ,
0x60  ,
0xD7  ,
0x15  ,
0xC9  ,
0x3C  ,
0xB2   
)

◆ DEFINE_GUID() [37/39]

DEFINE_GUID ( IID_UnknownInterface9  ,
0x9536CA39  ,
0x1ACB  ,
0x4AE6  ,
0xAD  ,
0x27  ,
0x24  ,
0x03  ,
0xD0  ,
0x4C  ,
0xA2  ,
0x8F   
)

◆ DEFINE_GUID() [38/39]

DEFINE_GUID ( SID_SMenuBandParent  ,
0x8C278EEC  ,
0x3EAB  ,
0x11D1  ,
0x8C  ,
0xB0  ,
0x00  ,
0xC0  ,
0x4F  ,
0xD9  ,
0x18  ,
0xD0   
)

◆ DEFINE_GUID() [39/39]

DEFINE_GUID ( SID_SMenuPopup  ,
0xD1E7AFEB  ,
0x6A2E  ,
0x11D0  ,
0x8C  ,
0x78  ,
0x00  ,
0xC0  ,
0x4F  ,
0xD9  ,
0x18  ,
0xB4   
)

◆ ebrowser_browse_to_desktop()

static HRESULT ebrowser_browse_to_desktop ( IExplorerBrowser peb)
static

Definition at line 110 of file ebrowser.c.

111{
112 LPITEMIDLIST pidl_desktop;
113 HRESULT hr;
115 hr = IExplorerBrowser_BrowseToIDList(peb, pidl_desktop, 0);
116 ILFree(pidl_desktop);
117 return hr;
118}
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3225
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:938
#define CSIDL_DESKTOP
Definition: shlobj.h:2158
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

Referenced by test_Advise(), test_GetCurrentView(), test_SB_misc(), and test_SetSite().

◆ ebrowser_initialize()

static HRESULT ebrowser_initialize ( IExplorerBrowser peb)
static

Definition at line 103 of file ebrowser.c.

104{
105 RECT rc;
106 SetRect(&rc, 0, 0, 500, 500);
107 return IExplorerBrowser_Initialize(peb, hwnd, &rc, NULL);
108}
#define NULL
Definition: types.h:112
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)

Referenced by test_Advise(), test_basics(), test_GetCurrentView(), test_navigation(), test_SB_misc(), and test_SetSite().

◆ ebrowser_instantiate()

static HRESULT ebrowser_instantiate ( IExplorerBrowser **  peb)
static

Definition at line 97 of file ebrowser.c.

98{
99 return CoCreateInstance(&CLSID_ExplorerBrowser, NULL, CLSCTX_INPROC_SERVER,
100 &IID_IExplorerBrowser, (void**)peb);
101}
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325

Referenced by test_Advise(), test_basics(), test_GetCurrentView(), test_initialization(), test_InputObject(), test_instantiate_control(), test_navigation(), test_QueryInterface(), test_SB_misc(), and test_SetSite().

◆ HRESULT()

static HRESULT ( WINAPI pSHCreateShellItem)
static

◆ ICommDlgBrowser3_fnAddRef()

static ULONG WINAPI ICommDlgBrowser3_fnAddRef ( ICommDlgBrowser3 iface)
static

Definition at line 320 of file ebrowser.c.

321{
323 return InterlockedIncrement(&This->ref);
324}
#define InterlockedIncrement
Definition: armddk.h:53
static ICommDlgBrowser3Impl * impl_from_ICommDlgBrowser3(ICommDlgBrowser3 *iface)
Definition: ebrowser.c:308

◆ ICommDlgBrowser3_fnGetCurrentFilter()

static HRESULT WINAPI ICommDlgBrowser3_fnGetCurrentFilter ( ICommDlgBrowser3 iface,
LPWSTR  pszFileSpec,
int  cchFileSpec 
)
static

Definition at line 404 of file ebrowser.c.

408{
410 This->GetCurrentFilter++;
411 return E_NOTIMPL;
412}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ ICommDlgBrowser3_fnGetDefaultMenuText()

static HRESULT WINAPI ICommDlgBrowser3_fnGetDefaultMenuText ( ICommDlgBrowser3 iface,
IShellView ppshv,
LPWSTR  pszText,
int  cchMax 
)
static

Definition at line 374 of file ebrowser.c.

379{
381 This->GetDefaultMenuText++;
382 return E_NOTIMPL;
383}

◆ ICommDlgBrowser3_fnGetViewFlags()

static HRESULT WINAPI ICommDlgBrowser3_fnGetViewFlags ( ICommDlgBrowser3 iface,
DWORD pdwFlags 
)
static

Definition at line 385 of file ebrowser.c.

388{
390 This->GetViewFlags++;
391 return E_NOTIMPL;
392}

◆ ICommDlgBrowser3_fnIncludeObject()

static HRESULT WINAPI ICommDlgBrowser3_fnIncludeObject ( ICommDlgBrowser3 iface,
IShellView shv,
LPCITEMIDLIST  pidl 
)
static

Definition at line 354 of file ebrowser.c.

358{
360 This->IncludeObject++;
361 return S_OK;
362}
#define S_OK
Definition: intsafe.h:52

◆ ICommDlgBrowser3_fnNotify()

static HRESULT WINAPI ICommDlgBrowser3_fnNotify ( ICommDlgBrowser3 iface,
IShellView ppshv,
DWORD  dwNotifyType 
)
static

Definition at line 364 of file ebrowser.c.

368{
370 This->Notify++;
371 return E_NOTIMPL;
372}

◆ ICommDlgBrowser3_fnOnColumnClicked()

static HRESULT WINAPI ICommDlgBrowser3_fnOnColumnClicked ( ICommDlgBrowser3 iface,
IShellView ppshv,
int  iColumn 
)
static

Definition at line 394 of file ebrowser.c.

398{
400 This->OnColumnClicked++;
401 return E_NOTIMPL;
402}

◆ ICommDlgBrowser3_fnOnDefaultCommand()

static HRESULT WINAPI ICommDlgBrowser3_fnOnDefaultCommand ( ICommDlgBrowser3 iface,
IShellView shv 
)
static

Definition at line 337 of file ebrowser.c.

338{
340 This->OnDefaultCommand++;
341 return E_NOTIMPL;
342}

◆ ICommDlgBrowser3_fnOnPreviewCreated()

static HRESULT WINAPI ICommDlgBrowser3_fnOnPreviewCreated ( ICommDlgBrowser3 iface,
IShellView ppshv 
)
static

Definition at line 414 of file ebrowser.c.

417{
419 This->OnPreviewCreated++;
420 return E_NOTIMPL;
421}

◆ ICommDlgBrowser3_fnOnStateChange()

static HRESULT WINAPI ICommDlgBrowser3_fnOnStateChange ( ICommDlgBrowser3 iface,
IShellView shv,
ULONG  uChange 
)
static

Definition at line 344 of file ebrowser.c.

348{
350 This->OnStateChange++;
351 return E_NOTIMPL;
352}

◆ ICommDlgBrowser3_fnQueryInterface()

static HRESULT WINAPI ICommDlgBrowser3_fnQueryInterface ( ICommDlgBrowser3 iface,
REFIID  riid,
LPVOID ppvObj 
)
static

Definition at line 313 of file ebrowser.c.

314{
315 ok(0, "unexpected %s\n", wine_dbgstr_guid(riid));
316 *ppvObj = NULL;
317 return E_NOINTERFACE;
318}
#define ok(value,...)
Definition: atltest.h:57
REFIID riid
Definition: atlbase.h:39
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:197
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ ICommDlgBrowser3_fnRelease()

static ULONG WINAPI ICommDlgBrowser3_fnRelease ( ICommDlgBrowser3 iface)
static

Definition at line 326 of file ebrowser.c.

327{
330
331 if(!ref)
333
334 return ref;
335}
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
#define InterlockedDecrement
Definition: armddk.h:52
Definition: send.c:48
uint32_t ULONG
Definition: typedefs.h:59

◆ IExplorerBrowserEvents_fnAddRef()

static ULONG WINAPI IExplorerBrowserEvents_fnAddRef ( IExplorerBrowserEvents *  iface)
static

Definition at line 154 of file ebrowser.c.

155{
157 return InterlockedIncrement(&This->ref);
158}
static IExplorerBrowserEventsImpl * impl_from_IExplorerBrowserEvents(IExplorerBrowserEvents *iface)
Definition: ebrowser.c:142

◆ IExplorerBrowserEvents_fnOnNavigationComplete()

static HRESULT WINAPI IExplorerBrowserEvents_fnOnNavigationComplete ( IExplorerBrowserEvents *  iface,
PCIDLIST_ABSOLUTE  pidlFolder 
)
static

Definition at line 174 of file ebrowser.c.

176{
178 This->completed++;
179 return S_OK;
180}

◆ IExplorerBrowserEvents_fnOnNavigationFailed()

static HRESULT WINAPI IExplorerBrowserEvents_fnOnNavigationFailed ( IExplorerBrowserEvents *  iface,
PCIDLIST_ABSOLUTE  pidlFolder 
)
static

Definition at line 181 of file ebrowser.c.

183{
185 This->failed++;
186 return S_OK;
187}

◆ IExplorerBrowserEvents_fnOnNavigationPending()

static HRESULT WINAPI IExplorerBrowserEvents_fnOnNavigationPending ( IExplorerBrowserEvents *  iface,
PCIDLIST_ABSOLUTE  pidlFolder 
)
static

Definition at line 166 of file ebrowser.c.

168{
170 This->pending++;
171 return S_OK;
172}

◆ IExplorerBrowserEvents_fnOnViewCreated()

static HRESULT WINAPI IExplorerBrowserEvents_fnOnViewCreated ( IExplorerBrowserEvents *  iface,
IShellView psv 
)
static

Definition at line 188 of file ebrowser.c.

190{
192 This->created++;
193 return S_OK;
194}

◆ IExplorerBrowserEvents_fnQueryInterface()

static HRESULT WINAPI IExplorerBrowserEvents_fnQueryInterface ( IExplorerBrowserEvents *  iface,
REFIID  riid,
void **  ppvObj 
)
static

Definition at line 147 of file ebrowser.c.

149{
150 ok(0, "Never called.\n");
151 return E_NOINTERFACE;
152}

◆ IExplorerBrowserEvents_fnRelease()

static ULONG WINAPI IExplorerBrowserEvents_fnRelease ( IExplorerBrowserEvents *  iface)
static

Definition at line 160 of file ebrowser.c.

◆ IExplorerPaneVisibility_fnAddRef()

static ULONG WINAPI IExplorerPaneVisibility_fnAddRef ( IExplorerPaneVisibility *  iface)
static

Definition at line 231 of file ebrowser.c.

232{
234 return InterlockedIncrement(&This->ref);
235}
static IExplorerPaneVisibilityImpl * impl_from_IExplorerPaneVisibility(IExplorerPaneVisibility *iface)
Definition: ebrowser.c:218

◆ IExplorerPaneVisibility_fnGetPaneState()

static HRESULT WINAPI IExplorerPaneVisibility_fnGetPaneState ( IExplorerPaneVisibility *  iface,
REFEXPLORERPANE  ep,
EXPLORERPANESTATE *  peps 
)
static

Definition at line 248 of file ebrowser.c.

251{
253 This->count++;
254
255 ok(ep != NULL, "ep is NULL.\n");
256 ok(peps != NULL, "peps is NULL.\n");
257 ok(*peps == 0, "got %d\n", *peps);
258
259 *peps = EPS_FORCE;
260 if(IsEqualGUID(&EP_NavPane, ep)) This->np++;
261 else if(IsEqualGUID(&EP_Commands, ep)) This->cp++;
262 else if(IsEqualGUID(&EP_Commands_Organize, ep)) This->cp_o++;
263 else if(IsEqualGUID(&EP_Commands_View, ep)) This->cp_v++;
264 else if(IsEqualGUID(&EP_DetailsPane, ep)) This->dp++;
265 else if(IsEqualGUID(&EP_PreviewPane, ep)) This->pp++;
266 else if(IsEqualGUID(&EP_QueryPane, ep)) This->qp++;
267 else if(IsEqualGUID(&EP_AdvQueryPane, ep)) This->aqp++;
268 else
269 {
270 trace("Unknown explorer pane: %s\n", wine_dbgstr_guid(ep));
271 This->unk++;
272 }
273
274 return S_OK;
275}
#define trace
Definition: atltest.h:70
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147

◆ IExplorerPaneVisibility_fnQueryInterface()

static HRESULT WINAPI IExplorerPaneVisibility_fnQueryInterface ( IExplorerPaneVisibility *  iface,
REFIID  riid,
LPVOID ppvObj 
)
static

Definition at line 223 of file ebrowser.c.

225{
226 ok(0, "unexpected, %s\n", wine_dbgstr_guid(riid));
227 *ppvObj = NULL;
228 return E_NOINTERFACE;
229}

◆ IExplorerPaneVisibility_fnRelease()

static ULONG WINAPI IExplorerPaneVisibility_fnRelease ( IExplorerPaneVisibility *  iface)
static

Definition at line 237 of file ebrowser.c.

238{
241
242 if(!ref)
244
245 return ref;
246}

◆ impl_from_ICommDlgBrowser3()

◆ impl_from_IExplorerBrowserEvents()

◆ impl_from_IExplorerPaneVisibility()

static IExplorerPaneVisibilityImpl * impl_from_IExplorerPaneVisibility ( IExplorerPaneVisibility *  iface)
inlinestatic

Definition at line 218 of file ebrowser.c.

219{
220 return CONTAINING_RECORD(iface, IExplorerPaneVisibilityImpl, IExplorerPaneVisibility_iface);
221}

Referenced by IExplorerPaneVisibility_fnAddRef(), IExplorerPaneVisibility_fnGetPaneState(), and IExplorerPaneVisibility_fnRelease().

◆ impl_from_IServiceProvider()

static IServiceProviderImpl * impl_from_IServiceProvider ( IServiceProvider iface)
inlinestatic

Definition at line 464 of file ebrowser.c.

465{
466 return CONTAINING_RECORD(iface, IServiceProviderImpl, IServiceProvider_iface);
467}

Referenced by IServiceProvider_fnAddRef(), IServiceProvider_fnQueryService(), and IServiceProvider_fnRelease().

◆ init_function_pointers()

static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF *static void init_function_pointers ( void  )
static

Definition at line 85 of file ebrowser.c.

86{
88
89 hmod = GetModuleHandleA("shell32.dll");
90 pSHCreateShellItem = (void*)GetProcAddress(hmod, "SHCreateShellItem");
91 pSHParseDisplayName = (void*)GetProcAddress(hmod, "SHParseDisplayName");
92}
#define GetProcAddress(x, y)
Definition: compat.h:753
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
static PEXPLICIT_ACCESSW *static HMODULE hmod
Definition: security.c:143

Referenced by START_TEST().

◆ IServiceProvider_fnAddRef()

static ULONG WINAPI IServiceProvider_fnAddRef ( IServiceProvider iface)
static

Definition at line 489 of file ebrowser.c.

490{
492 return InterlockedIncrement(&This->ref);
493}
static IServiceProviderImpl * impl_from_IServiceProvider(IServiceProvider *iface)
Definition: ebrowser.c:464

◆ IServiceProvider_fnQueryInterface()

static HRESULT WINAPI IServiceProvider_fnQueryInterface ( IServiceProvider iface,
REFIID  riid,
LPVOID ppvObj 
)
static

Definition at line 469 of file ebrowser.c.

470{
471 *ppvObj = NULL;
472 if(IsEqualIID(riid, &IID_IServiceProvider))
473 {
474 *ppvObj = iface;
475 IServiceProvider_AddRef(iface);
476 return S_OK;
477 }
478
479 if(IsEqualIID(riid, &IID_IOleCommandTarget))
480 {
481 /* Windows Vista. */
482 return E_NOINTERFACE;
483 }
484
485 ok(0, "Unexpected interface requested, %s\n", wine_dbgstr_guid(riid));
486 return E_NOINTERFACE;
487}
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ IServiceProvider_fnQueryService()

static HRESULT WINAPI IServiceProvider_fnQueryService ( IServiceProvider iface,
REFGUID  guidService,
REFIID  riid,
void **  ppv 
)
static

Definition at line 506 of file ebrowser.c.

510{
512 BOOL was_in_list = FALSE;
513 IUnknown *punk = NULL;
514 UINT i;
515
516 *ppv = NULL;
517 for(i = 0; This->interfaces[i].service != NULL; i++)
518 {
519 if(IsEqualGUID(This->interfaces[i].service, guidService) &&
520 IsEqualIID(This->interfaces[i].id, riid))
521 {
522 was_in_list = TRUE;
523 This->interfaces[i].count++;
524 punk = This->interfaces[i].punk;
525 break;
526 }
527 }
528
529 ok(was_in_list, "unknown service, serviceID: %s, riid: %s\n", wine_dbgstr_guid(guidService), wine_dbgstr_guid(riid));
530
531 /* Give back an interface, if any. */
532 if(punk)
533 {
534 *ppv = punk;
535 IUnknown_AddRef(punk);
536 return S_OK;
537 }
538
539 return E_NOINTERFACE;
540}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
REFIID LPVOID * ppv
Definition: atlbase.h:39
unsigned int UINT
Definition: ndis.h:50

◆ IServiceProvider_fnRelease()

static ULONG WINAPI IServiceProvider_fnRelease ( IServiceProvider iface)
static

Definition at line 495 of file ebrowser.c.

496{
499
500 if(!ref)
502
503 return ref;
504}
long LONG
Definition: pedump.c:60

◆ myPathAddBackslashW()

static LPWSTR myPathAddBackslashW ( LPWSTR  lpszPath)
static

Definition at line 1327 of file ebrowser.c.

1328{
1329 size_t iLen;
1330
1331 if (!lpszPath || (iLen = lstrlenW(lpszPath)) >= MAX_PATH)
1332 return NULL;
1333
1334 if (iLen)
1335 {
1336 lpszPath += iLen;
1337 if (lpszPath[-1] != '\\')
1338 {
1339 *lpszPath++ = '\\';
1340 *lpszPath = '\0';
1341 }
1342 }
1343 return lpszPath;
1344}
#define MAX_PATH
Definition: compat.h:34
#define lstrlenW
Definition: compat.h:750

Referenced by test_navigation().

◆ process_msgs()

static void process_msgs ( void  )
static

Definition at line 121 of file ebrowser.c.

122{
123 MSG msg;
124 while(PeekMessageA( &msg, NULL, 0, 0, PM_REMOVE))
125 {
128 }
129}
#define msg(x)
Definition: auth_time.c:54
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
LRESULT WINAPI DispatchMessageA(_In_ const MSG *)
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define PM_REMOVE
Definition: winuser.h:1196
BOOL WINAPI PeekMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)

Referenced by test_Advise(), test_browse_pidl_(), test_browse_pidl_sb_(), test_InputObject(), test_navigation(), test_SB_misc(), and test_SetSite().

◆ setup_window()

static void setup_window ( void  )
static

Definition at line 1800 of file ebrowser.c.

1801{
1802 WNDCLASSW wc;
1803 static const WCHAR ebtestW[] = {'e','b','t','e','s','t',0};
1804
1805 ZeroMemory(&wc, sizeof(WNDCLASSW));
1807 wc.lpszClassName = ebtestW;
1808 RegisterClassW(&wc);
1809 hwnd = CreateWindowExW(0, ebtestW, NULL, 0,
1810 0, 0, 500, 500,
1811 NULL, 0, 0, NULL);
1812 ok(hwnd != NULL, "Failed to create window for tests.\n");
1813}
LPCWSTR lpszClassName
Definition: winuser.h:3185
WNDPROC lpfnWndProc
Definition: winuser.h:3177
#define ZeroMemory
Definition: winbase.h:1712
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by START_TEST().

◆ START_TEST()

START_TEST ( ebrowser  )

Definition at line 1815 of file ebrowser.c.

1816{
1818
1820 {
1821 win_skip("No ExplorerBrowser control..\n");
1823 return;
1824 }
1825
1826 setup_window();
1828
1830 test_SB_misc();
1832 test_basics();
1833 test_Advise();
1836 test_SetSite();
1838
1841}
HRESULT WINAPI DECLSPEC_HOTPATCH OleInitialize(LPVOID reserved)
Definition: ole2.c:169
void WINAPI DECLSPEC_HOTPATCH OleUninitialize(void)
Definition: ole2.c:230
static void test_InputObject(void)
Definition: ebrowser.c:1676
static void setup_window(void)
Definition: ebrowser.c:1800
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF *static void init_function_pointers(void)
Definition: ebrowser.c:85
static void test_SB_misc(void)
Definition: ebrowser.c:600
static void test_initialization(void)
Definition: ebrowser.c:763
static void test_SetSite(void)
Definition: ebrowser.c:920
static void test_navigation(void)
Definition: ebrowser.c:1397
static void test_QueryInterface(void)
Definition: ebrowser.c:558
static BOOL test_instantiate_control(void)
Definition: ebrowser.c:1786
static void test_Advise(void)
Definition: ebrowser.c:1228
static void test_basics(void)
Definition: ebrowser.c:1099
static void test_GetCurrentView(void)
Definition: ebrowser.c:1620
#define win_skip
Definition: test.h:160
BOOL WINAPI DestroyWindow(_In_ HWND)

◆ test_Advise()

static void test_Advise ( void  )
static

Definition at line 1228 of file ebrowser.c.

1229{
1230 IExplorerBrowser *peb;
1231 IExplorerBrowserEvents *pebe;
1232 DWORD cookies[10];
1233 HRESULT hr;
1234 UINT i, ref;
1235
1236 /* Set up our IExplorerBrowserEvents implementation */
1239
1241
1242 if(0)
1243 {
1244 /* Crashes on Windows 7 */
1245 IExplorerBrowser_Advise(peb, pebe, NULL);
1246 IExplorerBrowser_Advise(peb, NULL, &cookies[0]);
1247 }
1248
1249 /* Using Unadvise with a cookie that has yet to be given out
1250 * results in E_INVALIDARG */
1251 hr = IExplorerBrowser_Unadvise(peb, 11);
1252 ok(hr == E_INVALIDARG, "got (0x%08x)\n", hr);
1253
1254 /* Add some before initialization */
1255 for(i = 0; i < 5; i++)
1256 {
1257 hr = IExplorerBrowser_Advise(peb, pebe, &cookies[i]);
1258 ok(hr == S_OK, "got (0x%08x)\n", hr);
1259 }
1260
1262
1263 /* Add some after initialization */
1264 for(i = 5; i < 10; i++)
1265 {
1266 hr = IExplorerBrowser_Advise(peb, pebe, &cookies[i]);
1267 ok(hr == S_OK, "got (0x%08x)\n", hr);
1268 }
1269
1270 ok(ebev.ref == 10, "Got %d\n", ebev.ref);
1271
1272 ebev.completed = 0;
1274 process_msgs();
1275 ok(ebev.completed == 10, "Got %d\n", ebev.completed);
1276
1277 /* Remove a bunch somewhere in the middle */
1278 for(i = 4; i < 8; i++)
1279 {
1280 hr = IExplorerBrowser_Unadvise(peb, cookies[i]);
1281 ok(hr == S_OK, "got (0x%08x)\n", hr);
1282 }
1283
1284 ebev.completed = 0;
1286 process_msgs();
1287 ok(ebev.completed == 6, "Got %d\n", ebev.completed);
1288
1289 if(0)
1290 {
1291 /* Using unadvise with a previously unadvised cookie results
1292 * in a crash. */
1293 IExplorerBrowser_Unadvise(peb, cookies[5]);
1294 }
1295
1296 /* Remove the rest. */
1297 for(i = 0; i < 10; i++)
1298 {
1299 if(i<4||i>7)
1300 {
1301 hr = IExplorerBrowser_Unadvise(peb, cookies[i]);
1302 ok(hr == S_OK, "%d: got (0x%08x)\n", i, hr);
1303 }
1304 }
1305
1306 ok(ebev.ref == 0, "Got %d\n", ebev.ref);
1307
1308 ebev.completed = 0;
1310 process_msgs();
1311 ok(ebev.completed == 0, "Got %d\n", ebev.completed);
1312
1313 /* ::Destroy implies ::Unadvise. */
1314 hr = IExplorerBrowser_Advise(peb, pebe, &cookies[0]);
1315 ok(hr == S_OK, "Got 0x%08x\n", hr);
1316 ok(ebev.ref == 1, "Got %d\n", ebev.ref);
1317
1318 hr = IExplorerBrowser_Destroy(peb);
1319 ok(hr == S_OK, "Got 0x%08x\n", hr);
1320 ok(ebev.ref == 0, "Got %d\n", ebev.ref);
1321
1322 ref = IExplorerBrowser_Release(peb);
1323 ok(!ref, "Got %d\n", ref);
1324}
#define E_INVALIDARG
Definition: ddrawi.h:101
static void process_msgs(void)
Definition: ebrowser.c:121
static HRESULT ebrowser_initialize(IExplorerBrowser *peb)
Definition: ebrowser.c:103
static HRESULT ebrowser_instantiate(IExplorerBrowser **peb)
Definition: ebrowser.c:97
static IExplorerBrowserEventsImpl ebev
Definition: ebrowser.c:140
static const IExplorerBrowserEventsVtbl ebevents
Definition: ebrowser.c:196
static HRESULT ebrowser_browse_to_desktop(IExplorerBrowser *peb)
Definition: ebrowser.c:110
unsigned long DWORD
Definition: ntddk_ex.h:95
static CookieInternal * cookies
Definition: msctf.c:65
IExplorerBrowserEvents IExplorerBrowserEvents_iface
Definition: ebrowser.c:135

Referenced by START_TEST(), and test_HTMLDocument().

◆ test_basics()

static void test_basics ( void  )
static

Definition at line 1099 of file ebrowser.c.

1100{
1101 IExplorerBrowser *peb;
1102 IShellBrowser *psb;
1104 ULONG lres;
1106 HDWP hdwp;
1107 RECT rc;
1108 HRESULT hr;
1109 static const WCHAR winetest[] = {'W','i','n','e','T','e','s','t',0};
1110
1113
1114 /* SetRect */
1115 SetRectEmpty(&rc);
1116 hr = IExplorerBrowser_SetRect(peb, NULL, rc);
1117 ok(hr == S_OK, "got (0x%08x)\n", hr);
1118
1119 SetRect(&rc, 100, 100, 10, 10);
1120 hr = IExplorerBrowser_SetRect(peb, NULL, rc);
1121 ok(hr == S_OK, "got (0x%08x)\n", hr);
1122
1123 /* SetRect with DeferWindowPos */
1124 SetRect(&rc, 0, 0, 10, 10);
1125 hdwp = BeginDeferWindowPos(1);
1126 hr = IExplorerBrowser_SetRect(peb, &hdwp, rc);
1127 ok(hr == S_OK, "got (0x%08x)\n", hr);
1128 lres = EndDeferWindowPos(hdwp);
1129 ok(lres, "EndDeferWindowPos failed.\n");
1130
1131 hdwp = NULL;
1132 hr = IExplorerBrowser_SetRect(peb, &hdwp, rc);
1133 ok(hr == S_OK, "got (0x%08x)\n", hr);
1134 ok(hdwp == NULL, "got %p\n", hdwp);
1135 lres = EndDeferWindowPos(hdwp);
1136 ok(!lres, "EndDeferWindowPos succeeded unexpectedly.\n");
1137
1138 /* Test positioning */
1139 SetRect(&rc, 10, 20, 50, 50);
1140 hr = IExplorerBrowser_SetRect(peb, NULL, rc);
1141 ok(hr == S_OK, "got (0x%08x)\n", hr);
1142 hr = IExplorerBrowser_QueryInterface(peb, &IID_IShellBrowser, (void**)&psb);
1143 ok(hr == S_OK, "Got 0x%08x\n", hr);
1144 if(SUCCEEDED(hr))
1145 {
1146 HWND eb_hwnd;
1147 RECT eb_rc;
1148 static const RECT exp_rc = {11, 21, 49, 49};
1149 static const RECT exp_rc2 = {11, 21, 49, 24};
1150
1151 hr = IShellBrowser_GetWindow(psb, &eb_hwnd);
1152 ok(hr == S_OK, "Got 0x%08x\n", hr);
1153
1154 GetClientRect(eb_hwnd, &eb_rc);
1155 MapWindowPoints(eb_hwnd, hwnd, (POINT*)&eb_rc, 2);
1156 ok(EqualRect(&eb_rc, &exp_rc), "Got rect %s\n", wine_dbgstr_rect(&eb_rc));
1157
1158 /* Try resizing with invalid hdwp */
1159 rc.bottom = 25;
1160 hdwp = (HDWP)0xdeadbeef;
1161 hr = IExplorerBrowser_SetRect(peb, &hdwp, rc);
1162 ok(hr == E_FAIL, "Got 0x%08x\n", hr);
1163 GetClientRect(eb_hwnd, &eb_rc);
1164 MapWindowPoints(eb_hwnd, hwnd, (POINT*)&eb_rc, 2);
1165 ok(EqualRect(&eb_rc, &exp_rc), "Got rect %s\n", wine_dbgstr_rect(&eb_rc));
1166
1167 hdwp = NULL;
1168 hr = IExplorerBrowser_SetRect(peb, &hdwp, rc);
1169 ok(hr == S_OK, "Got 0x%08x\n", hr);
1170 GetClientRect(eb_hwnd, &eb_rc);
1171 MapWindowPoints(eb_hwnd, hwnd, (POINT*)&eb_rc, 2);
1172 ok(EqualRect(&eb_rc, &exp_rc2), "Got rect %s\n", wine_dbgstr_rect(&eb_rc));
1173
1174 IShellBrowser_Release(psb);
1175 }
1176
1177 IExplorerBrowser_Destroy(peb);
1178 IExplorerBrowser_Release(peb);
1179
1180 /* GetOptions/SetOptions*/
1182
1183 if(0) {
1184 /* Crashes on Windows 7 */
1185 IExplorerBrowser_GetOptions(peb, NULL);
1186 }
1187
1188 hr = IExplorerBrowser_GetOptions(peb, &flags);
1189 ok(hr == S_OK, "got (0x%08x)\n", hr);
1190 ok(flags == 0, "got (0x%08x)\n", flags);
1191
1192 /* Settings preserved through Initialize. */
1193 hr = IExplorerBrowser_SetOptions(peb, 0xDEADBEEF);
1194 ok(hr == S_OK, "got (0x%08x)\n", hr);
1195
1197
1198 hr = IExplorerBrowser_GetOptions(peb, &flags);
1199 ok(flags == 0xDEADBEEF, "got (0x%08x)\n", flags);
1200 ok(hr == S_OK, "got (0x%08x)\n", hr);
1201
1202 IExplorerBrowser_Destroy(peb);
1203 IExplorerBrowser_Release(peb);
1204
1207
1208 /* SetFolderSettings */
1209 hr = IExplorerBrowser_SetFolderSettings(peb, NULL);
1210 ok(hr == E_INVALIDARG, "got (0x%08x)\n", hr);
1211 fs.ViewMode = 0; fs.fFlags = 0;
1212 hr = IExplorerBrowser_SetFolderSettings(peb, &fs);
1213 todo_wine ok(hr == E_INVALIDARG, "got (0x%08x)\n", hr);
1214
1215 /* SetPropertyBag */
1216 hr = IExplorerBrowser_SetPropertyBag(peb, NULL);
1217 ok(hr == E_INVALIDARG, "Got 0x%08x\n", hr);
1218 hr = IExplorerBrowser_SetPropertyBag(peb, winetest);
1219 ok(hr == S_OK, "Got 0x%08x\n", hr);
1220
1221 /* TODO: Test after browsing somewhere. */
1222
1223 IExplorerBrowser_Destroy(peb);
1224 lres = IExplorerBrowser_Release(peb);
1225 ok(lres == 0, "Got %d\n", lres);
1226}
static const char * wine_dbgstr_rect(const RECT *prc)
Definition: atltest.h:160
#define E_FAIL
Definition: ddrawi.h:102
GLbitfield flags
Definition: glext.h:7161
#define fs
Definition: i386-dis.c:444
#define todo_wine
Definition: custom.c:79
static CHAR winetest[]
Definition: info.c:56
enum tagEXPLORER_BROWSER_OPTIONS EXPLORER_BROWSER_OPTIONS
Definition: ffs.h:70
LONG bottom
Definition: windef.h:309
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
BOOL WINAPI EqualRect(_In_ LPCRECT, _In_ LPCRECT)
HDWP WINAPI BeginDeferWindowPos(_In_ int)

Referenced by START_TEST().

◆ test_browse_pidl_()

static void test_browse_pidl_ ( IExplorerBrowser peb,
IExplorerBrowserEventsImpl ebev,
LPITEMIDLIST  pidl,
UINT  uFlags,
HRESULT  hr_exp,
UINT  pending,
UINT  created,
UINT  failed,
UINT  completed,
const char file,
int  line 
)
static

Definition at line 1346 of file ebrowser.c.

1350{
1351 HRESULT hr;
1353
1354 hr = IExplorerBrowser_BrowseToIDList(peb, pidl, uFlags);
1355 ok_(file, line) (hr == hr_exp, "BrowseToIDList returned 0x%08x\n", hr);
1356 process_msgs();
1357
1358 ok_(file, line)
1359 (ebev->pending == pending && ebev->created == created &&
1360 ebev->failed == failed && ebev->completed == completed,
1361 "Events occurred: %d, %d, %d, %d\n",
1363}
#define ok_(x1, x2)
Definition: atltest.h:61
UINT uFlags
Definition: api.c:59
Definition: fci.c:127
Definition: parser.c:49

◆ test_browse_pidl_sb_()

static void test_browse_pidl_sb_ ( IExplorerBrowser peb,
IExplorerBrowserEventsImpl ebev,
LPITEMIDLIST  pidl,
UINT  uFlags,
HRESULT  hr_exp,
UINT  pending,
UINT  created,
UINT  failed,
UINT  completed,
const char file,
int  line 
)
static

Definition at line 1367 of file ebrowser.c.

1371{
1372 IShellBrowser *psb;
1373 HRESULT hr;
1374
1375 hr = IExplorerBrowser_QueryInterface(peb, &IID_IShellBrowser, (void**)&psb);
1376 ok_(file, line) (hr == S_OK, "QueryInterface returned 0x%08x\n", hr);
1377 if(SUCCEEDED(hr))
1378 {
1380
1381 hr = IShellBrowser_BrowseObject(psb, pidl, uFlags);
1382 ok_(file, line) (hr == hr_exp, "BrowseObject returned 0x%08x\n", hr);
1383 process_msgs();
1384
1385 ok_(file, line)
1386 (ebev->pending == pending && ebev->created == created &&
1387 ebev->failed == failed && ebev->completed == completed,
1388 "Events occurred: %d, %d, %d, %d\n",
1390
1391 IShellBrowser_Release(psb);
1392 }
1393}

◆ test_GetCurrentView()

static void test_GetCurrentView ( void  )
static

Definition at line 1620 of file ebrowser.c.

1621{
1622 IExplorerBrowser *peb;
1623 IUnknown *punk;
1624 HRESULT hr;
1625
1626 /* GetCurrentView */
1628
1629 if(0)
1630 {
1631 /* Crashes under Windows 7 */
1632 IExplorerBrowser_GetCurrentView(peb, NULL, NULL);
1633 }
1634 hr = IExplorerBrowser_GetCurrentView(peb, NULL, (void**)&punk);
1635 ok(hr == E_FAIL, "Got 0x%08x\n", hr);
1636
1637#define test_gcv(iid, exp) \
1638 do { \
1639 hr = IExplorerBrowser_GetCurrentView(peb, &iid, (void**)&punk); \
1640 ok(hr == exp, "(%s:)Expected (0x%08x), got: (0x%08x)\n", \
1641 #iid ,exp, hr); \
1642 if(SUCCEEDED(hr)) IUnknown_Release(punk); \
1643 } while(0)
1644
1647 test_gcv(IID_IShellView, E_FAIL);
1648 test_gcv(IID_IShellView2, E_FAIL);
1649 test_gcv(IID_IFolderView, E_FAIL);
1650 test_gcv(IID_IPersistFolder, E_FAIL);
1651 test_gcv(IID_IPersistFolder2, E_FAIL);
1652 test_gcv(IID_ICommDlgBrowser, E_FAIL);
1653 test_gcv(IID_ICommDlgBrowser2, E_FAIL);
1654 test_gcv(IID_ICommDlgBrowser3, E_FAIL);
1655
1658
1661 test_gcv(IID_IShellView, S_OK);
1662 test_gcv(IID_IShellView2, S_OK);
1663 test_gcv(IID_IFolderView, S_OK);
1664 todo_wine test_gcv(IID_IPersistFolder, S_OK);
1665 test_gcv(IID_IPersistFolder2, E_NOINTERFACE);
1666 test_gcv(IID_ICommDlgBrowser, E_NOINTERFACE);
1667 test_gcv(IID_ICommDlgBrowser2, E_NOINTERFACE);
1668 test_gcv(IID_ICommDlgBrowser3, E_NOINTERFACE);
1669
1670#undef test_gcv
1671
1672 IExplorerBrowser_Destroy(peb);
1673 IExplorerBrowser_Release(peb);
1674}
const GUID IID_IUnknown
#define test_gcv(iid, exp)

Referenced by START_TEST().

◆ test_initialization()

static void test_initialization ( void  )
static

Definition at line 763 of file ebrowser.c.

764{
765 IExplorerBrowser *peb;
766 IShellBrowser *psb;
767 HWND eb_hwnd;
768 HRESULT hr;
769 ULONG lres;
770 LONG style;
771 RECT rc;
772
774
775 if(0)
776 {
777 /* Crashes on Windows 7 */
778 IExplorerBrowser_Initialize(peb, NULL, NULL, NULL);
779 IExplorerBrowser_Initialize(peb, hwnd, NULL, NULL);
780 }
781
782 ZeroMemory(&rc, sizeof(RECT));
783
784 hr = IExplorerBrowser_Initialize(peb, NULL, &rc, NULL);
785 ok(hr == E_INVALIDARG, "got (0x%08x)\n", hr);
786
787 hr = IExplorerBrowser_Initialize(peb, hwnd, &rc, NULL);
788 ok(hr == S_OK, "got (0x%08x)\n", hr);
789
790 /* Initialize twice */
791 hr = IExplorerBrowser_Initialize(peb, hwnd, &rc, NULL);
792 ok(hr == E_UNEXPECTED, "got (0x%08x)\n", hr);
793
794 hr = IExplorerBrowser_Destroy(peb);
795 ok(hr == S_OK, "got (0x%08x)\n", hr);
796
797 /* Initialize again */
798 hr = IExplorerBrowser_Initialize(peb, hwnd, &rc, NULL);
799 ok(hr == E_UNEXPECTED, "got (0x%08x)\n", hr);
800
801 /* Destroy again */
802 hr = IExplorerBrowser_Destroy(peb);
803 ok(hr == S_OK, "got (0x%08x)\n", hr);
804 lres = IExplorerBrowser_Release(peb);
805 ok(lres == 0, "Got %d\n", lres);
806
807 /* Initialize with a few different rectangles */
808 peb = NULL;
810 SetRect(&rc, 50, 20, 100, 80);
811 hr = IExplorerBrowser_Initialize(peb, hwnd, &rc, NULL);
812 ok(hr == S_OK, "got (0x%08x)\n", hr);
813 hr = IExplorerBrowser_QueryInterface(peb, &IID_IShellBrowser, (void**)&psb);
814 ok(hr == S_OK, "Got 0x%08x\n", hr);
815 if(SUCCEEDED(hr))
816 {
817 RECT eb_rc;
818 char buf[1024];
819 LONG expected_style;
820 static const RECT exp_rc = {0, 0, 48, 58};
821
822 hr = IShellBrowser_GetWindow(psb, &eb_hwnd);
823 ok(hr == S_OK, "Got 0x%08x\n", hr);
824
825 GetClientRect(eb_hwnd, &eb_rc);
826 ok(EqualRect(&eb_rc, &exp_rc), "Got client rect %s\n", wine_dbgstr_rect(&eb_rc));
827
828 GetWindowRect(eb_hwnd, &eb_rc);
829 ok(eb_rc.right - eb_rc.left == 50, "Got window width %d\n", eb_rc.right - eb_rc.left);
830 ok(eb_rc.bottom - eb_rc.top == 60, "Got window height %d\n", eb_rc.bottom - eb_rc.top);
831
832 buf[0] = '\0';
833 GetClassNameA(eb_hwnd, buf, 1024);
834 ok(!lstrcmpA(buf, "ExplorerBrowserControl"), "Unexpected classname %s\n", buf);
835
838 todo_wine ok(style == expected_style, "Got style 0x%08x, expected 0x%08x\n", style, expected_style);
839
840 expected_style = WS_EX_CONTROLPARENT;
842 ok(style == expected_style, "Got exstyle 0x%08x, expected 0x%08x\n", style, expected_style);
843
844 ok(GetParent(eb_hwnd) == hwnd, "GetParent returns %p\n", GetParent(eb_hwnd));
845
846 /* ::Destroy() destroys the window. */
847 ok(IsWindow(eb_hwnd), "eb_hwnd invalid.\n");
848 IExplorerBrowser_Destroy(peb);
849 ok(!IsWindow(eb_hwnd), "eb_hwnd valid.\n");
850
851 IShellBrowser_Release(psb);
852 lres = IExplorerBrowser_Release(peb);
853 ok(lres == 0, "Got refcount %d\n", lres);
854 }
855 else
856 {
857 skip("Skipping some tests.\n");
858
859 IExplorerBrowser_Destroy(peb);
860 lres = IExplorerBrowser_Release(peb);
861 ok(lres == 0, "Got refcount %d\n", lres);
862 }
863
864 /* check window style with EBO_NOBORDER */
866 hr = IExplorerBrowser_SetOptions(peb, EBO_NOBORDER);
867 ok(hr == S_OK, "got 0x%08x\n", hr);
868 SetRect(&rc, 50, 20, 100, 80);
869
870 hr = IExplorerBrowser_Initialize(peb, hwnd, &rc, NULL);
871 ok(hr == S_OK, "got (0x%08x)\n", hr);
872
873 hr = IExplorerBrowser_QueryInterface(peb, &IID_IShellBrowser, (void**)&psb);
874 ok(hr == S_OK, "Got 0x%08x\n", hr);
875
876 hr = IShellBrowser_GetWindow(psb, &eb_hwnd);
877 ok(hr == S_OK, "Got 0x%08x\n", hr);
878
880 ok(!(style & WS_BORDER) || broken(style & WS_BORDER) /* before win8 */, "got style 0x%08x\n", style);
881
882 IShellBrowser_Release(psb);
883 IExplorerBrowser_Destroy(peb);
884 IExplorerBrowser_Release(peb);
885
886 /* empty rectangle */
888 SetRectEmpty(&rc);
889 hr = IExplorerBrowser_Initialize(peb, hwnd, &rc, NULL);
890 ok(hr == S_OK, "got (0x%08x)\n", hr);
891 IExplorerBrowser_Destroy(peb);
892 lres = IExplorerBrowser_Release(peb);
893 ok(lres == 0, "Got refcount %d\n", lres);
894
896 SetRect(&rc, -1, -1, 1, 1);
897 hr = IExplorerBrowser_Initialize(peb, hwnd, &rc, NULL);
898 ok(hr == S_OK, "got (0x%08x)\n", hr);
899 IExplorerBrowser_Destroy(peb);
900 lres = IExplorerBrowser_Release(peb);
901 ok(lres == 0, "Got refcount %d\n", lres);
902
904 SetRect(&rc, 10, 10, 5, 5);
905 hr = IExplorerBrowser_Initialize(peb, hwnd, &rc, NULL);
906 ok(hr == S_OK, "got (0x%08x)\n", hr);
907 IExplorerBrowser_Destroy(peb);
908 lres = IExplorerBrowser_Release(peb);
909 ok(lres == 0, "Got refcount %d\n", lres);
910
912 SetRect(&rc, 10, 10, 5, 5);
913 hr = IExplorerBrowser_Initialize(peb, hwnd, &rc, NULL);
914 ok(hr == S_OK, "got (0x%08x)\n", hr);
915 IExplorerBrowser_Destroy(peb);
916 lres = IExplorerBrowser_Release(peb);
917 ok(lres == 0, "Got refcount %d\n", lres);
918}
#define broken(x)
Definition: _sntprintf.h:21
Arabic default style
Definition: afstyles.h:94
#define skip(...)
Definition: atltest.h:64
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
int WINAPI lstrcmpA(LPCSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:18
#define WS_CHILD
Definition: pedump.c:617
#define WS_BORDER
Definition: pedump.c:625
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
@ EBO_NOBORDER
Definition: shobjidl.idl:2969
LONG right
Definition: windef.h:308
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
#define E_UNEXPECTED
Definition: winerror.h:2456
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define GetWindowLongPtrW
Definition: winuser.h:4829
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define WS_EX_CONTROLPARENT
Definition: winuser.h:387
int WINAPI GetClassNameA(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPSTR lpClassName, _In_ int nMaxCount)
HWND WINAPI GetParent(_In_ HWND)
#define GWL_STYLE
Definition: winuser.h:852
#define GWL_EXSTYLE
Definition: winuser.h:851

Referenced by START_TEST().

◆ test_InputObject()

static void test_InputObject ( void  )
static

Definition at line 1676 of file ebrowser.c.

1677{
1678 IExplorerBrowser *peb;
1679 IShellFolder *psf;
1680 IInputObject *pio;
1681 HRESULT hr;
1682 RECT rc;
1683 UINT i;
1684 WPARAM supported_key_accels_mode1[] = {
1687 VK_F5, VK_F6, VK_F10, 0 };
1688 WPARAM supported_key_accels_mode2[] = {
1691 VK_F10, 0 };
1692 WPARAM *key_accels;
1693 MSG msg_a = {
1694 hwnd,
1695 WM_KEYDOWN,
1696 VK_F5, 0,
1697 GetTickCount(),
1698 {5, 2}
1699 };
1700
1702 hr = IExplorerBrowser_QueryInterface(peb, &IID_IInputObject, (void**)&pio);
1703 ok(hr == S_OK, "Got 0x%08x\n", hr);
1704 if(FAILED(hr))
1705 {
1706 win_skip("IInputObject not supported.\n");
1707 return;
1708 }
1709
1710 /* Before initializing */
1712 todo_wine ok(hr == E_FAIL, "Got 0x%08x\n", hr);
1713
1715 todo_wine ok(hr == E_FAIL, "Got 0x%08x\n", hr);
1716
1717 hr = IInputObject_UIActivateIO(pio, TRUE, &msg_a);
1718 todo_wine ok(hr == S_OK, "Got 0x%08x\n", hr);
1719
1721 todo_wine ok(hr == E_FAIL, "Got 0x%08x\n", hr);
1722
1724 todo_wine ok(hr == E_FAIL, "Got 0x%08x\n", hr);
1725
1726 SetRect(&rc, 0, 0, 100, 100);
1727 hr = IExplorerBrowser_Initialize(peb, hwnd, &rc, NULL);
1728 ok(hr == S_OK, "Got 0x%08x\n", hr);
1729
1731 todo_wine ok(hr == E_FAIL, "Got 0x%08x\n", hr);
1732
1734 todo_wine ok(hr == E_FAIL, "Got 0x%08x\n", hr);
1735
1736 /* Browse to the desktop */
1737 SHGetDesktopFolder(&psf);
1738 hr = IExplorerBrowser_BrowseToObject(peb, (IUnknown*)psf, SBSP_DEFBROWSER);
1739 ok(hr == S_OK, "Got 0x%08x\n", hr);
1740 IShellFolder_Release(psf);
1741
1742 hr = IInputObject_UIActivateIO(pio, TRUE, &msg_a);
1743 todo_wine ok(hr == S_OK, "Got 0x%08x\n", hr);
1744
1746 todo_wine ok(hr == S_OK, "Got 0x%08x\n", hr);
1747
1748 hr = IInputObject_UIActivateIO(pio, FALSE, &msg_a);
1749 todo_wine ok(hr == S_OK, "Got 0x%08x\n", hr);
1750
1752 todo_wine ok(hr == S_OK, "Got 0x%08x\n", hr);
1753
1755 if(hr == S_OK)
1756 key_accels = supported_key_accels_mode1;
1757 else
1758 key_accels = supported_key_accels_mode2;
1759
1760 for(i = 0; i < 0x100; i++)
1761 {
1762 BOOL found = FALSE;
1763 UINT j;
1764 for(j = 0; key_accels[j] != 0; j++)
1765 if(key_accels[j] == i)
1766 {
1767 found = TRUE;
1768 break;
1769 }
1770
1771 msg_a.wParam = i;
1772 process_msgs();
1774 todo_wine ok(hr == (found ? S_OK : S_FALSE), "Got 0x%08x (%04x)\n", hr, i);
1775 if(i == VK_F5)
1776 Sleep(1000); /* Needed for w2k8 (64bit) */
1777 }
1778
1779 process_msgs();
1780
1782 IExplorerBrowser_Destroy(peb);
1783 IExplorerBrowser_Release(peb);
1784}
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:455
static HWND hwnd
Definition: ebrowser.c:80
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define FAILED(hr)
Definition: intsafe.h:51
#define IInputObject_TranslateAcceleratorIO(p, a)
Definition: shlobj.h:708
#define IInputObject_HasFocusIO(p)
Definition: shlobj.h:707
#define IInputObject_Release(p)
Definition: shlobj.h:704
#define IInputObject_UIActivateIO(p, a, b)
Definition: shlobj.h:706
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:790
UINT_PTR WPARAM
Definition: windef.h:207
#define S_FALSE
Definition: winerror.h:2357
#define VK_TAB
Definition: winuser.h:2199
#define VK_F10
Definition: winuser.h:2264
#define VK_UP
Definition: winuser.h:2225
#define VK_F1
Definition: winuser.h:2255
#define VK_F6
Definition: winuser.h:2260
#define VK_NEXT
Definition: winuser.h:2221
#define VK_RETURN
Definition: winuser.h:2201
#define VK_F5
Definition: winuser.h:2259
#define VK_END
Definition: winuser.h:2222
#define VK_HOME
Definition: winuser.h:2223
#define VK_BACK
Definition: winuser.h:2198
#define VK_LEFT
Definition: winuser.h:2224
#define VK_RIGHT
Definition: winuser.h:2226
#define VK_DOWN
Definition: winuser.h:2227
#define VK_PRIOR
Definition: winuser.h:2220
#define VK_DELETE
Definition: winuser.h:2233
#define WM_KEYDOWN
Definition: winuser.h:1715
#define VK_F2
Definition: winuser.h:2256

Referenced by START_TEST().

◆ test_instantiate_control()

static BOOL test_instantiate_control ( void  )
static

Definition at line 1786 of file ebrowser.c.

1787{
1788 IExplorerBrowser *peb;
1789 HRESULT hr;
1790
1791 hr = ebrowser_instantiate(&peb);
1792 ok(hr == S_OK || hr == REGDB_E_CLASSNOTREG, "Got (0x%08x)\n", hr);
1793 if(FAILED(hr))
1794 return FALSE;
1795
1796 IExplorerBrowser_Release(peb);
1797 return TRUE;
1798}
#define REGDB_E_CLASSNOTREG
Definition: winerror.h:2696

Referenced by START_TEST().

◆ test_navigation()

static void test_navigation ( void  )
static

Definition at line 1397 of file ebrowser.c.

1398{
1399 IExplorerBrowser *peb, *peb2;
1400 IFolderView *pfv;
1401 IShellItem *psi;
1402 IShellFolder *psf;
1403 LPITEMIDLIST pidl_current, pidl_child;
1404 DWORD cookie, cookie2;
1405 HRESULT hr;
1406 LONG lres;
1407 WCHAR current_path[MAX_PATH];
1408 WCHAR child_path[MAX_PATH];
1409 static const WCHAR testfolderW[] =
1410 {'w','i','n','e','t','e','s','t','f','o','l','d','e','r','\0'};
1411
1412 ok(pSHParseDisplayName != NULL, "pSHParseDisplayName unexpectedly missing.\n");
1413 ok(pSHCreateShellItem != NULL, "pSHCreateShellItem unexpectedly missing.\n");
1414
1415 GetCurrentDirectoryW(MAX_PATH, current_path);
1416 if(!current_path[0])
1417 {
1418 skip("Failed to create test-directory.\n");
1419 return;
1420 }
1421
1422 lstrcpyW(child_path, current_path);
1423 myPathAddBackslashW(child_path);
1424 lstrcatW(child_path, testfolderW);
1425
1426 CreateDirectoryW(child_path, NULL);
1427
1428 pSHParseDisplayName(current_path, NULL, &pidl_current, 0, NULL);
1429 pSHParseDisplayName(child_path, NULL, &pidl_child, 0, NULL);
1430
1433
1434 ebrowser_instantiate(&peb2);
1435 ebrowser_initialize(peb2);
1436
1437 /* Set up our IExplorerBrowserEvents implementation */
1439
1440 IExplorerBrowser_Advise(peb, &ebev.IExplorerBrowserEvents_iface, &cookie);
1441 IExplorerBrowser_Advise(peb2, &ebev.IExplorerBrowserEvents_iface, &cookie2);
1442
1443 /* These should all fail */
1444 test_browse_pidl(peb, &ebev, 0, SBSP_ABSOLUTE | SBSP_RELATIVE, E_FAIL, 0, 0, 0, 0);
1445 test_browse_pidl_sb(peb2, &ebev, 0, SBSP_ABSOLUTE | SBSP_RELATIVE, E_FAIL, 0, 0, 0, 0);
1446 test_browse_pidl(peb, &ebev, 0, SBSP_ABSOLUTE, E_INVALIDARG, 0, 0, 0, 0);
1447 test_browse_pidl_sb(peb2, &ebev, 0, SBSP_ABSOLUTE, E_INVALIDARG, 0, 0, 0, 0);
1448 test_browse_pidl(peb, &ebev, 0, SBSP_RELATIVE, E_FAIL, 0, 0, 0, 0);
1449 test_browse_pidl_sb(peb2, &ebev, 0, SBSP_RELATIVE, E_FAIL, 0, 0, 0, 0);
1450 test_browse_pidl(peb, &ebev, 0, SBSP_PARENT, E_FAIL, 0, 0, 0, 0);
1451 test_browse_pidl_sb(peb2, &ebev, 0, SBSP_PARENT, E_FAIL, 0, 0, 0, 0);
1452 test_browse_pidl(peb, &ebev, 0, SBSP_NAVIGATEFORWARD, E_FAIL, 0, 0, 0, 0);
1453 test_browse_pidl_sb(peb2, &ebev, 0, SBSP_NAVIGATEFORWARD, E_FAIL, 0, 0, 0, 0);
1454 test_browse_pidl(peb, &ebev, 0, SBSP_NAVIGATEBACK, E_FAIL, 0, 0, 0, 0);
1455 test_browse_pidl_sb(peb2, &ebev, 0, SBSP_NAVIGATEBACK, E_FAIL, 0, 0, 0, 0);
1456
1457 /* "The first browse is synchronous" */
1458 test_browse_pidl(peb, &ebev, pidl_child, SBSP_ABSOLUTE, S_OK, 1, 1, 0, 1);
1459 test_browse_pidl_sb(peb2, &ebev, pidl_child, SBSP_ABSOLUTE, S_OK, 1, 1, 0, 1);
1460
1461 /* Navigate empty history */
1462 test_browse_pidl(peb, &ebev, 0, SBSP_NAVIGATEFORWARD, S_OK, 0, 0, 0, 0);
1463 test_browse_pidl_sb(peb2, &ebev, 0, SBSP_NAVIGATEFORWARD, S_OK, 0, 0, 0, 0);
1464 test_browse_pidl(peb, &ebev, 0, SBSP_NAVIGATEBACK, S_OK, 0, 0, 0, 0);
1465 test_browse_pidl_sb(peb2, &ebev, 0, SBSP_NAVIGATEBACK, S_OK, 0, 0, 0, 0);
1466
1467 /* Navigate history */
1468 test_browse_pidl(peb, &ebev, 0, SBSP_PARENT, S_OK, 1, 1, 0, 1);
1469 test_browse_pidl_sb(peb2, &ebev, 0, SBSP_PARENT, S_OK, 1, 1, 0, 1);
1470 test_browse_pidl(peb, &ebev, 0, SBSP_NAVIGATEBACK, S_OK, 1, 1, 0, 1);
1471 test_browse_pidl_sb(peb2, &ebev, 0, SBSP_NAVIGATEBACK, S_OK, 1, 1, 0, 1);
1472 test_browse_pidl(peb, &ebev, 0, SBSP_NAVIGATEFORWARD, S_OK, 1, 1, 0, 1);
1473 test_browse_pidl_sb(peb2, &ebev, 0, SBSP_NAVIGATEFORWARD, S_OK, 1, 1, 0, 1);
1474 test_browse_pidl(peb, &ebev, 0, SBSP_ABSOLUTE, S_OK, 0, 0, 0, 0);
1475 test_browse_pidl_sb(peb2, &ebev, 0, SBSP_ABSOLUTE, S_OK, 0, 0, 0, 0);
1476
1477 /* Relative navigation */
1478 test_browse_pidl(peb, &ebev, pidl_current, SBSP_ABSOLUTE, S_OK, 1, 0, 0, 1);
1479 test_browse_pidl_sb(peb2, &ebev, pidl_current, SBSP_ABSOLUTE, S_OK, 1, 0, 0, 1);
1480
1481 hr = IExplorerBrowser_GetCurrentView(peb, &IID_IFolderView, (void**)&pfv);
1482 ok(hr == S_OK, "Got 0x%08x\n", hr);
1483 if(SUCCEEDED(hr))
1484 {
1485 LPITEMIDLIST pidl_relative;
1486
1487 hr = IFolderView_GetFolder(pfv, &IID_IShellFolder, (void**)&psf);
1488 ok(hr == S_OK, "Got 0x%08x\n", hr);
1489 hr = IShellFolder_ParseDisplayName(psf, NULL, NULL, (LPWSTR)testfolderW,
1490 NULL, &pidl_relative, NULL);
1491 ok(hr == S_OK, "Got 0x%08x\n", hr);
1492
1493 /* Browsing to another location here before using the
1494 * pidl_relative would make ExplorerBrowser in Windows 7 show a
1495 * not-available dialog. Also, passing a relative pidl without
1496 * specifying SBSP_RELATIVE makes it look for the pidl on the
1497 * desktop
1498 */
1499
1500 test_browse_pidl(peb, &ebev, pidl_relative, SBSP_RELATIVE, S_OK, 1, 1, 0, 1);
1501 test_browse_pidl_sb(peb2, &ebev, pidl_relative, SBSP_RELATIVE, S_OK, 1, 1, 0, 1);
1502
1503 ILFree(pidl_relative);
1504 IShellFolder_Release(psf);
1505 IFolderView_Release(pfv);
1506 }
1507
1508 /* misc **/
1509 test_browse_pidl(peb, &ebev, NULL, SBSP_ABSOLUTE, S_OK, 0, 0, 0, 0);
1510 test_browse_pidl_sb(peb2, &ebev, NULL, SBSP_ABSOLUTE, S_OK, 0, 0, 0, 0);
1511 test_browse_pidl(peb, &ebev, NULL, SBSP_DEFBROWSER, S_OK, 0, 0, 0, 0);
1512 test_browse_pidl_sb(peb2, &ebev, NULL, SBSP_DEFBROWSER, S_OK, 0, 0, 0, 0);
1513 test_browse_pidl(peb, &ebev, pidl_current, SBSP_SAMEBROWSER, S_OK, 1, 1, 0, 1);
1514 test_browse_pidl_sb(peb2, &ebev, pidl_current, SBSP_SAMEBROWSER, S_OK, 1, 1, 0, 1);
1515 test_browse_pidl(peb, &ebev, pidl_current, SBSP_SAMEBROWSER, S_OK, 1, 0, 0, 1);
1516 test_browse_pidl_sb(peb2, &ebev, pidl_current, SBSP_SAMEBROWSER, S_OK, 1, 0, 0, 1);
1517
1518 test_browse_pidl(peb, &ebev, pidl_current, SBSP_EXPLOREMODE, E_INVALIDARG, 0, 0, 0, 0);
1519 test_browse_pidl_sb(peb2, &ebev, pidl_current, SBSP_EXPLOREMODE, E_INVALIDARG, 0, 0, 0, 0);
1520 test_browse_pidl(peb, &ebev, pidl_current, SBSP_OPENMODE, S_OK, 1, 0, 0, 1);
1521 test_browse_pidl_sb(peb2, &ebev, pidl_current, SBSP_OPENMODE, S_OK, 1, 0, 0, 1);
1522
1523 /* SBSP_NEWBROWSER will return E_INVALIDARG, claims MSDN, but in
1524 * reality it works as one would expect (Windows 7 only?).
1525 */
1526 if(0)
1527 {
1528 IExplorerBrowser_BrowseToIDList(peb, NULL, SBSP_NEWBROWSER);
1529 }
1530
1531 hr = IExplorerBrowser_Unadvise(peb, cookie);
1532 ok(hr == S_OK, "Got 0x%08x\n", hr);
1533 IExplorerBrowser_Destroy(peb);
1534 process_msgs();
1535 hr = IExplorerBrowser_Unadvise(peb2, cookie2);
1536 ok(hr == S_OK, "Got 0x%08x\n", hr);
1537 IExplorerBrowser_Destroy(peb2);
1538 process_msgs();
1539
1540 /* Attempt browsing after destroyed */
1541 test_browse_pidl(peb, &ebev, pidl_child, SBSP_ABSOLUTE, HRESULT_FROM_WIN32(ERROR_BUSY), 0, 0, 0, 0);
1542 test_browse_pidl_sb(peb2, &ebev, pidl_child, SBSP_ABSOLUTE, HRESULT_FROM_WIN32(ERROR_BUSY), 0, 0, 0, 0);
1543
1544 lres = IExplorerBrowser_Release(peb);
1545 ok(lres == 0, "Got lres %d\n", lres);
1546 lres = IExplorerBrowser_Release(peb2);
1547 ok(lres == 0, "Got lres %d\n", lres);
1548
1549 /******************************************/
1550 /* Test some options that affect browsing */
1551
1553 hr = IExplorerBrowser_Advise(peb, &ebev.IExplorerBrowserEvents_iface, &cookie);
1554 ok(hr == S_OK, "Got 0x%08x\n", hr);
1555 hr = IExplorerBrowser_SetOptions(peb, EBO_NAVIGATEONCE);
1556 ok(hr == S_OK, "got (0x%08x)\n", hr);
1558
1559 test_browse_pidl(peb, &ebev, pidl_current, 0, S_OK, 1, 1, 0, 1);
1560 test_browse_pidl(peb, &ebev, pidl_current, 0, E_FAIL, 0, 0, 0, 0);
1561
1562 hr = IExplorerBrowser_SetOptions(peb, 0);
1563 ok(hr == S_OK, "got (0x%08x)\n", hr);
1564
1565 test_browse_pidl(peb, &ebev, pidl_current, 0, S_OK, 1, 0, 0, 1);
1566 test_browse_pidl(peb, &ebev, pidl_current, 0, S_OK, 1, 0, 0, 1);
1567
1568 /* Difference in behavior lies where? */
1569 hr = IExplorerBrowser_SetOptions(peb, EBO_ALWAYSNAVIGATE);
1570 ok(hr == S_OK, "got (0x%08x)\n", hr);
1571
1572 test_browse_pidl(peb, &ebev, pidl_current, 0, S_OK, 1, 0, 0, 1);
1573 test_browse_pidl(peb, &ebev, pidl_current, 0, S_OK, 1, 0, 0, 1);
1574
1575 hr = IExplorerBrowser_Unadvise(peb, cookie);
1576 ok(hr == S_OK, "Got 0x%08x\n", hr);
1577
1578 IExplorerBrowser_Destroy(peb);
1579 lres = IExplorerBrowser_Release(peb);
1580 ok(lres == 0, "Got lres %d\n", lres);
1581
1582 /* BrowseToObject tests */
1585
1586 /* Browse to the desktop by passing an IShellFolder */
1587 hr = SHGetDesktopFolder(&psf);
1588 ok(hr == S_OK, "Got 0x%08x\n", hr);
1589 if(SUCCEEDED(hr))
1590 {
1591 hr = IExplorerBrowser_BrowseToObject(peb, (IUnknown*)psf, SBSP_DEFBROWSER);
1592 ok(hr == S_OK, "got (0x%08x)\n", hr);
1593 if(hr == S_OK) process_msgs();
1594
1595 IShellFolder_Release(psf);
1596 }
1597
1598 /* Browse to the current directory by passing a ShellItem */
1599 hr = pSHCreateShellItem(NULL, NULL, pidl_current, &psi);
1600 ok(hr == S_OK, "Got 0x%08x\n", hr);
1601 if(SUCCEEDED(hr))
1602 {
1603 hr = IExplorerBrowser_BrowseToObject(peb, (IUnknown*)psi, SBSP_DEFBROWSER);
1604 ok(hr == S_OK, "got (0x%08x)\n", hr);
1605 process_msgs();
1606
1607 IShellItem_Release(psi);
1608 }
1609
1610 IExplorerBrowser_Destroy(peb);
1611 lres = IExplorerBrowser_Release(peb);
1612 ok(lres == 0, "Got lres %d\n", lres);
1613
1614 /* Cleanup */
1615 RemoveDirectoryW(child_path);
1616 ILFree(pidl_current);
1617 ILFree(pidl_child);
1618}
#define ERROR_BUSY
Definition: dderror.h:12
#define GetCurrentDirectoryW(x, y)
Definition: compat.h:756
#define lstrcpyW
Definition: compat.h:749
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:90
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
Definition: dir.c:732
static LPWSTR myPathAddBackslashW(LPWSTR lpszPath)
Definition: ebrowser.c:1327
#define test_browse_pidl(peb, ebev, pidl, uFlags, hr, p, cr, f, co)
Definition: ebrowser.c:1364
#define test_browse_pidl_sb(peb, ebev, pidl, uFlags, hr, p, cr, f, co)
Definition: ebrowser.c:1394
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
@ EBO_ALWAYSNAVIGATE
Definition: shobjidl.idl:2965
@ EBO_NAVIGATEONCE
Definition: shobjidl.idl:2963
Definition: cookie.c:34
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by START_TEST().

◆ test_QueryInterface()

static void test_QueryInterface ( void  )
static

Definition at line 558 of file ebrowser.c.

559{
560 IExplorerBrowser *peb;
561 IUnknown *punk;
562 HRESULT hr;
563 LONG lres;
564
565 hr = ebrowser_instantiate(&peb);
566 ok(hr == S_OK, "Got 0x%08x\n", hr);
567
568#define test_qinterface(iid, exp) \
569 do { \
570 hr = IExplorerBrowser_QueryInterface(peb, &iid, (void**)&punk); \
571 ok(hr == exp, "(%s:)Expected (0x%08x), got (0x%08x)\n", \
572 #iid, exp, hr); \
573 if(SUCCEEDED(hr)) IUnknown_Release(punk); \
574 } while(0)
575
577 test_qinterface(IID_IExplorerBrowser, S_OK);
578 test_qinterface(IID_IShellBrowser, S_OK);
580 test_qinterface(IID_ICommDlgBrowser, S_OK);
581 test_qinterface(IID_ICommDlgBrowser2, S_OK);
582 test_qinterface(IID_ICommDlgBrowser3, S_OK);
583 todo_wine test_qinterface(IID_IServiceProvider, S_OK);
589 test_qinterface(IID_IViewObjectEx, E_NOINTERFACE);
591 test_qinterface(IID_IShellView, E_NOINTERFACE);
592 test_qinterface(IID_INameSpaceTreeControlEvents, E_NOINTERFACE);
593
594#undef test_qinterface
595
596 lres = IExplorerBrowser_Release(peb);
597 ok(lres == 0, "Got %d\n", lres);
598}
#define test_qinterface(iid, exp)
const IID IID_IObjectWithSite
const GUID IID_IViewObject
const GUID IID_IConnectionPointContainer
const GUID IID_IConnectionPoint
const GUID IID_IOleWindow
const GUID IID_IViewObject2
const GUID IID_IOleObject

Referenced by START_TEST().

◆ test_SB_misc()

static void test_SB_misc ( void  )
static

Definition at line 600 of file ebrowser.c.

601{
602 IExplorerBrowser *peb;
603 IShellBrowser *psb;
604 IUnknown *punk;
605 HRESULT hr;
606 HWND retHwnd;
607 LRESULT lres;
608 LONG ref;
609
611 hr = IExplorerBrowser_QueryInterface(peb, &IID_IShellBrowser, (void**)&psb);
612 ok(hr == S_OK, "Got 0x%08x\n", hr);
613 if(FAILED(hr))
614 {
615 skip("Failed to get IShellBrowser interface.\n");
616 return;
617 }
618
619 /* Some unimplemented methods */
620 retHwnd = (HWND)0xdeadbeef;
621 hr = IShellBrowser_GetControlWindow(psb, FCW_TOOLBAR, &retHwnd);
622 ok(hr == E_NOTIMPL, "got (0x%08x)\n", hr);
623 ok(retHwnd == NULL || broken(retHwnd == (HWND)0xdeadbeef), "got %p\n", retHwnd);
624
625 retHwnd = (HWND)0xdeadbeef;
626 hr = IShellBrowser_GetControlWindow(psb, FCW_STATUS, &retHwnd);
627 ok(hr == E_NOTIMPL, "got (0x%08x)\n", hr);
628 ok(retHwnd == NULL || broken(retHwnd == (HWND)0xdeadbeef), "got %p\n", retHwnd);
629
630 retHwnd = (HWND)0xdeadbeef;
631 hr = IShellBrowser_GetControlWindow(psb, FCW_TREE, &retHwnd);
632 ok(hr == E_NOTIMPL, "got (0x%08x)\n", hr);
633 ok(retHwnd == NULL || broken(retHwnd == (HWND)0xdeadbeef), "got %p\n", retHwnd);
634
635 retHwnd = (HWND)0xdeadbeef;
636 hr = IShellBrowser_GetControlWindow(psb, FCW_PROGRESS, &retHwnd);
637 ok(hr == E_NOTIMPL, "got (0x%08x)\n", hr);
638 ok(retHwnd == NULL || broken(retHwnd == (HWND)0xdeadbeef), "got %p\n", retHwnd);
639
640 /* ::InsertMenuSB */
641 hr = IShellBrowser_InsertMenusSB(psb, NULL, NULL);
642 ok(hr == E_NOTIMPL, "got (0x%08x)\n", hr);
643
644 /* ::RemoveMenusSB */
645 hr = IShellBrowser_RemoveMenusSB(psb, NULL);
646 ok(hr == E_NOTIMPL, "got (0x%08x)\n", hr);
647
648 /* ::SetMenuSB */
649 hr = IShellBrowser_SetMenuSB(psb, NULL, NULL, NULL);
650 ok(hr == E_NOTIMPL, "got (0x%08x)\n", hr);
651
652 /***** Before EB::Initialize *****/
653
654 /* ::GetWindow */
655 retHwnd = (HWND)0xDEADBEEF;
656 hr = IShellBrowser_GetWindow(psb, &retHwnd);
657 ok(hr == E_FAIL, "got (0x%08x)\n", hr);
658 ok(retHwnd == (HWND)0xDEADBEEF, "HWND overwritten\n");
659
661 {
662
663 /* ::SendControlMsg */
664 lres = 0xDEADBEEF;
665 hr = IShellBrowser_SendControlMsg(psb, FCW_STATUS, 0, 0, 0, &lres);
666 ok(hr == S_OK, "got (0x%08x)\n", hr);
667 ok(lres == 0, "lres was %ld\n", lres);
668
669 lres = 0xDEADBEEF;
670 hr = IShellBrowser_SendControlMsg(psb, FCW_TOOLBAR, TB_CHECKBUTTON,
671 FCIDM_TB_SMALLICON, TRUE, &lres);
672 ok(hr == S_OK, "got (0x%08x)\n", hr);
673 ok(lres == 0, "lres was %ld\n", lres);
674
675 hr = IShellBrowser_SendControlMsg(psb, FCW_STATUS, 0, 0, 0, NULL);
676 ok(hr == S_OK, "got (0x%08x)\n", hr);
677
678 hr = IShellBrowser_SendControlMsg(psb, FCW_TREE, 0, 0, 0, NULL);
679 ok(hr == S_OK, "got (0x%08x)\n", hr);
680
681 hr = IShellBrowser_SendControlMsg(psb, FCW_PROGRESS, 0, 0, 0, NULL);
682 ok(hr == S_OK, "got (0x%08x)\n", hr);
683 }
684
685 /* ::QueryActiveShellView */
686 hr = IShellBrowser_QueryActiveShellView(psb, (IShellView**)&punk);
687 ok(hr == E_FAIL, "got (0x%08x)\n", hr);
688
689 /* Initialize ExplorerBrowser */
691
692 /***** After EB::Initialize *****/
693
694 /* ::GetWindow */
695 hr = IShellBrowser_GetWindow(psb, &retHwnd);
696 ok(hr == S_OK, "got (0x%08x)\n", hr);
697 ok(GetParent(retHwnd) == hwnd, "The HWND returned is not our child.\n");
698
700 {
701 /* ::SendControlMsg */
702 hr = IShellBrowser_SendControlMsg(psb, FCW_STATUS, 0, 0, 0, NULL);
703 ok(hr == S_OK, "got (0x%08x)\n", hr);
704
705 lres = 0xDEADBEEF;
706 hr = IShellBrowser_SendControlMsg(psb, FCW_TOOLBAR, 0, 0, 0, &lres);
707 ok(hr == S_OK, "got (0x%08x)\n", hr);
708 ok(lres == 0, "lres was %ld\n", lres);
709
710 lres = 0xDEADBEEF;
711 hr = IShellBrowser_SendControlMsg(psb, FCW_STATUS, 0, 0, 0, &lres);
712 ok(hr == S_OK, "got (0x%08x)\n", hr);
713 ok(lres == 0, "lres was %ld\n", lres);
714
715 lres = 0xDEADBEEF;
716 hr = IShellBrowser_SendControlMsg(psb, 1234, 0, 0, 0, &lres);
717 ok(hr == S_OK, "got (0x%08x)\n", hr);
718 ok(lres == 0, "lres was %ld\n", lres);
719
720 /* Returns S_OK */
721 hr = IShellBrowser_SetStatusTextSB(psb, NULL);
722 ok(hr == S_OK, "got (0x%08x)\n", hr);
723
724 hr = IShellBrowser_ContextSensitiveHelp(psb, FALSE);
725 ok(hr == S_OK, "got (0x%08x)\n", hr);
726
727 hr = IShellBrowser_EnableModelessSB(psb, TRUE);
728 ok(hr == S_OK, "got (0x%08x)\n", hr);
729
730 hr = IShellBrowser_SetToolbarItems(psb, NULL, 1, 1);
731 ok(hr == S_OK, "got (0x%08x)\n", hr);
732 }
733
734 hr = IShellBrowser_QueryActiveShellView(psb, (IShellView**)&punk);
735 ok(hr == E_FAIL, "got (0x%08x)\n", hr);
736
737 IShellBrowser_Release(psb);
738 IExplorerBrowser_Destroy(peb);
739 IExplorerBrowser_Release(peb);
740
741 /* Browse to the desktop. */
744 IExplorerBrowser_QueryInterface(peb, &IID_IShellBrowser, (void**)&psb);
745
746 process_msgs();
748 ok(hr == S_OK, "got (0x%08x)\n", hr);
749 process_msgs();
750
751 /****** After Browsing *****/
752
753 hr = IShellBrowser_QueryActiveShellView(psb, (IShellView**)&punk);
754 ok(hr == S_OK, "got (0x%08x)\n", hr);
755 if(SUCCEEDED(hr)) IUnknown_Release(punk);
756
757 IShellBrowser_Release(psb);
758 IExplorerBrowser_Destroy(peb);
759 ref = IExplorerBrowser_Release(peb);
760 ok(ref == 0, "Got %d\n", ref);
761}
HANDLE HWND
Definition: compat.h:19
#define TB_CHECKBUTTON
Definition: commctrl.h:1043
#define FCIDM_TB_SMALLICON
Definition: shresdef.h:857
LONG_PTR LRESULT
Definition: windef.h:209

Referenced by START_TEST().

◆ test_SetSite()

static void test_SetSite ( void  )
static

Definition at line 920 of file ebrowser.c.

921{
922 IExplorerBrowser *peb;
927 HRESULT hr;
928 LONG ref;
929 UINT i;
930 struct services expected[] = {
931 /* Win 7 */
932 { &SID_STopLevelBrowser, &IID_ICommDlgBrowser2, 0, cdbimpl },
933 { &SID_STopLevelBrowser, &IID_IShellBrowserService, 0, NULL },
934 { &SID_STopLevelBrowser, &IID_IShellBrowser, 0, NULL },
935 { &SID_STopLevelBrowser, &IID_UnknownInterface8, 0, NULL },
936 { &SID_STopLevelBrowser, &IID_IConnectionPointContainer, 0, NULL },
937 { &SID_STopLevelBrowser, &IID_IProfferService, 0, NULL },
938 { &SID_STopLevelBrowser, &IID_UnknownInterface9, 0, NULL },
939 { &SID_ExplorerPaneVisibility, &IID_IExplorerPaneVisibility, 0, epvimpl },
940 { &SID_SExplorerBrowserFrame, &IID_ICommDlgBrowser2, 0, cdbimpl },
941 { &SID_SExplorerBrowserFrame, &IID_ICommDlgBrowser3, 0, cdbimpl },
942 { &IID_IFileDialogPrivate, &IID_IFileDialogPrivate, 0, NULL },
943 { &IID_IFileDialogPrivate, &IID_IFileDialog, 0, NULL },
944 { &IID_IShellTaskScheduler, &IID_IShellTaskScheduler, 0, NULL },
945 { &IID_IShellTaskScheduler, &IID_UnknownInterface2, 0, NULL },
946 { &IID_IWebbrowserApp, &IID_IConnectionPointContainer, 0, NULL },
947 { &IID_IFolderView, &IID_IFolderView, 0, NULL },
948 { &IID_ILayoutModifier, &IID_ILayoutModifier, 0, NULL },
949 { &IID_IBrowserSettings, &IID_IBrowserSettings, 0, NULL },
950 { &CLSID_Desktop, &IID_IUnknown, 0, NULL },
951 { &IID_UnknownInterface1, &IID_UnknownInterface1, 0, NULL },
952 { &IID_UnknownInterface3, &IID_UnknownInterface3, 0, NULL },
953 { &IID_UnknownInterface4, &IID_IUnknown, 0, NULL },
954 { &IID_UnknownInterface6, &IID_UnknownInterface7, 0, NULL },
955 { &IID_IBrowserWithActivationNotification, &IID_IBrowserWithActivationNotification, 0, NULL },
956 /* Win 8 */
957 { &IID_ICommDlgBrowser, &IID_UnknownInterface11, 0, NULL },
958 { &IID_ICommDlgBrowser, &IID_UnknownInterface12, 0, NULL },
959 { &IID_ICommDlgBrowser, &IID_UnknownInterface20, 0, NULL },
960 { &IID_UnknownInterface13, &IID_IUnknown, 0, NULL },
961 { &IID_UnknownInterface13, &IID_UnknownInterface13, 0, NULL },
962 { &IID_UnknownInterface13, &IID_UnknownInterface18, 0, NULL },
963 { &IID_UnknownInterface14, &IID_UnknownInterface14, 0, NULL },
964 { &IID_UnknownInterface15, &IID_UnknownInterface15, 0, NULL },
965 { &IID_UnknownInterface16, &IID_UnknownInterface16, 0, NULL },
966 { &IID_UnknownInterface17, &IID_UnknownInterface17, 0, NULL },
967 { &IID_UnknownInterface17, &IID_UnknownInterface19, 0, NULL },
968 /* Win 10 */
969 { &IID_UnknownInterface21, &IID_UnknownInterface21, 0, NULL },
970 { &IID_UnknownInterface21, &IID_IFileDialog, 0, NULL },
971 { &IID_UnknownInterface22, &IID_UnknownInterface22, 0, NULL },
972 { &IID_UnknownInterface23, &IID_UnknownInterface23, 0, NULL },
973 { &IID_UnknownInterface24, &IID_UnknownInterface24, 0, NULL },
974 { &IID_UnknownInterface24, &IID_IFileDialog, 0, NULL },
975
976 /* Other services requested in Vista, Windows 2008 but not in Windows 7 */
977 { &IID_IBrowserSettings_Vista, &IID_IBrowserSettings_Vista, 0, NULL },
978 { &IID_IFolderTypeModifier, &IID_IFolderTypeModifier, 0, NULL },
979 { &SID_STopLevelBrowser, &IID_IShellBrowserService_Vista, 0, NULL },
980 { &IID_UnknownInterface5, &IID_UnknownInterface5, 0, NULL },
981 { &IID_ICommDlgBrowser, &IID_ICommDlgBrowser, 0, cdbimpl },
982 { &IID_IFileDialogPrivate_Vista,&IID_IFileDialogPrivate_Vista, 0, NULL},
983 { &IID_IFileDialogPrivate_Vista,&IID_IFileDialog, 0, NULL},
984 { &IID_UnknownInterface10, &IID_IHTMLDocument2, 0, NULL},
985 { &SID_SMenuBandParent, &IID_IOleCommandTarget, 0, NULL},
986 { &SID_SMenuBandParent, &IID_IShellMenu, 0, NULL},
987 { &SID_STopLevelBrowser, &IID_IOleWindow, 0, NULL},
988 { &SID_SMenuPopup, &IID_IOleCommandTarget, 0, NULL},
989 { NULL }
990 };
991
993 IExplorerBrowser_SetOptions(peb, EBO_SHOWFRAMES);
994
995 hr = IExplorerBrowser_QueryInterface(peb, &IID_IObjectWithSite, (void**)&pow);
996 ok(hr == S_OK, "Got 0x%08x\n", hr);
997 if(SUCCEEDED(hr))
998 {
999 spimpl->interfaces = expected;
1000
1001 hr = IObjectWithSite_SetSite(pow, (IUnknown*)&spimpl->IServiceProvider_iface);
1002 ok(hr == S_OK, "Got 0x%08x\n", hr);
1003
1004 if(FAILED(hr))
1005 IObjectWithSite_Release(pow);
1006 }
1007
1008 if(FAILED(hr))
1009 {
1010 skip("Failed to set site.\n");
1011
1012 IServiceProvider_Release(&spimpl->IServiceProvider_iface);
1013 ICommDlgBrowser3_Release(&cdbimpl->ICommDlgBrowser3_iface);
1014 IExplorerPaneVisibility_Release(&epvimpl->IExplorerPaneVisibility_iface);
1015 IExplorerBrowser_Destroy(peb);
1016 ref = IExplorerBrowser_Release(peb);
1017 ok(ref == 0, "Got ref %d\n", ref);
1018
1019 return;
1020 }
1021
1025
1026 for(i = 0; i < 10; i++)
1027 {
1028 Sleep(100);
1029 process_msgs();
1030 }
1032
1033 /* ICommDlgBrowser3 */
1034 ok(!cdbimpl->OnDefaultCommand, "Got %d\n", cdbimpl->OnDefaultCommand);
1035 todo_wine ok(cdbimpl->OnStateChange, "Got %d\n", cdbimpl->OnStateChange);
1036 ok(cdbimpl->IncludeObject, "Got %d\n", cdbimpl->IncludeObject);
1037 ok(!cdbimpl->Notify, "Got %d\n", cdbimpl->Notify);
1038 ok(!cdbimpl->GetDefaultMenuText, "Got %d\n", cdbimpl->GetDefaultMenuText);
1039 todo_wine ok(cdbimpl->GetViewFlags, "Got %d\n", cdbimpl->GetViewFlags);
1040 ok(!cdbimpl->OnColumnClicked, "Got %d\n", cdbimpl->OnColumnClicked);
1041 ok(!cdbimpl->GetCurrentFilter, "Got %d\n", cdbimpl->GetCurrentFilter);
1042 todo_wine ok(cdbimpl->OnPreviewCreated, "Got %d\n", cdbimpl->OnPreviewCreated);
1043
1044 /* IExplorerPaneVisibility */
1045 ok(epvimpl->np, "Got %d\n", epvimpl->np);
1046 todo_wine ok(epvimpl->cp, "Got %d\n", epvimpl->cp);
1047 todo_wine ok(epvimpl->cp_o, "Got %d\n", epvimpl->cp_o);
1048 todo_wine ok(epvimpl->cp_v, "Got %d\n", epvimpl->cp_v);
1049 todo_wine ok(epvimpl->dp, "Got %d\n", epvimpl->dp);
1050 todo_wine ok(epvimpl->pp, "Got %d\n", epvimpl->pp);
1051 ok(!epvimpl->qp, "Got %d\n", epvimpl->qp);
1052 ok(!epvimpl->aqp, "Got %d\n", epvimpl->aqp);
1053 ok(!epvimpl->unk, "Got %d\n", epvimpl->unk);
1054
1055 if(0)
1056 {
1057 for(i = 0; expected[i].service != NULL; i++)
1058 if(!expected[i].count) trace("count %d was 0.\n", i);
1059 }
1060
1061 /* Test when IServiceProvider is released. */
1062 IServiceProvider_AddRef(&spimpl->IServiceProvider_iface);
1063 ref = IServiceProvider_Release(&spimpl->IServiceProvider_iface);
1064 ok(ref == 2, "Got ref %d\n", ref);
1065
1066 hr = IObjectWithSite_SetSite(pow, NULL);
1067 ok(hr == S_OK, "Got 0x%08x\n", hr);
1068
1069 IServiceProvider_AddRef(&spimpl->IServiceProvider_iface);
1070 ref = IServiceProvider_Release(&spimpl->IServiceProvider_iface);
1071 ok(ref == 1, "Got ref %d\n", ref);
1072
1073 hr = IObjectWithSite_SetSite(pow, (IUnknown*)&spimpl->IServiceProvider_iface);
1074 ok(hr == S_OK, "Got 0x%08x\n", hr);
1075
1076 IServiceProvider_AddRef(&spimpl->IServiceProvider_iface);
1077 ref = IServiceProvider_Release(&spimpl->IServiceProvider_iface);
1078 ok(ref == 2, "Got ref %d\n", ref);
1079
1080 IExplorerBrowser_Destroy(peb);
1081
1082 IServiceProvider_AddRef(&spimpl->IServiceProvider_iface);
1083 ref = IServiceProvider_Release(&spimpl->IServiceProvider_iface);
1084 ok(ref == 2, "Got ref %d\n", ref);
1085
1086 IObjectWithSite_Release(pow);
1087 ref = IExplorerBrowser_Release(peb);
1088 ok(ref == 0, "Got ref %d\n", ref);
1089
1090 ref = IServiceProvider_Release(&spimpl->IServiceProvider_iface);
1091 ok(ref == 0, "Got ref %d\n", ref);
1092
1093 ref = ICommDlgBrowser3_Release(&cdbimpl->ICommDlgBrowser3_iface);
1094 ok(ref == 0, "Got ref %d\n", ref);
1095 ref = IExplorerPaneVisibility_Release(&epvimpl->IExplorerPaneVisibility_iface);
1096 ok(ref == 0, "Got ref %d\n", ref);
1097}
static ICommDlgBrowser3Impl * create_commdlgbrowser3(void)
Definition: ebrowser.c:439
static IExplorerPaneVisibilityImpl * create_explorerpanevisibility(void)
Definition: ebrowser.c:285
static IServiceProviderImpl * create_serviceprovider(void)
Definition: ebrowser.c:550
double pow(double x, double y)
Definition: freeldr.c:112
GLuint GLuint GLsizei count
Definition: gl.h:1545
BOOL expected
Definition: store.c:2063
@ EBO_SHOWFRAMES
Definition: shobjidl.idl:2964
IServiceProvider IServiceProvider_iface
Definition: ebrowser.c:454
struct IServiceProviderImpl::services * interfaces
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)

Referenced by START_TEST().

Variable Documentation

◆ cdbvtbl

const ICommDlgBrowser3Vtbl cdbvtbl
static
Initial value:
=
{
}
static HRESULT WINAPI ICommDlgBrowser3_fnOnColumnClicked(ICommDlgBrowser3 *iface, IShellView *ppshv, int iColumn)
Definition: ebrowser.c:394
static HRESULT WINAPI ICommDlgBrowser3_fnGetDefaultMenuText(ICommDlgBrowser3 *iface, IShellView *ppshv, LPWSTR pszText, int cchMax)
Definition: ebrowser.c:374
static HRESULT WINAPI ICommDlgBrowser3_fnGetCurrentFilter(ICommDlgBrowser3 *iface, LPWSTR pszFileSpec, int cchFileSpec)
Definition: ebrowser.c:404
static HRESULT WINAPI ICommDlgBrowser3_fnQueryInterface(ICommDlgBrowser3 *iface, REFIID riid, LPVOID *ppvObj)
Definition: ebrowser.c:313
static ULONG WINAPI ICommDlgBrowser3_fnAddRef(ICommDlgBrowser3 *iface)
Definition: ebrowser.c:320
static HRESULT WINAPI ICommDlgBrowser3_fnOnDefaultCommand(ICommDlgBrowser3 *iface, IShellView *shv)
Definition: ebrowser.c:337
static HRESULT WINAPI ICommDlgBrowser3_fnOnPreviewCreated(ICommDlgBrowser3 *iface, IShellView *ppshv)
Definition: ebrowser.c:414
static HRESULT WINAPI ICommDlgBrowser3_fnNotify(ICommDlgBrowser3 *iface, IShellView *ppshv, DWORD dwNotifyType)
Definition: ebrowser.c:364
static HRESULT WINAPI ICommDlgBrowser3_fnIncludeObject(ICommDlgBrowser3 *iface, IShellView *shv, LPCITEMIDLIST pidl)
Definition: ebrowser.c:354
static HRESULT WINAPI ICommDlgBrowser3_fnGetViewFlags(ICommDlgBrowser3 *iface, DWORD *pdwFlags)
Definition: ebrowser.c:385
static HRESULT WINAPI ICommDlgBrowser3_fnOnStateChange(ICommDlgBrowser3 *iface, IShellView *shv, ULONG uChange)
Definition: ebrowser.c:344
static ULONG WINAPI ICommDlgBrowser3_fnRelease(ICommDlgBrowser3 *iface)
Definition: ebrowser.c:326

Definition at line 423 of file ebrowser.c.

Referenced by create_commdlgbrowser3().

◆ ebev

◆ ebevents

const IExplorerBrowserEventsVtbl ebevents
static
Initial value:
=
{
}
static HRESULT WINAPI IExplorerBrowserEvents_fnOnNavigationComplete(IExplorerBrowserEvents *iface, PCIDLIST_ABSOLUTE pidlFolder)
Definition: ebrowser.c:174
static ULONG WINAPI IExplorerBrowserEvents_fnRelease(IExplorerBrowserEvents *iface)
Definition: ebrowser.c:160
static ULONG WINAPI IExplorerBrowserEvents_fnAddRef(IExplorerBrowserEvents *iface)
Definition: ebrowser.c:154
static HRESULT WINAPI IExplorerBrowserEvents_fnQueryInterface(IExplorerBrowserEvents *iface, REFIID riid, void **ppvObj)
Definition: ebrowser.c:147
static HRESULT WINAPI IExplorerBrowserEvents_fnOnNavigationPending(IExplorerBrowserEvents *iface, PCIDLIST_ABSOLUTE pidlFolder)
Definition: ebrowser.c:166
static HRESULT WINAPI IExplorerBrowserEvents_fnOnViewCreated(IExplorerBrowserEvents *iface, IShellView *psv)
Definition: ebrowser.c:188
static HRESULT WINAPI IExplorerBrowserEvents_fnOnNavigationFailed(IExplorerBrowserEvents *iface, PCIDLIST_ABSOLUTE pidlFolder)
Definition: ebrowser.c:181

Definition at line 196 of file ebrowser.c.

Referenced by test_Advise(), and test_navigation().

◆ epvvt

const IExplorerPaneVisibilityVtbl epvvt
static
Initial value:
=
{
}
static HRESULT WINAPI IExplorerPaneVisibility_fnGetPaneState(IExplorerPaneVisibility *iface, REFEXPLORERPANE ep, EXPLORERPANESTATE *peps)
Definition: ebrowser.c:248
static HRESULT WINAPI IExplorerPaneVisibility_fnQueryInterface(IExplorerPaneVisibility *iface, REFIID riid, LPVOID *ppvObj)
Definition: ebrowser.c:223
static ULONG WINAPI IExplorerPaneVisibility_fnRelease(IExplorerPaneVisibility *iface)
Definition: ebrowser.c:237
static ULONG WINAPI IExplorerPaneVisibility_fnAddRef(IExplorerPaneVisibility *iface)
Definition: ebrowser.c:231

Definition at line 277 of file ebrowser.c.

Referenced by create_explorerpanevisibility().

◆ hwnd

HWND hwnd
static

Definition at line 80 of file ebrowser.c.

Referenced by test_InputObject().

◆ LPCITEMIDLIST

Definition at line 82 of file ebrowser.c.

◆ SFGAOF

◆ spvtbl

const IServiceProviderVtbl spvtbl
static
Initial value:
=
{
}
static ULONG WINAPI IServiceProvider_fnRelease(IServiceProvider *iface)
Definition: ebrowser.c:495
static HRESULT WINAPI IServiceProvider_fnQueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
Definition: ebrowser.c:506
static HRESULT WINAPI IServiceProvider_fnQueryInterface(IServiceProvider *iface, REFIID riid, LPVOID *ppvObj)
Definition: ebrowser.c:469
static ULONG WINAPI IServiceProvider_fnAddRef(IServiceProvider *iface)
Definition: ebrowser.c:489

Definition at line 542 of file ebrowser.c.

Referenced by create_serviceprovider().