ReactOS 0.4.17-dev-470-gf9e3448
misc.c File Reference
#include <wine/test.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
#include "windef.h"
#include "winbase.h"
#include "ole2.h"
#include "urlmon.h"
#include "initguid.h"
Include dependency graph for misc.c:

Go to the source code of this file.

Classes

struct  parse_test
 
struct  RefUnk
 

Macros

#define COBJMACROS
 
#define CONST_VTABLE
 
#define DEFINE_EXPECT(func)    static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
 
#define SET_EXPECT(func)    expect_ ## func = TRUE
 
#define CHECK_EXPECT(func)
 
#define CHECK_EXPECT2(func)
 
#define CHECK_CALLED(func)
 

Functions

 DEFINE_GUID (CLSID_AboutProtocol, 0x3050F406, 0x98B5, 0x11CF, 0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B)
 
 DEFINE_EXPECT (ParseUrl)
 
 DEFINE_EXPECT (ParseUrl_ENCODE)
 
 DEFINE_EXPECT (ParseUrl_UNESCAPE)
 
 DEFINE_EXPECT (QI_IInternetProtocolInfo)
 
 DEFINE_EXPECT (CreateInstance)
 
 DEFINE_EXPECT (unk_Release)
 
static HRESULT (WINAPI *pCoInternetCompareUrl)(LPCWSTR
 
static WCHAR **static WCHARa2co (const char *str)
 
static void test_CreateFormatEnum (void)
 
static void test_RegisterFormatEnumerator (void)
 
static void test_CoInternetParseUrl (void)
 
static void test_CoInternetCompareUrl (void)
 
static void test_CoInternetQueryInfo (void)
 
static void test_FindMimeFromData (void)
 
static void register_protocols (void)
 
static HRESULT WINAPI InternetProtocolInfo_QueryInterface (IInternetProtocolInfo *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI InternetProtocolInfo_AddRef (IInternetProtocolInfo *iface)
 
static ULONG WINAPI InternetProtocolInfo_Release (IInternetProtocolInfo *iface)
 
static HRESULT WINAPI InternetProtocolInfo_ParseUrl (IInternetProtocolInfo *iface, LPCWSTR pwzUrl, PARSEACTION ParseAction, DWORD dwParseFlags, LPWSTR pwzResult, DWORD cchResult, DWORD *pcchResult, DWORD dwReserved)
 
static HRESULT WINAPI InternetProtocolInfo_CombineUrl (IInternetProtocolInfo *iface, LPCWSTR pwzBaseUrl, LPCWSTR pwzRelativeUrl, DWORD dwCombineFlags, LPWSTR pwzResult, DWORD cchResult, DWORD *pcchResult, DWORD dwReserved)
 
static HRESULT WINAPI InternetProtocolInfo_CompareUrl (IInternetProtocolInfo *iface, LPCWSTR pwzUrl1, LPCWSTR pwzUrl2, DWORD dwCompareFlags)
 
static HRESULT WINAPI InternetProtocolInfo_QueryInfo (IInternetProtocolInfo *iface, LPCWSTR pwzUrl, QUERYOPTION OueryOption, DWORD dwQueryFlags, LPVOID pBuffer, DWORD cbBuffer, DWORD *pcbBuf, DWORD dwReserved)
 
static HRESULT WINAPI ClassFactory_QueryInterface (IClassFactory *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI ClassFactory_AddRef (IClassFactory *iface)
 
static ULONG WINAPI ClassFactory_Release (IClassFactory *iface)
 
static HRESULT WINAPI ClassFactory_CreateInstance (IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppv)
 
static HRESULT WINAPI ProtocolCF_CreateInstance (IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppv)
 
static HRESULT WINAPI ClassFactory_LockServer (IClassFactory *iface, BOOL dolock)
 
static void test_NameSpace (void)
 
static void test_MimeFilter (void)
 
static ULONG WINAPI unk_Release (IUnknown *iface)
 
static void test_ReleaseBindInfo (void)
 
static void test_CopyStgMedium (void)
 
static void test_CopyBindInfo (void)
 
static void test_UrlMkGetSessionOption (void)
 
static size_t check_prefix (const char *str, const char *prefix)
 
static void test_user_agent (void)
 
static void test_MkParseDisplayNameEx (void)
 
static void test_IsValidURL (void)
 
static void test_internet_feature_defaults (void)
 
static void test_internet_features_registry (void)
 
static void test_CoInternetIsFeatureEnabled (void)
 
static void test_CoInternetSetFeatureEnabled (void)
 
static void test_internet_features (void)
 
static HRESULT WINAPI BindStatusCallback_QueryInterface (IBindStatusCallbackEx *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI BindStatusCallback_AddRef (IBindStatusCallbackEx *iface)
 
static ULONG WINAPI BindStatusCallback_Release (IBindStatusCallbackEx *iface)
 
static HRESULT WINAPI BindStatusCallback_OnStartBinding (IBindStatusCallbackEx *iface, DWORD dwReserved, IBinding *pib)
 
static HRESULT WINAPI BindStatusCallback_GetPriority (IBindStatusCallbackEx *iface, LONG *pnPriority)
 
static HRESULT WINAPI BindStatusCallback_OnLowResource (IBindStatusCallbackEx *iface, DWORD reserved)
 
static HRESULT WINAPI BindStatusCallback_OnProgress (IBindStatusCallbackEx *iface, ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
 
static HRESULT WINAPI BindStatusCallback_OnStopBinding (IBindStatusCallbackEx *iface, HRESULT hresult, LPCWSTR szError)
 
static HRESULT WINAPI BindStatusCallback_GetBindInfo (IBindStatusCallbackEx *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
 
static HRESULT WINAPI BindStatusCallback_OnDataAvailable (IBindStatusCallbackEx *iface, DWORD grfBSCF, DWORD dwSize, FORMATETC *pformatetc, STGMEDIUM *pstgmed)
 
static HRESULT WINAPI BindStatusCallback_OnObjectAvailable (IBindStatusCallbackEx *iface, REFIID riid, IUnknown *punk)
 
static HRESULT WINAPI BindStatusCallbackEx_GetBindInfoEx (IBindStatusCallbackEx *iface, DWORD *grfBINDF, BINDINFO *pbindinfo, DWORD *grfBINDF2, DWORD *pdwReserved)
 
static RefUnkimpl_from_IUnknown (IUnknown *iface)
 
static HRESULT WINAPI RefUnk_QueryInterface (IUnknown *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI RefUnk_AddRef (IUnknown *iface)
 
static ULONG WINAPI RefUnk_Release (IUnknown *iface)
 
static DWORD WINAPI bsc_thread (void *arg)
 
static void test_bsc_marshaling (void)
 
static void test_MapBrowserEmulationModeToUserAgent (BOOL custom_ua)
 
 START_TEST (misc)
 

Variables

static LPCWSTR
 
static DWORD
 
static LPWSTR PSUACTION
 
static PARSEACTION
 
static LPWSTR
 
static QUERYOPTION
 
static LPVOID
 
static LPSTR
 
static BOOL
 
static const WCHAR url1 []
 
static const WCHAR url2 [] = {'i','n','d','e','x','.','h','t','m',0}
 
static const WCHAR url3 [] = {'f','i','l','e',':','/','/','c',':','\\','I','n','d','e','x','.','h','t','m',0}
 
static const WCHAR url4 []
 
static const WCHAR url5 []
 
static const WCHAR url6 [] = {'a','b','o','u','t',':','b','l','a','n','k',0}
 
static const WCHAR url7 []
 
static const WCHAR url8 [] = {'t','e','s','t',':','1','2','3','a','b','c',0}
 
static const WCHAR url9 []
 
static const WCHAR url10 []
 
static const WCHAR url4e []
 
static const WCHAR path3 [] = {'c',':','\\','I','n','d','e','x','.','h','t','m',0}
 
static const WCHAR path4 [] = {'s','o','m','e',' ','f','i','l','e','.','j','p','g',0}
 
static const WCHAR wszRes [] = {'r','e','s',0}
 
static const WCHAR wszFile [] = {'f','i','l','e',0}
 
static const WCHAR wszHttp [] = {'h','t','t','p',0}
 
static const WCHAR wszAbout [] = {'a','b','o','u','t',0}
 
static const WCHAR wszEmpty [] = {0}
 
static const WCHAR wszGoogle [] = {'g','o','o','g','l','e','.','*','.','c','o','m',0}
 
static const WCHAR wszWineHQ [] = {'w','w','w','.','w','i','n','e','h','q','.','o','r','g',0}
 
static const WCHAR wszHttpWineHQ []
 
static const WCHAR wszHttpGoogle []
 
static const struct parse_test parse_tests []
 
struct {
   LPCWSTR   url
 
   DWORD   uses_net
 
query_info_tests []
 
struct {
   const WCHAR *   url
 
   const WCHAR *   mime
 
   HRESULT   hres
 
   BOOL   broken_failure
 
   const WCHAR *   broken_mime
 
mime_tests []
 
static BYTE data1 [] = "test data\n"
 
static BYTE data2 [] = {31,'t','e','s',0xfa,'t',' ','d','a','t','a','\n',0}
 
static BYTE data3 [] = {0,0,0}
 
static BYTE data4 [] = {'t','e','s',0xfa,'t',' ','d','a','t','a','\n',0,0}
 
static BYTE data5 [] = {0xa,0xa,0xa,'x',32,'x',0}
 
static BYTE data6 [] = {0xfa,0xfa,0xfa,0xfa,'\n','\r','\t','x','x','x',1}
 
static BYTE data7 [] = "<html>blahblah"
 
static BYTE data8 [] = {'t','e','s',0xfa,'t',' ','<','h','t','m','l','>','d','a','t','a','\n',0,0}
 
static BYTE data9 [] = {'t','e',0,'s',0xfa,'t',' ','<','h','t','m','l','>','d','a','t','a','\n',0,0}
 
static BYTE data10 [] = "<HtmL>blahblah"
 
static BYTE data11 [] = "blah<HTML>blahblah"
 
static BYTE data12 [] = "blah<HTMLblahblah"
 
static BYTE data13 [] = "blahHTML>blahblah"
 
static BYTE data14 [] = "blah<HTMblahblah"
 
static BYTE data15 [] = {0xff,0xd8}
 
static BYTE data16 [] = {0xff,0xd8,'h'}
 
static BYTE data17 [] = {0,0xff,0xd8}
 
static BYTE data18 [] = {0xff,0xd8,'<','h','t','m','l','>'}
 
static BYTE data19 [] = {'G','I','F','8','7','a'}
 
static BYTE data20 [] = {'G','I','F','8','9','a'}
 
static BYTE data21 [] = {'G','I','F','8','7'}
 
static BYTE data22 [] = {'G','i','F','8','7','a'}
 
static BYTE data23 [] = {'G','i','F','8','8','a'}
 
static BYTE data24 [] = {'g','i','f','8','7','a'}
 
static BYTE data25 [] = {'G','i','F','8','7','A'}
 
static BYTE data26 [] = {'G','i','F','8','7','a','<','h','t','m','l','>'}
 
static BYTE data27 [] = {0x30,'G','i','F','8','7','A'}
 
static BYTE data28 [] = {0x42,0x4d,0x6e,0x42,0x1c,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00}
 
static BYTE data29 [] = {0x42,0x4d,'x','x','x','x',0x00,0x00,0x00,0x00,'x','x','x','x'}
 
static BYTE data30 [] = {0x42,0x4d,'x','x','x','x',0x00,0x01,0x00,0x00,'x','x','x','x'}
 
static BYTE data31 [] = {0x42,0x4d,'x','x','x','x',0x00,0x00,0x00,0x00,'<','h','t','m','l','>'}
 
static BYTE data32 [] = {0x42,0x4d,'x','x','x','x',0x00,0x00,0x00,0x00,'x','x','x'}
 
static BYTE data33 [] = {0x00,0x42,0x4d,'x','x','x','x',0x00,0x00,0x00,0x00,'x','x','x'}
 
static BYTE data34 [] = {0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,'x'}
 
static BYTE data35 [] = {0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,'x','x','x','x',0}
 
static BYTE data36 [] = {0x89,'P','N','G',0x0d,0x0a,0x1a,'x','x'}
 
static BYTE data37 [] = {0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,'<','h','t','m','l','>'}
 
static BYTE data38 [] = {0x00,0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,'x'}
 
static BYTE data39 [] = {0x4d,0x4d,0x00,0x2a,0xff}
 
static BYTE data40 [] = {0x4d,0x4d,0x00,0x2a,'<','h','t','m','l','>',0}
 
static BYTE data41 [] = {0x4d,0x4d,0xff}
 
static BYTE data42 [] = {0x4d,0x4d}
 
static BYTE data43 [] = {0x00,0x4d,0x4d,0x00}
 
static BYTE data44 [] = {'R','I','F','F',0xff,0xff,0xff,0xff,'A','V','I',0x20,0xff}
 
static BYTE data45 [] = {'R','I','F','f',0xff,0xff,0xff,0xff,'A','V','I',0x20,0xff}
 
static BYTE data46 [] = {'R','I','F','F',0xff,0xff,0xff,0xff,'A','V','I',0x20}
 
static BYTE data47 [] = {'R','I','F','F',0xff,0xff,0xff,0xff,'A','V','I',0x21,0xff}
 
static BYTE data48 [] = {'R','I','F','F',0xff,0xff,0xff,0xff,'A','V','I',0x20,'<','h','t','m','l','>'}
 
static BYTE data49 [] = {'R','I','F','F',0x0f,0x0f,0xf0,0xf0,'A','V','I',0x20,0xf0,0x00}
 
static BYTE data50 [] = {0x00,0x00,0x01,0xb3,0xff}
 
static BYTE data51 [] = {0x00,0x00,0x01,0xba,0xff}
 
static BYTE data52 [] = {0x00,0x00,0x01,0xb8,0xff}
 
static BYTE data53 [] = {0x00,0x00,0x01,0xba}
 
static BYTE data54 [] = {0x00,0x00,0x01,0xba,'<','h','t','m','l','>'}
 
static BYTE data55 [] = {0x1f,0x8b,'x'}
 
static BYTE data56 [] = {0x1f}
 
static BYTE data57 [] = {0x1f,0x8b,'<','h','t','m','l','>','t','e','s','t',0}
 
static BYTE data58 [] = {0x1f,0x8b}
 
static BYTE data59 [] = {0x50,0x4b,'x'}
 
static BYTE data60 [] = {0x50,0x4b}
 
static BYTE data61 [] = {0x50,0x4b,'<','h','t','m','l','>',0}
 
static BYTE data62 [] = {0xca,0xfe,0xba,0xbe,'x'}
 
static BYTE data63 [] = {0xca,0xfe,0xba,0xbe}
 
static BYTE data64 [] = {0xca,0xfe,0xba,0xbe,'<','h','t','m','l','>',0}
 
static BYTE data65 [] = {0x25,0x50,0x44,0x46,'x'}
 
static BYTE data66 [] = {0x25,0x50,0x44,0x46}
 
static BYTE data67 [] = {0x25,0x50,0x44,0x46,'x','<','h','t','m','l','>'}
 
static BYTE data68 [] = {'M','Z','x'}
 
static BYTE data69 [] = {'M','Z'}
 
static BYTE data70 [] = {'M','Z','<','h','t','m','l','>',0xff}
 
static BYTE data71 [] = {'{','\\','r','t','f',0}
 
static BYTE data72 [] = {'{','\\','r','t','f'}
 
static BYTE data73 [] = {' ','{','\\','r','t','f',' '}
 
static BYTE data74 [] = {'{','\\','r','t','f','<','h','t','m','l','>',' '}
 
static BYTE data75 [] = {'R','I','F','F',0xff,0xff,0xff,0xff,'W','A','V','E',0xff}
 
static BYTE data76 [] = {'R','I','F','F',0xff,0xff,0xff,0xff,'W','A','V','E'}
 
static BYTE data77 [] = {'R','I','F','F',0xff,0xff,0xff,0xff,'W','A','V',0xff,0xff}
 
static BYTE data78 [] = {'R','I','F','F',0xff,0xff,0xff,0xff,'<','h','t','m','l','>',0xff}
 
static BYTE data79 [] = {'%','!',0xff}
 
static BYTE data80 [] = {'%','!'}
 
static BYTE data81 [] = {'%','!','P','S','<','h','t','m','l','>'}
 
static BYTE data82 [] = {'.','s','n','d',0}
 
static BYTE data83 [] = {'.','s','n','d'}
 
static BYTE data84 [] = {'.','s','n','d',0,'<','h','t','m','l','>',1,1}
 
static BYTE data85 [] = {'.','S','N','D',0}
 
static BYTE data86 [] = {0x49,0x49,0x2a,0xff}
 
static BYTE data87 [] = {' ','<','h','e','a','d'}
 
static BYTE data88 [] = {' ','<','h','e','a','d','>'}
 
static BYTE data89 [] = {'\t','\r','<','h','e','a','d','>'}
 
static BYTE data90 [] = {'<','H','e','A','d',' '}
 
static BYTE data91 [] = {'<','?','x','m','l',' ',0}
 
static BYTE data92 [] = {'a','b','c','<','?','x','m','l',' ',' '}
 
static BYTE data93 [] = {'<','?','x','m','l',' ',' ','<','h','t','m','l','>'}
 
static BYTE data94 [] = {'<','h','t','m','l','>','<','?','x','m','l',' ',' '}
 
static BYTE data95 [] = {'{','\\','r','t','f','<','?','x','m','l',' ',' '}
 
static BYTE data96 [] = {'<','?','x','m','l',' '}
 
static BYTE data97 [] = "<body"
 
static BYTE data98 [] = "blah<BoDyblahblah"
 
struct {
   BYTE *   data
 
   DWORD   size
 
   const WCHAR *   mime
 
   const WCHAR *   mime_pjpeg
 
   const WCHAR *   broken_mime
 
   const WCHAR *   url
 
   const WCHAR *   proposed_mime
 
mime_tests2 []
 
static const IInternetProtocolInfoVtbl InternetProtocolInfoVtbl
 
static IInternetProtocolInfo protocol_info = { &InternetProtocolInfoVtbl }
 
static HRESULT qiret
 
static IClassFactoryexpect_cf
 
static const IClassFactoryVtbl ClassFactoryVtbl
 
static const IClassFactoryVtbl ProtocolCFVtbl
 
static IClassFactory test_protocol_cf = { &ProtocolCFVtbl }
 
static IClassFactory test_protocol_cf2 = { &ProtocolCFVtbl }
 
static IClassFactory test_cf = { &ClassFactoryVtbl }
 
static const IUnknownVtbl unk_vtbl
 
struct {
   INTERNETFEATURELIST   feature
 
   DWORD   get_flags
 
   HRESULT   expected
 
   BOOL   todo
 
default_feature_tests []
 
static const charszFeatureControlKey = "Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl"
 
struct {
   INTERNETFEATURELIST   feature
 
   DWORD   set_flags
 
   BOOL   enable
 
   HRESULT   set_expected
 
   BOOL   set_todo
 
   DWORD   get_flags
 
   HRESULT   get_expected
 
   BOOL   get_todo
 
internet_feature_tests []
 
static BINDINFO rem_bindinfo = { sizeof(rem_bindinfo) }
 
static BINDINFO in_bindinfo
 
static DWORD rem_bindf
 
static STGMEDIUM in_stgmed
 
static STGMEDIUM rem_stgmed
 
static const IBindStatusCallbackExVtbl BindStatusCallbackExVtbl
 
static IBindStatusCallbackEx BindStatusCallback = { &BindStatusCallbackExVtbl }
 
static const IUnknownVtbl RefUnkVtbl
 
static RefUnk unk_in = {{&RefUnkVtbl}}
 
static RefUnk unk_out = {{&RefUnkVtbl}}
 
static HANDLE thread_ready
 

Macro Definition Documentation

◆ CHECK_CALLED

#define CHECK_CALLED (   func)
Value:
do { \
ok(called_ ## func, "expected " #func "\n"); \
expect_ ## func = called_ ## func = FALSE; \
}while(0)
#define FALSE
Definition: types.h:117
GLenum func
Definition: glext.h:6028
#define expect_(expected, got, precision)
Definition: font.c:34

Definition at line 55 of file misc.c.

◆ CHECK_EXPECT

#define CHECK_EXPECT (   func)
Value:
do { \
ok(expect_ ##func, "unexpected call " #func "\n"); \
expect_ ## func = FALSE; \
called_ ## func = TRUE; \
}while(0)
#define TRUE
Definition: types.h:120

Definition at line 42 of file misc.c.

◆ CHECK_EXPECT2

#define CHECK_EXPECT2 (   func)
Value:
do { \
ok(expect_ ##func, "unexpected call " #func "\n"); \
called_ ## func = TRUE; \
}while(0)

Definition at line 49 of file misc.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 19 of file misc.c.

◆ CONST_VTABLE

#define CONST_VTABLE

Definition at line 20 of file misc.c.

◆ DEFINE_EXPECT

#define DEFINE_EXPECT (   func)     static BOOL expect_ ## func = FALSE, called_ ## func = FALSE

Definition at line 36 of file misc.c.

◆ SET_EXPECT

#define SET_EXPECT (   func)     expect_ ## func = TRUE

Definition at line 39 of file misc.c.

Function Documentation

◆ a2co()

static WCHAR **static WCHAR * a2co ( const char str)
static

Definition at line 86 of file misc.c.

87{
88 WCHAR *ret;
89 int len;
90
91 if(!str)
92 return NULL;
93
94 len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
95 ret = CoTaskMemAlloc(len*sizeof(WCHAR));
97
98 return ret;
99}
#define NULL
Definition: types.h:112
void *WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: malloc.c:381
#define CP_ACP
Definition: compat.h:109
#define MultiByteToWideChar
Definition: compat.h:110
return ret
Definition: mutex.c:146
GLenum GLsizei len
Definition: glext.h:6722
short WCHAR
Definition: pedump.c:58
const WCHAR * str

Referenced by test_bsc_marshaling(), and test_MapBrowserEmulationModeToUserAgent().

◆ BindStatusCallback_AddRef()

static ULONG WINAPI BindStatusCallback_AddRef ( IBindStatusCallbackEx iface)
static

Definition at line 2064 of file misc.c.

2065{
2066 return 2;
2067}

◆ BindStatusCallback_GetBindInfo()

static HRESULT WINAPI BindStatusCallback_GetBindInfo ( IBindStatusCallbackEx iface,
DWORD grfBINDF,
BINDINFO *  pbindinfo 
)
static

Definition at line 2106 of file misc.c.

2107{
2108 in_bindinfo = *pbindinfo;
2109 *grfBINDF = rem_bindf;
2110 *pbindinfo = rem_bindinfo;
2111 return S_OK;
2112}
#define S_OK
Definition: intsafe.h:52
static BINDINFO rem_bindinfo
Definition: misc.c:2048
static DWORD rem_bindf
Definition: misc.c:2049
static BINDINFO in_bindinfo
Definition: misc.c:2048

◆ BindStatusCallback_GetPriority()

static HRESULT WINAPI BindStatusCallback_GetPriority ( IBindStatusCallbackEx iface,
LONG pnPriority 
)
static

Definition at line 2081 of file misc.c.

2082{
2083 ok(0, "unexpected call\n");
2084 return E_NOTIMPL;
2085}
#define ok(value,...)
Definition: atltest.h:57
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ BindStatusCallback_OnDataAvailable()

static HRESULT WINAPI BindStatusCallback_OnDataAvailable ( IBindStatusCallbackEx iface,
DWORD  grfBSCF,
DWORD  dwSize,
FORMATETC *  pformatetc,
STGMEDIUM *  pstgmed 
)
static

Definition at line 2116 of file misc.c.

2118{
2119 in_stgmed = *pstgmed;
2120 *pstgmed = rem_stgmed;
2121 return S_OK;
2122}
static STGMEDIUM in_stgmed
Definition: misc.c:2114
static STGMEDIUM rem_stgmed
Definition: misc.c:2114

◆ BindStatusCallback_OnLowResource()

static HRESULT WINAPI BindStatusCallback_OnLowResource ( IBindStatusCallbackEx iface,
DWORD  reserved 
)
static

Definition at line 2087 of file misc.c.

2088{
2089 ok(0, "unexpected call\n");
2090 return E_NOTIMPL;
2091}

◆ BindStatusCallback_OnObjectAvailable()

static HRESULT WINAPI BindStatusCallback_OnObjectAvailable ( IBindStatusCallbackEx iface,
REFIID  riid,
IUnknown punk 
)
static

Definition at line 2124 of file misc.c.

2125{
2126 ok(0, "unexpected call\n");
2127 return S_OK;
2128}

◆ BindStatusCallback_OnProgress()

static HRESULT WINAPI BindStatusCallback_OnProgress ( IBindStatusCallbackEx iface,
ULONG  ulProgress,
ULONG  ulProgressMax,
ULONG  ulStatusCode,
LPCWSTR  szStatusText 
)
static

Definition at line 2093 of file misc.c.

2095{
2096 ok(0, "unexpected call\n");
2097 return S_OK;
2098}

◆ BindStatusCallback_OnStartBinding()

static HRESULT WINAPI BindStatusCallback_OnStartBinding ( IBindStatusCallbackEx iface,
DWORD  dwReserved,
IBinding pib 
)
static

Definition at line 2074 of file misc.c.

2076{
2077 ok(0, "unexpected call\n");
2078 return S_OK;
2079}

◆ BindStatusCallback_OnStopBinding()

static HRESULT WINAPI BindStatusCallback_OnStopBinding ( IBindStatusCallbackEx iface,
HRESULT  hresult,
LPCWSTR  szError 
)
static

Definition at line 2100 of file misc.c.

2101{
2102 ok(0, "unexpected call\n");
2103 return S_OK;
2104}

◆ BindStatusCallback_QueryInterface()

static HRESULT WINAPI BindStatusCallback_QueryInterface ( IBindStatusCallbackEx iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 2051 of file misc.c.

2052{
2053 if(IsEqualGUID(&IID_IBindStatusCallbackEx, riid)
2054 || IsEqualGUID(&IID_IBindStatusCallback, riid)
2056 *ppv = iface;
2057 return S_OK;
2058 }
2059
2060 *ppv = NULL;
2061 return E_NOINTERFACE;
2062}
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ BindStatusCallback_Release()

static ULONG WINAPI BindStatusCallback_Release ( IBindStatusCallbackEx iface)
static

Definition at line 2069 of file misc.c.

2070{
2071 return 1;
2072}

◆ BindStatusCallbackEx_GetBindInfoEx()

static HRESULT WINAPI BindStatusCallbackEx_GetBindInfoEx ( IBindStatusCallbackEx iface,
DWORD grfBINDF,
BINDINFO *  pbindinfo,
DWORD grfBINDF2,
DWORD pdwReserved 
)
static

Definition at line 2130 of file misc.c.

2132{
2133 in_bindinfo = *pbindinfo;
2134 *grfBINDF = rem_bindf;
2135 *pbindinfo = rem_bindinfo;
2136 *grfBINDF2 = 11;
2137 *pdwReserved = 12;
2138 return S_OK;
2139}

◆ bsc_thread()

static DWORD WINAPI bsc_thread ( void arg)
static

Definition at line 2202 of file misc.c.

2203{
2204 IStream *stream = arg;
2206 MSG msg;
2207 HRESULT hres;
2208
2210
2211 hres = CoMarshalInterface(stream, &IID_IBindStatusCallback, (IUnknown*)&BindStatusCallback,
2212 MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL);
2213 ok(hres == S_OK, "CoMarshalInterface failed: %08lx\n", hres);
2214
2215 zero.QuadPart = 0;
2216 hres = IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL);
2217 ok(hres == S_OK, "Seek failed: 0x%08lx\n", hres);
2218
2220
2221 while(GetMessageW(&msg, NULL, 0, 0)) {
2224 }
2225
2227 return 0;
2228}
#define msg(x)
Definition: auth_time.c:54
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
HRESULT WINAPI CoMarshalInterface(IStream *stream, REFIID riid, IUnknown *unk, DWORD dest_context, void *pvDestContext, DWORD mshlFlags)
Definition: marshal.c:483
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:531
HRESULT hres
Definition: protocol.c:465
static HANDLE thread_ready
Definition: misc.c:2200
int zero
Definition: sehframes.cpp:29
Definition: parse.h:23
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:669
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
void * arg
Definition: msvc.h:10
BOOL WINAPI TranslateMessage(_In_ const MSG *)
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)

Referenced by test_bsc_marshaling().

◆ check_prefix()

static size_t check_prefix ( const char str,
const char prefix 
)
static

Definition at line 1461 of file misc.c.

1462{
1463 size_t len = strlen(prefix);
1464 if(memcmp(str, prefix, len)) {
1465 ok(0, "no %s prefix in %s\n", wine_dbgstr_a(prefix), wine_dbgstr_a(str));
1466 return 0;
1467 }
1468 return len;
1469}
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
const char int int int static __inline const char * wine_dbgstr_a(const char *s)
Definition: debug.h:152
Character const *const prefix
Definition: tempnam.cpp:195

Referenced by test_user_agent().

◆ ClassFactory_AddRef()

static ULONG WINAPI ClassFactory_AddRef ( IClassFactory iface)
static

Definition at line 947 of file misc.c.

948{
949 return 2;
950}

◆ ClassFactory_CreateInstance()

static HRESULT WINAPI ClassFactory_CreateInstance ( IClassFactory iface,
IUnknown pOuter,
REFIID  riid,
void **  ppv 
)
static

Definition at line 957 of file misc.c.

959{
960 ok(0, "unexpected call\n");
961 return E_NOTIMPL;
962}

◆ ClassFactory_LockServer()

static HRESULT WINAPI ClassFactory_LockServer ( IClassFactory iface,
BOOL  dolock 
)
static

Definition at line 978 of file misc.c.

979{
980 ok(0, "unexpected call\n");
981 return S_OK;
982}

◆ ClassFactory_QueryInterface()

static HRESULT WINAPI ClassFactory_QueryInterface ( IClassFactory iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 934 of file misc.c.

935{
936 if(IsEqualGUID(&IID_IInternetProtocolInfo, riid)) {
937 CHECK_EXPECT2(QI_IInternetProtocolInfo);
938 ok(iface == expect_cf, "unexpected iface\n");
939 *ppv = &protocol_info;
940 return qiret;
941 }
942
943 ok(0, "unexpected call\n");
944 return E_NOINTERFACE;
945}
#define CHECK_EXPECT2(func)
Definition: misc.c:47
static IInternetProtocolInfo protocol_info
Definition: misc.c:929
static HRESULT qiret
Definition: misc.c:931
static IClassFactory * expect_cf
Definition: misc.c:932

◆ ClassFactory_Release()

static ULONG WINAPI ClassFactory_Release ( IClassFactory iface)
static

Definition at line 952 of file misc.c.

953{
954 return 1;
955}

◆ DEFINE_EXPECT() [1/6]

DEFINE_EXPECT ( CreateInstance  )

◆ DEFINE_EXPECT() [2/6]

DEFINE_EXPECT ( ParseUrl  )

◆ DEFINE_EXPECT() [3/6]

DEFINE_EXPECT ( ParseUrl_ENCODE  )

◆ DEFINE_EXPECT() [4/6]

DEFINE_EXPECT ( ParseUrl_UNESCAPE  )

◆ DEFINE_EXPECT() [5/6]

DEFINE_EXPECT ( QI_IInternetProtocolInfo  )

◆ DEFINE_EXPECT() [6/6]

DEFINE_EXPECT ( unk_Release  )

◆ DEFINE_GUID()

DEFINE_GUID ( CLSID_AboutProtocol  ,
0x3050F406  ,
0x98B5  ,
0x11CF  ,
0xBB  ,
0x82  ,
0x00  ,
0xAA  ,
0x00  ,
0xBD  ,
0xCE  ,
0x0B   
)

◆ HRESULT()

static HRESULT ( WINAPI pCoInternetCompareUrl)
static

◆ impl_from_IUnknown()

static RefUnk * impl_from_IUnknown ( IUnknown iface)
inlinestatic

Definition at line 2163 of file misc.c.

2164{
2165 return CONTAINING_RECORD(iface, RefUnk, IUnknown_iface);
2166}
Definition: misc.c:2158
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by RefUnk_AddRef(), and RefUnk_Release().

◆ InternetProtocolInfo_AddRef()

static ULONG WINAPI InternetProtocolInfo_AddRef ( IInternetProtocolInfo iface)
static

Definition at line 855 of file misc.c.

856{
857 return 2;
858}

◆ InternetProtocolInfo_CombineUrl()

static HRESULT WINAPI InternetProtocolInfo_CombineUrl ( IInternetProtocolInfo iface,
LPCWSTR  pwzBaseUrl,
LPCWSTR  pwzRelativeUrl,
DWORD  dwCombineFlags,
LPWSTR  pwzResult,
DWORD  cchResult,
DWORD pcchResult,
DWORD  dwReserved 
)
static

Definition at line 896 of file misc.c.

899{
900 ok(0, "unexpected call\n");
901 return E_NOTIMPL;
902}

◆ InternetProtocolInfo_CompareUrl()

static HRESULT WINAPI InternetProtocolInfo_CompareUrl ( IInternetProtocolInfo iface,
LPCWSTR  pwzUrl1,
LPCWSTR  pwzUrl2,
DWORD  dwCompareFlags 
)
static

Definition at line 904 of file misc.c.

906{
907 ok(0, "unexpected call\n");
908 return E_NOTIMPL;
909}

◆ InternetProtocolInfo_ParseUrl()

static HRESULT WINAPI InternetProtocolInfo_ParseUrl ( IInternetProtocolInfo iface,
LPCWSTR  pwzUrl,
PARSEACTION  ParseAction,
DWORD  dwParseFlags,
LPWSTR  pwzResult,
DWORD  cchResult,
DWORD pcchResult,
DWORD  dwReserved 
)
static

Definition at line 865 of file misc.c.

868{
869 switch(ParseAction) {
870 case PARSE_SECURITY_URL:
871 CHECK_EXPECT2(ParseUrl);
872 if(pcchResult)
873 *pcchResult = ARRAY_SIZE(url1);
874
875 if(cchResult < ARRAY_SIZE(url1))
876 return S_FALSE;
877
878 memcpy(pwzResult, url1, sizeof(url1));
879 return S_OK;
880 case PARSE_ENCODE:
881 CHECK_EXPECT2(ParseUrl_ENCODE);
882 break;
883
884 case PARSE_UNESCAPE:
885 CHECK_EXPECT2(ParseUrl_UNESCAPE);
886 break;
887
888 default:
889 CHECK_EXPECT2(ParseUrl);
890 break;
891 }
892
893 return E_NOTIMPL;
894}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static const WCHAR url1[]
Definition: misc.c:277
#define S_FALSE
Definition: winerror.h:3451

◆ InternetProtocolInfo_QueryInfo()

static HRESULT WINAPI InternetProtocolInfo_QueryInfo ( IInternetProtocolInfo iface,
LPCWSTR  pwzUrl,
QUERYOPTION  OueryOption,
DWORD  dwQueryFlags,
LPVOID  pBuffer,
DWORD  cbBuffer,
DWORD pcbBuf,
DWORD  dwReserved 
)
static

Definition at line 911 of file misc.c.

914{
915 ok(0, "unexpected call\n");
916 return E_NOTIMPL;
917}

◆ InternetProtocolInfo_QueryInterface()

static HRESULT WINAPI InternetProtocolInfo_QueryInterface ( IInternetProtocolInfo iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 848 of file misc.c.

850{
851 ok(0, "unexpected call\n");
852 return E_NOINTERFACE;
853}

◆ InternetProtocolInfo_Release()

static ULONG WINAPI InternetProtocolInfo_Release ( IInternetProtocolInfo iface)
static

Definition at line 860 of file misc.c.

861{
862 return 1;
863}

◆ ProtocolCF_CreateInstance()

static HRESULT WINAPI ProtocolCF_CreateInstance ( IClassFactory iface,
IUnknown pOuter,
REFIID  riid,
void **  ppv 
)
static

Definition at line 964 of file misc.c.

966{
968
969 ok(iface == expect_cf, "unexpected iface\n");
970 ok(pOuter == NULL, "pOuter = %p\n", pOuter);
971 ok(IsEqualGUID(&IID_IInternetProtocolInfo, riid), "unexpected riid\n");
972 ok(ppv != NULL, "ppv == NULL\n");
973
974 *ppv = &protocol_info;
975 return S_OK;
976}
static CInternetFolder * CreateInstance(void)
Definition: inetfolder.c:330
#define CHECK_EXPECT(func)
Definition: misc.c:53

◆ RefUnk_AddRef()

static ULONG WINAPI RefUnk_AddRef ( IUnknown iface)
static

Definition at line 2180 of file misc.c.

2181{
2182 RefUnk *This = impl_from_IUnknown(iface);
2183 return InterlockedIncrement(&This->ref);
2184}
#define InterlockedIncrement
Definition: armddk.h:53
static RefUnk * impl_from_IUnknown(IUnknown *iface)
Definition: misc.c:2163

◆ RefUnk_QueryInterface()

static HRESULT WINAPI RefUnk_QueryInterface ( IUnknown iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 2168 of file misc.c.

2169{
2170 if(!IsEqualGUID(&IID_IUnknown, riid)) {
2171 *ppv = NULL;
2172 return E_NOINTERFACE;
2173 }
2174
2175 IUnknown_AddRef(iface);
2176 *ppv = iface;
2177 return S_OK;
2178}

◆ RefUnk_Release()

static ULONG WINAPI RefUnk_Release ( IUnknown iface)
static

Definition at line 2186 of file misc.c.

2187{
2188 RefUnk *This = impl_from_IUnknown(iface);
2189 return InterlockedDecrement(&This->ref);
2190}
#define InterlockedDecrement
Definition: armddk.h:52

◆ register_protocols()

static void register_protocols ( void  )
static

Definition at line 822 of file misc.c.

823{
827
828 static const WCHAR wszAbout[] = {'a','b','o','u','t',0};
829
830 hres = pCoInternetGetSession(0, &session, 0);
831 ok(hres == S_OK, "CoInternetGetSession failed: %08lx\n", hres);
832 if(FAILED(hres))
833 return;
834
835 hres = CoGetClassObject(&CLSID_AboutProtocol, CLSCTX_INPROC_SERVER, NULL,
836 &IID_IClassFactory, (void**)&factory);
837 ok(hres == S_OK, "Could not get AboutProtocol factory: %08lx\n", hres);
838 if(FAILED(hres))
839 return;
840
841 IInternetSession_RegisterNameSpace(session, factory, &CLSID_AboutProtocol,
842 wszAbout, 0, NULL, 0);
843 IClassFactory_Release(factory);
844
845 IInternetSession_Release(session);
846}
const GUID IID_IClassFactory
HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD clscontext, COSERVERINFO *server_info, REFIID riid, void **obj)
Definition: combase.c:1925
#define FAILED(hr)
Definition: intsafe.h:51
static const WCHAR wszAbout[]
Definition: misc.c:303
CLSID CLSID_AboutProtocol
Definition: main.c:439

Referenced by START_TEST().

◆ START_TEST()

START_TEST ( misc  )

Definition at line 2807 of file misc.c.

2808{
2809 HMODULE hurlmon;
2810 int argc;
2811 char **argv;
2812
2814
2815 hurlmon = GetModuleHandleA("urlmon.dll");
2816 pCoInternetCompareUrl = (void *) GetProcAddress(hurlmon, "CoInternetCompareUrl");
2817 pCoInternetGetSecurityUrl = (void*) GetProcAddress(hurlmon, "CoInternetGetSecurityUrl");
2818 pCoInternetGetSession = (void*) GetProcAddress(hurlmon, "CoInternetGetSession");
2819 pCoInternetParseUrl = (void*) GetProcAddress(hurlmon, "CoInternetParseUrl");
2820 pCoInternetQueryInfo = (void*) GetProcAddress(hurlmon, "CoInternetQueryInfo");
2821 pCopyStgMedium = (void*) GetProcAddress(hurlmon, "CopyStgMedium");
2822 pCopyBindInfo = (void*) GetProcAddress(hurlmon, "CopyBindInfo");
2823 pFindMimeFromData = (void*) GetProcAddress(hurlmon, "FindMimeFromData");
2824 pObtainUserAgentString = (void*) GetProcAddress(hurlmon, "ObtainUserAgentString");
2825 pReleaseBindInfo = (void*) GetProcAddress(hurlmon, "ReleaseBindInfo");
2826 pUrlMkGetSessionOption = (void*) GetProcAddress(hurlmon, "UrlMkGetSessionOption");
2827 pCompareSecurityIds = (void*) GetProcAddress(hurlmon, "CompareSecurityIds");
2828 pCoInternetIsFeatureEnabled = (void*) GetProcAddress(hurlmon, "CoInternetIsFeatureEnabled");
2829 pCoInternetSetFeatureEnabled = (void*) GetProcAddress(hurlmon, "CoInternetSetFeatureEnabled");
2830 pIEInstallScope = (void*) GetProcAddress(hurlmon, "IEInstallScope");
2831 pMapBrowserEmulationModeToUserAgent = (void*) GetProcAddress(hurlmon, (const char*)445);
2832
2833 if (!pCoInternetCompareUrl || !pCoInternetGetSecurityUrl ||
2834 !pCoInternetGetSession || !pCoInternetParseUrl || !pCompareSecurityIds) {
2835 win_skip("Various needed functions not present, too old IE\n");
2836 return;
2837 }
2838
2840
2841 if(argc <= 2 || strcmp(argv[2], "internet_features")) {
2843
2862 }
2863
2865
2867}
#define GetProcAddress(x, y)
Definition: compat.h:753
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
MonoAssembly int argc
Definition: metahost.c:107
_ACRTIMP int __cdecl strcmp(const char *, const char *)
Definition: string.c:3324
HRESULT WINAPI DECLSPEC_HOTPATCH OleInitialize(LPVOID reserved)
Definition: ole2.c:162
void WINAPI DECLSPEC_HOTPATCH OleUninitialize(void)
Definition: ole2.c:218
#define win_skip
Definition: minitest.h:67
static void test_MkParseDisplayNameEx(void)
Definition: misc.c:1697
static void test_RegisterFormatEnumerator(void)
Definition: misc.c:204
static void test_ReleaseBindInfo(void)
Definition: misc.c:1202
static void test_MimeFilter(void)
Definition: misc.c:1163
static void test_CoInternetCompareUrl(void)
Definition: misc.c:417
static void test_NameSpace(void)
Definition: misc.c:1004
static void test_CopyBindInfo(void)
Definition: misc.c:1310
static void test_UrlMkGetSessionOption(void)
Definition: misc.c:1421
static void test_FindMimeFromData(void)
Definition: misc.c:711
static void register_protocols(void)
Definition: misc.c:822
static void test_IsValidURL(void)
Definition: misc.c:1787
static void test_MapBrowserEmulationModeToUserAgent(BOOL custom_ua)
Definition: misc.c:2754
static void test_bsc_marshaling(void)
Definition: misc.c:2230
static void test_CoInternetQueryInfo(void)
Definition: misc.c:445
static void test_user_agent(void)
Definition: misc.c:1471
static void test_CopyStgMedium(void)
Definition: misc.c:1232
static void test_internet_features(void)
Definition: misc.c:2008
static void test_CreateFormatEnum(void)
Definition: misc.c:101
static void test_CoInternetParseUrl(void)
Definition: misc.c:336
#define argv
Definition: mplay32.c:18
int winetest_get_mainargs(char ***pargv)

◆ test_bsc_marshaling()

static void test_bsc_marshaling ( void  )
static

Definition at line 2230 of file misc.c.

2231{
2232 FORMATETC formatetc = {0, NULL, 1, -1, TYMED_ISTREAM};
2233 IBindStatusCallbackEx *callbackex;
2235 BINDINFO bindinfo;
2236 IStream *stream, *binding_stream;
2237 HANDLE thread;
2238 WCHAR *extra_info_out;
2239 WCHAR *verb_out;
2241 STGMEDIUM stgmed;
2242 void *buf;
2243 DWORD bindf;
2244 HRESULT hres;
2245
2247 ok(hres == S_OK, "CreateStreamOnHGlobal returned: %08lx\n", hres);
2248
2252
2253 hres = CoUnmarshalInterface(stream, &IID_IBindStatusCallback, (void**)&bsc);
2254 ok(hres == S_OK, "CoUnmarshalInterface failed: %08lx\n", hres);
2255
2256 hres = CreateStreamOnHGlobal(NULL, TRUE, &binding_stream);
2257 ok(hres == S_OK, "CreateStreamOnHGlobal returned: %08lx\n", hres);
2258 hres = IStream_Write(binding_stream, "xxx", 3, NULL);
2259 ok(hres == S_OK, "Write failed: %08lx\n", hres);
2260
2261 rem_bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
2262 bindf = 0xdeadbeef;
2263
2264 memset(&bindinfo, 0, sizeof(bindinfo));
2265 bindinfo.cbSize = sizeof(bindinfo);
2266 bindinfo.grfBindInfoF = 12;
2267 bindinfo.dwBindVerb = 13;
2268 bindinfo.cbstgmedData = 19;
2269 bindinfo.dwOptions = 14;
2270 bindinfo.dwOptionsFlags = 15;
2271 bindinfo.dwCodePage = 16;
2272 bindinfo.securityAttributes.nLength = 30;
2273 bindinfo.securityAttributes.lpSecurityDescriptor = (void*)0xdead0001;
2274 bindinfo.securityAttributes.bInheritHandle = 31;
2275 bindinfo.iid.Data1 = 17;
2276 bindinfo.pUnk = (IUnknown*)0xdeadbeef;
2277 bindinfo.dwReserved = 18;
2278 bindinfo.stgmedData.pUnkForRelease = &unk_in.IUnknown_iface;
2279 unk_in.ref = 1;
2280
2281 memset(&rem_bindinfo, 0, sizeof(bindinfo));
2282 rem_bindinfo.cbSize = sizeof(rem_bindinfo);
2283 rem_bindinfo.szExtraInfo = extra_info_out = a2co("extra info out");
2284 rem_bindinfo.grfBindInfoF = 22;
2285 rem_bindinfo.dwBindVerb = 23;
2286 rem_bindinfo.szCustomVerb = verb_out = a2co("custom verb out");
2287 rem_bindinfo.cbstgmedData = 29;
2288 rem_bindinfo.dwOptions = 24;
2289 rem_bindinfo.dwOptionsFlags = 25;
2290 rem_bindinfo.dwCodePage = 16;
2291 rem_bindinfo.securityAttributes.nLength = 40;
2292 rem_bindinfo.securityAttributes.lpSecurityDescriptor = (void*)0xdead0002;
2293 rem_bindinfo.securityAttributes.bInheritHandle = 41;
2294 rem_bindinfo.iid.Data1 = 27;
2295 rem_bindinfo.pUnk = (IUnknown*)0xdeadbeef;
2296 rem_bindinfo.dwReserved = 18;
2297 rem_bindinfo.stgmedData.pUnkForRelease = &unk_out.IUnknown_iface;
2298 unk_out.ref = 1;
2299
2300 hres = IBindStatusCallback_GetBindInfo(bsc, &bindf, &bindinfo);
2301 ok(hres == S_OK, "GetBindInfo failed: %08lx\n", hres);
2302 ok(bindf == rem_bindf, "bindf = %lx, expected %lx\n", bindf, rem_bindf);
2303
2304 ok(in_bindinfo.cbSize == sizeof(in_bindinfo), "cbSize = %lu\n", in_bindinfo.cbSize);
2305 ok(!in_bindinfo.szExtraInfo, "szExtraInfo = %s\n", wine_dbgstr_w(in_bindinfo.szExtraInfo));
2306 ok(in_bindinfo.grfBindInfoF == 12, "cbSize = %lu\n", in_bindinfo.grfBindInfoF);
2307 ok(in_bindinfo.dwBindVerb == 13, "dwBindVerb = %lu\n", in_bindinfo.dwBindVerb);
2308 ok(!in_bindinfo.szCustomVerb, "szCustomVerb = %s\n", wine_dbgstr_w(in_bindinfo.szCustomVerb));
2309 ok(in_bindinfo.cbstgmedData == 19, "cbstgmedData = %lu\n", in_bindinfo.cbstgmedData);
2310 ok(!in_bindinfo.dwOptions, "dwOptions = %lu\n", in_bindinfo.dwOptions);
2311 ok(!in_bindinfo.dwOptionsFlags, "dwOptionsFlags = %lu\n", in_bindinfo.dwOptionsFlags);
2312 ok(!in_bindinfo.dwCodePage, "dwCodePage = %lu\n", in_bindinfo.dwCodePage);
2313 ok(!in_bindinfo.iid.Data1, "iid = %s\n", debugstr_guid(&in_bindinfo.iid));
2314 ok(!in_bindinfo.pUnk, "pUnk = %p\n", in_bindinfo.pUnk);
2315 ok(!in_bindinfo.dwReserved, "dwReserved = %lu\n", in_bindinfo.dwReserved);
2316 ok(!in_bindinfo.securityAttributes.nLength, "securityAttributes.nLength = %lu\n",
2317 in_bindinfo.securityAttributes.nLength);
2318 ok(!in_bindinfo.securityAttributes.lpSecurityDescriptor,
2319 "securityAttributes.lpSecurityDescriptor = %p\n",
2320 in_bindinfo.securityAttributes.lpSecurityDescriptor);
2321 ok(!in_bindinfo.securityAttributes.bInheritHandle, "securityAttributes.bInheritHandle = %u\n",
2322 in_bindinfo.securityAttributes.bInheritHandle);
2323 ok(!in_bindinfo.stgmedData.pUnkForRelease, "pUnkForRelease = %p\n",
2324 in_bindinfo.stgmedData.pUnkForRelease);
2325
2326 ok(bindinfo.cbSize == sizeof(rem_bindinfo), "cbSize = %lu\n", rem_bindinfo.cbSize);
2327 ok(!lstrcmpW(bindinfo.szExtraInfo, L"extra info out"),
2328 "szExtraInfo = %s\n", wine_dbgstr_w(bindinfo.szExtraInfo));
2329 ok(bindinfo.grfBindInfoF == 22, "grfBindInfoF = %lu\n", rem_bindinfo.grfBindInfoF);
2330 ok(bindinfo.dwBindVerb == 23, "dwBindVerb = %lu\n", bindinfo.dwBindVerb);
2331 ok(bindinfo.szCustomVerb != verb_out, "szCustomVerb == inbuf\n");
2332 ok(!lstrcmpW(bindinfo.szCustomVerb, L"custom verb out"), "szCustomVerb = %s\n",
2333 wine_dbgstr_w(bindinfo.szCustomVerb));
2334 ok(bindinfo.cbstgmedData == 29, "cbstgmedData = %lu\n", bindinfo.cbstgmedData);
2335 ok(bindinfo.dwOptions == 24, "dwOptions = %lu\n", bindinfo.dwOptions);
2336 ok(bindinfo.dwOptionsFlags == 25, "dwOptionsFlags = %lu\n", bindinfo.dwOptionsFlags);
2337 ok(bindinfo.dwCodePage, "dwCodePage = %lu\n", bindinfo.dwCodePage);
2338 ok(!bindinfo.iid.Data1, "iid = %s\n", debugstr_guid(&bindinfo.iid));
2339 ok(!bindinfo.pUnk, "pUnk = %p\n", bindinfo.pUnk);
2340 ok(bindinfo.dwReserved == 18, "dwReserved = %lu\n", bindinfo.dwReserved);
2341 ok(bindinfo.securityAttributes.nLength == 30, "securityAttributes.nLength = %lu\n",
2342 bindinfo.securityAttributes.nLength);
2343 ok(bindinfo.securityAttributes.lpSecurityDescriptor == (void*)0xdead0001,
2344 "securityAttributes.lpSecurityDescriptor = %p\n",
2345 bindinfo.securityAttributes.lpSecurityDescriptor);
2346 ok(bindinfo.securityAttributes.bInheritHandle == 31, "securityAttributes.bInheritHandle = %u\n",
2347 bindinfo.securityAttributes.bInheritHandle);
2348 ok(bindinfo.stgmedData.pUnkForRelease == &unk_in.IUnknown_iface, "pUnkForRelease = %p\n",
2349 bindinfo.stgmedData.pUnkForRelease);
2350 ok(unk_out.ref == 1, "unk_out.ref = %lu\n", unk_out.ref);
2351
2352 bindinfo.stgmedData.pUnkForRelease = NULL;
2353 ReleaseBindInfo(&bindinfo);
2354
2355 zero.QuadPart = 0;
2356 hres = IStream_Seek(binding_stream, zero, STREAM_SEEK_SET, NULL);
2357 ok(hres == S_OK, "Seek failed: 0x%08lx\n", hres);
2358
2359 /* Return IStream stgmed from GetBindInfo, it's not marshaled back */
2360 rem_bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
2361 bindf = 0xdeadbeef;
2362
2363 memset(&bindinfo, 0, sizeof(bindinfo));
2364 bindinfo.cbSize = sizeof(bindinfo);
2365
2366 memset(&rem_bindinfo, 0, sizeof(rem_bindinfo));
2367 rem_bindinfo.cbSize = sizeof(rem_bindinfo);
2368
2369 rem_bindinfo.stgmedData.tymed = TYMED_ISTREAM;
2370 rem_bindinfo.stgmedData.pstm = binding_stream;
2371 rem_bindinfo.cbstgmedData = 3;
2372 IStream_AddRef(binding_stream);
2373
2374 hres = IBindStatusCallback_GetBindInfo(bsc, &bindf, &bindinfo);
2375 ok(hres == S_OK, "GetBindInfo failed: %08lx\n", hres);
2376 ok(bindf == rem_bindf, "bindf = %lx, expected %lx\n", bindf, rem_bindf);
2377
2378 ok(in_bindinfo.cbSize == sizeof(in_bindinfo), "cbSize = %lu\n", in_bindinfo.cbSize);
2379 ok(!in_bindinfo.pUnk, "pUnk = %p\n", in_bindinfo.pUnk);
2380 ok(in_bindinfo.stgmedData.tymed == TYMED_NULL, "tymed = %lu\n",
2381 in_bindinfo.stgmedData.tymed);
2382
2383 ok(bindinfo.cbSize == sizeof(bindinfo), "cbSize = %lu\n", bindinfo.cbSize);
2384 ok(!bindinfo.pUnk, "pUnk = %p\n", bindinfo.pUnk);
2385 ok(bindinfo.stgmedData.tymed == TYMED_NULL, "tymed = %lu\n",
2386 bindinfo.stgmedData.tymed);
2387 ok(!bindinfo.stgmedData.pstm, "stm = %p\n",
2388 bindinfo.stgmedData.pstm);
2389 ok(!bindinfo.stgmedData.pUnkForRelease, "pUnkForRelease = %p\n",
2390 bindinfo.stgmedData.pUnkForRelease);
2391 ok(bindinfo.cbstgmedData == 3, "cbstgmedData = %lu\n", bindinfo.cbstgmedData);
2392
2393 ReleaseBindInfo(&bindinfo);
2394
2395 /* Same, but with pUnkForRelease, it's not marshaled back */
2396 rem_bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
2397 bindf = 0xdeadbeef;
2398
2399 memset(&bindinfo, 0, sizeof(bindinfo));
2400 bindinfo.cbSize = sizeof(bindinfo);
2401
2402 memset(&rem_bindinfo, 0, sizeof(rem_bindinfo));
2403 rem_bindinfo.cbSize = sizeof(rem_bindinfo);
2404
2405 rem_bindinfo.stgmedData.tymed = TYMED_ISTREAM;
2406 rem_bindinfo.stgmedData.pstm = binding_stream;
2407 rem_bindinfo.stgmedData.pUnkForRelease = &unk_out.IUnknown_iface;
2408 unk_out.ref = 1;
2409 rem_bindinfo.cbstgmedData = 3;
2410 IStream_AddRef(binding_stream);
2411
2412 hres = IBindStatusCallback_GetBindInfo(bsc, &bindf, &bindinfo);
2413 ok(hres == S_OK, "GetBindInfo failed: %08lx\n", hres);
2414 ok(bindf == rem_bindf, "bindf = %lx, expected %lx\n", bindf, rem_bindf);
2415
2416 ok(in_bindinfo.cbSize == sizeof(in_bindinfo), "cbSize = %lu\n", in_bindinfo.cbSize);
2417 ok(!in_bindinfo.pUnk, "pUnk = %p\n", in_bindinfo.pUnk);
2418 ok(in_bindinfo.stgmedData.tymed == TYMED_NULL, "tymed = %lu\n",
2419 in_bindinfo.stgmedData.tymed);
2420
2421 ok(bindinfo.cbSize == sizeof(bindinfo), "cbSize = %lu\n", bindinfo.cbSize);
2422 ok(!bindinfo.pUnk, "pUnk = %p\n", bindinfo.pUnk);
2423 ok(bindinfo.stgmedData.tymed == TYMED_NULL, "tymed = %lu\n",
2424 bindinfo.stgmedData.tymed);
2425 ok(!bindinfo.stgmedData.pstm, "stm = %p\n",
2426 bindinfo.stgmedData.pstm);
2427 ok(!bindinfo.stgmedData.pUnkForRelease, "pUnkForRelease = %p\n",
2428 bindinfo.stgmedData.pUnkForRelease);
2429 ok(bindinfo.cbstgmedData == 3, "cbstgmedData = %lu\n", bindinfo.cbstgmedData);
2430
2431 ReleaseBindInfo(&bindinfo);
2432
2433 /* Return HGLOBAL stgmed from GetBindInfo, it's not marshaled back */
2434 rem_bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
2435 bindf = 0xdeadbeef;
2436
2437 memset(&bindinfo, 0, sizeof(bindinfo));
2438 bindinfo.cbSize = sizeof(bindinfo);
2439
2440 memset(&rem_bindinfo, 0, sizeof(rem_bindinfo));
2441 rem_bindinfo.cbSize = sizeof(rem_bindinfo);
2442
2443 rem_bindinfo.stgmedData.tymed = TYMED_HGLOBAL;
2444
2445 buf = GlobalAlloc(0, 5);
2446 strcpy(buf, "test");
2447 rem_bindinfo.stgmedData.hGlobal = buf;
2448 rem_bindinfo.cbstgmedData = 5;
2449
2450 hres = IBindStatusCallback_GetBindInfo(bsc, &bindf, &bindinfo);
2451 ok(hres == S_OK, "GetBindInfo failed: %08lx\n", hres);
2452 ok(bindf == rem_bindf, "bindf = %lx, expected %lx\n", bindf, rem_bindf);
2453
2454 ok(in_bindinfo.cbSize == sizeof(in_bindinfo), "cbSize = %lu\n", in_bindinfo.cbSize);
2455 ok(!in_bindinfo.pUnk, "pUnk = %p\n", in_bindinfo.pUnk);
2456 ok(in_bindinfo.stgmedData.tymed == TYMED_NULL, "tymed = %lu\n",
2457 in_bindinfo.stgmedData.tymed);
2458
2459 ok(bindinfo.cbSize == sizeof(bindinfo), "cbSize = %lu\n", bindinfo.cbSize);
2460 ok(!bindinfo.pUnk, "pUnk = %p\n", bindinfo.pUnk);
2461 ok(bindinfo.stgmedData.tymed == TYMED_NULL, "tymed = %lu\n",
2462 bindinfo.stgmedData.tymed);
2463 ok(!bindinfo.stgmedData.pstm, "stm = %p\n",
2464 bindinfo.stgmedData.pstm);
2465 ok(!bindinfo.stgmedData.pUnkForRelease, "pUnkForRelease = %p\n",
2466 bindinfo.stgmedData.pUnkForRelease);
2467 ok(bindinfo.cbstgmedData == 5, "cbstgmedData = %lu\n", bindinfo.cbstgmedData);
2468
2469 ReleaseBindInfo(&bindinfo);
2470
2471 /* Same with GetBindInfoEx */
2472 hres = IBindStatusCallback_QueryInterface(bsc, &IID_IBindStatusCallbackEx, (void**)&callbackex);
2473 if(SUCCEEDED(hres)) {
2474 DWORD bindf2, reserved;
2475
2476 rem_bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
2477 bindf = bindf2 = reserved = 0xdeadbeef;
2478
2479 memset(&bindinfo, 0, sizeof(bindinfo));
2480 bindinfo.cbSize = sizeof(bindinfo);
2481 bindinfo.grfBindInfoF = 12;
2482 bindinfo.dwBindVerb = 13;
2483 bindinfo.cbstgmedData = 19;
2484 bindinfo.dwOptions = 14;
2485 bindinfo.dwOptionsFlags = 15;
2486 bindinfo.dwCodePage = 16;
2487 bindinfo.securityAttributes.nLength = 30;
2488 bindinfo.securityAttributes.lpSecurityDescriptor = (void*)0xdead0001;
2489 bindinfo.securityAttributes.bInheritHandle = 31;
2490 bindinfo.iid.Data1 = 17;
2491 bindinfo.pUnk = (IUnknown*)0xdeadbeef;
2492 bindinfo.dwReserved = 18;
2493 bindinfo.stgmedData.pUnkForRelease = &unk_in.IUnknown_iface;
2494 unk_in.ref = 1;
2495
2496 memset(&rem_bindinfo, 0, sizeof(bindinfo));
2497 rem_bindinfo.cbSize = sizeof(rem_bindinfo);
2498 rem_bindinfo.szExtraInfo = extra_info_out = a2co("extra info out");
2499 rem_bindinfo.grfBindInfoF = 22;
2500 rem_bindinfo.dwBindVerb = 23;
2501 rem_bindinfo.szCustomVerb = verb_out = a2co("custom verb out");
2502 rem_bindinfo.cbstgmedData = 29;
2503 rem_bindinfo.dwOptions = 24;
2504 rem_bindinfo.dwOptionsFlags = 25;
2505 rem_bindinfo.dwCodePage = 16;
2506 rem_bindinfo.securityAttributes.nLength = 40;
2507 rem_bindinfo.securityAttributes.lpSecurityDescriptor = (void*)0xdead0002;
2508 rem_bindinfo.securityAttributes.bInheritHandle = 41;
2509 rem_bindinfo.iid.Data1 = 27;
2510 rem_bindinfo.pUnk = (IUnknown*)0xdeadbeef;
2511 rem_bindinfo.dwReserved = 18;
2512 rem_bindinfo.stgmedData.pUnkForRelease = &unk_out.IUnknown_iface;
2513 unk_out.ref = 1;
2514
2515 hres = IBindStatusCallbackEx_GetBindInfoEx(callbackex, &bindf, &bindinfo, &bindf2, &reserved);
2516 ok(hres == S_OK, "GetBindInfo failed: %08lx\n", hres);
2517 ok(bindf == rem_bindf, "bindf = %lx, expected %lx\n", bindf, rem_bindf);
2518 ok(bindf2 == 11, "bindf2 = %lx\n", bindf);
2519 ok(reserved == 12, "reserved = %lx\n", reserved);
2520
2521 ok(in_bindinfo.cbSize == sizeof(in_bindinfo), "cbSize = %lu\n", in_bindinfo.cbSize);
2522 ok(!in_bindinfo.szExtraInfo, "szExtraInfo = %s\n", wine_dbgstr_w(in_bindinfo.szExtraInfo));
2523 ok(in_bindinfo.grfBindInfoF == 12, "cbSize = %lu\n", in_bindinfo.grfBindInfoF);
2524 ok(in_bindinfo.dwBindVerb == 13, "dwBindVerb = %lu\n", in_bindinfo.dwBindVerb);
2525 ok(!in_bindinfo.szCustomVerb, "szCustomVerb = %s\n", wine_dbgstr_w(in_bindinfo.szCustomVerb));
2526 ok(in_bindinfo.cbstgmedData == 19, "cbstgmedData = %lu\n", in_bindinfo.cbstgmedData);
2527 ok(!in_bindinfo.dwOptions, "dwOptions = %lu\n", in_bindinfo.dwOptions);
2528 ok(!in_bindinfo.dwOptionsFlags, "dwOptionsFlags = %lu\n", in_bindinfo.dwOptionsFlags);
2529 ok(!in_bindinfo.dwCodePage, "dwCodePage = %lu\n", in_bindinfo.dwCodePage);
2530 ok(!in_bindinfo.iid.Data1, "iid = %s\n", debugstr_guid(&in_bindinfo.iid));
2531 ok(!in_bindinfo.pUnk, "pUnk = %p\n", in_bindinfo.pUnk);
2532 ok(!in_bindinfo.dwReserved, "dwReserved = %lu\n", in_bindinfo.dwReserved);
2533 ok(!in_bindinfo.securityAttributes.nLength, "securityAttributes.nLength = %lu\n",
2534 in_bindinfo.securityAttributes.nLength);
2535 ok(!in_bindinfo.securityAttributes.lpSecurityDescriptor,
2536 "securityAttributes.lpSecurityDescriptor = %p\n",
2537 in_bindinfo.securityAttributes.lpSecurityDescriptor);
2538 ok(!in_bindinfo.securityAttributes.bInheritHandle, "securityAttributes.bInheritHandle = %u\n",
2539 in_bindinfo.securityAttributes.bInheritHandle);
2540 ok(!in_bindinfo.stgmedData.pUnkForRelease, "pUnkForRelease = %p\n",
2541 in_bindinfo.stgmedData.pUnkForRelease);
2542
2543 ok(bindinfo.cbSize == sizeof(rem_bindinfo), "cbSize = %lu\n", rem_bindinfo.cbSize);
2544 ok(!lstrcmpW(bindinfo.szExtraInfo, L"extra info out"),
2545 "szExtraInfo = %s\n", wine_dbgstr_w(bindinfo.szExtraInfo));
2546 ok(bindinfo.grfBindInfoF == 22, "grfBindInfoF = %lu\n", rem_bindinfo.grfBindInfoF);
2547 ok(bindinfo.dwBindVerb == 23, "dwBindVerb = %lu\n", bindinfo.dwBindVerb);
2548 ok(!lstrcmpW(bindinfo.szCustomVerb, L"custom verb out"), "szCustomVerb = %s\n",
2549 wine_dbgstr_w(bindinfo.szCustomVerb));
2550 ok(bindinfo.cbstgmedData == 29, "cbstgmedData = %lu\n", bindinfo.cbstgmedData);
2551 ok(bindinfo.dwOptions == 24, "dwOptions = %lu\n", bindinfo.dwOptions);
2552 ok(bindinfo.dwOptionsFlags == 25, "dwOptionsFlags = %lu\n", bindinfo.dwOptionsFlags);
2553 ok(bindinfo.dwCodePage, "dwCodePage = %lu\n", bindinfo.dwCodePage);
2554 ok(!bindinfo.iid.Data1, "iid = %s\n", debugstr_guid(&bindinfo.iid));
2555 ok(!bindinfo.pUnk, "pUnk = %p\n", bindinfo.pUnk);
2556 ok(bindinfo.dwReserved == 18, "dwReserved = %lu\n", bindinfo.dwReserved);
2557 ok(bindinfo.securityAttributes.nLength == 30, "securityAttributes.nLength = %lu\n",
2558 bindinfo.securityAttributes.nLength);
2559 ok(bindinfo.securityAttributes.lpSecurityDescriptor == (void*)0xdead0001,
2560 "securityAttributes.lpSecurityDescriptor = %p\n",
2561 bindinfo.securityAttributes.lpSecurityDescriptor);
2562 ok(bindinfo.securityAttributes.bInheritHandle == 31, "securityAttributes.bInheritHandle = %u\n",
2563 bindinfo.securityAttributes.bInheritHandle);
2564 ok(bindinfo.stgmedData.pUnkForRelease == &unk_in.IUnknown_iface, "pUnkForRelease = %p\n",
2565 bindinfo.stgmedData.pUnkForRelease);
2566 ok(unk_out.ref == 1, "unk_out.ref = %lu\n", unk_out.ref);
2567
2568 bindinfo.stgmedData.pUnkForRelease = NULL;
2569 ReleaseBindInfo(&bindinfo);
2570
2571 zero.QuadPart = 0;
2572 hres = IStream_Seek(binding_stream, zero, STREAM_SEEK_SET, NULL);
2573 ok(hres == S_OK, "Seek failed: 0x%08lx\n", hres);
2574
2575 /* Return IStream stgmed from GetBindInfoEx, it's not marshaled back */
2576 rem_bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
2577 bindf = bindf2 = reserved = 0xdeadbeef;
2578
2579 memset(&bindinfo, 0, sizeof(bindinfo));
2580 bindinfo.cbSize = sizeof(bindinfo);
2581
2582 memset(&rem_bindinfo, 0, sizeof(rem_bindinfo));
2583 rem_bindinfo.cbSize = sizeof(rem_bindinfo);
2584
2585 rem_bindinfo.stgmedData.tymed = TYMED_ISTREAM;
2586 rem_bindinfo.stgmedData.pstm = binding_stream;
2587 rem_bindinfo.cbstgmedData = 3;
2588 IStream_AddRef(binding_stream);
2589
2590 hres = IBindStatusCallbackEx_GetBindInfoEx(callbackex, &bindf, &bindinfo, &bindf2, &reserved);
2591 ok(hres == S_OK, "GetBindInfoEx failed: %08lx\n", hres);
2592 ok(bindf == rem_bindf, "bindf = %lx, expected %lx\n", bindf, rem_bindf);
2593
2594 ok(in_bindinfo.cbSize == sizeof(in_bindinfo), "cbSize = %lu\n", in_bindinfo.cbSize);
2595 ok(!in_bindinfo.pUnk, "pUnk = %p\n", in_bindinfo.pUnk);
2596 ok(in_bindinfo.stgmedData.tymed == TYMED_NULL, "tymed = %lu\n",
2597 in_bindinfo.stgmedData.tymed);
2598
2599 ok(bindinfo.cbSize == sizeof(bindinfo), "cbSize = %lu\n", bindinfo.cbSize);
2600 ok(!bindinfo.pUnk, "pUnk = %p\n", bindinfo.pUnk);
2601 ok(bindinfo.stgmedData.tymed == TYMED_NULL, "tymed = %lu\n",
2602 bindinfo.stgmedData.tymed);
2603 ok(!bindinfo.stgmedData.pstm, "stm = %p\n",
2604 bindinfo.stgmedData.pstm);
2605 ok(!bindinfo.stgmedData.pUnkForRelease, "pUnkForRelease = %p\n",
2606 bindinfo.stgmedData.pUnkForRelease);
2607 ok(bindinfo.cbstgmedData == 3, "cbstgmedData = %lu\n", bindinfo.cbstgmedData);
2608
2609 ReleaseBindInfo(&bindinfo);
2610
2611 /* Same, but with pUnkForRelease, it's not marshaled back */
2612 rem_bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
2613 bindf = bindf2 = reserved = 0xdeadbeef;
2614
2615 memset(&bindinfo, 0, sizeof(bindinfo));
2616 bindinfo.cbSize = sizeof(bindinfo);
2617
2618 memset(&rem_bindinfo, 0, sizeof(rem_bindinfo));
2619 rem_bindinfo.cbSize = sizeof(rem_bindinfo);
2620
2621 rem_bindinfo.stgmedData.tymed = TYMED_ISTREAM;
2622 rem_bindinfo.stgmedData.pstm = binding_stream;
2623 rem_bindinfo.stgmedData.pUnkForRelease = &unk_out.IUnknown_iface;
2624 unk_out.ref = 1;
2625 rem_bindinfo.cbstgmedData = 3;
2626 IStream_AddRef(binding_stream);
2627
2628 hres = IBindStatusCallbackEx_GetBindInfoEx(callbackex, &bindf, &bindinfo, &bindf2, &reserved);
2629 ok(hres == S_OK, "GetBindInfoEx failed: %08lx\n", hres);
2630 ok(bindf == rem_bindf, "bindf = %lx, expected %lx\n", bindf, rem_bindf);
2631
2632 ok(in_bindinfo.cbSize == sizeof(in_bindinfo), "cbSize = %lu\n", in_bindinfo.cbSize);
2633 ok(!in_bindinfo.pUnk, "pUnk = %p\n", in_bindinfo.pUnk);
2634 ok(in_bindinfo.stgmedData.tymed == TYMED_NULL, "tymed = %lu\n",
2635 in_bindinfo.stgmedData.tymed);
2636
2637 ok(bindinfo.cbSize == sizeof(bindinfo), "cbSize = %lu\n", bindinfo.cbSize);
2638 ok(!bindinfo.pUnk, "pUnk = %p\n", bindinfo.pUnk);
2639 ok(bindinfo.stgmedData.tymed == TYMED_NULL, "tymed = %lu\n",
2640 bindinfo.stgmedData.tymed);
2641 ok(!bindinfo.stgmedData.pstm, "stm = %p\n",
2642 bindinfo.stgmedData.pstm);
2643 ok(!bindinfo.stgmedData.pUnkForRelease, "pUnkForRelease = %p\n",
2644 bindinfo.stgmedData.pUnkForRelease);
2645 ok(bindinfo.cbstgmedData == 3, "cbstgmedData = %lu\n", bindinfo.cbstgmedData);
2646
2647 ReleaseBindInfo(&bindinfo);
2648
2649 /* Return HGLOBAL stgmed from GetBindInfoEx, it's not marshaled back */
2650 rem_bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
2651 bindf = bindf2 = reserved = 0xdeadbeef;
2652
2653 memset(&bindinfo, 0, sizeof(bindinfo));
2654 bindinfo.cbSize = sizeof(bindinfo);
2655
2656 memset(&rem_bindinfo, 0, sizeof(rem_bindinfo));
2657 rem_bindinfo.cbSize = sizeof(rem_bindinfo);
2658
2659 rem_bindinfo.stgmedData.tymed = TYMED_HGLOBAL;
2660
2661 buf = GlobalAlloc(0, 5);
2662 strcpy(buf, "test");
2663 rem_bindinfo.stgmedData.hGlobal = buf;
2664 rem_bindinfo.cbstgmedData = 5;
2665
2666 hres = IBindStatusCallbackEx_GetBindInfoEx(callbackex, &bindf, &bindinfo, &bindf2, &reserved);
2667 ok(hres == S_OK, "GetBindInfoEx failed: %08lx\n", hres);
2668 ok(bindf == rem_bindf, "bindf = %lx, expected %lx\n", bindf, rem_bindf);
2669
2670 ok(in_bindinfo.cbSize == sizeof(in_bindinfo), "cbSize = %lu\n", in_bindinfo.cbSize);
2671 ok(!in_bindinfo.pUnk, "pUnk = %p\n", in_bindinfo.pUnk);
2672 ok(in_bindinfo.stgmedData.tymed == TYMED_NULL, "tymed = %lu\n",
2673 in_bindinfo.stgmedData.tymed);
2674
2675 ok(bindinfo.cbSize == sizeof(bindinfo), "cbSize = %lu\n", bindinfo.cbSize);
2676 ok(!bindinfo.pUnk, "pUnk = %p\n", bindinfo.pUnk);
2677 ok(bindinfo.stgmedData.tymed == TYMED_NULL, "tymed = %lu\n",
2678 bindinfo.stgmedData.tymed);
2679 ok(!bindinfo.stgmedData.pstm, "stm = %p\n",
2680 bindinfo.stgmedData.pstm);
2681 ok(!bindinfo.stgmedData.pUnkForRelease, "pUnkForRelease = %p\n",
2682 bindinfo.stgmedData.pUnkForRelease);
2683 ok(bindinfo.cbstgmedData == 5, "cbstgmedData = %lu\n", bindinfo.cbstgmedData);
2684
2685 ReleaseBindInfo(&bindinfo);
2686
2687 IBindStatusCallbackEx_Release(callbackex);
2688 }else {
2689 win_skip("IBindStatusCallbackEx not supported\n");
2690 }
2691
2692 /* Test marshaling stgmed from OnDataAvailable */
2693 memset(&in_stgmed, 0xcc, sizeof(in_stgmed));
2694 stgmed.tymed = TYMED_ISTREAM;
2695 stgmed.pstm = binding_stream;
2696 stgmed.pUnkForRelease = NULL;
2697
2698 hres = IBindStatusCallback_OnDataAvailable(bsc, 1, 10, &formatetc, &stgmed);
2699 ok(hres == S_OK, "OnDataAvailable failed: %08lx\n", hres);
2700
2701 ok(in_stgmed.tymed == TYMED_ISTREAM, "tymed = %lu\n", in_stgmed.tymed);
2702 ok(in_stgmed.pstm != NULL, "pstm = NULL\n");
2703 ok(!in_stgmed.pUnkForRelease, "pUnkForRelease = %p\n", in_stgmed.pUnkForRelease);
2704
2705 /* OnDataAvailable with both IStream and pUnkForRelease */
2706 memset(&in_stgmed, 0xcc, sizeof(in_stgmed));
2707 stgmed.tymed = TYMED_ISTREAM;
2708 stgmed.pstm = binding_stream;
2709 stgmed.pUnkForRelease = &unk_in.IUnknown_iface;
2710 unk_in.ref = 1;
2711
2712 hres = IBindStatusCallback_OnDataAvailable(bsc, 1, 10, &formatetc, &stgmed);
2713 ok(hres == S_OK, "OnDataAvailable failed: %08lx\n", hres);
2714
2715 ok(in_stgmed.tymed == TYMED_ISTREAM, "tymed = %lu\n", in_stgmed.tymed);
2716 ok(in_stgmed.pstm != NULL, "pstm = NULL\n");
2717 ok(in_stgmed.pUnkForRelease != NULL, "pUnkForRelease = %p\n", in_stgmed.pUnkForRelease);
2718 ok(unk_in.ref > 1, "ref = %lu\n", unk_in.ref);
2719
2720 /* OnDataAvailable with TYMED_ISTREAM, but NULL stream */
2721 memset(&in_stgmed, 0xcc, sizeof(in_stgmed));
2722 stgmed.tymed = TYMED_ISTREAM;
2723 stgmed.pstm = binding_stream;
2724 stgmed.pUnkForRelease = NULL;
2725
2726 hres = IBindStatusCallback_OnDataAvailable(bsc, 1, 10, &formatetc, &stgmed);
2727 ok(hres == S_OK, "OnDataAvailable failed: %08lx\n", hres);
2728
2729 ok(in_stgmed.tymed == TYMED_ISTREAM, "tymed = %lu\n", in_stgmed.tymed);
2730 ok(in_stgmed.pstm != NULL, "pstm = NULL\n");
2731 ok(!in_stgmed.pUnkForRelease, "pUnkForRelease = %p\n", in_stgmed.pUnkForRelease);
2732
2733 /* OnDataAvailable with TYMED_NULL and pUnkForRelease */
2734 memset(&in_stgmed, 0xcc, sizeof(in_stgmed));
2735 stgmed.tymed = TYMED_NULL;
2736 stgmed.pstm = binding_stream;
2737 stgmed.pUnkForRelease = &unk_in.IUnknown_iface;
2738 unk_in.ref = 1;
2739
2740 hres = IBindStatusCallback_OnDataAvailable(bsc, 1, 10, &formatetc, &stgmed);
2741 ok(hres == S_OK, "OnDataAvailable failed: %08lx\n", hres);
2742
2743 ok(in_stgmed.tymed == TYMED_NULL, "tymed = %lu\n", in_stgmed.tymed);
2744 ok(!in_stgmed.pstm, "pstm != NULL\n");
2745 ok(in_stgmed.pUnkForRelease != NULL, "pUnkForRelease = %p\n", in_stgmed.pUnkForRelease);
2746 ok(unk_in.ref == 1, "ref = %lu\n", unk_in.ref);
2747
2748 IStream_Release(binding_stream);
2749 IBindStatusCallback_Release(bsc);
2750
2752}
static HANDLE thread
Definition: service.c:33
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL delete_on_release, IStream **stream)
HRESULT WINAPI CoUnmarshalInterface(IStream *stream, REFIID riid, void **ppv)
Definition: marshal.c:793
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
BOOL WINAPI TerminateThread(IN HANDLE hThread, IN DWORD dwExitCode)
Definition: thread.c:587
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
#define L(x)
Definition: resources.c:13
r reserved
Definition: btrfs.c:3006
#define INFINITE
Definition: serial.h:102
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define debugstr_guid
Definition: kernel32.h:35
#define wine_dbgstr_w
Definition: kernel32.h:34
static DWORD bindf
Definition: protocol.c:70
static RefUnk unk_in
Definition: misc.c:2198
static DWORD WINAPI bsc_thread(void *arg)
Definition: misc.c:2202
static WCHAR **static WCHAR * a2co(const char *str)
Definition: misc.c:86
static RefUnk unk_out
Definition: misc.c:2198
strcpy
Definition: string.h:131
#define memset(x, y, z)
Definition: compat.h:39
LONG ref
Definition: misc.c:2160
IUnknown IUnknown_iface
Definition: misc.c:2159
Definition: xmldoc.c:231
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
Definition: synch.c:587
void WINAPI ReleaseBindInfo(BINDINFO *pbindinfo)
Definition: urlmon_main.c:572

Referenced by START_TEST().

◆ test_CoInternetCompareUrl()

static void test_CoInternetCompareUrl ( void  )
static

Definition at line 417 of file misc.c.

418{
420
421 hres = pCoInternetCompareUrl(url1, url1, 0);
422 ok(hres == S_OK, "CoInternetCompareUrl failed: %08lx\n", hres);
423
424 hres = pCoInternetCompareUrl(url1, url3, 0);
425 ok(hres == S_FALSE, "CoInternetCompareUrl failed: %08lx\n", hres);
426
427 hres = pCoInternetCompareUrl(url3, url1, 0);
428 ok(hres == S_FALSE, "CoInternetCompareUrl failed: %08lx\n", hres);
429}
static const WCHAR url3[]
Definition: misc.c:280

Referenced by START_TEST().

◆ test_CoInternetIsFeatureEnabled()

static void test_CoInternetIsFeatureEnabled ( void  )
static

Definition at line 1964 of file misc.c.

1964 {
1965 HRESULT hres;
1966
1967 hres = pCoInternetIsFeatureEnabled(FEATURE_ENTRY_COUNT, GET_FEATURE_FROM_PROCESS);
1968 ok(hres == E_FAIL, "CoInternetIsFeatureEnabled returned %08lx, expected E_FAIL\n", hres);
1969}
#define E_FAIL
Definition: ddrawi.h:102

Referenced by test_internet_features().

◆ test_CoInternetParseUrl()

static void test_CoInternetParseUrl ( void  )
static

Definition at line 336 of file misc.c.

337{
339 DWORD size;
340 int i;
341
342 static WCHAR buf[4096];
343
344 memset(buf, 0xf0, sizeof(buf));
345 hres = pCoInternetParseUrl(parse_tests[0].url, PARSE_SCHEMA, 0, buf,
346 3, &size, 0);
347 ok(hres == E_POINTER, "schema failed: %08lx, expected E_POINTER\n", hres);
348
349 for(i = 0; i < ARRAY_SIZE(parse_tests); i++) {
350 memset(buf, 0xf0, sizeof(buf));
351 hres = pCoInternetParseUrl(parse_tests[i].url, PARSE_SECURITY_URL, 0, buf,
352 ARRAY_SIZE(buf), &size, 0);
353 ok(hres == parse_tests[i].secur_hres, "[%d] security url failed: %08lx, expected %08lx\n",
354 i, hres, parse_tests[i].secur_hres);
355
356 memset(buf, 0xf0, sizeof(buf));
357 hres = pCoInternetParseUrl(parse_tests[i].url, PARSE_ENCODE, 0, buf,
358 ARRAY_SIZE(buf), &size, 0);
359 ok(hres == S_OK, "[%d] encoding failed: %08lx\n", i, hres);
360 ok(size == lstrlenW(parse_tests[i].encoded_url), "[%d] wrong size\n", i);
361 ok(!lstrcmpW(parse_tests[i].encoded_url, buf), "[%d] wrong encoded url\n", i);
362
363 memset(buf, 0xf0, sizeof(buf));
364 hres = pCoInternetParseUrl(parse_tests[i].url, PARSE_UNESCAPE, 0, buf,
365 ARRAY_SIZE(buf), &size, 0);
366 ok(hres == S_OK, "[%d] encoding failed: %08lx\n", i, hres);
367 ok(size == lstrlenW(parse_tests[i].encoded_url), "[%d] wrong size\n", i);
368 ok(!lstrcmpW(parse_tests[i].encoded_url, buf), "[%d] wrong encoded url\n", i);
369
370 memset(buf, 0xf0, sizeof(buf));
371 hres = pCoInternetParseUrl(parse_tests[i].url, PARSE_PATH_FROM_URL, 0, buf,
372 ARRAY_SIZE(buf), &size, 0);
373 ok(hres == parse_tests[i].path_hres, "[%d] path failed: %08lx, expected %08lx\n",
374 i, hres, parse_tests[i].path_hres);
375 if(parse_tests[i].path) {
376 ok(size == lstrlenW(parse_tests[i].path), "[%d] wrong size\n", i);
377 ok(!lstrcmpW(parse_tests[i].path, buf), "[%d] wrong path\n", i);
378 }
379
380 memset(buf, 0xf0, sizeof(buf));
381 hres = pCoInternetParseUrl(parse_tests[i].url, PARSE_SCHEMA, 0, buf,
382 ARRAY_SIZE(buf), &size, 0);
383 ok(hres == S_OK, "[%d] schema failed: %08lx\n", i, hres);
384 ok(size == lstrlenW(parse_tests[i].schema), "[%d] wrong size\n", i);
385 ok(!lstrcmpW(parse_tests[i].schema, buf), "[%d] wrong schema\n", i);
386
387 if(memcmp(parse_tests[i].url, wszRes, 3*sizeof(WCHAR))
388 && memcmp(parse_tests[i].url, wszAbout, 5*sizeof(WCHAR))) {
389 memset(buf, 0xf0, sizeof(buf));
390 hres = pCoInternetParseUrl(parse_tests[i].url, PARSE_DOMAIN, 0, buf,
391 ARRAY_SIZE(buf), &size, 0);
392 ok(hres == parse_tests[i].domain_hres, "[%d] domain failed: %08lx\n", i, hres);
393 if(parse_tests[i].domain)
394 ok(!lstrcmpW(parse_tests[i].domain, buf), "[%d] wrong domain, received %s\n", i, wine_dbgstr_w(buf));
395 }
396
397 memset(buf, 0xf0, sizeof(buf));
398 hres = pCoInternetParseUrl(parse_tests[i].url, PARSE_ROOTDOCUMENT, 0, buf,
399 ARRAY_SIZE(buf), &size, 0);
400 ok(hres == parse_tests[i].rootdocument_hres, "[%d] rootdocument failed: %08lx\n", i, hres);
401 if(parse_tests[i].rootdocument)
402 ok(!lstrcmpW(parse_tests[i].rootdocument, buf), "[%d] wrong rootdocument, received %s\n", i, wine_dbgstr_w(buf));
403 }
404
405 size = 0xdeadbeef;
406 hres = pCoInternetParseUrl(L"http://a/b/../c", PARSE_CANONICALIZE, 0, buf, 3, &size, 0);
407 ok(hres == E_POINTER, "got %#lx\n", hres);
408 ok(size == wcslen(L"http://a/c") + 1, "got %lu\n", size);
409
410 size = 0xdeadbeef;
411 hres = pCoInternetParseUrl(L"http://a/b/../c", PARSE_CANONICALIZE, 0, buf, sizeof(buf), &size, 0);
412 ok(hres == S_OK, "got %#lx\n", hres);
413 ok(!wcscmp(buf, L"http://a/c"), "got %s\n", debugstr_w(buf));
414 ok(size == wcslen(buf), "got %lu\n", size);
415}
#define lstrlenW
Definition: compat.h:750
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
GLsizeiptr size
Definition: glext.h:5919
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
#define debugstr_w
Definition: kernel32.h:32
const WCHAR * schema
static const WCHAR wszRes[]
Definition: misc.c:300
static const struct parse_test parse_tests[]
Definition: misc.c:326
LPCWSTR url
Definition: misc.c:432
Definition: cookie.c:42
#define E_POINTER
Definition: winerror.h:3480

Referenced by START_TEST().

◆ test_CoInternetQueryInfo()

static void test_CoInternetQueryInfo ( void  )
static

Definition at line 445 of file misc.c.

446{
447 BYTE buf[100];
448 DWORD cb, i;
450
451 for(i = 0; i < ARRAY_SIZE(query_info_tests); i++) {
452 cb = 0xdeadbeef;
453 memset(buf, '?', sizeof(buf));
454 hres = pCoInternetQueryInfo(query_info_tests[0].url, QUERY_USES_NETWORK, 0, buf, sizeof(buf), &cb, 0);
455 ok(hres == S_OK, "[%ld] CoInternetQueryInfo failed: %08lx\n", i, hres);
456 ok(cb == sizeof(DWORD), "[%ld] cb = %ld\n", i, cb);
457 ok(*(DWORD*)buf == query_info_tests[i].uses_net, "[%ld] ret %lx, expected %lx\n",
459
460 hres = pCoInternetQueryInfo(query_info_tests[0].url, QUERY_USES_NETWORK, 0, buf, 3, &cb, 0);
461 ok(hres == E_FAIL, "[%ld] CoInternetQueryInfo failed: %08lx, expected E_FAIL\n", i, hres);
462 hres = pCoInternetQueryInfo(query_info_tests[0].url, QUERY_USES_NETWORK, 0, NULL, sizeof(buf), &cb, 0);
463 ok(hres == E_FAIL, "[%ld] CoInternetQueryInfo failed: %08lx, expected E_FAIL\n", i, hres);
464
465 memset(buf, '?', sizeof(buf));
466 hres = pCoInternetQueryInfo(query_info_tests[0].url, QUERY_USES_NETWORK, 0, buf, sizeof(buf), NULL, 0);
467 ok(hres == S_OK, "[%ld] CoInternetQueryInfo failed: %08lx\n", i, hres);
468 ok(*(DWORD*)buf == query_info_tests[i].uses_net, "[%ld] ret %lx, expected %lx\n",
470 }
471}
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
static const struct @1876 query_info_tests[]
DWORD uses_net
Definition: misc.c:433
unsigned char BYTE
Definition: xxhash.c:193

Referenced by START_TEST().

◆ test_CoInternetSetFeatureEnabled()

static void test_CoInternetSetFeatureEnabled ( void  )
static

Definition at line 1986 of file misc.c.

1986 {
1987 HRESULT hres;
1988 DWORD i;
1989
1990 hres = pCoInternetSetFeatureEnabled(FEATURE_ENTRY_COUNT,SET_FEATURE_ON_PROCESS,TRUE);
1991 ok(hres == E_FAIL, "CoInternetSetFeatureEnabled returned %08lx, expected E_FAIL\n", hres);
1992
1993 for(i = 0; i < ARRAY_SIZE(internet_feature_tests); ++i) {
1994 hres = pCoInternetSetFeatureEnabled(internet_feature_tests[i].feature, internet_feature_tests[i].set_flags,
1997 ok(hres == internet_feature_tests[i].set_expected, "CoInternetSetFeatureEnabled returned %08lx, expected %08lx on test %ld\n",
1999
2000 hres = pCoInternetIsFeatureEnabled(internet_feature_tests[i].feature, internet_feature_tests[i].set_flags);
2002 ok(hres == internet_feature_tests[i].get_expected, "CoInternetIsFeatureEnabled returned %08lx, expected %08lx on test %ld\n",
2004
2005 }
2006}
GLboolean enable
Definition: glext.h:11120
#define todo_wine_if(is_todo)
Definition: minitest.h:81
HRESULT set_expected
Definition: misc.c:1975
BOOL get_todo
Definition: misc.c:1979
static const struct @1880 internet_feature_tests[]
INTERNETFEATURELIST feature
Definition: misc.c:1807
HRESULT get_expected
Definition: misc.c:1978
DWORD set_flags
Definition: misc.c:1973
BOOL set_todo
Definition: misc.c:1976

Referenced by test_internet_features().

◆ test_CopyBindInfo()

static void test_CopyBindInfo ( void  )
static

Definition at line 1310 of file misc.c.

1311{
1312 BINDINFO src[2], dest[2];
1313 SECURITY_DESCRIPTOR sec_desc;
1314 HRESULT hres;
1315 int i;
1316
1317 hres = pCopyBindInfo(NULL, NULL);
1318 ok(hres == E_POINTER, "CopyBindInfo returned %08lx, expected E_POINTER\n", hres);
1319
1320 memset(src, 0, sizeof(BINDINFO[2]));
1321 memset(dest, 0xde, sizeof(BINDINFO[2]));
1322 hres = pCopyBindInfo(src, dest);
1323 ok(hres == E_INVALIDARG, "CopyBindInfo returned: %08lx, expected E_INVALIDARG\n", hres);
1324
1325 memset(src, 0, sizeof(BINDINFO[2]));
1326 memset(dest, 0xde, sizeof(BINDINFO[2]));
1327 src[0].cbSize = sizeof(BINDINFO);
1328 dest[0].cbSize = 0;
1329 hres = pCopyBindInfo(src, dest);
1330 ok(hres == E_INVALIDARG, "CopyBindInfo returned: %08lx, expected E_INVALIDARG\n", hres);
1331
1332 memset(src, 0, sizeof(BINDINFO[2]));
1333 memset(dest, 0xde, sizeof(BINDINFO[2]));
1334 src[0].cbSize = 1;
1335 dest[0].cbSize = sizeof(BINDINFO)+sizeof(DWORD);
1336 hres = pCopyBindInfo(src, dest);
1337 ok(hres == S_OK, "CopyBindInfo failed: %08lx\n", hres);
1338 ok(dest[0].cbSize == sizeof(BINDINFO)+sizeof(DWORD), "incorrect cbSize: %ld\n", dest[0].cbSize);
1339 for(i=1; i<dest[0].cbSize/sizeof(int); i++)
1340 ok(((int*)dest)[i] == 0, "unset values should be set to 0, got %d on %d\n", ((int*)dest)[i], i);
1341
1342 memset(src, 0, sizeof(BINDINFO[2]));
1343 memset(dest, 0xde, sizeof(BINDINFO[2]));
1344 src[0].cbSize = sizeof(BINDINFO)+2*sizeof(DWORD);
1345 dest[0].cbSize = sizeof(BINDINFO)+sizeof(DWORD);
1346 hres = pCopyBindInfo(src, dest);
1347 ok(hres == S_OK, "CopyBindInfo failed: %08lx\n", hres);
1348 ok(dest[1].cbSize == src[1].cbSize, "additional data should be copied\n");
1349 ok(dest[1].szExtraInfo != src[1].szExtraInfo,
1350 "data not fitting in destination buffer should not be copied\n");
1351
1352 memset(src, 0xf0, sizeof(BINDINFO[2]));
1353 memset(dest, 0xde, sizeof(BINDINFO[2]));
1354 src[0].cbSize = sizeof(BINDINFO);
1355 src[0].szExtraInfo = CoTaskMemAlloc(sizeof(WCHAR));
1356 src[0].szExtraInfo[0] = 0;
1357 src[0].szCustomVerb = NULL;
1358 src[0].pUnk = NULL;
1359 src[0].stgmedData.tymed = TYMED_NULL;
1360 src[0].stgmedData.pUnkForRelease = NULL;
1361 dest[0].cbSize = sizeof(BINDINFO);
1362 hres = pCopyBindInfo(src, dest);
1363 ok(hres == S_OK, "CopyBindInfo failed: %08lx\n", hres);
1364
1365 ok(dest[0].cbSize == sizeof(BINDINFO), "incorrect cbSize: %ld\n", dest[0].cbSize);
1366 ok(dest[0].szExtraInfo && !dest[0].szExtraInfo[0] && dest[0].szExtraInfo!=src[0].szExtraInfo,
1367 "incorrect szExtraInfo: (%p!=%p) %d\n", dest[0].szExtraInfo,
1368 src[0].szExtraInfo, dest[0].szExtraInfo[0]);
1369 ok(!memcmp(&dest[0].stgmedData, &src[0].stgmedData, sizeof(STGMEDIUM)),
1370 "incorrect stgmedData value\n");
1371 ok(src[0].grfBindInfoF == dest[0].grfBindInfoF, "grfBindInfoF = %lx, expected %lx\n",
1372 dest[0].grfBindInfoF, src[0].grfBindInfoF);
1373 ok(src[0].dwBindVerb == dest[0].dwBindVerb, "dwBindVerb = %lx, expected %lx\n",
1374 dest[0].dwBindVerb, src[0].dwBindVerb);
1375 ok(!dest[0].szCustomVerb, "szCustmoVerb != NULL\n");
1376 ok(src[0].cbstgmedData == dest[0].cbstgmedData, "cbstgmedData = %lx, expected %lx\n",
1377 dest[0].cbstgmedData, src[0].cbstgmedData);
1378 ok(src[0].dwOptions == dest[0].dwOptions, "dwOptions = %lx, expected %lx\n",
1379 dest[0].dwOptions, src[0].dwOptions);
1380 ok(src[0].dwOptionsFlags == dest[0].dwOptionsFlags, "dwOptionsFlags = %lx, expected %lx\n",
1381 dest[0].dwOptionsFlags, src[0].dwOptionsFlags);
1382 ok(src[0].dwCodePage == dest[0].dwCodePage, "dwCodePage = %lx, expected %lx\n",
1383 dest[0].dwCodePage, src[0].dwCodePage);
1384 ok(!dest[0].securityAttributes.nLength,
1385 "unexpected securityAttributes.nLength value: %ld\n",
1386 dest[0].securityAttributes.nLength);
1387 ok(!dest[0].securityAttributes.lpSecurityDescriptor,
1388 "unexpected securityAttributes.lpSecurityDescriptor value: %p\n",
1389 dest[0].securityAttributes.lpSecurityDescriptor);
1390 ok(!dest[0].securityAttributes.bInheritHandle,
1391 "unexpected securityAttributes.bInheritHandle value: %d\n",
1392 dest[0].securityAttributes.bInheritHandle);
1393 ok(!memcmp(&dest[0].iid, &src[0].iid, sizeof(IID)),
1394 "incorrect iid value\n");
1395 ok(!dest[0].pUnk, "pUnk != NULL\n");
1396 ok(src[0].dwReserved == dest[0].dwReserved, "dwReserved = %lx, expected %lx\n",
1397 dest[0].dwReserved, src[0].dwReserved);
1398
1399 CoTaskMemFree(src[0].szExtraInfo);
1400 CoTaskMemFree(dest[0].szExtraInfo);
1401
1402 src[0].szExtraInfo = NULL;
1403 src[0].securityAttributes.nLength = sizeof(SECURITY_ATTRIBUTES);
1405 "InitializeSecurityDescriptor failed\n");
1406 src[0].securityAttributes.lpSecurityDescriptor = (void*)&sec_desc;
1407 src[0].securityAttributes.bInheritHandle = TRUE;
1408 hres = pCopyBindInfo(src, dest);
1409 ok(hres == S_OK, "CopyBindInfo failed: %08lx\n", hres);
1410 ok(!dest[0].securityAttributes.nLength,
1411 "unexpected securityAttributes.nLength value: %ld\n",
1412 dest[0].securityAttributes.nLength);
1413 ok(!dest[0].securityAttributes.lpSecurityDescriptor,
1414 "unexpected securityAttributes.lpSecurityDescriptor value: %p\n",
1415 dest[0].securityAttributes.lpSecurityDescriptor);
1416 ok(!dest[0].securityAttributes.bInheritHandle,
1417 "unexpected securityAttributes.bInheritHandle value: %d\n",
1418 dest[0].securityAttributes.bInheritHandle);
1419}
#define E_INVALIDARG
Definition: ddrawi.h:101
BOOL WINAPI InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR pSecurityDescriptor, DWORD dwRevision)
Definition: security.c:929
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389
struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
GLenum src
Definition: glext.h:6340
static char * dest
Definition: rtl.c:149
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
DWORD dwOptions
Definition: solitaire.cpp:25
#define SECURITY_DESCRIPTOR_REVISION
Definition: setypes.h:58

Referenced by START_TEST().

◆ test_CopyStgMedium()

static void test_CopyStgMedium ( void  )
static

Definition at line 1232 of file misc.c.

1233{
1234 STGMEDIUM src, dst;
1235 HGLOBAL empty, hg;
1236 char *ptr1, *ptr2;
1237 HRESULT hres;
1238 int size;
1239
1240 static WCHAR fileW[] = {'f','i','l','e',0};
1241
1242 memset(&src, 0xf0, sizeof(src));
1243 memset(&dst, 0xe0, sizeof(dst));
1244 memset(&empty, 0xf0, sizeof(empty));
1245 src.tymed = TYMED_NULL;
1246 src.pUnkForRelease = NULL;
1247 hres = pCopyStgMedium(&src, &dst);
1248 ok(hres == S_OK, "CopyStgMedium failed: %08lx\n", hres);
1249 ok(dst.tymed == TYMED_NULL, "tymed=%ld\n", dst.tymed);
1250 ok(dst.hGlobal == empty, "u=%p\n", dst.hGlobal);
1251 ok(!dst.pUnkForRelease, "pUnkForRelease=%p, expected NULL\n", dst.pUnkForRelease);
1252
1253 memset(&dst, 0xe0, sizeof(dst));
1254 src.tymed = TYMED_ISTREAM;
1255 src.pstm = NULL;
1256 src.pUnkForRelease = NULL;
1257 hres = pCopyStgMedium(&src, &dst);
1258 ok(hres == S_OK, "CopyStgMedium failed: %08lx\n", hres);
1259 ok(dst.tymed == TYMED_ISTREAM, "tymed=%ld\n", dst.tymed);
1260 ok(!dst.pstm, "pstm=%p\n", dst.pstm);
1261 ok(!dst.pUnkForRelease, "pUnkForRelease=%p, expected NULL\n", dst.pUnkForRelease);
1262
1263 memset(&dst, 0xe0, sizeof(dst));
1264 src.tymed = TYMED_FILE;
1265 src.lpszFileName = fileW;
1266 src.pUnkForRelease = NULL;
1267 hres = pCopyStgMedium(&src, &dst);
1268 ok(hres == S_OK, "CopyStgMedium failed: %08lx\n", hres);
1269 ok(dst.tymed == TYMED_FILE, "tymed=%ld\n", dst.tymed);
1270 ok(dst.lpszFileName && dst.lpszFileName != fileW, "lpszFileName=%p\n", dst.lpszFileName);
1271 ok(!lstrcmpW(dst.lpszFileName, fileW), "wrong file name\n");
1272 ok(!dst.pUnkForRelease, "pUnkForRelease=%p, expected NULL\n", dst.pUnkForRelease);
1274
1275 /* TYMED_HGLOBAL */
1277 ptr1 = GlobalLock(hg);
1278 memset(ptr1, 0xfa, 10);
1279 memset(&dst, 0xe0, sizeof(dst));
1280 src.tymed = TYMED_HGLOBAL;
1281 src.hGlobal = hg;
1282 hres = pCopyStgMedium(&src, &dst);
1283 ok(hres == S_OK, "CopyStgMedium failed: %08lx\n", hres);
1284 ok(dst.tymed == TYMED_HGLOBAL, "tymed=%ld\n", dst.tymed);
1285 ok(dst.hGlobal != hg, "got %p, %p\n", dst.hGlobal, hg);
1286 size = GlobalSize(dst.hGlobal);
1287 ok(size == 10, "got size %d\n", size);
1288 /* compare contents */
1289 ptr2 = GlobalLock(dst.hGlobal);
1290 ok(!memcmp(ptr1, ptr2, 10), "got wrong data\n");
1291 GlobalUnlock(ptr2);
1292 GlobalUnlock(ptr1);
1293 ok(GlobalFlags(dst.hGlobal) == 0, "got 0x%08x\n", GlobalFlags(dst.hGlobal));
1294 GlobalFree(hg);
1296
1297 memset(&dst, 0xe0, sizeof(dst));
1298 src.tymed = TYMED_HGLOBAL;
1299 src.hGlobal = NULL;
1300 hres = pCopyStgMedium(&src, &dst);
1301 ok(hres == S_OK, "CopyStgMedium failed: %08lx\n", hres);
1302 ok(dst.hGlobal == NULL, "got %p\n", dst.hGlobal);
1303
1304 hres = pCopyStgMedium(&src, NULL);
1305 ok(hres == E_POINTER, "CopyStgMedium failed: %08lx, expected E_POINTER\n", hres);
1306 hres = pCopyStgMedium(NULL, &dst);
1307 ok(hres == E_POINTER, "CopyStgMedium failed: %08lx, expected E_POINTER\n", hres);
1308}
static const WCHAR empty[1]
Definition: string.c:47
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
Definition: ole2.c:2014
static const WCHAR fileW[]
Definition: sec_mgr.c:40
GLenum GLenum dst
Definition: glext.h:6340
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
Definition: heapmem.c:611
UINT NTAPI GlobalFlags(HGLOBAL hMem)
Definition: heapmem.c:520
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
Definition: heapmem.c:1090
static ERESOURCE GlobalLock
Definition: sys_arch.c:8
#define GMEM_MOVEABLE
Definition: winbase.h:318
_In_ FONTOBJ _In_ ULONG _In_ HGLYPH hg
Definition: winddi.h:3871

Referenced by START_TEST().

◆ test_CreateFormatEnum()

static void test_CreateFormatEnum ( void  )
static

Definition at line 101 of file misc.c.

102{
103 IEnumFORMATETC *fenum = NULL, *fenum2 = NULL;
104 FORMATETC fetc[5];
105 ULONG ul;
107
108 static DVTARGETDEVICE dev = {sizeof(dev),0,0,0,0,{0}};
109 static FORMATETC formatetc[] = {
110 {0,&dev,0,0,0},
111 {0,&dev,0,1,0},
112 {0,NULL,0,2,0},
113 {0,NULL,0,3,0},
114 {0,NULL,0,4,0}
115 };
116
117 hres = CreateFormatEnumerator(0, formatetc, &fenum);
118 ok(hres == E_FAIL, "CreateFormatEnumerator failed: %08lx, expected E_FAIL\n", hres);
119 hres = CreateFormatEnumerator(0, formatetc, NULL);
120 ok(hres == E_INVALIDARG, "CreateFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
121 hres = CreateFormatEnumerator(5, formatetc, NULL);
122 ok(hres == E_INVALIDARG, "CreateFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
123
124
125 hres = CreateFormatEnumerator(5, formatetc, &fenum);
126 ok(hres == S_OK, "CreateFormatEnumerator failed: %08lx\n", hres);
127 if(FAILED(hres))
128 return;
129
130 hres = IEnumFORMATETC_Next(fenum, 2, NULL, &ul);
131 ok(hres == E_INVALIDARG, "Next failed: %08lx, expected E_INVALIDARG\n", hres);
132 ul = 100;
133 hres = IEnumFORMATETC_Next(fenum, 0, fetc, &ul);
134 ok(hres == S_OK, "Next failed: %08lx\n", hres);
135 ok(ul == 0, "ul=%ld, expected 0\n", ul);
136
137 hres = IEnumFORMATETC_Next(fenum, 2, fetc, &ul);
138 ok(hres == S_OK, "Next failed: %08lx\n", hres);
139 ok(fetc[0].lindex == 0, "fetc[0].lindex=%ld, expected 0\n", fetc[0].lindex);
140 ok(fetc[1].lindex == 1, "fetc[1].lindex=%ld, expected 1\n", fetc[1].lindex);
141 ok(fetc[0].ptd == &dev, "fetc[0].ptd=%p, expected %p\n", fetc[0].ptd, &dev);
142 ok(ul == 2, "ul=%ld, expected 2\n", ul);
143
144 hres = IEnumFORMATETC_Skip(fenum, 1);
145 ok(hres == S_OK, "Skip failed: %08lx\n", hres);
146
147 hres = IEnumFORMATETC_Next(fenum, 4, fetc, &ul);
148 ok(hres == S_FALSE, "Next failed: %08lx, expected S_FALSE\n", hres);
149 ok(fetc[0].lindex == 3, "fetc[0].lindex=%ld, expected 3\n", fetc[0].lindex);
150 ok(fetc[1].lindex == 4, "fetc[1].lindex=%ld, expected 4\n", fetc[1].lindex);
151 ok(fetc[0].ptd == NULL, "fetc[0].ptd=%p, expected NULL\n", fetc[0].ptd);
152 ok(ul == 2, "ul=%ld, expected 2\n", ul);
153
154 hres = IEnumFORMATETC_Next(fenum, 4, fetc, &ul);
155 ok(hres == S_FALSE, "Next failed: %08lx, expected S_FALSE\n", hres);
156 ok(ul == 0, "ul=%ld, expected 0\n", ul);
157 ul = 100;
158 hres = IEnumFORMATETC_Next(fenum, 0, fetc, &ul);
159 ok(hres == S_OK, "Next failed: %08lx\n", hres);
160 ok(ul == 0, "ul=%ld, expected 0\n", ul);
161
162 hres = IEnumFORMATETC_Skip(fenum, 3);
163 ok(hres == S_FALSE, "Skip failed: %08lx, expected S_FALSE\n", hres);
164
165 hres = IEnumFORMATETC_Reset(fenum);
166 ok(hres == S_OK, "Reset failed: %08lx\n", hres);
167
168 hres = IEnumFORMATETC_Next(fenum, 5, fetc, NULL);
169 ok(hres == S_OK, "Next failed: %08lx\n", hres);
170 ok(fetc[0].lindex == 0, "fetc[0].lindex=%ld, expected 0\n", fetc[0].lindex);
171
172 hres = IEnumFORMATETC_Reset(fenum);
173 ok(hres == S_OK, "Reset failed: %08lx\n", hres);
174
175 hres = IEnumFORMATETC_Skip(fenum, 2);
176 ok(hres == S_OK, "Skip failed: %08lx\n", hres);
177
178 hres = IEnumFORMATETC_Clone(fenum, NULL);
179 ok(hres == E_INVALIDARG, "Clone failed: %08lx, expected E_INVALIDARG\n", hres);
180
181 hres = IEnumFORMATETC_Clone(fenum, &fenum2);
182 ok(hres == S_OK, "Clone failed: %08lx\n", hres);
183
184 if(SUCCEEDED(hres)) {
185 ok(fenum != fenum2, "fenum == fenum2\n");
186
187 hres = IEnumFORMATETC_Next(fenum2, 2, fetc, &ul);
188 ok(hres == S_OK, "Next failed: %08lx\n", hres);
189 ok(fetc[0].lindex == 2, "fetc[0].lindex=%ld, expected 2\n", fetc[0].lindex);
190
191 IEnumFORMATETC_Release(fenum2);
192 }
193
194 hres = IEnumFORMATETC_Next(fenum, 2, fetc, &ul);
195 ok(hres == S_OK, "Next failed: %08lx\n", hres);
196 ok(fetc[0].lindex == 2, "fetc[0].lindex=%ld, expected 2\n", fetc[0].lindex);
197
198 hres = IEnumFORMATETC_Skip(fenum, 1);
199 ok(hres == S_OK, "Skip failed: %08lx\n", hres);
200
201 IEnumFORMATETC_Release(fenum);
202}
_In_ size_t const _In_ int _In_ bool const _In_ unsigned const _In_ __acrt_rounding_mode const _Inout_ __crt_cached_ptd_host & ptd
Definition: cvt.cpp:355
HRESULT WINAPI CreateFormatEnumerator(UINT cfmtetc, FORMATETC *rgfmtetc, IEnumFORMATETC **ppenumfmtetc)
Definition: format.c:177
uint32_t ULONG
Definition: typedefs.h:59

Referenced by START_TEST().

◆ test_FindMimeFromData()

static void test_FindMimeFromData ( void  )
static

Definition at line 711 of file misc.c.

712{
713 WCHAR *mime;
715 BYTE b;
716 int i;
717
718 static const WCHAR app_octet_streamW[] =
719 {'a','p','p','l','i','c','a','t','i','o','n','/','o','c','t','e','t','-','s','t','r','e','a','m',0};
720 static const WCHAR image_pjpegW[] = {'i','m','a','g','e','/','p','j','p','e','g',0};
721 static const WCHAR text_htmlW[] = {'t','e','x','t','/','h','t','m','l',0};
722 static const WCHAR text_plainW[] = {'t','e','x','t','/','p','l','a','i','n',0};
723
724 for(i = 0; i < ARRAY_SIZE(mime_tests); i++) {
725 mime = (LPWSTR)0xf0f0f0f0;
726 hres = pFindMimeFromData(NULL, mime_tests[i].url, NULL, 0, NULL, 0, &mime, 0);
727 if(mime_tests[i].mime) {
728 ok(hres == S_OK || broken(mime_tests[i].broken_failure), "[%d] FindMimeFromData failed: %08lx\n", i, hres);
729 if(hres == S_OK) {
732 "[%d] wrong mime: %s\n", i, wine_dbgstr_w(mime));
734 }
735 }else {
736 ok(hres == E_FAIL || hres == mime_tests[i].hres,
737 "[%d] FindMimeFromData failed: %08lx, expected %08lx\n",
738 i, hres, mime_tests[i].hres);
739 ok(mime == (LPWSTR)0xf0f0f0f0, "[%d] mime != 0xf0f0f0f0\n", i);
740 }
741
742 mime = (LPWSTR)0xf0f0f0f0;
743 hres = pFindMimeFromData(NULL, mime_tests[i].url, NULL, 0, text_plainW, 0, &mime, 0);
744 ok(hres == S_OK, "[%d] FindMimeFromData failed: %08lx\n", i, hres);
745 ok(!lstrcmpW(mime, L"text/plain"), "[%d] wrong mime: %s\n", i, wine_dbgstr_w(mime));
747
748 mime = (LPWSTR)0xf0f0f0f0;
749 hres = pFindMimeFromData(NULL, mime_tests[i].url, NULL, 0, app_octet_streamW, 0, &mime, 0);
750 ok(hres == S_OK, "[%d] FindMimeFromData failed: %08lx\n", i, hres);
751 ok(!lstrcmpW(mime, L"application/octet-stream"), "[%d] wrong mime: %s\n", i, wine_dbgstr_w(mime));
753 }
754
755 for(i = 0; i < ARRAY_SIZE(mime_tests2); i++) {
756 hres = pFindMimeFromData(NULL, mime_tests2[i].url, mime_tests2[i].data, mime_tests2[i].size,
758 ok(hres == S_OK, "[%d] FindMimeFromData failed: %08lx\n", i, hres);
761 "[%d] wrong mime: %s\n", i, wine_dbgstr_w(mime));
764 continue;
765
766 hres = pFindMimeFromData(NULL, NULL, mime_tests2[i].data, mime_tests2[i].size,
767 app_octet_streamW, 0, &mime, 0);
768 ok(hres == S_OK, "[%d] FindMimeFromData failed: %08lx\n", i, hres);
771 "[%d] wrong mime: %s\n", i, wine_dbgstr_w(mime));
773
774 hres = pFindMimeFromData(NULL, NULL, mime_tests2[i].data, mime_tests2[i].size,
775 text_plainW, 0, &mime, 0);
776 ok(hres == S_OK, "[%d] FindMimeFromData failed: %08lx\n", i, hres);
779 "[%d] wrong mime: %s\n", i, wine_dbgstr_w(mime));
781
782 hres = pFindMimeFromData(NULL, NULL, mime_tests2[i].data, mime_tests2[i].size,
783 text_htmlW, 0, &mime, 0);
784 ok(hres == S_OK, "[%d] FindMimeFromData failed: %08lx\n", i, hres);
785 if(!lstrcmpW(L"application/octet-stream", mime_tests2[i].mime)
786 || !lstrcmpW(L"text/plain", mime_tests2[i].mime) || i==92)
787 ok(!lstrcmpW(mime, L"text/html"), "[%d] wrong mime: %s\n", i, wine_dbgstr_w(mime));
788 else
789 ok(!lstrcmpW(mime, mime_tests2[i].mime), "[%d] wrong mime: %s\n", i, wine_dbgstr_w(mime));
791
792 hres = pFindMimeFromData(NULL, NULL, mime_tests2[i].data, mime_tests2[i].size,
793 image_pjpegW, 0, &mime, 0);
794 ok(hres == S_OK, "[%d] FindMimeFromData failed: %08lx\n", i, hres);
797 "[%d] wrong mime, got %s\n", i, wine_dbgstr_w(mime));
799 }
800
801 hres = pFindMimeFromData(NULL, NULL, NULL, 0, NULL, 0, &mime, 0);
802 ok(hres == E_INVALIDARG, "FindMimeFromData failed: %08lx, expected E_INVALIDARG\n", hres);
803
804 hres = pFindMimeFromData(NULL, NULL, NULL, 0, text_plainW, 0, &mime, 0);
805 ok(hres == E_INVALIDARG, "FindMimeFromData failed: %08lx, expected E_INVALIDARG\n", hres);
806
807 hres = pFindMimeFromData(NULL, NULL, data1, 0, NULL, 0, &mime, 0);
808 ok(hres == E_FAIL, "FindMimeFromData failed: %08lx, expected E_FAIL\n", hres);
809
810 hres = pFindMimeFromData(NULL, url1, data1, 0, NULL, 0, &mime, 0);
811 ok(hres == E_FAIL, "FindMimeFromData failed: %08lx, expected E_FAIL\n", hres);
812
813 hres = pFindMimeFromData(NULL, NULL, data1, 0, text_plainW, 0, &mime, 0);
814 ok(hres == S_OK, "FindMimeFromData failed: %08lx\n", hres);
815 ok(!lstrcmpW(mime, L"text/plain"), "wrong mime: %s\n", wine_dbgstr_w(mime));
817
818 hres = pFindMimeFromData(NULL, NULL, data1, 0, text_plainW, 0, NULL, 0);
819 ok(hres == E_INVALIDARG, "FindMimeFromData failed: %08lx, expected E_INVALIDARG\n", hres);
820}
#define broken(x)
Definition: atltest.h:178
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
#define b
Definition: ke_i.h:79
static const WCHAR text_plainW[]
Definition: mimefilter.c:507
static const WCHAR image_pjpegW[]
Definition: mimefilter.c:491
const WCHAR * proposed_mime
Definition: misc.c:598
BOOL broken_failure
Definition: misc.c:477
const WCHAR * mime_pjpeg
Definition: misc.c:595
static const struct @1878 mime_tests2[]
static const struct @1877 mime_tests[]
const WCHAR * mime
Definition: misc.c:475
const WCHAR * broken_mime
Definition: misc.c:478
static const WCHAR text_htmlW[]
Definition: navigate.c:29
Definition: tftpd.h:126
uint16_t * LPWSTR
Definition: typedefs.h:56

Referenced by START_TEST().

◆ test_internet_feature_defaults()

static void test_internet_feature_defaults ( void  )
static

Definition at line 1842 of file misc.c.

1842 {
1843 HRESULT hres;
1844 DWORD i;
1845
1846 for(i = 0; i < ARRAY_SIZE(default_feature_tests); ++i) {
1847 hres = pCoInternetIsFeatureEnabled(default_feature_tests[i].feature, default_feature_tests[i].get_flags);
1849 ok(hres == default_feature_tests[i].expected, "CoInternetIsFeatureEnabled returned %08lx, expected %08lx on test %ld\n",
1851 }
1852}
BOOL todo
Definition: filedlg.c:313
BOOL expected
Definition: store.c:2000
static const struct @1879 default_feature_tests[]
DWORD get_flags
Definition: misc.c:1808

Referenced by test_internet_features_registry().

◆ test_internet_features()

static void test_internet_features ( void  )
static

Definition at line 2008 of file misc.c.

2008 {
2009 HKEY key;
2010 DWORD res;
2011
2012 if(!pCoInternetIsFeatureEnabled || !pCoInternetSetFeatureEnabled) {
2013 win_skip("Skipping internet feature tests, IE is too old\n");
2014 return;
2015 }
2016
2017 /* IE10 takes FeatureControl key into account only if it's available upon process start. */
2019 if(res != ERROR_SUCCESS) {
2021 STARTUPINFOA si = { 0 };
2022 char cmdline[MAX_PATH];
2023 char **argv;
2024 BOOL ret;
2025
2027 ok(res == ERROR_SUCCESS, "RegCreateKey failed: %ld\n", res);
2028
2029 trace("Running features tests in a separated process.\n");
2030
2032 sprintf(cmdline, "\"%s\" %s internet_features", argv[0], argv[1]);
2033 ret = CreateProcessA(argv[0], cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
2034 ok(ret, "Could not create process: %lu\n", GetLastError());
2038
2040 return;
2041 }
2042
2046}
#define trace
Definition: atltest.h:70
#define ERROR_SUCCESS
Definition: deptool.c:10
LONG WINAPI RegCreateKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:1179
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3234
LONG WINAPI RegDeleteKeyA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey)
Definition: reg.c:1224
#define CloseHandle
Definition: compat.h:739
#define MAX_PATH
Definition: compat.h:34
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessA(const char *app_name, char *cmd_line, SECURITY_ATTRIBUTES *process_attr, SECURITY_ATTRIBUTES *thread_attr, BOOL inherit, DWORD flags, void *env, const char *cur_dir, STARTUPINFOA *startup_info, PROCESS_INFORMATION *info)
Definition: process.c:686
unsigned int BOOL
Definition: ntddk_ex.h:94
GLuint res
Definition: glext.h:9613
#define sprintf
Definition: sprintf.c:45
static PROCESS_INFORMATION pi
Definition: debugger.c:2303
static SYSTEM_INFO si
Definition: virtual.c:39
static void test_internet_features_registry(void)
Definition: misc.c:1864
static void test_CoInternetIsFeatureEnabled(void)
Definition: misc.c:1964
static void test_CoInternetSetFeatureEnabled(void)
Definition: misc.c:1986
static const char * szFeatureControlKey
Definition: misc.c:1862
#define wait_child_process
Definition: test.h:159
TCHAR * cmdline
Definition: stretchblt.cpp:32
Definition: copy.c:22
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Referenced by START_TEST().

◆ test_internet_features_registry()

static void test_internet_features_registry ( void  )
static

Definition at line 1864 of file misc.c.

1864 {
1865 HRESULT hres;
1866 DWORD res;
1867 char module[MAX_PATH];
1868 char *name;
1870 HKEY feature;
1871 DWORD value;
1872 BOOL skip_zone;
1873 BOOL delete_feature_key = TRUE;
1874
1875 static const char* szFeatureBehaviorsKey = "FEATURE_BEHAVIORS";
1876 static const char* szFeatureZoneElevationKey = "FEATURE_ZONE_ELEVATION";
1877
1878 if(!pIEInstallScope) {
1879 win_skip("Skipping internet feature registry tests, IE is too old...\n");
1880 return;
1881 }
1882
1884 ok(res, "GetModuleFileName failed: %ld\n", GetLastError());
1885
1886 name = strrchr(module, '\\')+1;
1887
1888 /* Some Windows machines don't have a FeatureControl key in HKCU. */
1890 ok(res == ERROR_SUCCESS, "RegCreateKey failed: %ld\n", res);
1891
1892 res = RegOpenKeyA(feature_control, szFeatureBehaviorsKey, &feature);
1893 if(res == ERROR_SUCCESS) {
1894 /* FEATURE_BEHAVIORS already existed, so don't delete it when we're done. */
1895 delete_feature_key = FALSE;
1896 }else {
1897 res = RegCreateKeyA(feature_control, szFeatureBehaviorsKey, &feature);
1898 ok(res == ERROR_SUCCESS, "RegCreateKey failed: %ld\n", res);
1899 }
1900
1901 value = 0;
1902 res = RegSetValueExA(feature, name, 0, REG_DWORD, (BYTE*)&value, sizeof(DWORD));
1903 ok(res == ERROR_SUCCESS, "RegSetValueEx failed: %ld\n", res);
1904
1905 hres = pCoInternetIsFeatureEnabled(FEATURE_BEHAVIORS, GET_FEATURE_FROM_PROCESS);
1906 ok(hres == S_FALSE, "CoInternetIsFeatureEnabled returned %08lx, expected S_FALSE\n", hres);
1907
1908 if(delete_feature_key) {
1910 RegDeleteKeyA(feature_control, szFeatureBehaviorsKey);
1911 } else {
1914 }
1915
1916 /* IE's feature control cached the value it got from the registry earlier. */
1917 hres = pCoInternetIsFeatureEnabled(FEATURE_BEHAVIORS, GET_FEATURE_FROM_PROCESS);
1918 ok(hres == S_FALSE, "CoInternetIsFeatureEnabled returned %08lx, expected S_FALSE\n", hres);
1919
1920 /* Restore this feature back to its default value. */
1921 hres = pCoInternetSetFeatureEnabled(FEATURE_BEHAVIORS, SET_FEATURE_ON_PROCESS, TRUE);
1922 ok(hres == S_OK, "CoInternetSetFeatureEnabled failed: %08lx\n", hres);
1923
1925
1927 ok(res == ERROR_SUCCESS, "RegOpenKey failed: %ld\n", res);
1928
1929 res = RegOpenKeyA(feature_control, szFeatureZoneElevationKey, &feature);
1930 ok(res == ERROR_SUCCESS, "RegOpenKey failed: %ld\n", res);
1931
1932 value = 1;
1933 res = RegSetValueExA(feature, "*", 0, REG_DWORD, (BYTE*)&value, sizeof(DWORD));
1934 if (res == ERROR_ACCESS_DENIED)
1935 {
1936 skip("Not allowed to modify zone elevation\n");
1937 skip_zone = TRUE;
1938 }
1939 else
1940 {
1941 skip_zone = FALSE;
1942 ok(res == ERROR_SUCCESS, "RegSetValueEx failed: %ld\n", res);
1943
1944 hres = pCoInternetIsFeatureEnabled(FEATURE_ZONE_ELEVATION, GET_FEATURE_FROM_PROCESS);
1945 ok(hres == S_OK, "CoInternetIsFeatureEnabled returned %08lx, expected S_OK\n", hres);
1946 }
1950
1951 /* Value is still cached from last time. */
1952 if (!skip_zone)
1953 {
1954 hres = pCoInternetIsFeatureEnabled(FEATURE_ZONE_ELEVATION, GET_FEATURE_FROM_PROCESS);
1955 ok(hres == S_OK, "CoInternetIsFeatureEnabled returned %08lx, expected S_OK\n", hres);
1956
1957 hres = pCoInternetSetFeatureEnabled(FEATURE_ZONE_ELEVATION, SET_FEATURE_ON_PROCESS, FALSE);
1958 ok(hres == S_OK, "CoInternetSetFeatureEnabled failed: %08lx\n", hres);
1959 }
1960
1962}
#define skip(...)
Definition: atltest.h:64
#define RegCloseKey(hKey)
Definition: registry.h:49
LONG WINAPI RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
Definition: reg.c:4799
LONG WINAPI RegDeleteValueA(HKEY hKey, LPCSTR lpValueName)
Definition: reg.c:2287
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
DWORD WINAPI GetModuleFileNameA(HINSTANCE hModule, LPSTR lpFilename, DWORD nSize)
Definition: loader.c:539
_ACRTIMP char *__cdecl strrchr(const char *, int)
Definition: string.c:3303
static void test_internet_feature_defaults(void)
Definition: misc.c:1842
#define REG_DWORD
Definition: sdbapi.c:615
Definition: name.c:39
Definition: pdh_main.c:96
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by test_internet_features().

◆ test_IsValidURL()

static void test_IsValidURL ( void  )
static

Definition at line 1787 of file misc.c.

1788{
1789 HRESULT hr;
1790 IBindCtx *bctx = NULL;
1791
1792 hr = IsValidURL(NULL, 0, 0);
1793 ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08lx\n", hr);
1794
1796 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
1797
1798 CreateBindCtx(0, &bctx);
1799
1800 hr = IsValidURL(bctx, wszHttpWineHQ, 0);
1801 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
1802
1803 IBindCtx_Release(bctx);
1804}
HRESULT hr
Definition: delayimp.cpp:582
static const WCHAR wszHttpWineHQ[]
Definition: misc.c:308
HRESULT WINAPI CreateBindCtx(DWORD reserved, IBindCtx **bind_context)
Definition: bindctx.c:491
HRESULT WINAPI IsValidURL(LPBC pBC, LPCWSTR szURL, DWORD dwReserved)
Definition: urlmon_main.c:525

Referenced by START_TEST().

◆ test_MapBrowserEmulationModeToUserAgent()

static void test_MapBrowserEmulationModeToUserAgent ( BOOL  custom_ua)
static

Definition at line 2754 of file misc.c.

2755{
2756 /* Undocumented structure of unknown size, crashes if it's too small (with arbitrary values from stack) */
2757 struct
2758 {
2759 DWORD version;
2760 char unknown[252];
2761 } arg;
2762 static char test_str[] = "test";
2763 const char *custom_ua_msg = "";
2764 HRESULT hres;
2765 unsigned i;
2766 WCHAR *ua;
2767
2768 if(!pMapBrowserEmulationModeToUserAgent) {
2769 win_skip("MapBrowserEmulationModeToUserAgent not available\n");
2770 return;
2771 }
2772 memset(&arg, 0, sizeof(arg));
2773
2774 if(custom_ua) {
2775 hres = UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, test_str, sizeof(test_str), 0);
2776 ok(hres == S_OK, "UrlMkSetSessionOption failed: %08lx\n", hres);
2777 custom_ua_msg = " (with custom ua)";
2778 }
2779
2780 for(i = 0; i < 12; i++) {
2781 arg.version = i;
2782 ua = (WCHAR*)0xdeadbeef;
2783 hres = pMapBrowserEmulationModeToUserAgent(&arg, &ua);
2784 ok(hres == (i == 5 || i >= 7 || custom_ua ? S_OK : E_FAIL),
2785 "[%u] MapBrowserEmulationModeToUserAgent%s returned %08lx\n", i, custom_ua_msg, hres);
2786 if(hres != S_OK)
2787 ok(ua == NULL, "[%u] ua%s = %p\n", i, custom_ua_msg, ua);
2788 else {
2789 char buf[1024];
2790 DWORD size = sizeof(buf);
2791 WCHAR *ua2;
2792
2793 if(custom_ua)
2794 ua2 = a2co(test_str);
2795 else {
2796 hres = pObtainUserAgentString(i, buf, &size);
2797 ok(hres == S_OK, "[%u] ObtainUserAgentString%s failed: %08lx\n", i, custom_ua_msg, hres);
2798 ua2 = a2co(buf);
2799 }
2800 ok(!lstrcmpW(ua, ua2), "[%u] ua%s = %s, expected %s\n", i, custom_ua_msg, wine_dbgstr_w(ua), wine_dbgstr_w(ua2));
2801 CoTaskMemFree(ua2);
2802 CoTaskMemFree(ua);
2803 }
2804 }
2805}
static WCHAR unknown[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1674
static const WCHAR version[]
Definition: asmname.c:66
HRESULT WINAPI UrlMkSetSessionOption(DWORD dwOption, LPVOID pBuffer, DWORD dwBufferLength, DWORD Reserved)
Definition: session.c:680

Referenced by START_TEST().

◆ test_MimeFilter()

static void test_MimeFilter ( void  )
static

Definition at line 1163 of file misc.c.

1164{
1166 HRESULT hres;
1167
1168 static const WCHAR mimeW[] = {'t','e','s','t','/','m','i','m','e',0};
1169
1170 hres = pCoInternetGetSession(0, &session, 0);
1171 ok(hres == S_OK, "CoInternetGetSession failed: %08lx\n", hres);
1172 if(FAILED(hres))
1173 return;
1174
1175 hres = IInternetSession_RegisterMimeFilter(session, &test_cf, &IID_NULL, mimeW);
1176 ok(hres == S_OK, "RegisterMimeFilter failed: %08lx\n", hres);
1177
1178 hres = IInternetSession_UnregisterMimeFilter(session, &test_cf, mimeW);
1179 ok(hres == S_OK, "UnregisterMimeFilter failed: %08lx\n", hres);
1180
1181 hres = IInternetSession_UnregisterMimeFilter(session, &test_cf, mimeW);
1182 ok(hres == S_OK, "UnregisterMimeFilter failed: %08lx\n", hres);
1183
1184 hres = IInternetSession_UnregisterMimeFilter(session, (void*)0xdeadbeef, mimeW);
1185 ok(hres == S_OK, "UnregisterMimeFilter failed: %08lx\n", hres);
1186
1187 IInternetSession_Release(session);
1188}
static IClassFactory test_cf
Definition: misc.c:1002
#define IID_NULL
Definition: guiddef.h:98

Referenced by START_TEST().

◆ test_MkParseDisplayNameEx()

static void test_MkParseDisplayNameEx ( void  )
static

Definition at line 1697 of file misc.c.

1698{
1699 IMoniker *mon = NULL;
1700 LPWSTR name;
1701 DWORD issys;
1702 ULONG eaten = 0;
1703 IBindCtx *bctx;
1704 HRESULT hres;
1705
1706 static const WCHAR clsid_nameW[] = {'c','l','s','i','d',':',
1707 '2','0','D','0','4','F','E','0','-','3','A','E','A','-','1','0','6','9','-','A','2','D','8',
1708 '-','0','8','0','0','2','B','3','0','3','0','9','D',':',0};
1709
1710 const struct
1711 {
1712 LPBC *ppbc;
1713 LPCWSTR szDisplayName;
1714 ULONG *pchEaten;
1715 LPMONIKER *ppmk;
1716 } invalid_parameters[] =
1717 {
1718 {NULL, NULL, NULL, NULL},
1719 {NULL, NULL, NULL, &mon},
1720 {NULL, NULL, &eaten, NULL},
1721 {NULL, NULL, &eaten, &mon},
1722 {NULL, wszEmpty, NULL, NULL},
1723 {NULL, wszEmpty, NULL, &mon},
1724 {NULL, wszEmpty, &eaten, NULL},
1725 {NULL, wszEmpty, &eaten, &mon},
1726 {&bctx, NULL, NULL, NULL},
1727 {&bctx, NULL, NULL, &mon},
1728 {&bctx, NULL, &eaten, NULL},
1729 {&bctx, NULL, &eaten, &mon},
1730 {&bctx, wszEmpty, NULL, NULL},
1731 {&bctx, wszEmpty, NULL, &mon},
1732 {&bctx, wszEmpty, &eaten, NULL},
1733 {&bctx, wszEmpty, &eaten, &mon},
1734 };
1735
1736 int i;
1737
1738 CreateBindCtx(0, &bctx);
1739
1740 for (i = 0; i < ARRAY_SIZE(invalid_parameters); i++)
1741 {
1742 eaten = 0xdeadbeef;
1743 mon = (IMoniker *)0xdeadbeef;
1744 hres = MkParseDisplayNameEx(invalid_parameters[i].ppbc ? *invalid_parameters[i].ppbc : NULL,
1745 invalid_parameters[i].szDisplayName,
1746 invalid_parameters[i].pchEaten,
1747 invalid_parameters[i].ppmk);
1748 ok(hres == E_INVALIDARG,
1749 "[%d] Expected MkParseDisplayNameEx to return E_INVALIDARG, got %08lx\n", i, hres);
1750 ok(eaten == 0xdeadbeef, "[%d] Expected eaten to be 0xdeadbeef, got %lu\n", i, eaten);
1751 ok(mon == (IMoniker *)0xdeadbeef, "[%d] Expected mon to be 0xdeadbeef, got %p\n", i, mon);
1752 }
1753
1754 hres = MkParseDisplayNameEx(bctx, url9, &eaten, &mon);
1755 ok(hres == S_OK, "MkParseDisplayNameEx failed: %08lx\n", hres);
1756 ok(eaten == ARRAY_SIZE(url9)-1, "eaten=%ld\n", eaten);
1757 ok(mon != NULL, "mon == NULL\n");
1758
1759 hres = IMoniker_GetDisplayName(mon, NULL, 0, &name);
1760 ok(hres == S_OK, "GetDisplayName failed: %08lx\n", hres);
1761 ok(!lstrcmpW(name, url9), "wrong display name %s\n", wine_dbgstr_w(name));
1763
1764 hres = IMoniker_IsSystemMoniker(mon, &issys);
1765 ok(hres == S_OK, "IsSystemMoniker failed: %08lx\n", hres);
1766 ok(issys == MKSYS_URLMONIKER, "issys=%lx\n", issys);
1767
1768 IMoniker_Release(mon);
1769
1770 hres = MkParseDisplayNameEx(bctx, clsid_nameW, &eaten, &mon);
1771 ok(hres == S_OK, "MkParseDisplayNameEx failed: %08lx\n", hres);
1772 ok(eaten == ARRAY_SIZE(clsid_nameW)-1, "eaten=%ld\n", eaten);
1773 ok(mon != NULL, "mon == NULL\n");
1774
1775 hres = IMoniker_IsSystemMoniker(mon, &issys);
1776 ok(hres == S_OK, "IsSystemMoniker failed: %08lx\n", hres);
1777 ok(issys == MKSYS_CLASSMONIKER, "issys=%lx\n", issys);
1778
1779 IMoniker_Release(mon);
1780
1781 hres = MkParseDisplayNameEx(bctx, url8, &eaten, &mon);
1782 ok(FAILED(hres), "MkParseDisplayNameEx succeeded: %08lx\n", hres);
1783
1784 IBindCtx_Release(bctx);
1785}
static const WCHAR wszEmpty[]
Definition: misc.c:304
static const WCHAR url8[]
Definition: misc.c:288
static const WCHAR url9[]
Definition: misc.c:289
interface IMoniker * LPMONIKER
Definition: objfwd.h:9
interface IBindCtx * LPBC
Definition: objfwd.h:18
const uint16_t * LPCWSTR
Definition: typedefs.h:57
HRESULT WINAPI MkParseDisplayNameEx(IBindCtx *pbc, LPCWSTR szDisplayName, ULONG *pchEaten, LPMONIKER *ppmk)
Definition: umon.c:795

Referenced by START_TEST().

◆ test_NameSpace()

static void test_NameSpace ( void  )
static

Definition at line 1004 of file misc.c.

1005{
1007 WCHAR buf[200];
1008 LPWSTR sec_url;
1009 DWORD size;
1010 HRESULT hres;
1011
1012 static const WCHAR wszTest[] = {'t','e','s','t',0};
1013
1014 hres = pCoInternetGetSession(0, &session, 0);
1015 ok(hres == S_OK, "CoInternetGetSession failed: %08lx\n", hres);
1016 if(FAILED(hres))
1017 return;
1018
1019 hres = IInternetSession_RegisterNameSpace(session, NULL, &IID_NULL,
1020 wszTest, 0, NULL, 0);
1021 ok(hres == E_INVALIDARG, "RegisterNameSpace failed: %08lx\n", hres);
1022
1023 hres = IInternetSession_RegisterNameSpace(session, &test_protocol_cf, &IID_NULL,
1024 NULL, 0, NULL, 0);
1025 ok(hres == E_INVALIDARG, "RegisterNameSpace failed: %08lx\n", hres);
1026
1027 hres = IInternetSession_RegisterNameSpace(session, &test_protocol_cf, &IID_NULL,
1028 wszTest, 0, NULL, 0);
1029 ok(hres == S_OK, "RegisterNameSpace failed: %08lx\n", hres);
1030
1033 SET_EXPECT(QI_IInternetProtocolInfo);
1035 SET_EXPECT(ParseUrl_ENCODE);
1036
1037 hres = pCoInternetParseUrl(url8, PARSE_ENCODE, 0, buf, ARRAY_SIZE(buf), &size, 0);
1038 ok(hres == S_OK, "CoInternetParseUrl failed: %08lx\n", hres);
1039
1040 CHECK_CALLED(QI_IInternetProtocolInfo);
1042 CHECK_CALLED(ParseUrl_ENCODE);
1043
1044 qiret = S_OK;
1045 SET_EXPECT(QI_IInternetProtocolInfo);
1046 SET_EXPECT(ParseUrl_ENCODE);
1047
1048 hres = pCoInternetParseUrl(url8, PARSE_ENCODE, 0, buf, ARRAY_SIZE(buf), &size, 0);
1049 ok(hres == S_OK, "CoInternetParseUrl failed: %08lx\n", hres);
1050
1051 CHECK_CALLED(QI_IInternetProtocolInfo);
1052 CHECK_CALLED(ParseUrl_ENCODE);
1053
1054 qiret = S_OK;
1055 SET_EXPECT(QI_IInternetProtocolInfo);
1056 SET_EXPECT(ParseUrl_UNESCAPE);
1057
1058 hres = pCoInternetParseUrl(url8, PARSE_UNESCAPE, 0, buf, ARRAY_SIZE(buf), &size, 0);
1059 ok(hres == S_OK, "CoInternetParseUrl failed: %08lx\n", hres);
1060
1061 CHECK_CALLED(QI_IInternetProtocolInfo);
1062 CHECK_CALLED(ParseUrl_UNESCAPE);
1063
1064 SET_EXPECT(QI_IInternetProtocolInfo);
1065 SET_EXPECT(ParseUrl);
1066
1067 hres = pCoInternetParseUrl(url8, PARSE_SECURITY_URL, 0, buf, ARRAY_SIZE(buf), &size, 0);
1068 ok(hres == S_OK, "CoInternetParseUrl failed: %08lx\n", hres);
1069 ok(size == ARRAY_SIZE(url1), "Size = %ld\n", size);
1070 if(size == ARRAY_SIZE(url1))
1071 ok(!memcmp(buf, url1, sizeof(url1)), "Encoded url = %s\n", wine_dbgstr_w(buf));
1072
1073 CHECK_CALLED(QI_IInternetProtocolInfo);
1074 CHECK_CALLED(ParseUrl);
1075
1076 SET_EXPECT(QI_IInternetProtocolInfo);
1077 SET_EXPECT(ParseUrl);
1078
1079 if (pCoInternetGetSecurityUrl) {
1080 hres = pCoInternetGetSecurityUrl(url8, &sec_url, PSU_SECURITY_URL_ONLY, 0);
1081 ok(hres == S_OK, "CoInternetGetSecurityUrl failed: %08lx\n", hres);
1082 if(hres == S_OK) {
1083 ok(lstrlenW(sec_url) > ARRAY_SIZE(wszFile) &&
1084 !memcmp(sec_url, wszFile, sizeof(wszFile)-sizeof(WCHAR)),
1085 "Encoded url = %s\n", wine_dbgstr_w(sec_url));
1086 CoTaskMemFree(sec_url);
1087 }
1088
1089 CHECK_CALLED(QI_IInternetProtocolInfo);
1090 CHECK_CALLED(ParseUrl);
1091 }
1092
1093 hres = IInternetSession_UnregisterNameSpace(session, &test_protocol_cf, wszTest);
1094 ok(hres == S_OK, "UnregisterNameSpace failed: %08lx\n", hres);
1095
1096 hres = pCoInternetParseUrl(url8, PARSE_ENCODE, 0, buf, ARRAY_SIZE(buf), &size, 0);
1097 ok(hres == S_OK, "CoInternetParseUrl failed: %08lx\n", hres);
1098
1099 hres = IInternetSession_RegisterNameSpace(session, &test_protocol_cf2, &IID_NULL,
1100 wszTest, 0, NULL, 0);
1101 ok(hres == S_OK, "RegisterNameSpace failed: %08lx\n", hres);
1102
1103 hres = IInternetSession_RegisterNameSpace(session, &test_protocol_cf, &IID_NULL,
1104 wszTest, 0, NULL, 0);
1105 ok(hres == S_OK, "RegisterNameSpace failed: %08lx\n", hres);
1106
1107 hres = IInternetSession_RegisterNameSpace(session, &test_protocol_cf, &IID_NULL,
1108 wszTest, 0, NULL, 0);
1109 ok(hres == S_OK, "RegisterNameSpace failed: %08lx\n", hres);
1110
1111 SET_EXPECT(QI_IInternetProtocolInfo);
1112 SET_EXPECT(ParseUrl_ENCODE);
1113
1114 hres = pCoInternetParseUrl(url8, PARSE_ENCODE, 0, buf, ARRAY_SIZE(buf), &size, 0);
1115 ok(hres == S_OK, "CoInternetParseUrl failed: %08lx\n", hres);
1116
1117 CHECK_CALLED(QI_IInternetProtocolInfo);
1118 CHECK_CALLED(ParseUrl_ENCODE);
1119
1120 hres = IInternetSession_UnregisterNameSpace(session, &test_protocol_cf, wszTest);
1121 ok(hres == S_OK, "UnregisterNameSpace failed: %08lx\n", hres);
1122
1123 SET_EXPECT(QI_IInternetProtocolInfo);
1124 SET_EXPECT(ParseUrl_ENCODE);
1125
1126 hres = pCoInternetParseUrl(url8, PARSE_ENCODE, 0, buf, ARRAY_SIZE(buf), &size, 0);
1127 ok(hres == S_OK, "CoInternetParseUrl failed: %08lx\n", hres);
1128
1129 CHECK_CALLED(QI_IInternetProtocolInfo);
1130 CHECK_CALLED(ParseUrl_ENCODE);
1131
1132 hres = IInternetSession_UnregisterNameSpace(session, &test_protocol_cf, wszTest);
1133 ok(hres == S_OK, "UnregisterNameSpace failed: %08lx\n", hres);
1134
1136 SET_EXPECT(QI_IInternetProtocolInfo);
1137 SET_EXPECT(ParseUrl_ENCODE);
1138
1139 hres = pCoInternetParseUrl(url8, PARSE_ENCODE, 0, buf, ARRAY_SIZE(buf), &size, 0);
1140 ok(hres == S_OK, "CoInternetParseUrl failed: %08lx\n", hres);
1141
1142 CHECK_CALLED(QI_IInternetProtocolInfo);
1143 CHECK_CALLED(ParseUrl_ENCODE);
1144
1145 hres = IInternetSession_UnregisterNameSpace(session, &test_protocol_cf, wszTest);
1146 ok(hres == S_OK, "UnregisterNameSpace failed: %08lx\n", hres);
1147 hres = IInternetSession_UnregisterNameSpace(session, &test_protocol_cf, wszTest);
1148 ok(hres == S_OK, "UnregisterNameSpace failed: %08lx\n", hres);
1149 hres = IInternetSession_UnregisterNameSpace(session, &test_protocol_cf, NULL);
1150 ok(hres == E_INVALIDARG, "UnregisterNameSpace failed: %08lx\n", hres);
1151 hres = IInternetSession_UnregisterNameSpace(session, NULL, wszTest);
1152 ok(hres == E_INVALIDARG, "UnregisterNameSpace failed: %08lx\n", hres);
1153
1154 hres = IInternetSession_UnregisterNameSpace(session, &test_protocol_cf2, wszTest);
1155 ok(hres == S_OK, "UnregisterNameSpace failed: %08lx\n", hres);
1156
1157 hres = pCoInternetParseUrl(url8, PARSE_ENCODE, 0, buf, ARRAY_SIZE(buf), &size, 0);
1158 ok(hres == S_OK, "CoInternetParseUrl failed: %08lx\n", hres);
1159
1160 IInternetSession_Release(session);
1161}
#define SET_EXPECT(func)
Definition: misc.c:44
#define CHECK_CALLED(func)
Definition: misc.c:59
static IClassFactory test_protocol_cf2
Definition: misc.c:1001
static const WCHAR wszFile[]
Definition: misc.c:301
static IClassFactory test_protocol_cf
Definition: misc.c:1000

Referenced by START_TEST().

◆ test_RegisterFormatEnumerator()

static void test_RegisterFormatEnumerator ( void  )
static

Definition at line 204 of file misc.c.

205{
206 IBindCtx *bctx = NULL;
207 IEnumFORMATETC *format = NULL, *format2 = NULL;
208 IUnknown *unk = NULL;
210
211 static FORMATETC formatetc = {0,NULL,0,0,0};
212 static WCHAR wszEnumFORMATETC[] =
213 {'_','E','n','u','m','F','O','R','M','A','T','E','T','C','_',0};
214
215 CreateBindCtx(0, &bctx);
216
217 hres = CreateFormatEnumerator(1, &formatetc, &format);
218 ok(hres == S_OK, "CreateFormatEnumerator failed: %08lx\n", hres);
219 if(FAILED(hres))
220 return;
221
224 "RegisterFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
227 "RegisterFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
228
230 ok(hres == S_OK, "RegisterFormatEnumerator failed: %08lx\n", hres);
231
232 hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
233 ok(hres == S_OK, "GetObjectParam failed: %08lx\n", hres);
234 ok(unk == (IUnknown*)format, "unk != format\n");
235
238 "RevokeFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
239
241 ok(hres == S_OK, "RevokeFormatEnumerator failed: %08lx\n", hres);
242
244 ok(hres == E_FAIL, "RevokeFormatEnumerator failed: %08lx, expected E_FAIL\n", hres);
245
246 hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
247 ok(hres == E_FAIL, "GetObjectParam failed: %08lx, expected E_FAIL\n", hres);
248
250 ok(hres == S_OK, "RegisterFormatEnumerator failed: %08lx\n", hres);
251
252 hres = CreateFormatEnumerator(1, &formatetc, &format2);
253 ok(hres == S_OK, "CreateFormatEnumerator failed: %08lx\n", hres);
254
255 if(SUCCEEDED(hres)) {
257 ok(hres == S_OK, "RevokeFormatEnumerator failed: %08lx\n", hres);
258
259 IEnumFORMATETC_Release(format2);
260 }
261
262 hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
263 ok(hres == E_FAIL, "GetObjectParam failed: %08lx, expected E_FAIL\n", hres);
264
265 IEnumFORMATETC_Release(format);
266
268 ok(hres == S_OK, "RegisterFormatEnumerator failed: %08lx\n", hres);
270 ok(hres == S_OK, "RevokeFormatEnumerator failed: %08lx\n", hres);
271 hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
272 ok(hres == E_FAIL, "GetObjectParam failed: %08lx, expected E_FAIL\n", hres);
273
274 IEnumFORMATETC_Release(format);
275 IBindCtx_Release(bctx);
276}
HRESULT WINAPI RegisterFormatEnumerator(LPBC pBC, IEnumFORMATETC *pEFetc, DWORD reserved)
Definition: format.c:194
static WCHAR wszEnumFORMATETC[]
Definition: format.c:24
HRESULT WINAPI RevokeFormatEnumerator(LPBC pbc, IEnumFORMATETC *pEFetc)
Definition: format.c:210
Definition: format.c:58

Referenced by START_TEST().

◆ test_ReleaseBindInfo()

static void test_ReleaseBindInfo ( void  )
static

Definition at line 1202 of file misc.c.

1203{
1204 BINDINFO bi;
1205 IUnknown unk = { &unk_vtbl };
1206
1207 pReleaseBindInfo(NULL); /* shouldn't crash */
1208
1209 memset(&bi, 0, sizeof(bi));
1210 bi.cbSize = sizeof(BINDINFO);
1211 bi.pUnk = &unk;
1213 pReleaseBindInfo(&bi);
1214 ok(bi.cbSize == sizeof(BINDINFO), "bi.cbSize=%ld\n", bi.cbSize);
1215 ok(bi.pUnk == NULL, "bi.pUnk=%p, expected NULL\n", bi.pUnk);
1217
1218 memset(&bi, 0, sizeof(bi));
1219 bi.cbSize = offsetof(BINDINFO, pUnk);
1220 bi.pUnk = &unk;
1221 pReleaseBindInfo(&bi);
1222 ok(bi.cbSize == offsetof(BINDINFO, pUnk), "bi.cbSize=%ld\n", bi.cbSize);
1223 ok(bi.pUnk == &unk, "bi.pUnk=%p, expected %p\n", bi.pUnk, &unk);
1224
1225 memset(&bi, 0, sizeof(bi));
1226 bi.pUnk = &unk;
1227 pReleaseBindInfo(&bi);
1228 ok(!bi.cbSize, "bi.cbSize=%ld, expected 0\n", bi.cbSize);
1229 ok(bi.pUnk == &unk, "bi.pUnk=%p, expected %p\n", bi.pUnk, &unk);
1230}
static ULONG WINAPI unk_Release(IUnknown *iface)
Definition: misc.c:1190
static const IUnknownVtbl unk_vtbl
Definition: misc.c:1196
#define offsetof(TYPE, MEMBER)

Referenced by START_TEST().

◆ test_UrlMkGetSessionOption()

static void test_UrlMkGetSessionOption ( void  )
static

Definition at line 1421 of file misc.c.

1422{
1423 DWORD encoding, size;
1424 HRESULT hres;
1425
1426 size = encoding = 0xdeadbeef;
1427 hres = pUrlMkGetSessionOption(URLMON_OPTION_URL_ENCODING, &encoding,
1428 sizeof(encoding), &size, 0);
1429 ok(hres == S_OK, "UrlMkGetSessionOption failed: %08lx\n", hres);
1430 ok(encoding != 0xdeadbeef, "encoding not changed\n");
1431 ok(size == sizeof(encoding), "size=%ld\n", size);
1432
1433 size = encoding = 0xdeadbeef;
1434 hres = pUrlMkGetSessionOption(URLMON_OPTION_URL_ENCODING, &encoding,
1435 sizeof(encoding)+1, &size, 0);
1436 ok(hres == S_OK, "UrlMkGetSessionOption failed: %08lx\n", hres);
1437 ok(encoding != 0xdeadbeef, "encoding not changed\n");
1438 ok(size == sizeof(encoding), "size=%ld\n", size);
1439
1440 size = encoding = 0xdeadbeef;
1441 hres = pUrlMkGetSessionOption(URLMON_OPTION_URL_ENCODING, &encoding,
1442 sizeof(encoding)-1, &size, 0);
1443 ok(hres == E_INVALIDARG, "UrlMkGetSessionOption failed: %08lx\n", hres);
1444 ok(encoding == 0xdeadbeef, "encoding = %08lx, exepcted 0xdeadbeef\n", encoding);
1445 ok(size == 0xdeadbeef, "size=%ld\n", size);
1446
1447 size = encoding = 0xdeadbeef;
1448 hres = pUrlMkGetSessionOption(URLMON_OPTION_URL_ENCODING, NULL,
1449 sizeof(encoding)-1, &size, 0);
1450 ok(hres == E_INVALIDARG, "UrlMkGetSessionOption failed: %08lx\n", hres);
1451 ok(encoding == 0xdeadbeef, "encoding = %08lx, exepcted 0xdeadbeef\n", encoding);
1452 ok(size == 0xdeadbeef, "size=%ld\n", size);
1453
1454 encoding = 0xdeadbeef;
1455 hres = pUrlMkGetSessionOption(URLMON_OPTION_URL_ENCODING, &encoding,
1456 sizeof(encoding)-1, NULL, 0);
1457 ok(hres == E_INVALIDARG, "UrlMkGetSessionOption failed: %08lx\n", hres);
1458 ok(encoding == 0xdeadbeef, "encoding = %08lx, exepcted 0xdeadbeef\n", encoding);
1459}

Referenced by START_TEST().

◆ test_user_agent()

static void test_user_agent ( void  )
static

Definition at line 1471 of file misc.c.

1472{
1473 static const CHAR expected[] = "Mozilla/4.0 (compatible; MSIE ";
1474 static char test_str[] = "test";
1475 static char test2_str[] = "test\0test";
1476 static CHAR str[3];
1477 OSVERSIONINFOW os_info = {sizeof(os_info)};
1478 char ua[1024], buf[64];
1479 unsigned int i;
1480 LPSTR str2 = NULL;
1481 BOOL is_wow = FALSE;
1482 HRESULT hres;
1483 DWORD size, saved;
1484
1485 hres = pObtainUserAgentString(0, NULL, NULL);
1486 ok(hres == E_INVALIDARG, "ObtainUserAgentString failed: %08lx\n", hres);
1487
1488 size = 100;
1489 hres = pObtainUserAgentString(0, NULL, &size);
1490 ok(hres == E_INVALIDARG, "ObtainUserAgentString failed: %08lx\n", hres);
1491 ok(size == 100, "size=%ld, expected %d\n", size, 100);
1492
1493 size = 0;
1494 hres = pObtainUserAgentString(0, str, &size);
1495 ok(hres == E_OUTOFMEMORY, "ObtainUserAgentString failed: %08lx\n", hres);
1496 ok(size > 0, "size=%ld, expected non-zero\n", size);
1497
1498 size = 2;
1499 str[0] = 'a';
1500 hres = pObtainUserAgentString(0, str, &size);
1501 ok(hres == E_OUTOFMEMORY, "ObtainUserAgentString failed: %08lx\n", hres);
1502 ok(size > 0, "size=%ld, expected non-zero\n", size);
1503 ok(str[0] == 'a', "str[0]=%c, expected 'a'\n", str[0]);
1504
1505 size = 0;
1506 hres = pObtainUserAgentString(1, str, &size);
1507 ok(hres == E_OUTOFMEMORY, "ObtainUserAgentString failed: %08lx\n", hres);
1508 ok(size > 0, "size=%ld, expected non-zero\n", size);
1509
1510 str2 = malloc(size + 20);
1511 saved = size;
1512 hres = pObtainUserAgentString(0, str2, &size);
1513 ok(hres == S_OK, "ObtainUserAgentString failed: %08lx\n", hres);
1514 ok(size == saved, "size=%ld, expected %ld\n", size, saved);
1515 ok(strlen(expected) <= strlen(str2) &&
1516 !memcmp(expected, str2, strlen(expected)*sizeof(CHAR)),
1517 "user agent was \"%s\", expected to start with \"%s\"\n",
1518 str2, expected);
1519
1520 GetVersionExW(&os_info);
1521 if (sizeof(void*) == 4) IsWow64Process(GetCurrentProcess(), &is_wow);
1522
1523 for(i = 1; i < 12; i++) {
1524 const char *p = ua;
1525
1526 if (i != 7) {
1527 size = sizeof(ua);
1528 hres = pObtainUserAgentString(i | UAS_EXACTLEGACY, ua, &size);
1529 ok(hres == S_OK, "ObtainUserAgentString failed: %08lx\n", hres);
1530 ok(size == strlen(ua) + 1, "unexpected size %lu, expected %Iu\n", size, strlen(ua) + 1);
1531 ok(!strcmp(ua, str2), "unexpected UA for version %u %s, expected %s\n",
1533 }
1534
1535 size = sizeof(ua);
1536 hres = pObtainUserAgentString(i != 1 ? i : UAS_EXACTLEGACY | 7, ua, &size);
1537 ok(hres == S_OK, "ObtainUserAgentString failed: %08lx\n", hres);
1538 ok(size == strlen(ua) + 1, "unexpected size %lu, expected %Iu\n", size, strlen(ua) + 1);
1539 if(i < 8 && i != 1)
1540 ok(!strcmp(ua, str2), "unexpected UA for version %u %s, expected %s\n",
1542 if (winetest_debug > 1)
1543 trace("version=%u user-agent=%s\n", i, wine_dbgstr_a(ua));
1544
1545 p += check_prefix(p, "Mozilla/");
1546 p += check_prefix(p, i < 9 ? "4.0 (" : "5.0 (");
1547 if(i < 11) {
1548 p += check_prefix(p, "compatible; ");
1549 sprintf(buf, "MSIE %u.0; ", max(i, 7));
1550 p += check_prefix(p, buf);
1551 }
1552 sprintf(buf, "Windows NT %lu.%lu; ", os_info.dwMajorVersion, os_info.dwMinorVersion);
1553 p += check_prefix(p, buf);
1554 if(is_wow) {
1555 p += check_prefix(p, "WOW64; ");
1556 }else if(sizeof(void*) == 8) {
1557 p += check_prefix(p, "Win64; ");
1558#ifdef __x86_64__
1559 todo_wine
1560 p += check_prefix(p, "x64; ");
1561#endif
1562 }
1563 if(i != 1) {
1564 p += check_prefix(p, "Trident/");
1565 ok('5' <= *p && *p <= '8', "unexpected version '%c'\n", *p);
1566 if(*p < '7') {
1567 win_skip("skipping UA tests, too old IE\n");
1568 break;
1569 }
1570 p++; /* skip version number */
1571 p += check_prefix(p, ".0");
1572 }
1573 if(i == 11) {
1574 p += check_prefix(p, "; rv:11.0) like Gecko");
1575 }else if (i >= 9) {
1576 p += check_prefix(p, ")");
1577 }else {
1578#ifdef __x86_64__
1579 todo_wine
1580#endif
1581 /* This assumes that either p points at some property before
1582 * '; .NET', or that there is more than one such occurrence.
1583 */
1584 ok(strstr(p, "; .NET") != NULL, "no '; .NET' in %s\n", wine_dbgstr_a(p));
1585 p = strchr(p, ')');
1586 p += check_prefix(p, ")");
1587 }
1588
1589 ok(!*p, "unexpected suffix %s for version %u\n", wine_dbgstr_a(p), i);
1590 }
1591
1592 size = saved+10;
1593 hres = pObtainUserAgentString(0, str2, &size);
1594 ok(hres == S_OK, "ObtainUserAgentString failed: %08lx\n", hres);
1595 ok(size == saved, "size=%ld, expected %ld\n", size, saved);
1596
1597 size = 0;
1598 hres = pUrlMkGetSessionOption(URLMON_OPTION_USERAGENT, NULL, 0, &size, 0);
1599 ok(hres == E_OUTOFMEMORY, "UrlMkGetSessionOption failed: %08lx\n", hres);
1600 ok(size, "size == 0\n");
1601
1602 size = 0xdeadbeef;
1603 hres = pUrlMkGetSessionOption(URLMON_OPTION_USERAGENT, NULL, 1000, &size, 0);
1604 ok(hres == E_INVALIDARG, "UrlMkGetSessionOption failed: %08lx\n", hres);
1605 ok(size, "size == 0\n");
1606
1607 saved = size;
1608 size = 0;
1609 hres = pUrlMkGetSessionOption(URLMON_OPTION_USERAGENT, str2, saved+10, &size, 0);
1610 ok(hres == E_OUTOFMEMORY, "UrlMkGetSessionOption failed: %08lx\n", hres);
1611 ok(size == saved, "size = %ld, expected %ld\n", size, saved);
1612 ok(sizeof(expected) <= strlen(str2) && !memcmp(expected, str2, sizeof(expected)-1),
1613 "user agent was \"%s\", expected to start with \"%s\"\n",
1614 str2, expected);
1615
1616 size = 0;
1617 str2[0] = 0;
1618 hres = pUrlMkGetSessionOption(URLMON_OPTION_USERAGENT, str2, saved, &size, 0);
1619 ok(hres == E_OUTOFMEMORY, "UrlMkGetSessionOption failed: %08lx\n", hres);
1620 ok(size == saved, "size = %ld, expected %ld\n", size, saved);
1621 ok(sizeof(expected) <= strlen(str2) && !memcmp(expected, str2, sizeof(expected)-1),
1622 "user agent was \"%s\", expected to start with \"%s\"\n",
1623 str2, expected);
1624
1625 size = saved;
1626 str2[0] = 0;
1627 hres = pUrlMkGetSessionOption(URLMON_OPTION_USERAGENT, str2, saved-1, &size, 0);
1628 ok(hres == E_OUTOFMEMORY, "UrlMkGetSessionOption failed: %08lx\n", hres);
1629 ok(size == saved, "size = %ld, expected %ld\n", size, saved);
1630 ok(!str2[0], "buf changed\n");
1631
1632 size = saved;
1633 str2[0] = 0;
1634 hres = pUrlMkGetSessionOption(URLMON_OPTION_USERAGENT, str2, saved, NULL, 0);
1635 ok(hres == E_INVALIDARG, "UrlMkGetSessionOption failed: %08lx\n", hres);
1636 ok(!str2[0], "buf changed\n");
1637
1638 hres = UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, test_str, sizeof(test_str), 0);
1639 ok(hres == S_OK, "UrlMkSetSessionOption failed: %08lx\n", hres);
1640
1641 size = 0;
1642 str2[0] = 0;
1643 hres = pUrlMkGetSessionOption(URLMON_OPTION_USERAGENT, str2, saved, &size, 0);
1644 ok(hres == E_OUTOFMEMORY, "UrlMkGetSessionOption failed: %08lx\n", hres);
1645 ok(size == sizeof(test_str) && !memcmp(str2, test_str, sizeof(test_str)), "wrong user agent\n");
1646
1647 for(i = 0; i < 12; i++) {
1648 size = sizeof(ua);
1649 hres = pObtainUserAgentString(i, ua, &size);
1650 ok(hres == S_OK, "[%u] ObtainUserAgentString failed: %08lx\n", i, hres);
1651 ok(size == strlen(ua) + 1, "[%u] unexpected size %lu, expected %Iu\n", i, size, strlen(ua) + 1);
1652 if(i >= 7)
1653 ok(strcmp(ua, test_str), "[%u] unexpected UA, did not expect \"test\"\n", i);
1654 else
1655 ok(!strcmp(ua, test_str), "[%u] unexpected UA %s, expected \"test\"\n", i, wine_dbgstr_a(ua));
1656
1657 size = sizeof(ua);
1658 hres = pObtainUserAgentString(i | UAS_EXACTLEGACY, ua, &size);
1659 ok(hres == S_OK, "[%u] ObtainUserAgentString failed: %08lx\n", i, hres);
1660 ok(size == strlen(ua) + 1, "[%u] unexpected size %lu, expected %Iu\n", i, size, strlen(ua) + 1);
1661 if(i == 7)
1662 ok(strcmp(ua, test_str), "[%u] unexpected UA, did not expect \"test\"\n", i);
1663 else
1664 ok(!strcmp(ua, test_str), "[%u] unexpected UA %s, expected \"test\"\n", i, wine_dbgstr_a(ua));
1665 }
1666
1667 hres = UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, test2_str, sizeof(test2_str), 0);
1668 ok(hres == S_OK, "UrlMkSetSessionOption failed: %08lx\n", hres);
1669
1670 size = 0;
1671 str2[0] = 0;
1672 hres = pUrlMkGetSessionOption(URLMON_OPTION_USERAGENT, str2, saved, &size, 0);
1673 ok(hres == E_OUTOFMEMORY, "UrlMkGetSessionOption failed: %08lx\n", hres);
1674 ok(size == sizeof(test_str) && !memcmp(str2, test_str, sizeof(test_str)), "wrong user agent\n");
1675
1676 hres = UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, test_str, 2, 0);
1677 ok(hres == S_OK, "UrlMkSetSessionOption failed: %08lx\n", hres);
1678
1679 size = 0;
1680 str2[0] = 0;
1681 hres = pUrlMkGetSessionOption(URLMON_OPTION_USERAGENT, str2, saved, &size, 0);
1682 ok(hres == E_OUTOFMEMORY, "UrlMkGetSessionOption failed: %08lx\n", hres);
1683 ok(size == 3 && !strcmp(str2, "te"), "wrong user agent\n");
1684
1685 hres = UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, test_str, 0, 0);
1686 ok(hres == E_INVALIDARG, "UrlMkSetSessionOption failed: %08lx\n", hres);
1687
1688 hres = UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, NULL, sizeof(test_str), 0);
1689 ok(hres == E_INVALIDARG, "UrlMkSetSessionOption failed: %08lx\n", hres);
1690
1691 hres = UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, NULL, 0, 0);
1692 ok(hres == E_INVALIDARG, "UrlMkSetSessionOption failed: %08lx\n", hres);
1693
1694 free(str2);
1695}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define GetCurrentProcess()
Definition: compat.h:759
#define IsWow64Process
Definition: compat.h:760
BOOL WINAPI GetVersionExW(IN LPOSVERSIONINFOW lpVersionInformation)
Definition: version.c:37
_ACRTIMP char *__cdecl strchr(const char *, int)
Definition: string.c:3291
_ACRTIMP char *__cdecl strstr(const char *, const char *)
Definition: string.c:3420
GLfloat GLfloat p
Definition: glext.h:8902
int winetest_debug
#define todo_wine
Definition: minitest.h:80
static size_t check_prefix(const char *str, const char *prefix)
Definition: misc.c:1461
char CHAR
Definition: pedump.c:57
XML_HIDDEN void xmlParserErrors const char const xmlChar const xmlChar * str2
Definition: parser.h:35
ULONG dwMinorVersion
Definition: rtltypes.h:248
ULONG dwMajorVersion
Definition: rtltypes.h:247
#define max(a, b)
Definition: svc.c:63
char * LPSTR
Definition: typedefs.h:51

Referenced by START_TEST().

◆ unk_Release()

static ULONG WINAPI unk_Release ( IUnknown iface)
static

Definition at line 1190 of file misc.c.

1191{
1193 return 0;
1194}

Referenced by test_ReleaseBindInfo(), and unk_Release().

Variable Documentation

◆ BindStatusCallback

◆ BindStatusCallbackExVtbl

const IBindStatusCallbackExVtbl BindStatusCallbackExVtbl
static
Initial value:
= {
}
static HRESULT WINAPI BindStatusCallback_GetPriority(IBindStatusCallbackEx *iface, LONG *pnPriority)
Definition: misc.c:2081
static HRESULT WINAPI BindStatusCallback_GetBindInfo(IBindStatusCallbackEx *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
Definition: misc.c:2106
static HRESULT WINAPI BindStatusCallback_OnObjectAvailable(IBindStatusCallbackEx *iface, REFIID riid, IUnknown *punk)
Definition: misc.c:2124
static HRESULT WINAPI BindStatusCallback_OnProgress(IBindStatusCallbackEx *iface, ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
Definition: misc.c:2093
static HRESULT WINAPI BindStatusCallbackEx_GetBindInfoEx(IBindStatusCallbackEx *iface, DWORD *grfBINDF, BINDINFO *pbindinfo, DWORD *grfBINDF2, DWORD *pdwReserved)
Definition: misc.c:2130
static HRESULT WINAPI BindStatusCallback_OnStopBinding(IBindStatusCallbackEx *iface, HRESULT hresult, LPCWSTR szError)
Definition: misc.c:2100
static HRESULT WINAPI BindStatusCallback_OnStartBinding(IBindStatusCallbackEx *iface, DWORD dwReserved, IBinding *pib)
Definition: misc.c:2074
static ULONG WINAPI BindStatusCallback_Release(IBindStatusCallbackEx *iface)
Definition: misc.c:2069
static HRESULT WINAPI BindStatusCallback_OnLowResource(IBindStatusCallbackEx *iface, DWORD reserved)
Definition: misc.c:2087
static HRESULT WINAPI BindStatusCallback_OnDataAvailable(IBindStatusCallbackEx *iface, DWORD grfBSCF, DWORD dwSize, FORMATETC *pformatetc, STGMEDIUM *pstgmed)
Definition: misc.c:2116
static HRESULT WINAPI BindStatusCallback_QueryInterface(IBindStatusCallbackEx *iface, REFIID riid, void **ppv)
Definition: misc.c:2051
static ULONG WINAPI BindStatusCallback_AddRef(IBindStatusCallbackEx *iface)
Definition: misc.c:2064

Definition at line 2141 of file misc.c.

◆ BOOL

Definition at line 82 of file misc.c.

◆ broken_failure

BOOL broken_failure

Definition at line 477 of file misc.c.

Referenced by test_FindMimeFromData().

◆ broken_mime

const WCHAR* broken_mime

Definition at line 478 of file misc.c.

Referenced by test_FindMimeFromData().

◆ ClassFactoryVtbl

const IClassFactoryVtbl ClassFactoryVtbl
static
Initial value:
= {
}
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL dolock)
Definition: misc.c:978
static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppv)
Definition: misc.c:957
static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
Definition: misc.c:952
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
Definition: misc.c:934
static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
Definition: misc.c:947

Definition at line 984 of file misc.c.

◆ data

Definition at line 592 of file misc.c.

◆ data1

BYTE data1[] = "test data\n"
static

Definition at line 492 of file misc.c.

◆ data10

BYTE data10[] = "<HtmL>blahblah"
static

Definition at line 501 of file misc.c.

◆ data11

BYTE data11[] = "blah<HTML>blahblah"
static

Definition at line 502 of file misc.c.

◆ data12

BYTE data12[] = "blah<HTMLblahblah"
static

Definition at line 503 of file misc.c.

◆ data13

BYTE data13[] = "blahHTML>blahblah"
static

Definition at line 504 of file misc.c.

◆ data14

BYTE data14[] = "blah<HTMblahblah"
static

Definition at line 505 of file misc.c.

◆ data15

BYTE data15[] = {0xff,0xd8}
static

Definition at line 506 of file misc.c.

◆ data16

BYTE data16[] = {0xff,0xd8,'h'}
static

Definition at line 507 of file misc.c.

◆ data17

BYTE data17[] = {0,0xff,0xd8}
static

Definition at line 508 of file misc.c.

◆ data18

BYTE data18[] = {0xff,0xd8,'<','h','t','m','l','>'}
static

Definition at line 509 of file misc.c.

◆ data19

BYTE data19[] = {'G','I','F','8','7','a'}
static

Definition at line 510 of file misc.c.

◆ data2

BYTE data2[] = {31,'t','e','s',0xfa,'t',' ','d','a','t','a','\n',0}
static

Definition at line 493 of file misc.c.

◆ data20

BYTE data20[] = {'G','I','F','8','9','a'}
static

Definition at line 511 of file misc.c.

◆ data21

BYTE data21[] = {'G','I','F','8','7'}
static

Definition at line 512 of file misc.c.

◆ data22

BYTE data22[] = {'G','i','F','8','7','a'}
static

Definition at line 513 of file misc.c.

Referenced by START_TEST().

◆ data23

BYTE data23[] = {'G','i','F','8','8','a'}
static

Definition at line 514 of file misc.c.

Referenced by START_TEST().

◆ data24

BYTE data24[] = {'g','i','f','8','7','a'}
static

Definition at line 515 of file misc.c.

Referenced by START_TEST().

◆ data25

BYTE data25[] = {'G','i','F','8','7','A'}
static

Definition at line 516 of file misc.c.

◆ data26

BYTE data26[] = {'G','i','F','8','7','a','<','h','t','m','l','>'}
static

Definition at line 517 of file misc.c.

◆ data27

BYTE data27[] = {0x30,'G','i','F','8','7','A'}
static

Definition at line 518 of file misc.c.

◆ data28

BYTE data28[] = {0x42,0x4d,0x6e,0x42,0x1c,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00}
static

Definition at line 519 of file misc.c.

◆ data29

BYTE data29[] = {0x42,0x4d,'x','x','x','x',0x00,0x00,0x00,0x00,'x','x','x','x'}
static

Definition at line 520 of file misc.c.

◆ data3

BYTE data3[] = {0,0,0}
static

Definition at line 494 of file misc.c.

◆ data30

BYTE data30[] = {0x42,0x4d,'x','x','x','x',0x00,0x01,0x00,0x00,'x','x','x','x'}
static

Definition at line 521 of file misc.c.

◆ data31

BYTE data31[] = {0x42,0x4d,'x','x','x','x',0x00,0x00,0x00,0x00,'<','h','t','m','l','>'}
static

Definition at line 522 of file misc.c.

◆ data32

BYTE data32[] = {0x42,0x4d,'x','x','x','x',0x00,0x00,0x00,0x00,'x','x','x'}
static

Definition at line 523 of file misc.c.

Referenced by reg_cb64to32().

◆ data33

BYTE data33[] = {0x00,0x42,0x4d,'x','x','x','x',0x00,0x00,0x00,0x00,'x','x','x'}
static

Definition at line 524 of file misc.c.

◆ data34

BYTE data34[] = {0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,'x'}
static

Definition at line 525 of file misc.c.

◆ data35

BYTE data35[] = {0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,'x','x','x','x',0}
static

Definition at line 526 of file misc.c.

◆ data36

BYTE data36[] = {0x89,'P','N','G',0x0d,0x0a,0x1a,'x','x'}
static

Definition at line 527 of file misc.c.

◆ data37

BYTE data37[] = {0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,'<','h','t','m','l','>'}
static

Definition at line 528 of file misc.c.

◆ data38

BYTE data38[] = {0x00,0x89,'P','N','G',0x0d,0x0a,0x1a,0x0a,'x'}
static

Definition at line 529 of file misc.c.

◆ data39

BYTE data39[] = {0x4d,0x4d,0x00,0x2a,0xff}
static

Definition at line 530 of file misc.c.

◆ data4

BYTE data4[] = {'t','e','s',0xfa,'t',' ','d','a','t','a','\n',0,0}
static

Definition at line 495 of file misc.c.

◆ data40

BYTE data40[] = {0x4d,0x4d,0x00,0x2a,'<','h','t','m','l','>',0}
static

Definition at line 531 of file misc.c.

◆ data41

BYTE data41[] = {0x4d,0x4d,0xff}
static

Definition at line 532 of file misc.c.

◆ data42

BYTE data42[] = {0x4d,0x4d}
static

Definition at line 533 of file misc.c.

◆ data43

BYTE data43[] = {0x00,0x4d,0x4d,0x00}
static

Definition at line 534 of file misc.c.

◆ data44

BYTE data44[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'A','V','I',0x20,0xff}
static

Definition at line 535 of file misc.c.

◆ data45

BYTE data45[] = {'R','I','F','f',0xff,0xff,0xff,0xff,'A','V','I',0x20,0xff}
static

Definition at line 536 of file misc.c.

◆ data46

BYTE data46[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'A','V','I',0x20}
static

Definition at line 537 of file misc.c.

◆ data47

BYTE data47[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'A','V','I',0x21,0xff}
static

Definition at line 538 of file misc.c.

◆ data48

BYTE data48[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'A','V','I',0x20,'<','h','t','m','l','>'}
static

Definition at line 539 of file misc.c.

◆ data49

BYTE data49[] = {'R','I','F','F',0x0f,0x0f,0xf0,0xf0,'A','V','I',0x20,0xf0,0x00}
static

Definition at line 540 of file misc.c.

◆ data5

BYTE data5[] = {0xa,0xa,0xa,'x',32,'x',0}
static

Definition at line 496 of file misc.c.

◆ data50

BYTE data50[] = {0x00,0x00,0x01,0xb3,0xff}
static

Definition at line 541 of file misc.c.

◆ data51

BYTE data51[] = {0x00,0x00,0x01,0xba,0xff}
static

Definition at line 542 of file misc.c.

◆ data52

BYTE data52[] = {0x00,0x00,0x01,0xb8,0xff}
static

Definition at line 543 of file misc.c.

◆ data53

BYTE data53[] = {0x00,0x00,0x01,0xba}
static

Definition at line 544 of file misc.c.

◆ data54

BYTE data54[] = {0x00,0x00,0x01,0xba,'<','h','t','m','l','>'}
static

Definition at line 545 of file misc.c.

◆ data55

BYTE data55[] = {0x1f,0x8b,'x'}
static

Definition at line 546 of file misc.c.

◆ data56

BYTE data56[] = {0x1f}
static

Definition at line 547 of file misc.c.

◆ data57

BYTE data57[] = {0x1f,0x8b,'<','h','t','m','l','>','t','e','s','t',0}
static

Definition at line 548 of file misc.c.

◆ data58

BYTE data58[] = {0x1f,0x8b}
static

Definition at line 549 of file misc.c.

◆ data59

BYTE data59[] = {0x50,0x4b,'x'}
static

Definition at line 550 of file misc.c.

◆ data6

BYTE data6[] = {0xfa,0xfa,0xfa,0xfa,'\n','\r','\t','x','x','x',1}
static

Definition at line 497 of file misc.c.

◆ data60

BYTE data60[] = {0x50,0x4b}
static

Definition at line 551 of file misc.c.

◆ data61

BYTE data61[] = {0x50,0x4b,'<','h','t','m','l','>',0}
static

Definition at line 552 of file misc.c.

◆ data62

BYTE data62[] = {0xca,0xfe,0xba,0xbe,'x'}
static

Definition at line 553 of file misc.c.

◆ data63

BYTE data63[] = {0xca,0xfe,0xba,0xbe}
static

Definition at line 554 of file misc.c.

◆ data64

BYTE data64[] = {0xca,0xfe,0xba,0xbe,'<','h','t','m','l','>',0}
static

Definition at line 555 of file misc.c.

◆ data65

BYTE data65[] = {0x25,0x50,0x44,0x46,'x'}
static

Definition at line 556 of file misc.c.

◆ data66

BYTE data66[] = {0x25,0x50,0x44,0x46}
static

Definition at line 557 of file misc.c.

◆ data67

BYTE data67[] = {0x25,0x50,0x44,0x46,'x','<','h','t','m','l','>'}
static

Definition at line 558 of file misc.c.

◆ data68

BYTE data68[] = {'M','Z','x'}
static

Definition at line 559 of file misc.c.

◆ data69

BYTE data69[] = {'M','Z'}
static

Definition at line 560 of file misc.c.

◆ data7

BYTE data7[] = "<html>blahblah"
static

Definition at line 498 of file misc.c.

◆ data70

BYTE data70[] = {'M','Z','<','h','t','m','l','>',0xff}
static

Definition at line 561 of file misc.c.

◆ data71

BYTE data71[] = {'{','\\','r','t','f',0}
static

Definition at line 562 of file misc.c.

◆ data72

BYTE data72[] = {'{','\\','r','t','f'}
static

Definition at line 563 of file misc.c.

◆ data73

BYTE data73[] = {' ','{','\\','r','t','f',' '}
static

Definition at line 564 of file misc.c.

◆ data74

BYTE data74[] = {'{','\\','r','t','f','<','h','t','m','l','>',' '}
static

Definition at line 565 of file misc.c.

◆ data75

BYTE data75[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'W','A','V','E',0xff}
static

Definition at line 566 of file misc.c.

◆ data76

BYTE data76[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'W','A','V','E'}
static

Definition at line 567 of file misc.c.

◆ data77

BYTE data77[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'W','A','V',0xff,0xff}
static

Definition at line 568 of file misc.c.

◆ data78

BYTE data78[] = {'R','I','F','F',0xff,0xff,0xff,0xff,'<','h','t','m','l','>',0xff}
static

Definition at line 569 of file misc.c.

◆ data79

BYTE data79[] = {'%','!',0xff}
static

Definition at line 570 of file misc.c.

◆ data8

BYTE data8[] = {'t','e','s',0xfa,'t',' ','<','h','t','m','l','>','d','a','t','a','\n',0,0}
static

Definition at line 499 of file misc.c.

◆ data80

BYTE data80[] = {'%','!'}
static

Definition at line 571 of file misc.c.

◆ data81

BYTE data81[] = {'%','!','P','S','<','h','t','m','l','>'}
static

Definition at line 572 of file misc.c.

◆ data82

BYTE data82[] = {'.','s','n','d',0}
static

Definition at line 573 of file misc.c.

◆ data83

BYTE data83[] = {'.','s','n','d'}
static

Definition at line 574 of file misc.c.

◆ data84

BYTE data84[] = {'.','s','n','d',0,'<','h','t','m','l','>',1,1}
static

Definition at line 575 of file misc.c.

◆ data85

BYTE data85[] = {'.','S','N','D',0}
static

Definition at line 576 of file misc.c.

◆ data86

BYTE data86[] = {0x49,0x49,0x2a,0xff}
static

Definition at line 577 of file misc.c.

◆ data87

BYTE data87[] = {' ','<','h','e','a','d'}
static

Definition at line 578 of file misc.c.

◆ data88

BYTE data88[] = {' ','<','h','e','a','d','>'}
static

Definition at line 579 of file misc.c.

◆ data89

BYTE data89[] = {'\t','\r','<','h','e','a','d','>'}
static

Definition at line 580 of file misc.c.

◆ data9

BYTE data9[] = {'t','e',0,'s',0xfa,'t',' ','<','h','t','m','l','>','d','a','t','a','\n',0,0}
static

Definition at line 500 of file misc.c.

◆ data90

BYTE data90[] = {'<','H','e','A','d',' '}
static

Definition at line 581 of file misc.c.

◆ data91

BYTE data91[] = {'<','?','x','m','l',' ',0}
static

Definition at line 582 of file misc.c.

◆ data92

BYTE data92[] = {'a','b','c','<','?','x','m','l',' ',' '}
static

Definition at line 583 of file misc.c.

◆ data93

BYTE data93[] = {'<','?','x','m','l',' ',' ','<','h','t','m','l','>'}
static

Definition at line 584 of file misc.c.

◆ data94

BYTE data94[] = {'<','h','t','m','l','>','<','?','x','m','l',' ',' '}
static

Definition at line 585 of file misc.c.

◆ data95

BYTE data95[] = {'{','\\','r','t','f','<','?','x','m','l',' ',' '}
static

Definition at line 586 of file misc.c.

◆ data96

BYTE data96[] = {'<','?','x','m','l',' '}
static

Definition at line 587 of file misc.c.

◆ data97

BYTE data97[] = "<body"
static

Definition at line 588 of file misc.c.

◆ data98

BYTE data98[] = "blah<BoDyblahblah"
static

Definition at line 589 of file misc.c.

◆ 

const struct { ... } default_feature_tests[]
Initial value:
= {
{FEATURE_OBJECT_CACHING,GET_FEATURE_FROM_PROCESS,S_OK},
{FEATURE_ZONE_ELEVATION,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_MIME_HANDLING,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_MIME_SNIFFING,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_WINDOW_RESTRICTIONS,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_WEBOC_POPUPMANAGEMENT,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_BEHAVIORS,GET_FEATURE_FROM_PROCESS,S_OK},
{FEATURE_DISABLE_MK_PROTOCOL,GET_FEATURE_FROM_PROCESS,S_OK},
{FEATURE_LOCALMACHINE_LOCKDOWN,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_SECURITYBAND,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_RESTRICT_ACTIVEXINSTALL,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_VALIDATE_NAVIGATE_URL,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_RESTRICT_FILEDOWNLOAD,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_ADDON_MANAGEMENT,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_PROTOCOL_LOCKDOWN,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_HTTP_USERNAME_PASSWORD_DISABLE,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_SAFE_BINDTOOBJECT,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_UNC_SAVEDFILECHECK,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_GET_URL_DOM_FILEPATH_UNENCODED,GET_FEATURE_FROM_PROCESS,S_OK},
{FEATURE_TABBED_BROWSING,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_SSLUX,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_DISABLE_NAVIGATION_SOUNDS,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_DISABLE_LEGACY_COMPRESSION,GET_FEATURE_FROM_PROCESS,S_OK},
{FEATURE_FORCE_ADDR_AND_STATUS,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_XMLHTTP,GET_FEATURE_FROM_PROCESS,S_OK},
{FEATURE_DISABLE_TELNET_PROTOCOL,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_FEEDS,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_BLOCK_INPUT_PROMPTS,GET_FEATURE_FROM_PROCESS,S_FALSE}
}
enum FEATURE_SAFE_BINDTOOBJECT
enum FEATURE_MIME_SNIFFING
enum FEATURE_VALIDATE_NAVIGATE_URL
enum FEATURE_WEBOC_POPUPMANAGEMENT
enum FEATURE_DISABLE_MK_PROTOCOL
enum FEATURE_UNC_SAVEDFILECHECK
enum FEATURE_LOCALMACHINE_LOCKDOWN
enum FEATURE_GET_URL_DOM_FILEPATH_UNENCODED
enum FEATURE_DISABLE_LEGACY_COMPRESSION
enum FEATURE_SSLUX
enum FEATURE_BEHAVIORS
enum FEATURE_TABBED_BROWSING
enum FEATURE_WINDOW_RESTRICTIONS
enum FEATURE_PROTOCOL_LOCKDOWN
enum FEATURE_XMLHTTP
enum FEATURE_MIME_HANDLING
enum FEATURE_ZONE_ELEVATION
enum FEATURE_FORCE_ADDR_AND_STATUS
enum FEATURE_DISABLE_TELNET_PROTOCOL
enum FEATURE_DISABLE_NAVIGATION_SOUNDS
enum FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
enum FEATURE_FEEDS
enum FEATURE_ADDON_MANAGEMENT
enum FEATURE_RESTRICT_ACTIVEXINSTALL
enum FEATURE_SECURITYBAND
enum FEATURE_BLOCK_INPUT_PROMPTS
enum FEATURE_RESTRICT_FILEDOWNLOAD

Referenced by test_internet_feature_defaults().

◆ DWORD

Definition at line 68 of file misc.c.

◆ enable

Definition at line 1974 of file misc.c.

◆ expect_cf

IClassFactory* expect_cf
static

Definition at line 932 of file misc.c.

Referenced by ClassFactory_QueryInterface(), ProtocolCF_CreateInstance(), and test_NameSpace().

◆ expected

HRESULT expected

Definition at line 1809 of file misc.c.

Referenced by test_internet_feature_defaults(), and test_user_agent().

◆ feature

Definition at line 1807 of file misc.c.

Referenced by ACTION_GetFeatureInstallStates(), ACTION_InstallValidate(), ACTION_PublishFeatures(), ACTION_RegisterClassInfo(), ACTION_RegisterExtensionInfo(), ACTION_UnpublishFeatures(), ACTION_UnregisterClassInfo(), ACTION_UnregisterExtensionInfo(), ACTION_UpdateComponentStates(), add_feature_component(), apply_GSUB_feature(), apply_GSUB_feature_to_glyph(), Apply_Indic_BasicForm(), Apply_Indic_PreBase(), AtaCommand(), AtaCommand48(), check_publish(), check_unpublish(), dialog_handle_event(), dialog_seltree_handler(), disable_children(), domimpl_hasFeature(), event_add_local(), event_add_source(), event_remove(), feature_cost(), follow_parent(), free_feature(), free_package_structures(), get_feature_from_process(), get_feature_from_reg(), get_feature_value(), get_internet_feature(), GetFeatureEnabledState(), GPOS_apply_feature(), GSUB_apply_feature_all_lookups(), HTMLDOMImplementation_hasFeature(), is_feature_selected(), is_full_uninstall(), isaxxmlreader_getFeature(), isaxxmlreader_putFeature(), IsOS(), IsProcessorFeaturePresent(), ITERATE_CostFinalizeConditions(), ITERATE_PublishComponent(), ITERATE_UnpublishComponent(), load_feature(), load_OT_feature(), load_process_feature(), msi_create_component_advertise_string(), msi_get_feature_action(), msi_get_loaded_feature(), MSI_GetFeatureCost(), MSI_GetFeatureInfo(), MSI_GetFeatureStateW(), msi_install_assembly(), MSI_ProvideQualifiedComponentEx(), MSI_SetFeatureStates(), MSI_SetFeatureStateW(), msi_uninstall_assembly(), MsiDecomposeDescriptorA(), MsiGetFeatureCostW(), MsiGetFeatureInfoA(), MsiGetFeatureInfoW(), MsiGetShortcutTargetA(), MsiProvideComponentA(), MsiProvideComponentW(), MsiQueryFeatureStateExA(), MsiQueryFeatureStateExW(), MsiSetFeatureAttributesA(), MsiSetFeatureAttributesW(), OpenType_GetFontFeatureTags(), process_state_property(), query_feature_state(), refcount_component(), s_remote_GetFeatureCost(), s_remote_GetFeatureState(), s_remote_SetFeatureState(), seltree_add_child_features(), seltree_menu(), seltree_sync_item_state(), seltree_update_feature_installstate(), seltree_update_siblings_and_children_installstate(), set_feature_on_process(), set_feature_value(), set_internet_feature(), SHAPE_ApplyOpenTypePositions(), SHAPE_CheckFontForRequiredFeatures(), SHAPE_does_GSUB_feature_apply_to_chars(), test_CoInternetSetFeatureEnabled(), test_feature_states(), test_internet_feature_defaults(), test_internet_features_registry(), test_msidecomposedesc(), test_SafeArrayCopy(), test_SafeArrayCopyData(), test_WinHttpQueryOption(), UniataAhciSendPIOCommand(), UniataAhciSetupFIS_H2D(), unpublish_feature(), usp10_language_add_feature_list(), vcl_get_cost(), and xmlHasFeature().

◆ get_expected

HRESULT get_expected

Definition at line 1978 of file misc.c.

Referenced by test_CoInternetSetFeatureEnabled().

◆ get_flags

DWORD get_flags

Definition at line 1808 of file misc.c.

Referenced by get_flags(), jsdisp_next_prop(), and test_internet_feature_defaults().

◆ get_todo

BOOL get_todo

Definition at line 1979 of file misc.c.

Referenced by test_CoInternetSetFeatureEnabled().

◆ hres

HRESULT hres

Definition at line 476 of file misc.c.

◆ in_bindinfo

BINDINFO in_bindinfo
static

◆ in_stgmed

STGMEDIUM in_stgmed
static

Definition at line 2114 of file misc.c.

Referenced by BindStatusCallback_OnDataAvailable(), and test_bsc_marshaling().

◆ 

const struct { ... } internet_feature_tests[]
Initial value:
= {
{FEATURE_OBJECT_CACHING,SET_FEATURE_ON_PROCESS,FALSE,S_OK,FALSE,GET_FEATURE_FROM_PROCESS,S_FALSE},
{FEATURE_WEBOC_POPUPMANAGEMENT,SET_FEATURE_ON_PROCESS,TRUE,S_OK,FALSE,GET_FEATURE_FROM_PROCESS,S_OK},
{FEATURE_LOCALMACHINE_LOCKDOWN,SET_FEATURE_ON_PROCESS,TRUE,S_OK,FALSE,GET_FEATURE_FROM_PROCESS,S_OK}
}

Referenced by test_CoInternetSetFeatureEnabled().

◆ InternetProtocolInfoVtbl

const IInternetProtocolInfoVtbl InternetProtocolInfoVtbl
static
Initial value:
= {
}
static HRESULT WINAPI InternetProtocolInfo_QueryInfo(IInternetProtocolInfo *iface, LPCWSTR pwzUrl, QUERYOPTION OueryOption, DWORD dwQueryFlags, LPVOID pBuffer, DWORD cbBuffer, DWORD *pcbBuf, DWORD dwReserved)
Definition: misc.c:911
static HRESULT WINAPI InternetProtocolInfo_CompareUrl(IInternetProtocolInfo *iface, LPCWSTR pwzUrl1, LPCWSTR pwzUrl2, DWORD dwCompareFlags)
Definition: misc.c:904
static HRESULT WINAPI InternetProtocolInfo_CombineUrl(IInternetProtocolInfo *iface, LPCWSTR pwzBaseUrl, LPCWSTR pwzRelativeUrl, DWORD dwCombineFlags, LPWSTR pwzResult, DWORD cchResult, DWORD *pcchResult, DWORD dwReserved)
Definition: misc.c:896
static ULONG WINAPI InternetProtocolInfo_AddRef(IInternetProtocolInfo *iface)
Definition: misc.c:855
static ULONG WINAPI InternetProtocolInfo_Release(IInternetProtocolInfo *iface)
Definition: misc.c:860
static HRESULT WINAPI InternetProtocolInfo_QueryInterface(IInternetProtocolInfo *iface, REFIID riid, void **ppv)
Definition: misc.c:848
static HRESULT WINAPI InternetProtocolInfo_ParseUrl(IInternetProtocolInfo *iface, LPCWSTR pwzUrl, PARSEACTION ParseAction, DWORD dwParseFlags, LPWSTR pwzResult, DWORD cchResult, DWORD *pcchResult, DWORD dwReserved)
Definition: misc.c:865

Definition at line 919 of file misc.c.

◆ LPCWSTR

STGMEDIUM *static BINDINFO *static LPCWSTR

Definition at line 68 of file misc.c.

◆ LPSTR

Definition at line 77 of file misc.c.

◆ LPVOID

Definition at line 72 of file misc.c.

◆ LPWSTR

Definition at line 71 of file misc.c.

◆ mime

const WCHAR* mime

Definition at line 475 of file misc.c.

Referenced by test_FindMimeFromData().

◆ mime_pjpeg

const WCHAR* mime_pjpeg

Definition at line 595 of file misc.c.

Referenced by test_FindMimeFromData().

◆ 

const struct { ... } mime_tests[]
Initial value:
= {
{L"res://mshtml.dll/blank.htm", L"text/html", S_OK},
{L"index.htm", L"text/html", S_OK},
{L"file://c:\\Index.htm", L"text/html", S_OK},
{L"file://c:\\Index.htm?q=test", L"text/html", S_OK, TRUE},
{L"file://c:\\Index.htm#hash_part", L"text/html", S_OK, TRUE},
{L"file://c:\\Index.htm#hash_part.txt", L"text/html", S_OK, FALSE, L"text/plain"},
{L"file://some%20file%2ejpg", NULL, E_FAIL},
{L"http://www.winehq.org", NULL, __HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)},
{L"about:blank", NULL, E_FAIL},
{L"ftp://winehq.org/file.test", NULL, __HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)}
}
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define __HRESULT_FROM_WIN32(x)
Definition: winerror.h:197

Referenced by test_FindMimeFromData().

◆ 

const struct { ... } mime_tests2[]

Referenced by test_FindMimeFromData().

◆ parse_tests

const struct parse_test parse_tests[]
static
Initial value:
= {
}
static const WCHAR url6[]
Definition: misc.c:285
static const WCHAR url5[]
Definition: misc.c:283
static const WCHAR url4[]
Definition: misc.c:281
static const WCHAR wszGoogle[]
Definition: misc.c:305
static const WCHAR path3[]
Definition: misc.c:297
static const WCHAR url2[]
Definition: misc.c:279
static const WCHAR wszWineHQ[]
Definition: misc.c:307
static const WCHAR url4e[]
Definition: misc.c:294
static const WCHAR wszHttp[]
Definition: misc.c:302
static const WCHAR path4[]
Definition: misc.c:298
static const WCHAR wszHttpGoogle[]
Definition: misc.c:310
static const WCHAR url10[]
Definition: misc.c:292

Definition at line 326 of file misc.c.

Referenced by test_CoInternetParseUrl().

◆ PARSEACTION

PARSEACTION

Definition at line 71 of file misc.c.

◆ path3

◆ path4

const WCHAR path4[] = {'s','o','m','e',' ','f','i','l','e','.','j','p','g',0}
static

◆ proposed_mime

const WCHAR* proposed_mime

Definition at line 598 of file misc.c.

Referenced by find_mime_from_buffer(), and test_FindMimeFromData().

◆ protocol_info

◆ ProtocolCFVtbl

const IClassFactoryVtbl ProtocolCFVtbl
static
Initial value:
= {
}
static HRESULT WINAPI ProtocolCF_CreateInstance(IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppv)
Definition: misc.c:964

Definition at line 992 of file misc.c.

◆ PSUACTION

static IUri PSUACTION

Definition at line 69 of file misc.c.

◆ qiret

HRESULT qiret
static

Definition at line 931 of file misc.c.

Referenced by ClassFactory_QueryInterface(), and test_NameSpace().

◆ 

const struct { ... } query_info_tests[]
Initial value:
= {
{url1, 0},
{url2, 0},
{url3, 0},
{url4, 0},
{url5, 0},
{url6, 0},
{url7, 0},
{url8, 0}
}
static const WCHAR url7[]
Definition: misc.c:286

Referenced by test_CoInternetQueryInfo().

◆ QUERYOPTION

QUERYOPTION

Definition at line 72 of file misc.c.

◆ RefUnkVtbl

const IUnknownVtbl RefUnkVtbl
static
Initial value:
= {
}
static ULONG WINAPI RefUnk_Release(IUnknown *iface)
Definition: misc.c:2186
static HRESULT WINAPI RefUnk_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
Definition: misc.c:2168
static ULONG WINAPI RefUnk_AddRef(IUnknown *iface)
Definition: misc.c:2180

Definition at line 2192 of file misc.c.

◆ rem_bindf

DWORD rem_bindf
static

◆ rem_bindinfo

◆ rem_stgmed

◆ set_expected

HRESULT set_expected

Definition at line 1975 of file misc.c.

Referenced by test_CoInternetSetFeatureEnabled().

◆ set_flags

DWORD set_flags

Definition at line 1973 of file misc.c.

Referenced by test_CoInternetSetFeatureEnabled().

◆ set_todo

BOOL set_todo

Definition at line 1976 of file misc.c.

Referenced by test_CoInternetSetFeatureEnabled().

◆ size

Definition at line 593 of file misc.c.

◆ szFeatureControlKey

const char* szFeatureControlKey = "Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl"
static

Definition at line 1862 of file misc.c.

Referenced by test_internet_features(), and test_internet_features_registry().

◆ test_cf

IClassFactory test_cf = { &ClassFactoryVtbl }
static

Definition at line 1002 of file misc.c.

Referenced by test_MimeFilter().

◆ test_protocol_cf

IClassFactory test_protocol_cf = { &ProtocolCFVtbl }
static

Definition at line 1000 of file misc.c.

Referenced by test_NameSpace().

◆ test_protocol_cf2

IClassFactory test_protocol_cf2 = { &ProtocolCFVtbl }
static

Definition at line 1001 of file misc.c.

Referenced by test_NameSpace().

◆ thread_ready

HANDLE thread_ready
static

Definition at line 2200 of file misc.c.

Referenced by bsc_thread(), and test_bsc_marshaling().

◆ todo

BOOL todo

Definition at line 1810 of file misc.c.

◆ unk_in

RefUnk unk_in = {{&RefUnkVtbl}}
static

Definition at line 2198 of file misc.c.

Referenced by test_bsc_marshaling(), test_marshal_coclass(), and test_marshal_iface().

◆ unk_out

RefUnk unk_out = {{&RefUnkVtbl}}
static

Definition at line 2198 of file misc.c.

Referenced by test_bsc_marshaling(), test_marshal_coclass(), and test_marshal_iface().

◆ unk_vtbl

const IUnknownVtbl unk_vtbl
static
Initial value:
= {
(void*)0xdeadbeef,
(void*)0xdeadbeef,
}

Definition at line 1196 of file misc.c.

Referenced by test_ReleaseBindInfo().

◆ url

const WCHAR* url

◆ url1

const WCHAR url1[]
static
Initial value:
= {'r','e','s',':','/','/','m','s','h','t','m','l','.','d','l','l',
'/','b','l','a','n','k','.','h','t','m',0}

Definition at line 277 of file misc.c.

Referenced by InternetProtocolInfo_ParseUrl(), RestoreTypedURLs(), test_CoInternetCompareUrl(), test_CreateURLMoniker(), test_FindMimeFromData(), test_IACLCustomMRU_TypedURLs(), test_NameSpace(), test_UrlCombine(), UrlCompareA(), UrlCompareW(), WinHttpCrackUrl_test(), and WinHttpCreateUrl_test().

◆ url10

const WCHAR url10[]
static
Initial value:
= {'h','t','t','p',':','/','/','g','o','o','g','l','e','.','*','.',
'c','o','m',0}

Definition at line 292 of file misc.c.

◆ url2

◆ url3

const WCHAR url3[] = {'f','i','l','e',':','/','/','c',':','\\','I','n','d','e','x','.','h','t','m',0}
static

Definition at line 280 of file misc.c.

Referenced by test_CoInternetCompareUrl().

◆ url4

const WCHAR url4[]
static
Initial value:
= {'f','i','l','e',':','s','o','m','e','%','2','0','f','i','l','e',
'%','2','e','j','p','g',0}

Definition at line 281 of file misc.c.

◆ url4e

const WCHAR url4e[]
static
Initial value:
= {'f','i','l','e',':','s','o','m','e',' ','f','i','l','e',
'.','j','p','g',0}

Definition at line 294 of file misc.c.

◆ url5

const WCHAR url5[]
static
Initial value:
= {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q',
'.','o','r','g',0}

Definition at line 283 of file misc.c.

◆ url6

const WCHAR url6[] = {'a','b','o','u','t',':','b','l','a','n','k',0}
static

Definition at line 285 of file misc.c.

◆ url7

const WCHAR url7[]
static
Initial value:
= {'f','t','p',':','/','/','w','i','n','e','h','q','.','o','r','g','/',
'f','i','l','e','.','t','e','s','t',0}

Definition at line 286 of file misc.c.

◆ url8

const WCHAR url8[] = {'t','e','s','t',':','1','2','3','a','b','c',0}
static

Definition at line 288 of file misc.c.

Referenced by test_MkParseDisplayNameEx(), and test_NameSpace().

◆ url9

const WCHAR url9[]
static
Initial value:
=
{'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g',
'/','s','i','t','e','/','a','b','o','u','t',0}

Definition at line 289 of file misc.c.

Referenced by test_MkParseDisplayNameEx().

◆ uses_net

DWORD uses_net

Definition at line 433 of file misc.c.

Referenced by test_CoInternetQueryInfo().

◆ wszAbout

const WCHAR wszAbout[] = {'a','b','o','u','t',0}
static

Definition at line 303 of file misc.c.

Referenced by AboutProtocol_Start(), register_protocols(), and test_CoInternetParseUrl().

◆ wszEmpty

const WCHAR wszEmpty[] = {0}
static

◆ wszFile

const WCHAR wszFile[] = {'f','i','l','e',0}
static

Definition at line 301 of file misc.c.

Referenced by test_NameSpace().

◆ wszGoogle

const WCHAR wszGoogle[] = {'g','o','o','g','l','e','.','*','.','c','o','m',0}
static

Definition at line 305 of file misc.c.

◆ wszHttp

const WCHAR wszHttp[] = {'h','t','t','p',0}
static

Definition at line 302 of file misc.c.

◆ wszHttpGoogle

const WCHAR wszHttpGoogle[]
static
Initial value:
= {'h','t','t','p',':','/','/','g','o','o','g','l','e',
'.','*','.','c','o','m',0}

Definition at line 310 of file misc.c.

◆ wszHttpWineHQ

const WCHAR wszHttpWineHQ[]
static
Initial value:
= {'h','t','t','p',':','/','/','w','w','w','.',
'w','i','n','e','h','q','.','o','r','g',0}

Definition at line 308 of file misc.c.

Referenced by test_IsValidURL().

◆ wszRes

const WCHAR wszRes[] = {'r','e','s',0}
static

Definition at line 300 of file misc.c.

Referenced by ResProtocol_Start(), ResProtocolInfo_ParseUrl(), and test_CoInternetParseUrl().

◆ wszWineHQ

const WCHAR wszWineHQ[] = {'w','w','w','.','w','i','n','e','h','q','.','o','r','g',0}
static

Definition at line 307 of file misc.c.