Module: wine Branch: master Commit: 860df26c4a19d6ee9bed6702c7da64ec0e6189cb URL: http://source.winehq.org/git/wine.git/?a=commit;h=860df26c4a19d6ee9bed6702c7...
Author: Piotr Caban piotr@codeweavers.com Date: Mon Sep 19 10:55:46 2011 +0200
urlmon/tests: Added CoInternetIsFeatureZoneElevationEnabled tests.
---
dlls/urlmon/tests/sec_mgr.c | 175 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 175 insertions(+), 0 deletions(-)
diff --git a/dlls/urlmon/tests/sec_mgr.c b/dlls/urlmon/tests/sec_mgr.c index fd74fbd..fca17e8 100644 --- a/dlls/urlmon/tests/sec_mgr.c +++ b/dlls/urlmon/tests/sec_mgr.c @@ -70,6 +70,7 @@ DEFINE_EXPECT(ParseUrl_SECURITY_URL_input2); DEFINE_EXPECT(ParseUrl_SECURITY_URL_expected); DEFINE_EXPECT(ParseUrl_SECURITY_URL_http); DEFINE_EXPECT(ParseUrl_SECURITY_DOMAIN_expected); +DEFINE_EXPECT(ProcessUrlAction);
static HRESULT (WINAPI *pCoInternetCreateSecurityManager)(IServiceProvider *, IInternetSecurityManager**, DWORD); static HRESULT (WINAPI *pCoInternetCreateZoneManager)(IServiceProvider *, IInternetZoneManager**, DWORD); @@ -77,6 +78,9 @@ static HRESULT (WINAPI *pCoInternetGetSecurityUrl)(LPCWSTR, LPWSTR*, PSUACTION, static HRESULT (WINAPI *pCoInternetGetSecurityUrlEx)(IUri*, IUri**, PSUACTION, DWORD_PTR); static HRESULT (WINAPI *pCreateUri)(LPCWSTR, DWORD, DWORD_PTR, IUri**); static HRESULT (WINAPI *pCoInternetGetSession)(DWORD, IInternetSession**, DWORD); +static HRESULT (WINAPI *pCoInternetIsFeatureEnabled)(INTERNETFEATURELIST, DWORD); +static HRESULT (WINAPI *pCoInternetIsFeatureEnabledForUrl)(INTERNETFEATURELIST, DWORD, LPCWSTR, IInternetSecurityManager*); +static HRESULT (WINAPI *pCoInternetIsFeatureZoneElevationEnabled)(LPCWSTR, LPCWSTR, IInternetSecurityManager*, DWORD);
static const WCHAR url1[] = {'r','e','s',':','/','/','m','s','h','t','m','l','.','d','l','l', '/','b','l','a','n','k','.','h','t','m',0}; @@ -128,6 +132,7 @@ const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY = {0x10200490,0xfa38,0x11d0,{0xac,0x0e,0x00,0xa0,0xc9,0xf,0xff,0xc0}};
static int called_securl_http; +static DWORD ProcessUrlAction_policy;
static struct secmgr_test { LPCWSTR url; @@ -248,6 +253,103 @@ cleanup: return ret; }
+static HRESULT WINAPI SecurityManager_QueryInterface(IInternetSecurityManager* This, + REFIID riid, void **ppvObject) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static ULONG WINAPI SecurityManager_AddRef(IInternetSecurityManager* This) +{ + return 2; +} + +static ULONG WINAPI SecurityManager_Release(IInternetSecurityManager* This) +{ + return 1; +} + +static HRESULT WINAPI SecurityManager_SetSecuritySite(IInternetSecurityManager* This, + IInternetSecurityMgrSite *pSite) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI SecurityManager_GetSecuritySite(IInternetSecurityManager* This, + IInternetSecurityMgrSite **ppSite) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI SecurityManager_MapUrlToZone(IInternetSecurityManager* This, + LPCWSTR pwszUrl, DWORD *pdwZone, DWORD dwFlags) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI SecurityManager_GetSecurityId(IInternetSecurityManager* This, + LPCWSTR pwszUrl, BYTE *pbSecurityId, DWORD *pcbSecurityId, DWORD_PTR dwReserved) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI SecurityManager_ProcessUrlAction(IInternetSecurityManager* This, + LPCWSTR pwszUrl, DWORD dwAction, BYTE *pPolicy, DWORD cbPolicy, + BYTE *pContext, DWORD cbContext, DWORD dwFlags, DWORD dwReserved) +{ + CHECK_EXPECT(ProcessUrlAction); + ok(dwAction == URLACTION_FEATURE_ZONE_ELEVATION, "dwAction = %x\n", dwAction); + ok(cbPolicy == sizeof(DWORD), "cbPolicy = %d\n", cbPolicy); + ok(!pContext, "pContext != NULL\n"); + ok(dwFlags == PUAF_NOUI, "dwFlags = %x\n", dwFlags); + ok(dwReserved == 0, "dwReserved = %x\n", dwReserved); + + *pPolicy = ProcessUrlAction_policy; + return ProcessUrlAction_policy==URLPOLICY_ALLOW ? S_OK : S_FALSE; +} + +static HRESULT WINAPI SecurityManager_QueryCustomPolicy(IInternetSecurityManager* This, + LPCWSTR pwszUrl, REFGUID guidKey, BYTE **ppPolicy, DWORD *pcbPolicy, + BYTE *pContext, DWORD cbContext, DWORD dwReserved) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI SecurityManager_SetZoneMapping(IInternetSecurityManager* This, + DWORD dwZone, LPCWSTR lpszPattern, DWORD dwFlags) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI SecurityManager_GetZoneMappings(IInternetSecurityManager* This, + DWORD dwZone, IEnumString **ppenumString, DWORD dwFlags) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static const IInternetSecurityManagerVtbl SecurityManagerVtbl = { + SecurityManager_QueryInterface, + SecurityManager_AddRef, + SecurityManager_Release, + SecurityManager_SetSecuritySite, + SecurityManager_GetSecuritySite, + SecurityManager_MapUrlToZone, + SecurityManager_GetSecurityId, + SecurityManager_ProcessUrlAction, + SecurityManager_QueryCustomPolicy, + SecurityManager_SetZoneMapping, + SecurityManager_GetZoneMappings +}; + +static IInternetSecurityManager security_manager = { &SecurityManagerVtbl };
static void test_SecurityManager(void) { @@ -1702,6 +1804,75 @@ static void test_SecurityManagerEx2(void) IInternetSecurityManager_Release(sec_mgr); }
+static void test_CoInternetIsFeatureZoneElevationEnabled(void) +{ + struct { + const char *url_from; + const char *url_to; + DWORD flags; + HRESULT hres; + DWORD policy_flags; + } testcases[] = { + /* 0 */ { "http://www.winehq.org", "http://www.winehq.org", 0, S_FALSE, URLPOLICY_ALLOW }, + /* 1 */ { "http://www.winehq.org", "http://www.winehq.org", 0, S_OK, URLPOLICY_DISALLOW }, + /* 2 */ { "http://www.winehq.org", "http://www.codeweavers.com", 0, S_FALSE, URLPOLICY_ALLOW }, + /* 3 */ { "http://www.winehq.org", "http://www.codeweavers.com", 0, S_OK, URLPOLICY_DISALLOW }, + /* 4 */ { "http://www.winehq.org", "http://www.winehq.org", GET_FEATURE_FROM_PROCESS, S_FALSE, -1 }, + /* 5 */ { "http://www.winehq.org", "http://www.winehq.org/dir", GET_FEATURE_FROM_PROCESS, S_FALSE, -1 }, + /* 6 */ { "http://www.winehq.org", "http://www.codeweavers.com", GET_FEATURE_FROM_PROCESS, S_FALSE, -1 }, + /* 7 */ { "http://www.winehq.org", "ftp://winehq.org", GET_FEATURE_FROM_PROCESS, S_FALSE, -1 }, + /* 8 */ { "http://www.winehq.org", "ftp://winehq.org", GET_FEATURE_FROM_PROCESS|0x100, S_FALSE, URLPOLICY_ALLOW }, + /* 9 */ { "http://www.winehq.org", "ftp://winehq.org", GET_FEATURE_FROM_REGISTRY, S_FALSE, URLPOLICY_ALLOW }, + }; + + WCHAR *url_from, *url_to; + int i; + HRESULT hres; + + if(!pCoInternetIsFeatureZoneElevationEnabled || !pCoInternetIsFeatureEnabled + || !pCoInternetIsFeatureEnabledForUrl) { + win_skip("Skipping CoInternetIsFeatureZoneElevationEnabled tests\n"); + return; + } + + + hres = pCoInternetIsFeatureEnabled(FEATURE_ZONE_ELEVATION, GET_FEATURE_FROM_PROCESS); + ok(SUCCEEDED(hres), "CoInternetIsFeatureEnabled returned %x\n", hres); + + trace("Testing CoInternetIsFeatureZoneElevationEnabled... (%x)\n", hres); + + for(i=0; i<sizeof(testcases)/sizeof(testcases[0]); i++) { + if(hres==S_OK && testcases[i].flags == GET_FEATURE_FROM_PROCESS) + testcases[i].policy_flags = URLPOLICY_ALLOW; + } + + for(i=0; i<sizeof(testcases)/sizeof(testcases[0]); i++) { + url_from = a2w(testcases[i].url_from); + url_to = a2w(testcases[i].url_to); + + if(testcases[i].policy_flags != -1) { + ProcessUrlAction_policy = testcases[i].policy_flags; + SET_EXPECT(ProcessUrlAction); + } + hres = pCoInternetIsFeatureZoneElevationEnabled(url_from, url_to, + &security_manager, testcases[i].flags); + ok(hres == testcases[i].hres, "%d) CoInternetIsFeatureZoneElevationEnabled returned %x\n", i, hres); + if(testcases[i].policy_flags != -1) + CHECK_CALLED(ProcessUrlAction); + + if(testcases[i].policy_flags != -1) + SET_EXPECT(ProcessUrlAction); + hres = pCoInternetIsFeatureEnabledForUrl(FEATURE_ZONE_ELEVATION, + testcases[i].flags, url_to, &security_manager); + ok(hres == testcases[i].hres, "%d) CoInternetIsFeatureEnabledForUrl returned %x\n", i, hres); + if(testcases[i].policy_flags != -1) + CHECK_CALLED(ProcessUrlAction); + + heap_free(url_from); + heap_free(url_to); + } +} + START_TEST(sec_mgr) { HMODULE hurlmon; @@ -1715,6 +1886,9 @@ START_TEST(sec_mgr) pCoInternetGetSecurityUrlEx = (void*) GetProcAddress(hurlmon, "CoInternetGetSecurityUrlEx"); pCreateUri = (void*) GetProcAddress(hurlmon, "CreateUri"); pCoInternetGetSession = (void*) GetProcAddress(hurlmon, "CoInternetGetSession"); + pCoInternetIsFeatureEnabled = (void*) GetProcAddress(hurlmon, "CoInternetIsFeatureEnabled"); + pCoInternetIsFeatureEnabledForUrl = (void*) GetProcAddress(hurlmon, "CoInternetIsFeatureEnabledForUrl"); + pCoInternetIsFeatureZoneElevationEnabled = (void*) GetProcAddress(hurlmon, "CoInternetIsFeatureZoneElevationEnabled");
if (!pCoInternetCreateSecurityManager || !pCoInternetCreateZoneManager || !pCoInternetGetSecurityUrl) { @@ -1751,6 +1925,7 @@ START_TEST(sec_mgr) test_GetZoneAttributes(); test_SetZoneAttributes(); test_InternetSecurityMarshalling(); + test_CoInternetIsFeatureZoneElevationEnabled();
unregister_protocols(); OleUninitialize();