Piotr Caban : urlmon/tests: Added CoInternetIsFeatureZoneElevationEnabled tests.
Alexandre Julliard
julliard at winehq.org
Mon Sep 19 13:48:42 CDT 2011
Module: wine
Branch: master
Commit: 860df26c4a19d6ee9bed6702c7da64ec0e6189cb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=860df26c4a19d6ee9bed6702c7da64ec0e6189cb
Author: Piotr Caban <piotr at 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();
More information about the wine-cvs
mailing list