+static void test_InternetSecurityMarshalling(void)
+{
+ IInternetSecurityManager *secmgr = NULL;
+ IUnknown *unk;
+ IStream *stream;
+ HRESULT hres;
+
+ hres = CoInternetCreateSecurityManager(NULL, &secmgr, 0);
+ if(FAILED(hres))
+ return;
+
+ hres = IInternetSecurityManager_QueryInterface(secmgr, &IID_IUnknown, (void**)&unk);
+ ok(hres == S_OK, "QueryInterface returned: %08x\n", hres);
+
+ hres = CreateStreamOnHGlobal(NULL, TRUE, &stream);
+ ok(hres == S_OK, "CreateStreamOnHGlobal returned: %08x\n", hres);
+
+ hres = CoMarshalInterface(stream, &IID_IInternetSecurityManager, unk, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL);
+ ok(hres == S_OK, "CoMarshalInterface returned: %08x\n", hres);
+
+ IStream_Release(stream);
+ IUnknown_Release(unk);
+ IInternetSecurityManager_Release(secmgr);
+}
+
+static void test_InternetGetSecurityUrl(void)
+{
+ const WCHAR url5_out[] = {'h','t','t','p',':','w','w','w','.','w','i','n','e','h','q','.','o','r','g',0};
+ const WCHAR url7_out[] = {'f','t','p',':','w','i','n','e','h','q','.','o','r','g',0};
+
+ const WCHAR *in[] = {url2, url3, url4, url5, url7, url8, url9, url10};
+ const WCHAR *out_default[] = {url2, url3, url4, url5_out, url7_out, url8, url5_out, url10};
+ const WCHAR *out_securl[] = {url2, url3, url4, url5, url7, url8, url9, url10};
+
+ WCHAR *sec;
+ DWORD i;
+ HRESULT hres;
+
+ for(i=0; i<sizeof(in)/sizeof(WCHAR*); i++) {
+ hres = CoInternetGetSecurityUrl(in[i], &sec, PSU_DEFAULT, 0);
+ ok(hres == S_OK, "(%d) CoInternetGetSecurityUrl returned: %08x\n", i, hres);
+ if(hres == S_OK) {
+ ok(!strcmp_w(sec, out_default[i]), "(%d) Got %s, expected %s\n",
+ i, wine_dbgstr_w(sec), wine_dbgstr_w(out_default[i]));
+ CoTaskMemFree(sec);
+ }
+
+ hres = CoInternetGetSecurityUrl(in[i], &sec, PSU_SECURITY_URL_ONLY, 0);
+ ok(hres == S_OK, "(%d) CoInternetGetSecurityUrl returned: %08x\n", i, hres);
+ if(hres == S_OK) {
+ ok(!strcmp_w(sec, out_securl[i]), "(%d) Got %s, expected %s\n",
+ i, wine_dbgstr_w(sec), wine_dbgstr_w(out_securl[i]));
+ CoTaskMemFree(sec);
+ }
+ }
+}
+