ReactOS 0.4.17-dev-470-gf9e3448
url.c
Go to the documentation of this file.
1/*
2 * UrlMon URL tests
3 *
4 * Copyright 2004 Kevin Koltzau
5 * Copyright 2004-2007 Jacek Caban for CodeWeavers
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22#include <stdarg.h>
23#include <stdio.h>
24
25#define COBJMACROS
26#define CONST_VTABLE
27
28#include "windef.h"
29#include "winbase.h"
30#include "initguid.h"
31#include "urlmon.h"
32#include "wininet.h"
33#include "mshtml.h"
34#include "shlwapi.h"
35
36#include "wine/test.h"
37
38static HRESULT (WINAPI *pCreateAsyncBindCtxEx)(IBindCtx *, DWORD,
40static HRESULT (WINAPI *pCreateUri)(LPCWSTR, DWORD, DWORD_PTR, IUri**);
41
42DEFINE_OLEGUID(CLSID_CompositeMoniker, 0x309, 0, 0 );
43DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
44DEFINE_GUID(CLSID_IdentityUnmarshal,0x0000001b,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
45DEFINE_GUID(IID_IBindStatusCallbackHolder,0x79eac9cc,0xbaf9,0x11ce,0x8c,0x82,0x00,0xaa,0x00,0x4b,0xa9,0x0b);
47
48#define DEFINE_EXPECT(func) \
49 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
50
51#define SET_EXPECT(func) \
52 do { called_ ## func = FALSE; expect_ ## func = TRUE; } while(0)
53
54#define CHECK_EXPECT2(func) \
55 do { \
56 ok(expect_ ##func, "unexpected call " #func "\n"); \
57 called_ ## func = TRUE; \
58 }while(0)
59
60#define CHECK_EXPECT(func) \
61 do { \
62 CHECK_EXPECT2(func); \
63 expect_ ## func = FALSE; \
64 }while(0)
65
66#define CHECK_CALLED(func) \
67 do { \
68 ok(called_ ## func, "expected " #func "\n"); \
69 expect_ ## func = called_ ## func = FALSE; \
70 }while(0)
71
72#define CHECK_NOT_CALLED(func) \
73 do { \
74 ok(!called_ ## func, "unexpected " #func "\n"); \
75 expect_ ## func = called_ ## func = FALSE; \
76 }while(0)
77
78#define CHECK_CALLED_BROKEN(func) \
79 do { \
80 ok(called_ ## func || broken(!called_ ## func), "expected " #func "\n"); \
81 expect_ ## func = called_ ## func = FALSE; \
82 }while(0)
83
84#define CLEAR_CALLED(func) \
85 expect_ ## func = called_ ## func = FALSE
86
87DEFINE_EXPECT(QueryInterface_IServiceProvider);
88DEFINE_EXPECT(QueryInterface_IHttpNegotiate);
89DEFINE_EXPECT(QueryInterface_IBindStatusCallback);
90DEFINE_EXPECT(QueryInterface_IBindStatusCallbackEx);
91DEFINE_EXPECT(QueryInterface_IBindStatusCallbackHolder);
92DEFINE_EXPECT(QueryInterface_IAuthenticate);
93DEFINE_EXPECT(QueryInterface_IInternetProtocol);
94DEFINE_EXPECT(QueryInterface_IWindowForBindingUI);
95DEFINE_EXPECT(QueryInterface_IHttpSecurity);
96DEFINE_EXPECT(QueryService_IAuthenticate);
97DEFINE_EXPECT(QueryService_IInternetProtocol);
98DEFINE_EXPECT(QueryService_IInternetBindInfo);
99DEFINE_EXPECT(QueryService_IWindowForBindingUI);
100DEFINE_EXPECT(QueryService_IHttpSecurity);
101DEFINE_EXPECT(BeginningTransaction);
102DEFINE_EXPECT(OnResponse);
103DEFINE_EXPECT(QueryInterface_IHttpNegotiate2);
104DEFINE_EXPECT(GetRootSecurityId);
105DEFINE_EXPECT(GetBindInfo);
106DEFINE_EXPECT(GetBindInfoEx);
107DEFINE_EXPECT(OnStartBinding);
108DEFINE_EXPECT(OnProgress_FINDINGRESOURCE);
109DEFINE_EXPECT(OnProgress_CONNECTING);
110DEFINE_EXPECT(OnProgress_REDIRECTING);
111DEFINE_EXPECT(OnProgress_SENDINGREQUEST);
112DEFINE_EXPECT(OnProgress_MIMETYPEAVAILABLE);
113DEFINE_EXPECT(OnProgress_BEGINDOWNLOADDATA);
114DEFINE_EXPECT(OnProgress_DOWNLOADINGDATA);
115DEFINE_EXPECT(OnProgress_ENDDOWNLOADDATA);
116DEFINE_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE);
117DEFINE_EXPECT(OnStopBinding);
118DEFINE_EXPECT(OnDataAvailable);
119DEFINE_EXPECT(OnObjectAvailable);
120DEFINE_EXPECT(Obj_OnStartBinding);
121DEFINE_EXPECT(Obj_OnStopBinding);
122DEFINE_EXPECT(Obj_GetBindInfo);
123DEFINE_EXPECT(Obj_OnProgress_BEGINDOWNLOADDATA);
124DEFINE_EXPECT(Obj_OnProgress_ENDDOWNLOADDATA);
125DEFINE_EXPECT(Obj_OnProgress_SENDINGREQUEST);
126DEFINE_EXPECT(Obj_OnProgress_MIMETYPEAVAILABLE);
127DEFINE_EXPECT(Obj_OnProgress_CLASSIDAVAILABLE);
128DEFINE_EXPECT(Obj_OnProgress_BEGINSYNCOPERATION);
129DEFINE_EXPECT(Obj_OnProgress_ENDSYNCOPERATION);
130DEFINE_EXPECT(Obj_OnProgress_FINDINGRESOURCE);
131DEFINE_EXPECT(Obj_OnProgress_CONNECTING);
132DEFINE_EXPECT(Obj_OnProgress_REDIRECTING);
133DEFINE_EXPECT(Obj_OnProgress_CACHEFILENAMEAVAILABLE);
137DEFINE_EXPECT(Terminate);
143DEFINE_EXPECT(PutProperty_MIMETYPEPROP);
144DEFINE_EXPECT(PutProperty_CLASSIDPROP);
146DEFINE_EXPECT(GetWindow_IHttpSecurity);
147DEFINE_EXPECT(GetWindow_IWindowForBindingUI);
148DEFINE_EXPECT(GetWindow_ICodeInstall);
149DEFINE_EXPECT(OnSecurityProblem);
150
151static const WCHAR winetest_data_urlW[] =
152 {'h','t','t','p',':','/','/','t','e','s','t','.','w','i','n','e','h','q','.','o','r','g','/',
153 't','e','s','t','s','/','d','a','t','a','.','p','h','p',0};
154static const WCHAR about_blankW[] = {'a','b','o','u','t',':','b','l','a','n','k',0};
155
156static const WCHAR wszTextHtml[] = {'t','e','x','t','/','h','t','m','l',0};
157
158static WCHAR BSCBHolder[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 };
159
160#define WINEHQ_IP "4.4.81.126"
161static const WCHAR wszWineHQSite[] = L"gitlab.winehq.org";
162static const WCHAR wszWineHQIP[] = L"" WINEHQ_IP;
163static const CHAR wszIndexHtmlA[] = "index.html";
164static const WCHAR cache_fileW[] = {'c',':','\\','c','a','c','h','e','.','h','t','m',0};
165static const CHAR dwl_htmlA[] = "dwl.html";
166static const WCHAR dwl_htmlW[] = {'d','w','l','.','h','t','m','l',0};
167static const CHAR test_txtA[] = "test.txt";
168static const WCHAR emptyW[] = {0};
169
173static const WCHAR *reported_url;
174static CHAR mime_type[512];
192static const char *test_file;
193
195
196static enum {
207
208static enum {
213
214static BOOL proxy_active(void)
215{
218 DWORD size;
219
220 if (RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
222 return FALSE;
223
224 size = sizeof(DWORD);
226 proxy_enable = 0;
227
229
230 return proxy_enable != 0;
231}
232
233static BOOL is_urlmon_protocol(int prot)
234{
235 return prot == FILE_TEST || prot == HTTP_TEST || prot == HTTPS_TEST || prot == FTP_TEST || prot == MK_TEST;
236}
237
239{
240 HRESULT hr;
241 IMoniker *mon1 = NULL;
242 IMoniker *mon2 = NULL;
243
245 ok(hr == E_INVALIDARG,
246 "Expected CreateURLMoniker to return E_INVALIDARG, got 0x%08lx\n", hr);
247
248 mon1 = (IMoniker *)0xdeadbeef;
249 hr = CreateURLMoniker(NULL, NULL, &mon1);
250 ok(hr == E_INVALIDARG,
251 "Expected CreateURLMoniker to return E_INVALIDARG, got 0x%08lx\n", hr);
252 ok(mon1 == NULL, "Expected the output pointer to be NULL, got %p\n", mon1);
253
255 ok(hr == E_INVALIDARG,
256 "Expected CreateURLMoniker to return E_INVALIDARG, got 0x%08lx\n", hr);
257
258 hr = CreateURLMoniker(NULL, emptyW, &mon1);
259 ok(hr == S_OK ||
260 broken(hr == MK_E_SYNTAX), /* IE5/IE5.01/IE6 SP2 */
261 "Expected CreateURLMoniker to return S_OK, got 0x%08lx\n", hr);
262 if(mon1) IMoniker_Release(mon1);
263
264 hr = CreateURLMoniker(NULL, url1, &mon1);
265 ok(hr == S_OK, "failed to create moniker: 0x%08lx\n", hr);
266 if(hr == S_OK) {
267 hr = CreateURLMoniker(mon1, url2, &mon2);
268 ok(hr == S_OK, "failed to create moniker: 0x%08lx\n", hr);
269 }
270 if(mon1) IMoniker_Release(mon1);
271 if(mon2) IMoniker_Release(mon2);
272}
273
274static void test_create(void)
275{
276 static const WCHAR relativeW[] = {'a','/','b','.','t','x','t',0};
278 IMoniker *mon;
279 IBindCtx *bctx;
280 HRESULT hr;
281
282 static const WCHAR TEST_PART_URL_1[] = {'/','t','e','s','t','s','/','d','a','t','a','.','p','h','p',0};
283
285
286 mon = (void*)0xdeadbeef;
287 hr = CreateURLMoniker(NULL, relativeW, &mon);
288 ok(hr == S_OK, "got 0x%08lx\n", hr);
289
290 hr = CreateBindCtx(0, &bctx);
291 ok(hr == S_OK, "got 0x%08lx\n", hr);
292
293 stream = (void*)0xdeadbeef;
294 hr = IMoniker_BindToStorage(mon, bctx, NULL, &IID_IStream, (void**)&stream);
295 todo_wine ok(hr == INET_E_UNKNOWN_PROTOCOL, "got 0x%08lx\n", hr);
296 ok(stream == NULL, "got %p\n", stream);
297
298 hr = IMoniker_BindToStorage(mon, bctx, NULL, &IID_IStream, NULL);
299 ok(hr == E_INVALIDARG, "got 0x%08lx\n", hr);
300
301 stream = (void*)0xdeadbeef;
302 hr = IMoniker_BindToStorage(mon, NULL, NULL, &IID_IStream, (void**)&stream);
303 ok(hr == E_INVALIDARG, "got 0x%08lx\n", hr);
304 ok(stream == NULL || broken(stream == (void*)0xdeadbeef) /* starting XP SP3 it's set to null */,
305 "got %p\n", stream);
306
307 IMoniker_Release(mon);
308
309 mon = (void*)0xdaedbeef;
311 ok(hr == S_OK, "got 0x%08lx\n", hr);
312
313 stream = (void*)0xdeadbeef;
314 hr = IMoniker_BindToStorage(mon, NULL, NULL, &IID_IStream, (void**)&stream);
315 ok(hr == E_INVALIDARG, "got 0x%08lx\n", hr);
316 ok(stream == NULL || broken(stream == (void*)0xdeadbeef) /* starting XP SP3 it's set to null */,
317 "got %p\n", stream);
318
319 hr = IMoniker_BindToStorage(mon, bctx, NULL, &IID_IStream, NULL);
320 ok(hr == E_INVALIDARG, "got 0x%08lx\n", hr);
321
322 IMoniker_Release(mon);
323 IBindCtx_Release(bctx);
324}
325
327{
328 ok(0, "unexpected call\n");
329 return E_NOINTERFACE;
330}
331
333{
334 return 2;
335}
336
338{
339 return 1;
340}
341
343{
345 ok(!nPriority, "nPriority = %ld\n", nPriority);
346 return S_OK;
347}
348
350{
351 ok(0, "unexpected call\n");
352 return S_OK;
353}
354
355static const IInternetPriorityVtbl InternetPriorityVtbl = {
361};
362
364
366{
367 if (winetest_debug > 1) trace("IInternetProtocol::QueryInterface(%s)\n", debugstr_guid(riid));
368
369 *ppv = NULL;
370
371 if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetProtocol, riid)) {
372 *ppv = iface;
373 return S_OK;
374 }
375
376 if(IsEqualGUID(&IID_IInternetPriority, riid)) {
378 return E_NOINTERFACE;
379
381 return S_OK;
382 }
383
384 return E_NOINTERFACE;
385}
386
388{
389 return 2;
390}
391
393{
394 return 1;
395}
396
397static void test_switch_fail(void)
398{
400 PROTOCOLDATA protocoldata = {0};
402
403 static BOOL tested_switch_fail;
404
405 if(tested_switch_fail)
406 return;
407
408 tested_switch_fail = TRUE;
409
410 hres = IBinding_QueryInterface(current_binding, &IID_IInternetProtocolSink, (void**)&binding_sink);
411 ok(hres == S_OK, "Could not get IInternetProtocolSink iface: %08lx\n", hres);
412 if(SUCCEEDED(hres)) {
413 hres = IInternetProtocolSink_Switch(binding_sink, &protocoldata);
414 ok(hres == E_FAIL, "Switch failed: %08lx, expected E_FAIL\n", hres);
415 IInternetProtocolSink_Release(binding_sink);
416 }
417}
418
420{
421 PROTOCOLDATA protocoldata = {0};
423
424 if(!no_callback) {
426 SET_EXPECT(Obj_OnProgress_FINDINGRESOURCE);
427 else
428 SET_EXPECT(OnProgress_FINDINGRESOURCE);
429 }
430 hres = IInternetProtocolSink_ReportProgress(protocol_sink,
431 BINDSTATUS_FINDINGRESOURCE, wszWineHQSite);
432 ok(hres == S_OK, "ReportProgress failed: %08lx\n", hres);
433 if(!no_callback) {
434 ok( WaitForSingleObject(complete_event, 90000) == WAIT_OBJECT_0, "wait timed out\n" );
436 CHECK_CALLED(Obj_OnProgress_FINDINGRESOURCE);
437 else
438 CHECK_CALLED(OnProgress_FINDINGRESOURCE);
439 }
440
441 if(!no_callback) {
443 SET_EXPECT(Obj_OnProgress_CONNECTING);
444 else
445 SET_EXPECT(OnProgress_CONNECTING);
446 }
447 hres = IInternetProtocolSink_ReportProgress(protocol_sink,
448 BINDSTATUS_CONNECTING, wszWineHQIP);
449 ok(hres == S_OK, "ReportProgress failed: %08lx\n", hres);
450 if(!no_callback) {
451 ok( WaitForSingleObject(complete_event, 90000) == WAIT_OBJECT_0, "wait timed out\n" );
453 CHECK_CALLED(Obj_OnProgress_CONNECTING);
454 else
455 CHECK_CALLED(OnProgress_CONNECTING);
456 }
457
458 if(!no_callback) {
460 SET_EXPECT(Obj_OnProgress_SENDINGREQUEST);
461 else
462 SET_EXPECT(OnProgress_SENDINGREQUEST);
463 }
464 hres = IInternetProtocolSink_ReportProgress(protocol_sink,
465 BINDSTATUS_SENDINGREQUEST, NULL);
466 ok(hres == S_OK, "ReportProgress failed: %08lx\n", hres);
467 if(!no_callback) {
468 ok( WaitForSingleObject(complete_event, 90000) == WAIT_OBJECT_0, "wait timed out\n" );
470 CHECK_CALLED(Obj_OnProgress_SENDINGREQUEST);
471 else
472 CHECK_CALLED(OnProgress_SENDINGREQUEST);
473 }
474
475 if(test_redirect) {
477 SET_EXPECT(Obj_OnProgress_REDIRECTING);
478 else
479 SET_EXPECT(OnProgress_REDIRECTING);
480 hres = IInternetProtocolSink_ReportProgress(protocol_sink, BINDSTATUS_REDIRECTING, winetest_data_urlW);
481 ok(hres == S_OK, "ReportProgress(BINDSTATUS_REFIRECTING) failed: %08lx\n", hres);
482 ok( WaitForSingleObject(complete_event, 90000) == WAIT_OBJECT_0, "wait timed out\n" );
484 CHECK_CALLED(Obj_OnProgress_REDIRECTING);
485 else
486 CHECK_CALLED(OnProgress_REDIRECTING);
487 }
488
490
491 SET_EXPECT(Continue);
492 prot_state = 1;
493 hres = IInternetProtocolSink_Switch(protocol_sink, &protocoldata);
494 ok(hres == S_OK, "Switch failed: %08lx\n", hres);
495 ok( WaitForSingleObject(complete_event, 90000) == WAIT_OBJECT_0, "wait timed out\n" );
496
497 CHECK_CALLED(Continue);
499 if(bind_to_object) {
500 CHECK_CALLED(Obj_OnProgress_MIMETYPEAVAILABLE);
501 CHECK_CALLED(Obj_OnProgress_BEGINDOWNLOADDATA);
502 CHECK_CALLED(Obj_OnProgress_CLASSIDAVAILABLE);
503 CHECK_CALLED(Obj_OnProgress_BEGINSYNCOPERATION);
505 CHECK_CALLED(PutProperty_MIMETYPEPROP);
506 CHECK_CALLED_BROKEN(PutProperty_CLASSIDPROP);
508 CHECK_CALLED(Obj_OnProgress_ENDSYNCOPERATION);
509 CHECK_CALLED(OnObjectAvailable);
510 CHECK_CALLED(Obj_OnStopBinding);
511 }else if(!no_callback) {
512 CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE);
513 CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA);
514 CHECK_CALLED(OnDataAvailable);
515 }else {
517 }
518
519 SET_EXPECT(Continue);
520 prot_state = 2;
521 hres = IInternetProtocolSink_Switch(protocol_sink, &protocoldata);
522 ok(hres == S_OK, "Switch failed: %08lx\n", hres);
523 ok( WaitForSingleObject(complete_event, 90000) == WAIT_OBJECT_0, "wait timed out\n" );
524 CHECK_CALLED(Continue);
525 if(test_abort) {
526 CHECK_CALLED(OnProgress_DOWNLOADINGDATA);
527 CHECK_CALLED(OnStopBinding);
529 return 0;
530 }else {
532 if(!no_callback) {
533 CHECK_CALLED(OnProgress_DOWNLOADINGDATA);
534 CHECK_CALLED(OnDataAvailable);
535 }
536 }
537
538 SET_EXPECT(Continue);
539 prot_state = 2;
540 hres = IInternetProtocolSink_Switch(protocol_sink, &protocoldata);
541 ok(hres == S_OK, "Switch failed: %08lx\n", hres);
542 ok( WaitForSingleObject(complete_event, 90000) == WAIT_OBJECT_0, "wait timed out\n" );
543 CHECK_CALLED(Continue);
545 if(!no_callback) {
546 CHECK_CALLED(OnProgress_DOWNLOADINGDATA);
547 CHECK_CALLED(OnDataAvailable);
548 }
549
550 SET_EXPECT(Continue);
551 prot_state = 3;
552 hres = IInternetProtocolSink_Switch(protocol_sink, &protocoldata);
553 ok(hres == S_OK, "Switch failed: %08lx\n", hres);
554 ok( WaitForSingleObject(complete_event, 90000) == WAIT_OBJECT_0, "wait timed out\n" );
555 CHECK_CALLED(Continue);
557 if(!no_callback) {
558 CHECK_CALLED(OnProgress_ENDDOWNLOADDATA);
559 CHECK_CALLED(OnDataAvailable);
560 CHECK_CALLED(OnStopBinding);
561 }
562
564
566 return 0;
567}
568
570 IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo,
572{
573 BINDINFO bindinfo;
574 DWORD bind_info, bscf = BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION;
576
577 static const STGMEDIUM stgmed_zero = {0};
578 static const SECURITY_ATTRIBUTES sa_zero = {0};
579
581
582 nread = 0;
583
584 reported_url = szUrl;
585 if(!filedwl_api) /* FIXME */
586 ok(szUrl && !lstrcmpW(szUrl, current_url), "wrong url %s\n", wine_dbgstr_w(szUrl));
587 ok(pOIProtSink != NULL, "pOIProtSink == NULL\n");
588 ok(pOIBindInfo != NULL, "pOIBindInfo == NULL\n");
589 ok(grfPI == 0, "grfPI=%ld, expected 0\n", grfPI);
590 ok(dwReserved == 0, "dwReserved=%Ix, expected 0\n", dwReserved);
591
592 if(!filedwl_api && binding_hres != S_OK) {
593 SET_EXPECT(OnStopBinding);
594 SET_EXPECT(Terminate);
595 hres = IInternetProtocolSink_ReportResult(pOIProtSink, binding_hres, 0, NULL);
596 ok(hres == S_OK, "ReportResult failed: %08lx\n", hres);
597 CHECK_CALLED(OnStopBinding);
598 CHECK_CALLED(Terminate);
599
600 return S_OK;
601 }
602
603 memset(&bindinfo, 0, sizeof(bindinfo));
604 bindinfo.cbSize = 0;
605 hres = IInternetBindInfo_GetBindInfo(pOIBindInfo, &bind_info, &bindinfo);
606 ok(hres == E_INVALIDARG, "GetBindInfo returned: %08lx, expected E_INVALIDARG\n", hres);
607
608 memset(&bindinfo, 0, sizeof(bindinfo));
609 bindinfo.cbSize = sizeof(bindinfo);
610 hres = IInternetBindInfo_GetBindInfo(pOIBindInfo, &bind_info, &bindinfo);
611 ok(hres == S_OK, "GetBindInfo failed: %08lx\n", hres);
612
613 ok(bind_info & BINDF_FROMURLMON, "BINDF_FROMURLMON is not set\n");
614
615 if(filedwl_api || !is_urlmon_protocol(test_protocol) || tymed != TYMED_ISTREAM ||
616 !(bindf&BINDF_ASYNCSTORAGE) || !(bindf&BINDF_PULLDATA))
617 ok(bind_info & BINDF_NEEDFILE, "BINDF_NEEDFILE is not set\n");
618 else if(test_protocol != MK_TEST) /* IE10 sets BINDF_NEEDFILE for mk: protocol */
619 ok(!(bind_info & BINDF_NEEDFILE), "BINDF_NEEDFILE is set\n");
620
621 bind_info &= ~(BINDF_NEEDFILE|BINDF_FROMURLMON);
623 ok(bind_info == BINDF_PULLDATA, "bind_info = %lx, expected BINDF_PULLDATA\n", bind_info);
624 else
625 ok(bind_info == (bindf & ~(BINDF_NEEDFILE|BINDF_FROMURLMON)), "bind_info = %lx, expected %lx\n",
626 bind_info, (bindf & ~(BINDF_NEEDFILE|BINDF_FROMURLMON)));
627
628 ok(bindinfo.cbSize == sizeof(bindinfo), "bindinfo.cbSize = %ld\n", bindinfo.cbSize);
629 ok(!bindinfo.szExtraInfo, "bindinfo.szExtraInfo = %p\n", bindinfo.szExtraInfo);
630 ok(!memcmp(&bindinfo.stgmedData, &stgmed_zero, sizeof(STGMEDIUM)), "wrong stgmedData\n");
631 ok(!bindinfo.grfBindInfoF, "bindinfo.grfBindInfoF = %ld\n", bindinfo.grfBindInfoF);
632 ok(!bindinfo.dwBindVerb, "bindinfo.dwBindVerb = %ld\n", bindinfo.dwBindVerb);
633 ok(!bindinfo.szCustomVerb, "bindinfo.szCustomVerb = %p\n", bindinfo.szCustomVerb);
634 ok(!bindinfo.cbstgmedData, "bindinfo.cbstgmedData = %ld\n", bindinfo.cbstgmedData);
635 ok(bindinfo.dwOptions == (bind_to_object ? 0x100000 : 0), "bindinfo.dwOptions = %lx\n", bindinfo.dwOptions);
636 ok(!bindinfo.dwOptionsFlags, "bindinfo.dwOptionsFlags = %ld\n", bindinfo.dwOptionsFlags);
637 ok(!bindinfo.dwCodePage, "bindinfo.dwCodePage = %ld\n", bindinfo.dwCodePage);
638 ok(!memcmp(&bindinfo.securityAttributes, &sa_zero, sizeof(sa_zero)), "wrong bindinfo.securityAttributes\n");
639 ok(IsEqualGUID(&bindinfo.iid, &IID_NULL), "wrong bindinfo.iid\n");
640 ok(!bindinfo.pUnk, "bindinfo.pUnk = %p\n", bindinfo.pUnk);
641 ok(!bindinfo.dwReserved, "bindinfo.dwReserved = %ld\n", bindinfo.dwReserved);
642
644 return E_FAIL;
645
646 switch(test_protocol) {
647 case MK_TEST:
648 hres = IInternetProtocolSink_ReportProgress(pOIProtSink,
649 BINDSTATUS_DIRECTBIND, NULL);
650 ok(hres == S_OK,
651 "ReportProgress(BINDSTATUS_SENDINGREQUEST) failed: %08lx\n", hres);
652
653 case FILE_TEST:
654 case ITS_TEST:
656 SET_EXPECT(Obj_OnProgress_SENDINGREQUEST);
657 else
658 SET_EXPECT(OnProgress_SENDINGREQUEST);
659 hres = IInternetProtocolSink_ReportProgress(pOIProtSink,
660 BINDSTATUS_SENDINGREQUEST, emptyW);
661 ok(hres == S_OK,
662 "ReportProgress(BINDSTATUS_SENDINGREQUEST) failed: %08lx\n", hres);
664 CHECK_CALLED(Obj_OnProgress_SENDINGREQUEST);
665 else
666 CHECK_CALLED(OnProgress_SENDINGREQUEST);
668 IInternetProtocolSink_AddRef(pOIProtSink);
669 protocol_sink = pOIProtSink;
670 default:
671 break;
672 }
673
677 IHttpNegotiate2 *http_negotiate2;
679 LPWSTR ua = (LPWSTR)0xdeadbeef, accept_mimes[256];
680 LPWSTR additional_headers = (LPWSTR)0xdeadbeef;
681 BYTE sec_id[100];
682 DWORD fetched = 256, size = 100;
683 DWORD tid;
684
685 static const WCHAR wszMimes[] = {'*','/','*',0};
686
687 SET_EXPECT(QueryService_IInternetBindInfo);
688 hres = IInternetBindInfo_GetBindString(pOIBindInfo, BINDSTRING_USER_AGENT,
689 &ua, 1, &fetched);
690 CLEAR_CALLED(QueryService_IInternetBindInfo); /* IE <8 */
691
693 "GetBindString(BINDSTRING_USER_AGETNT) failed: %08lx\n", hres);
694 ok(fetched == 256, "fetched = %ld, expected 254\n", fetched);
695 ok(ua == (LPWSTR)0xdeadbeef, "ua = %p\n", ua);
696
697 hres = IInternetBindInfo_GetBindString(pOIBindInfo, BINDSTRING_ACCEPT_MIMES,
698 accept_mimes, 256, &fetched);
699 ok(hres == S_OK,
700 "GetBindString(BINDSTRING_ACCEPT_MIMES) failed: %08lx\n", hres);
701 ok(fetched == 1, "fetched = %ld, expected 1\n", fetched);
702 ok(!lstrcmpW(wszMimes, accept_mimes[0]), "unexpected mimes\n");
703 CoTaskMemFree(accept_mimes[0]);
704
705 hres = IInternetBindInfo_GetBindString(pOIBindInfo, BINDSTRING_ACCEPT_MIMES,
706 NULL, 256, &fetched);
708 "GetBindString(BINDSTRING_ACCEPT_MIMES) failed: %08lx\n", hres);
709
710 hres = IInternetBindInfo_GetBindString(pOIBindInfo, BINDSTRING_ACCEPT_MIMES,
711 accept_mimes, 256, NULL);
713 "GetBindString(BINDSTRING_ACCEPT_MIMES) failed: %08lx\n", hres);
714
715 hres = IInternetBindInfo_QueryInterface(pOIBindInfo, &IID_IServiceProvider,
716 (void**)&service_provider);
717 ok(hres == S_OK, "QueryInterface failed: %08lx\n", hres);
718
719 SET_EXPECT(QueryInterface_IHttpNegotiate);
720 hres = IServiceProvider_QueryService(service_provider, &IID_IHttpNegotiate,
721 &IID_IHttpNegotiate, (void**)&http_negotiate);
722 CLEAR_CALLED(QueryInterface_IHttpNegotiate); /* IE <8 */
723 ok(hres == S_OK, "QueryService failed: %08lx\n", hres);
724
725 if(!no_callback) {
726 SET_EXPECT(BeginningTransaction);
727 SET_EXPECT(QueryInterface_IHttpNegotiate);
728 }
729 hres = IHttpNegotiate_BeginningTransaction(http_negotiate, current_url,
730 NULL, 0, &additional_headers);
731 if(!no_callback) {
732 CHECK_CALLED_BROKEN(QueryInterface_IHttpNegotiate);
733 CHECK_CALLED(BeginningTransaction);
734 }
735 IHttpNegotiate_Release(http_negotiate);
736 ok(hres == S_OK, "BeginningTransction failed: %08lx\n", hres);
737 ok(additional_headers == NULL, "additional_headers=%p\n", additional_headers);
738
739 SET_EXPECT(QueryInterface_IHttpNegotiate2);
740 hres = IServiceProvider_QueryService(service_provider, &IID_IHttpNegotiate2,
741 &IID_IHttpNegotiate2, (void**)&http_negotiate2);
742 CLEAR_CALLED(QueryInterface_IHttpNegotiate2); /* IE <8 */
743 ok(hres == S_OK, "QueryService failed: %08lx\n", hres);
744
745 size = 512;
746 if(!no_callback) {
747 SET_EXPECT(QueryInterface_IHttpNegotiate2);
748 SET_EXPECT(GetRootSecurityId);
749 }
750 hres = IHttpNegotiate2_GetRootSecurityId(http_negotiate2, sec_id, &size, 0);
751 if(!no_callback) {
752 CHECK_CALLED_BROKEN(QueryInterface_IHttpNegotiate2);
753 CHECK_CALLED(GetRootSecurityId);
754 }
755 IHttpNegotiate2_Release(http_negotiate2);
756 ok(hres == E_FAIL, "GetRootSecurityId failed: %08lx, expected E_FAIL\n", hres);
757 ok(size == (no_callback ? 512 : 13), "size=%ld\n", size);
758
759 if(!no_callback) {
760 SET_EXPECT(QueryService_IHttpSecurity);
761 SET_EXPECT(QueryInterface_IHttpSecurity);
762 }
763 hres = IServiceProvider_QueryService(service_provider, &IID_IHttpSecurity,
764 &IID_IHttpSecurity, (void**)&http_security);
765 ok(hres == (no_callback ? E_NOINTERFACE : S_OK), "QueryService failed: 0x%08lx\n", hres);
766 if(!no_callback) {
767 CHECK_CALLED(QueryService_IHttpSecurity);
768 CHECK_CALLED(QueryInterface_IHttpSecurity);
769 }
770
771 IServiceProvider_Release(service_provider);
772
773 IInternetProtocolSink_AddRef(pOIProtSink);
774 protocol_sink = pOIProtSink;
775
776 if(async_switch) {
777 PROTOCOLDATA data;
778
779 memset(&data, 0, sizeof(data));
780 data.grfFlags = PI_FORCE_ASYNC;
781 prot_state = 0;
782 hres = IInternetProtocolSink_Switch(pOIProtSink, &data);
783 ok(hres == S_OK, "Switch failed: %08lx\n", hres);
784 SET_EXPECT(Continue);
786 return E_PENDING;
787 } else {
789 return S_OK;
790 }
791 }
792
793 if(test_protocol == FILE_TEST) {
794 hres = IInternetProtocolSink_ReportProgress(pOIProtSink,
795 BINDSTATUS_CACHEFILENAMEAVAILABLE, file_url+7);
796 ok(hres == S_OK,
797 "ReportProgress(BINDSTATUS_CACHEFILENAMEAVAILABLE) failed: %08lx\n", hres);
798
800 SET_EXPECT(Obj_OnProgress_MIMETYPEAVAILABLE);
801 else
802 SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
803 hres = IInternetProtocolSink_ReportProgress(pOIProtSink,
804 BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE, wszTextHtml);
805 ok(hres == S_OK,
806 "ReportProgress(BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE) failed: %08lx\n", hres);
808 CHECK_CALLED(Obj_OnProgress_MIMETYPEAVAILABLE);
809 else
810 CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE);
811 }else if(test_protocol == WINETEST_SYNC_TEST) {
812 SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
813 hres = IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE, wszTextHtml);
814 ok(hres == S_OK,
815 "ReportProgress(BINDSTATUS_MIMETYPEAVAILABLE) failed: %08lx\n", hres);
816 CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE);
817 }else {
818 hres = IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_MIMETYPEAVAILABLE, wszTextHtml);
819 ok(hres == S_OK,
820 "ReportProgress(BINDSTATUS_MIMETYPEAVAILABLE) failed: %08lx\n", hres);
821 }
822
824 bscf |= BSCF_DATAFULLYAVAILABLE;
826 bscf = BSCF_FIRSTDATANOTIFICATION|BSCF_DATAFULLYAVAILABLE;
827
829 if(bind_to_object) {
831 SET_EXPECT(Obj_OnProgress_MIMETYPEAVAILABLE);
832 SET_EXPECT(Obj_OnProgress_BEGINDOWNLOADDATA);
834 SET_EXPECT(Obj_OnProgress_CACHEFILENAMEAVAILABLE);
835 SET_EXPECT(Obj_OnProgress_ENDDOWNLOADDATA);
836 SET_EXPECT(Obj_OnProgress_CLASSIDAVAILABLE);
837 SET_EXPECT(Obj_OnProgress_BEGINSYNCOPERATION);
839 SET_EXPECT(PutProperty_MIMETYPEPROP);
840 SET_EXPECT(PutProperty_CLASSIDPROP);
842 SET_EXPECT(Obj_OnProgress_ENDSYNCOPERATION);
843 SET_EXPECT(OnObjectAvailable);
844 SET_EXPECT(Obj_OnStopBinding);
845 }else {
847 SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
848 SET_EXPECT(OnProgress_BEGINDOWNLOADDATA);
850 SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE);
851 SET_EXPECT(OnProgress_ENDDOWNLOADDATA);
853 if(!filedwl_api)
854 SET_EXPECT(OnDataAvailable);
855 if(test_protocol != WINETEST_SYNC_TEST) /* Set in Read after ReportResult call */
856 SET_EXPECT(OnStopBinding);
857 }
858
859 hres = IInternetProtocolSink_ReportData(pOIProtSink, bscf, 13, 13);
860 ok(hres == S_OK, "ReportData failed: %08lx\n", hres);
861
863 if(bind_to_object) {
865 CHECK_CALLED(Obj_OnProgress_MIMETYPEAVAILABLE);
866 CHECK_CALLED(Obj_OnProgress_BEGINDOWNLOADDATA);
868 CHECK_CALLED(Obj_OnProgress_CACHEFILENAMEAVAILABLE);
869 CHECK_CALLED(Obj_OnProgress_ENDDOWNLOADDATA);
870 CHECK_CALLED(Obj_OnProgress_CLASSIDAVAILABLE);
871 CHECK_CALLED(Obj_OnProgress_BEGINSYNCOPERATION);
873 CHECK_CALLED(PutProperty_MIMETYPEPROP);
874 CHECK_CALLED_BROKEN(PutProperty_CLASSIDPROP);
876 CHECK_CALLED(Obj_OnProgress_ENDSYNCOPERATION);
877 CHECK_CALLED(OnObjectAvailable);
878 CHECK_CALLED(Obj_OnStopBinding);
879 }else {
881 CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE);
882 CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA);
884 CHECK_CALLED(OnProgress_CACHEFILENAMEAVAILABLE);
885 CHECK_CALLED(OnProgress_ENDDOWNLOADDATA);
887 if(!filedwl_api)
888 CHECK_CALLED(OnDataAvailable);
889 CHECK_CALLED(OnStopBinding);
890 }
891
892 if(test_protocol == ITS_TEST) {
894 hres = IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_BEGINDOWNLOADDATA, NULL);
895 ok(hres == S_OK, "ReportProgress(BINDSTATUS_BEGINDOWNLOADDATA) failed: %08lx\n", hres);
897 }else if(!bind_to_object && test_protocol == FILE_TEST) {
899 hres = IInternetProtocolSink_ReportData(pOIProtSink, bscf, 13, 13);
900 ok(hres == S_OK, "ReportData failed: %08lx\n", hres);
902 }
903
905 SET_EXPECT(Terminate);
906 hres = IInternetProtocolSink_ReportResult(pOIProtSink, S_OK, 0, NULL);
907 ok(hres == S_OK, "ReportResult failed: %08lx\n", hres);
908 CHECK_CALLED(Terminate);
909 }
910
911 return S_OK;
912}
913
915 PROTOCOLDATA *pProtocolData)
916{
917 DWORD bscf = 0;
919
920 CHECK_EXPECT(Continue);
921
922 ok(GetCurrentThreadId() == thread_id, "wrong thread %ld\n", GetCurrentThreadId());
923
924 if(!bind_to_object)
926
927 ok(pProtocolData != NULL, "pProtocolData == NULL\n");
928 if(!pProtocolData)
929 return S_OK;
930
931 switch(prot_state) {
932 case 0:
933 hres = IInternetProtocolSink_ReportProgress(protocol_sink,
934 BINDSTATUS_SENDINGREQUEST, NULL);
935 ok(hres == S_OK, "ReportProgress failed: %08lx\n", hres);
936
937 hres = IInternetProtocolSink_ReportProgress(protocol_sink,
938 BINDSTATUS_MIMETYPEAVAILABLE, wszTextHtml);
939 ok(hres == S_OK,
940 "ReportProgress(BINDSTATUS_MIMETYPEAVAILABLE) failed: %08lx\n", hres);
941
942 bscf |= BSCF_FIRSTDATANOTIFICATION|BSCF_INTERMEDIATEDATANOTIFICATION;
943 break;
944 case 1: {
947 static const WCHAR header[] = {'?',0};
948
949 hres = IInternetProtocolSink_QueryInterface(protocol_sink, &IID_IServiceProvider,
950 (void**)&service_provider);
951 ok(hres == S_OK, "Could not get IServiceProvicder\n");
952
953 hres = IServiceProvider_QueryService(service_provider, &IID_IHttpNegotiate,
954 &IID_IHttpNegotiate, (void**)&http_negotiate);
955 ok(hres == S_OK, "Could not get IHttpNegotiate\n");
956
957 if(!no_callback) {
958 SET_EXPECT(QueryInterface_IHttpNegotiate);
959 SET_EXPECT(OnResponse);
960 }
961 hres = IHttpNegotiate_OnResponse(http_negotiate, 200, header, NULL, NULL);
962 if(!no_callback) {
963 CHECK_CALLED_BROKEN(QueryInterface_IHttpNegotiate);
964 CHECK_CALLED(OnResponse);
965 }
966 IHttpNegotiate_Release(http_negotiate);
967 ok(hres == S_OK, "OnResponse failed: %08lx\n", hres);
968
970 hres = IInternetProtocolSink_ReportProgress(protocol_sink, BINDSTATUS_ACCEPTRANGES, NULL);
971 ok(hres == S_OK, "ReportProgress(BINDSTATUS_ACCEPTRANGES) failed: %08lx\n", hres);
972 }
973
974 hres = IInternetProtocolSink_ReportProgress(protocol_sink,
975 BINDSTATUS_MIMETYPEAVAILABLE, wszTextHtml);
976 ok(hres == S_OK,
977 "ReportProgress(BINDSTATUS_MIMETYPEAVAILABLE) failed: %08lx\n", hres);
978
979 hres = IInternetProtocolSink_ReportProgress(protocol_sink,
980 BINDSTATUS_CACHEFILENAMEAVAILABLE, use_cache_file ? cache_file_name : cache_fileW);
981 ok(hres == S_OK, "ReportProgress(BINDSTATUS_CACHEFILENAMEAVAILABLE) failed: %08lx\n", hres);
982
983 bscf |= BSCF_FIRSTDATANOTIFICATION;
984 break;
985 }
986 case 2:
987 case 3:
988 bscf = BSCF_INTERMEDIATEDATANOTIFICATION;
989 break;
990 }
991
992 hres = IInternetProtocolSink_ReportData(protocol_sink, bscf, 100, 400);
993 ok(hres == S_OK, "ReportData failed: %08lx\n", hres);
994
995 if(prot_state != 2 || !test_abort)
997 switch(prot_state) {
998 case 0:
999 hres = IInternetProtocolSink_ReportResult(protocol_sink, S_OK, 0, NULL);
1000 ok(hres == S_OK, "ReportResult failed: %08lx\n", hres);
1001 SET_EXPECT(OnProgress_SENDINGREQUEST);
1002 SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
1003 SET_EXPECT(OnProgress_BEGINDOWNLOADDATA);
1005 SET_EXPECT(OnStopBinding);
1006 break;
1007 case 1:
1008 if(bind_to_object) {
1009 SET_EXPECT(Obj_OnProgress_MIMETYPEAVAILABLE);
1010 SET_EXPECT(Obj_OnProgress_BEGINDOWNLOADDATA);
1011 SET_EXPECT(Obj_OnProgress_CLASSIDAVAILABLE);
1012 SET_EXPECT(Obj_OnProgress_BEGINSYNCOPERATION);
1014 SET_EXPECT(PutProperty_MIMETYPEPROP);
1015 SET_EXPECT(PutProperty_CLASSIDPROP);
1017 SET_EXPECT(Obj_OnProgress_ENDSYNCOPERATION);
1018 SET_EXPECT(OnObjectAvailable);
1019 SET_EXPECT(Obj_OnStopBinding);
1020 }else if(!no_callback) {
1021 SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
1022 SET_EXPECT(OnProgress_BEGINDOWNLOADDATA);
1024 }else {
1026 }
1027 break;
1028 case 2:
1029 if(!no_callback)
1030 SET_EXPECT(OnProgress_DOWNLOADINGDATA);
1031 break;
1032 case 3:
1033 SET_EXPECT(OnProgress_DOWNLOADINGDATA);
1034 SET_EXPECT(OnProgress_ENDDOWNLOADDATA);
1035 }
1036 if(!no_callback) {
1037 if((!bind_to_object || prot_state >= 2) && (!test_abort || prot_state != 2))
1038 SET_EXPECT(OnDataAvailable);
1039 if(prot_state == 3 || (test_abort && prot_state == 2))
1040 SET_EXPECT(OnStopBinding);
1041 }
1042 return S_OK;
1043}
1044
1047{
1048 HRESULT hres;
1049
1050 CHECK_EXPECT(Abort);
1051
1052 ok(hrReason == E_ABORT, "hrReason = %08lx\n", hrReason);
1053 ok(!dwOptions, "dwOptions = %lx\n", dwOptions);
1054
1055 hres = IInternetProtocolSink_ReportResult(protocol_sink, E_ABORT, ERROR_SUCCESS, NULL);
1056 ok(hres == S_OK, "ReportResult failed: %08lx\n", hres);
1057
1058 return S_OK;
1059}
1060
1062{
1063 CHECK_EXPECT(Terminate);
1064
1065 ok(dwOptions == 0, "dwOptions=%ld, expected 0\n", dwOptions);
1066
1067 if(protocol_sink) {
1068 IInternetProtocolSink_Release(protocol_sink);
1070 }
1071
1072 if(no_callback)
1074 return S_OK;
1075}
1076
1078{
1079 ok(0, "unexpected call\n");
1080 return E_NOTIMPL;
1081}
1082
1084{
1085 ok(0, "unexpected call\n");
1086 return E_NOTIMPL;
1087}
1088
1090 ULONG cb, ULONG *pcbRead)
1091{
1092 HRESULT hres;
1093
1094 static const char data[] = "<HTML></HTML>";
1095
1097
1098 ok(pv != NULL, "pv == NULL\n");
1099 ok(cb != 0, "cb == 0\n");
1100 ok(pcbRead != NULL, "pcbRead == NULL\n");
1101
1102 if(async_switch) {
1103 if(prot_state++ > 1) {
1104 *pcbRead = 0;
1105 return S_FALSE;
1106 } else {
1107 memset(pv, '?', cb);
1108 *pcbRead = cb;
1109 return S_OK;
1110 }
1111 }
1112
1114 static BOOL pending = TRUE;
1115
1116 pending = !pending;
1117
1118 switch(prot_state) {
1119 case 1:
1120 case 2:
1121 if(pending) {
1122 *pcbRead = 10;
1123 memset(pv, '?', 10);
1124 if(prot_state == 2 && no_callback)
1126 return E_PENDING;
1127 }else {
1128 memset(pv, '?', cb);
1129 *pcbRead = cb;
1130 nread++;
1131 return S_OK;
1132 }
1133 case 3:
1134 prot_state++;
1135
1136 *pcbRead = 0;
1137
1138 hres = IInternetProtocolSink_ReportData(protocol_sink,
1139 BSCF_LASTDATANOTIFICATION|BSCF_INTERMEDIATEDATANOTIFICATION, 2000, 2000);
1140 ok(hres == S_OK, "ReportData failed: %08lx\n", hres);
1141
1142 hres = IInternetProtocolSink_ReportResult(protocol_sink, S_OK, 0, NULL);
1143 ok(hres == S_OK, "ReportResult failed: %08lx\n", hres);
1144
1145 return S_FALSE;
1146 case 4:
1147 *pcbRead = 0;
1148 return S_FALSE;
1149 }
1150 }
1151
1152 if(nread) {
1153 *pcbRead = 0;
1154 return S_FALSE;
1155 }
1156
1158 hres = IInternetProtocolSink_ReportResult(protocol_sink, S_OK, 0, NULL);
1159 ok(hres == S_OK, "ReportResult failed: %08lx\n", hres);
1160
1161 SET_EXPECT(OnStopBinding);
1162 }
1163
1164 ok(*pcbRead == 0, "*pcbRead=%ld, expected 0\n", *pcbRead);
1165 nread += *pcbRead = sizeof(data)-1;
1166 memcpy(pv, data, sizeof(data));
1167 return S_OK;
1168}
1169
1171 LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
1172{
1173 ok(0, "unexpected call\n");
1174 return E_NOTIMPL;
1175}
1176
1178{
1180 if(no_callback)
1182 return S_OK;
1183}
1184
1186{
1188 return S_OK;
1189}
1190
1191static const IInternetProtocolVtbl ProtocolVtbl = {
1205};
1206
1208
1210{
1212 || IsEqualGUID(&IID_IHttpNegotiate, riid)
1213 || IsEqualGUID(&IID_IHttpNegotiate2, riid)) {
1214 *ppv = iface;
1215 return S_OK;
1216 }
1217
1218 ok(0, "unexpected call\n");
1219 return E_NOINTERFACE;
1220}
1221
1223{
1224 return 2;
1225}
1226
1228{
1229 return 1;
1230}
1231
1233 LPCWSTR szHeaders, DWORD dwReserved, LPWSTR *pszAdditionalHeaders)
1234{
1236 CHECK_EXPECT2(BeginningTransaction);
1237 else
1238 CHECK_EXPECT(BeginningTransaction);
1239
1240 ok(GetCurrentThreadId() == thread_id, "wrong thread %ld\n", GetCurrentThreadId());
1241
1242 ok(!lstrcmpW(szURL, current_url), "szURL != current_url\n");
1243 ok(!dwReserved, "dwReserved=%ld, expected 0\n", dwReserved);
1244 ok(pszAdditionalHeaders != NULL, "pszAdditionalHeaders == NULL\n");
1245 if(pszAdditionalHeaders)
1246 ok(*pszAdditionalHeaders == NULL, "*pszAdditionalHeaders != NULL\n");
1247
1248 return S_OK;
1249}
1250
1252 LPCWSTR szResponseHeaders, LPCWSTR szRequestHeaders, LPWSTR *pszAdditionalRequestHeaders)
1253{
1254 CHECK_EXPECT(OnResponse);
1255
1256 ok(GetCurrentThreadId() == thread_id, "wrong thread %ld\n", GetCurrentThreadId());
1257
1258 ok(dwResponseCode == 200, "dwResponseCode=%ld, expected 200\n", dwResponseCode);
1259 ok(szResponseHeaders != NULL, "szResponseHeaders == NULL\n");
1260 ok(szRequestHeaders == NULL, "szRequestHeaders != NULL\n");
1261 /* Note: in protocol.c tests, OnResponse pszAdditionalRequestHeaders _is_ NULL */
1262 ok(pszAdditionalRequestHeaders != NULL, "pszAdditionalHeaders == NULL\n");
1263 if(pszAdditionalRequestHeaders)
1264 ok(*pszAdditionalRequestHeaders == NULL, "*pszAdditionalHeaders != NULL\n");
1265
1266 return S_OK;
1267}
1268
1270 BYTE *pbSecurityId, DWORD *pcbSecurityId, DWORD_PTR dwReserved)
1271{
1272 static const BYTE sec_id[] = {'h','t','t','p',':','t','e','s','t',1,0,0,0};
1273
1274 CHECK_EXPECT(GetRootSecurityId);
1275
1276 ok(GetCurrentThreadId() == thread_id, "wrong thread %ld\n", GetCurrentThreadId());
1277
1278 ok(!dwReserved, "dwReserved=%Id, expected 0\n", dwReserved);
1279 ok(pbSecurityId != NULL, "pbSecurityId == NULL\n");
1280 ok(pcbSecurityId != NULL, "pcbSecurityId == NULL\n");
1281
1282 if(pbSecurityId == (void*)0xdeadbeef)
1283 return E_NOTIMPL;
1284
1285 if(pcbSecurityId) {
1286 ok(*pcbSecurityId == 512, "*pcbSecurityId=%ld, expected 512\n", *pcbSecurityId);
1287 *pcbSecurityId = sizeof(sec_id);
1288 }
1289
1290 if(pbSecurityId)
1291 memcpy(pbSecurityId, sec_id, sizeof(sec_id));
1292
1293 return E_FAIL;
1294}
1295
1296static IHttpNegotiate2Vtbl HttpNegotiateVtbl = {
1303};
1304
1306
1308{
1309 ok(0, "Unexpected call\n");
1310 *ppv = NULL;
1311 if(IsEqualGUID(&IID_IHttpSecurity, riid) ||
1312 IsEqualGUID(&IID_IWindowForBindingUI, riid) ||
1314 {
1315 *ppv = iface;
1316 return S_OK;
1317 }
1318
1319 ok(0, "Unexpected interface requested.\n");
1320
1321 return E_NOINTERFACE;
1322}
1323
1325{
1326 return 2;
1327}
1328
1330{
1331 return 1;
1332}
1333
1335{
1336 if(IsEqualGUID(rguidReason, &IID_IHttpSecurity))
1337 CHECK_EXPECT(GetWindow_IHttpSecurity);
1338 else if(IsEqualGUID(rguidReason, &IID_IWindowForBindingUI))
1339 CHECK_EXPECT2(GetWindow_IWindowForBindingUI);
1340 else if(IsEqualGUID(rguidReason, &IID_ICodeInstall))
1341 CHECK_EXPECT(GetWindow_ICodeInstall);
1342 else
1343 ok(0, "Unexpected rguidReason: %s\n", wine_dbgstr_guid(rguidReason));
1344
1345 *phwnd = NULL;
1346 return S_OK;
1347}
1348
1350{
1351 CHECK_EXPECT(OnSecurityProblem);
1352 if(!security_problem) {
1354 broken(dwProblem == ERROR_INTERNET_SEC_CERT_ERRORS) /* Some versions of IE6 */,
1355 "Got problem: %ld\n", dwProblem);
1356 security_problem = dwProblem;
1357
1358 if(dwProblem == ERROR_INTERNET_SEC_CERT_ERRORS)
1360 }else
1361 ok(dwProblem == security_problem, "Got problem: %ld\n", dwProblem);
1362
1364}
1365
1366static const IHttpSecurityVtbl HttpSecurityVtbl = {
1372};
1373
1375
1377{
1378 ok(0, "unexpected call\n");
1379 return E_NOINTERFACE;
1380}
1381
1383{
1384 return 2;
1385}
1386
1388{
1389 return 1;
1390}
1391
1393 REFGUID guidService, REFIID riid, void **ppv)
1394{
1395 if (winetest_debug > 1)
1396 trace("IServiceProvider::QueryService(service %s, iid %s)\n",
1397 debugstr_guid(guidService), debugstr_guid(riid));
1398
1399 if(IsEqualGUID(&IID_IAuthenticate, guidService)) {
1400 CHECK_EXPECT(QueryService_IAuthenticate);
1401 return E_NOTIMPL;
1402 }
1403
1404 if(IsEqualGUID(&IID_IInternetProtocol, guidService)) {
1405 CHECK_EXPECT2(QueryService_IInternetProtocol);
1406 return E_NOTIMPL;
1407 }
1408
1409 if(IsEqualGUID(&IID_IInternetBindInfo, guidService)) {
1410 CHECK_EXPECT(QueryService_IInternetBindInfo);
1411 return E_NOTIMPL;
1412 }
1413
1414 if(IsEqualGUID(&IID_IWindowForBindingUI, guidService)) {
1415 CHECK_EXPECT2(QueryService_IWindowForBindingUI);
1416 *ppv = &HttpSecurity;
1417 return S_OK;
1418 }
1419
1420 if(IsEqualGUID(&IID_IHttpSecurity, guidService)) {
1421 CHECK_EXPECT(QueryService_IHttpSecurity);
1422 *ppv = &HttpSecurity;
1423 return S_OK;
1424 }
1425
1426 *ppv = NULL;
1427 return E_NOINTERFACE;
1428}
1429
1430static IServiceProviderVtbl ServiceProviderVtbl = {
1435};
1436
1438
1440
1442{
1443 DWORD status, size;
1445
1446 /* QueryInfo changes its behavior during this request */
1447 if(progress == BINDSTATUS_SENDINGREQUEST)
1448 return;
1449
1451 && progress!=BINDSTATUS_MIMETYPEAVAILABLE)
1452 expect = E_FAIL;
1453 else if(test_protocol == FTP_TEST)
1454 expect = S_FALSE;
1455 else
1456 expect = S_OK;
1457
1458 size = sizeof(DWORD);
1459 hres = IWinInetHttpInfo_QueryInfo(http_info, HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER,
1460 &status, &size, NULL, NULL);
1461 ok(hres == expect || ((progress == BINDSTATUS_COOKIE_SENT || progress == BINDSTATUS_PROXYDETECTING) && hres == S_FALSE),
1462 "progress %lu: hres = %lx, expected %lx\n", progress, hres, expect);
1463 if(hres == S_OK) {
1464 if(download_state == BEFORE_DOWNLOAD && progress != BINDSTATUS_MIMETYPEAVAILABLE && progress != BINDSTATUS_DECODING)
1465 ok(status == 0, "progress %lu: status = %ld\n", progress, status);
1466 else
1467 ok(status == HTTP_STATUS_OK, "progress %lu: status = %ld\n", progress, status);
1468 ok(size == sizeof(DWORD), "size = %ld\n", size);
1469 }
1470
1471 size = sizeof(DWORD);
1472 hres = IWinInetHttpInfo_QueryOption(http_info, INTERNET_OPTION_HANDLE_TYPE, &status, &size);
1473 if(test_protocol == FTP_TEST) {
1474 if(download_state==BEFORE_DOWNLOAD && progress!=BINDSTATUS_MIMETYPEAVAILABLE)
1475 ok(hres == E_FAIL, "hres = %lx\n", hres);
1476 else
1477 ok(hres == S_OK, "hres = %lx\n", hres);
1478
1479 if(hres == S_OK)
1480 ok(status == INTERNET_HANDLE_TYPE_FTP_FILE, "status = %ld\n", status);
1481 } else {
1482 ok(hres == S_OK, "hres = %lx\n", hres);
1483 ok(status == INTERNET_HANDLE_TYPE_HTTP_REQUEST, "status = %ld\n", status);
1484 }
1485}
1486
1488{
1489 if (winetest_debug > 1) trace("IBindStatusCallback::QueryInterface(%s)\n", debugstr_guid(riid));
1490
1491 ok(GetCurrentThreadId() == thread_id, "wrong thread %ld\n", GetCurrentThreadId());
1492
1493 if(IsEqualGUID(&IID_IInternetProtocol, riid)) {
1494 CHECK_EXPECT2(QueryInterface_IInternetProtocol);
1495 if(emulate_protocol) {
1496 *ppv = &Protocol;
1497 return S_OK;
1498 }else {
1499 return E_NOINTERFACE;
1500 }
1501 }else if (IsEqualGUID(&IID_IServiceProvider, riid)) {
1502 CHECK_EXPECT2(QueryInterface_IServiceProvider);
1503 *ppv = &ServiceProvider;
1504 return S_OK;
1505 }else if (IsEqualGUID(&IID_IHttpNegotiate, riid)) {
1506 CHECK_EXPECT2(QueryInterface_IHttpNegotiate);
1507 *ppv = &HttpNegotiate;
1508 return S_OK;
1509 }else if (IsEqualGUID(&IID_IHttpNegotiate2, riid)) {
1510 CHECK_EXPECT(QueryInterface_IHttpNegotiate2);
1511 *ppv = &HttpNegotiate;
1512 return S_OK;
1513 }else if (IsEqualGUID(&IID_IAuthenticate, riid)) {
1514 CHECK_EXPECT(QueryInterface_IAuthenticate);
1515 return E_NOINTERFACE;
1516 }else if(IsEqualGUID(&IID_IBindStatusCallback, riid)) {
1517 if(strict_bsc_qi)
1518 CHECK_EXPECT2(QueryInterface_IBindStatusCallback);
1519 *ppv = iface;
1520 return S_OK;
1522 CHECK_EXPECT2(QueryInterface_IBindStatusCallbackHolder);
1523 return E_NOINTERFACE;
1524 }else if(IsEqualGUID(&IID_IBindStatusCallbackEx, riid)) {
1525 CHECK_EXPECT(QueryInterface_IBindStatusCallbackEx);
1526 if(!use_bscex)
1527 return E_NOINTERFACE;
1528 *ppv = iface;
1529 return S_OK;
1530 }else if(IsEqualGUID(&IID_IInternetBindInfo, riid)) {
1531 /* TODO */
1532 }else if(IsEqualGUID(&IID_IWindowForBindingUI, riid)) {
1533 CHECK_EXPECT2(QueryInterface_IWindowForBindingUI);
1534 return E_NOINTERFACE;
1535 }else if(IsEqualGUID(&IID_IHttpSecurity, riid)) {
1536 CHECK_EXPECT2(QueryInterface_IHttpSecurity);
1537 return E_NOINTERFACE;
1538 }
1539
1540 return E_NOINTERFACE;
1541}
1542
1544{
1545 return 2;
1546}
1547
1549{
1550 return 1;
1551}
1552
1554 IBinding *pib)
1555{
1556 IWinInetHttpInfo *http_info;
1557 HRESULT hres;
1558 IMoniker *mon;
1559 DWORD res;
1560 CLSID clsid;
1561 LPOLESTR res_str;
1562
1563 if(iface == &objbsc)
1564 CHECK_EXPECT(Obj_OnStartBinding);
1565 else
1566 CHECK_EXPECT(OnStartBinding);
1567
1568 ok(GetCurrentThreadId() == thread_id, "wrong thread %ld\n", GetCurrentThreadId());
1569
1570 ok(pib != NULL, "pib should not be NULL\n");
1571 ok(dwReserved == 0xff, "dwReserved=%lx\n", dwReserved);
1572
1573 if(pib == (void*)0xdeadbeef)
1574 return S_OK;
1575
1576 current_binding = pib;
1577
1578 hres = IBinding_QueryInterface(pib, &IID_IMoniker, (void**)&mon);
1579 ok(hres == E_NOINTERFACE, "IBinding should not have IMoniker interface\n");
1580 if(SUCCEEDED(hres))
1581 IMoniker_Release(mon);
1582
1583 hres = IBinding_QueryInterface(pib, &IID_IWinInetHttpInfo, (void**)&http_info);
1584 ok(hres == E_NOINTERFACE, "Could not get IID_IWinInetHttpInfo: %08lx\n", hres);
1585
1586 if(0) { /* crashes with native urlmon */
1587 hres = IBinding_GetBindResult(pib, NULL, &res, &res_str, NULL);
1588 ok(hres == E_INVALIDARG, "GetBindResult failed: %08lx\n", hres);
1589 }
1590 hres = IBinding_GetBindResult(pib, &clsid, NULL, &res_str, NULL);
1591 ok(hres == E_INVALIDARG, "GetBindResult failed: %08lx\n", hres);
1592 hres = IBinding_GetBindResult(pib, &clsid, &res, NULL, NULL);
1593 ok(hres == E_INVALIDARG, "GetBindResult failed: %08lx\n", hres);
1594 hres = IBinding_GetBindResult(pib, &clsid, &res, &res_str, (void*)0xdeadbeef);
1595 ok(hres == E_INVALIDARG, "GetBindResult failed: %08lx\n", hres);
1596
1597 hres = IBinding_GetBindResult(pib, &clsid, &res, &res_str, NULL);
1598 ok(hres == S_OK, "GetBindResult failed: %08lx, expected S_OK\n", hres);
1599 ok(IsEqualCLSID(&clsid, &CLSID_NULL), "incorrect clsid: %s\n", wine_dbgstr_guid(&clsid));
1600 ok(!res, "incorrect res: %lx\n", res);
1601 ok(!res_str, "incorrect res_str: %s\n", wine_dbgstr_w(res_str));
1602
1603 if(abort_start) {
1605 return abort_hres;
1606 }
1607
1608 return S_OK;
1609}
1610
1612{
1613 ok(0, "unexpected call\n");
1614 return E_NOTIMPL;
1615}
1616
1618{
1619 ok(0, "unexpected call\n");
1620 return E_NOTIMPL;
1621}
1622
1624 ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
1625{
1626 ok(GetCurrentThreadId() == thread_id, "wrong thread %ld\n", GetCurrentThreadId());
1627
1628 if (winetest_debug > 1)
1629 trace("IBindStatusCallbackEx::OnProgress(progress %lu/%lu, code %lu, text %s)\n",
1630 ulProgress, ulProgressMax, ulStatusCode, debugstr_w(szStatusText));
1631
1632 switch(ulStatusCode) {
1633 case BINDSTATUS_FINDINGRESOURCE:
1634 if(iface == &objbsc)
1635 CHECK_EXPECT(Obj_OnProgress_FINDINGRESOURCE);
1636 else if(test_protocol == FTP_TEST)
1637 todo_wine CHECK_EXPECT(OnProgress_FINDINGRESOURCE);
1639 todo_wine CHECK_EXPECT(OnProgress_FINDINGRESOURCE);
1640 else
1641 CHECK_EXPECT(OnProgress_FINDINGRESOURCE);
1644 break;
1645 case BINDSTATUS_CONNECTING:
1646 if(iface == &objbsc)
1647 CHECK_EXPECT(Obj_OnProgress_CONNECTING);
1648 else if(test_protocol == FTP_TEST)
1649 todo_wine CHECK_EXPECT(OnProgress_CONNECTING);
1650 else if(onsecurityproblem_hres == S_OK)
1651 CHECK_EXPECT2(OnProgress_CONNECTING);
1652 else
1653 CHECK_EXPECT(OnProgress_CONNECTING);
1656 break;
1657 case BINDSTATUS_REDIRECTING:
1658 if(iface == &objbsc)
1659 CHECK_EXPECT(Obj_OnProgress_REDIRECTING);
1660 else
1661 CHECK_EXPECT(OnProgress_REDIRECTING);
1662 ok(!lstrcmpW(szStatusText, winetest_data_urlW), "unexpected status text %s\n",
1663 wine_dbgstr_w(szStatusText));
1665 && (!bind_to_object || iface == &objbsc))
1667 break;
1668 case BINDSTATUS_SENDINGREQUEST:
1669 if(iface == &objbsc)
1670 CHECK_EXPECT(Obj_OnProgress_SENDINGREQUEST);
1671 else if(test_protocol == FTP_TEST)
1672 CHECK_EXPECT2(OnProgress_SENDINGREQUEST);
1673 else
1674 CHECK_EXPECT(OnProgress_SENDINGREQUEST);
1677
1678 if(abort_progress) {
1679 if(filedwl_api)
1681 return E_ABORT;
1682 }
1683
1684 break;
1685 case BINDSTATUS_MIMETYPEAVAILABLE:
1686 if(iface == &objbsc)
1687 CHECK_EXPECT(Obj_OnProgress_MIMETYPEAVAILABLE);
1688 else
1689 CHECK_EXPECT(OnProgress_MIMETYPEAVAILABLE);
1690 if(!bind_to_object)
1691 ok(download_state == BEFORE_DOWNLOAD, "Download state was %d, expected BEFORE_DOWNLOAD\n",
1693 WideCharToMultiByte(CP_ACP, 0, szStatusText, -1, mime_type, sizeof(mime_type)-1, NULL, NULL);
1694 break;
1695 case BINDSTATUS_BEGINDOWNLOADDATA:
1696 if(iface == &objbsc)
1697 CHECK_EXPECT(Obj_OnProgress_BEGINDOWNLOADDATA);
1698 else
1699 CHECK_EXPECT(OnProgress_BEGINDOWNLOADDATA);
1700 ok(szStatusText != NULL, "szStatusText == NULL\n");
1701 if(szStatusText) {
1702 if(filedwl_api) {
1703 /* FIXME */
1704 }else {
1705 ok(!lstrcmpW(szStatusText, current_url), "wrong szStatusText %s\n", wine_dbgstr_w(szStatusText));
1706 }
1707 }
1708 if(!bind_to_object)
1709 ok(download_state == BEFORE_DOWNLOAD, "Download state was %d, expected BEFORE_DOWNLOAD\n",
1712 break;
1713 case BINDSTATUS_DOWNLOADINGDATA:
1714 CHECK_EXPECT2(OnProgress_DOWNLOADINGDATA);
1715 ok(iface != &objbsc, "unexpected call\n");
1716 ok(download_state == DOWNLOADING, "Download state was %d, expected DOWNLOADING\n",
1718 if(test_abort) {
1719 HRESULT hres;
1720
1721 SET_EXPECT(Abort);
1722 hres = IBinding_Abort(current_binding);
1723 ok(hres == S_OK, "Abort failed: %08lx\n", hres);
1724 CHECK_CALLED(Abort);
1725
1726 hres = IBinding_Abort(current_binding);
1727 ok(hres == E_FAIL, "Abort failed: %08lx\n", hres);
1728
1730 }
1731 break;
1732 case BINDSTATUS_ENDDOWNLOADDATA:
1733 if(iface == &objbsc)
1734 CHECK_EXPECT(Obj_OnProgress_ENDDOWNLOADDATA);
1735 else
1736 CHECK_EXPECT(OnProgress_ENDDOWNLOADDATA);
1737 ok(szStatusText != NULL, "szStatusText == NULL\n");
1738 if(szStatusText) {
1739 if(filedwl_api) {
1740 /* FIXME */
1741 }else {
1742 ok(!lstrcmpW(szStatusText, current_url), "wrong szStatusText %s\n", wine_dbgstr_w(szStatusText));
1743 }
1744 }
1745 ok(download_state == DOWNLOADING, "Download state was %d, expected DOWNLOADING\n",
1748 break;
1749 case BINDSTATUS_CACHEFILENAMEAVAILABLE:
1751 if(iface == &objbsc)
1752 CHECK_EXPECT(Obj_OnProgress_CACHEFILENAMEAVAILABLE);
1753 else
1754 CHECK_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE);
1755 }else { /* FIXME */
1756 CLEAR_CALLED(OnProgress_CACHEFILENAMEAVAILABLE);
1757 CLEAR_CALLED(Obj_OnProgress_CACHEFILENAMEAVAILABLE);
1758 }
1759
1760 ok(szStatusText != NULL, "szStatusText == NULL\n");
1761 if(szStatusText && test_protocol == FILE_TEST)
1762 ok(!lstrcmpW(file_url+7, szStatusText), "wrong szStatusText %s\n", wine_dbgstr_w(szStatusText));
1763 break;
1764 case BINDSTATUS_CLASSIDAVAILABLE:
1765 {
1766 CLSID clsid;
1767 HRESULT hr;
1768 if(iface != &objbsc)
1769 ok(0, "unexpected call\n");
1770 else
1771 CHECK_EXPECT(Obj_OnProgress_CLASSIDAVAILABLE);
1772 hr = CLSIDFromString((LPCOLESTR)szStatusText, &clsid);
1773 ok(hr == S_OK, "CLSIDFromString failed with error 0x%08lx\n", hr);
1774 ok(IsEqualCLSID(&clsid, &CLSID_HTMLDocument),
1775 "Expected clsid to be CLSID_HTMLDocument instead of %s\n", wine_dbgstr_guid(&clsid));
1776 break;
1777 }
1778 case BINDSTATUS_BEGINSYNCOPERATION:
1779 CHECK_EXPECT(Obj_OnProgress_BEGINSYNCOPERATION);
1780 if(iface != &objbsc)
1781 ok(0, "unexpected call\n");
1782 ok(szStatusText == NULL, "Expected szStatusText to be NULL\n");
1783 break;
1784 case BINDSTATUS_ENDSYNCOPERATION:
1785 CHECK_EXPECT(Obj_OnProgress_ENDSYNCOPERATION);
1786 if(iface != &objbsc)
1787 ok(0, "unexpected call\n");
1788 ok(szStatusText == NULL, "Expected szStatusText to be NULL\n");
1789 break;
1790 case BINDSTATUS_PROXYDETECTING:
1791 case BINDSTATUS_COOKIE_SENT:
1792 case BINDSTATUS_DECODING:
1793 break;
1794 default:
1795 ok(0, "unexpected code %ld\n", ulStatusCode);
1796 };
1797
1798 if(current_binding) {
1799 IWinInetHttpInfo *http_info;
1800 HRESULT hres;
1801
1802 hres = IBinding_QueryInterface(current_binding, &IID_IWinInetHttpInfo, (void**)&http_info);
1804 ok(hres == S_OK, "Could not get IWinInetHttpInfo iface: %08lx\n", hres);
1805 test_WinInetHttpInfo(http_info, ulStatusCode);
1806 } else
1808 "QueryInterface(IID_IWinInetHttpInfo) returned: %08lx, expected E_NOINTERFACE\n", hres);
1809 if(SUCCEEDED(hres))
1810 IWinInetHttpInfo_Release(http_info);
1811 }
1812
1813 return S_OK;
1814}
1815
1817{
1818 if(iface == &objbsc) {
1819 CHECK_EXPECT(Obj_OnStopBinding);
1821 }else {
1822 CHECK_EXPECT(OnStopBinding);
1824 }
1825
1826 ok(GetCurrentThreadId() == thread_id, "wrong thread %ld\n", GetCurrentThreadId());
1827
1829 todo_wine ok(hresult == S_OK, "Got %08lx\n", hresult);
1830 return S_OK;
1831 }
1832
1833 /* ignore DNS failure */
1835 return S_OK;
1836
1837 if(filedwl_api) {
1839 ok(SUCCEEDED(hresult), "binding failed: %08lx\n", hresult);
1840 else if(abort_start && abort_hres == E_NOTIMPL)
1841 todo_wine ok(hresult == S_FALSE, "binding failed: %08lx, expected S_FALSE\n", hresult);
1842 else
1843 ok(hresult == E_ABORT, "binding failed: %08lx, expected E_ABORT\n", hresult);
1844 } else
1845 ok(hresult == binding_hres, "binding failed: %08lx, expected %08lx\n", hresult, binding_hres);
1846 ok(szError == NULL, "szError should be NULL\n");
1847
1848 if(current_binding) {
1849 CLSID clsid;
1850 DWORD res;
1851 LPOLESTR res_str;
1852 HRESULT hres;
1853
1854 hres = IBinding_GetBindResult(current_binding, &clsid, &res, &res_str, NULL);
1855 ok(hres == S_OK, "GetBindResult failed: %08lx, expected S_OK\n", hres);
1856 ok(res == hresult, "res = %08lx, expected %08lx\n", res, binding_hres);
1857 ok(!res_str, "incorrect res_str = %s\n", wine_dbgstr_w(res_str));
1858
1859 if(hresult==S_OK || (abort_start && hresult!=S_FALSE) || hresult == REGDB_E_CLASSNOTREG) {
1861 "incorrect protocol CLSID: %s, expected CLSID_NULL\n",
1863 }else if(emulate_protocol) {
1864 todo_wine ok(IsEqualCLSID(&clsid, &CLSID_FtpProtocol),
1865 "incorrect protocol CLSID: %s, expected CLSID_FtpProtocol\n",
1867 }else if(test_protocol == FTP_TEST) {
1868 ok(IsEqualCLSID(&clsid, &CLSID_FtpProtocol),
1869 "incorrect protocol CLSID: %s, expected CLSID_FtpProtocol\n",
1871 }else if(test_protocol == FILE_TEST) {
1872 ok(IsEqualCLSID(&clsid, &CLSID_FileProtocol),
1873 "incorrect protocol CLSID: %s, expected CLSID_FileProtocol\n",
1875 }else if(test_protocol == HTTP_TEST) {
1876 ok(IsEqualCLSID(&clsid, &CLSID_HttpProtocol),
1877 "incorrect protocol CLSID: %s, expected CLSID_HttpProtocol\n",
1879 }else if(test_protocol == HTTPS_TEST) {
1880 ok(IsEqualCLSID(&clsid, &CLSID_HttpSProtocol),
1881 "incorrect protocol CLSID: %s, expected CLSID_HttpSProtocol\n",
1883 }else if(test_protocol == ABOUT_TEST) {
1885 "incorrect protocol CLSID: %s, expected CLSID_AboutProtocol\n",
1887 }else {
1888 ok(0, "unexpected (%d)\n", test_protocol);
1889 }
1890 }
1891
1894 if(iface != &objbsc)
1895 ok( WaitForSingleObject(complete_event2, 90000) == WAIT_OBJECT_0, "wait timed out\n" );
1896 }
1897
1901 ok(file == INVALID_HANDLE_VALUE, "expected INVALID_HANDLE_VALUE, got %p\n", file);
1902 ok(GetLastError() == ERROR_SHARING_VIOLATION, "expected ERROR_SHARING_VIOLATION, got %lu\n", GetLastError());
1903 http_cache_file[0] = 0;
1904 }
1905
1906 return S_OK;
1907}
1908
1909static HRESULT WINAPI statusclb_GetBindInfo(IBindStatusCallbackEx *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
1910{
1911 DWORD cbSize;
1912
1913 if(iface == &objbsc)
1914 CHECK_EXPECT(Obj_GetBindInfo);
1915 else
1916 CHECK_EXPECT(GetBindInfo);
1917
1918 ok(GetCurrentThreadId() == thread_id, "wrong thread %ld\n", GetCurrentThreadId());
1919
1920 *grfBINDF = bindf;
1921 cbSize = pbindinfo->cbSize;
1922 memset(pbindinfo, 0, cbSize);
1923 pbindinfo->cbSize = cbSize;
1924
1925 return S_OK;
1926}
1927
1929{
1930 ULARGE_INTEGER new_pos;
1932 HRESULT hres;
1933
1934 pos.QuadPart = 0;
1935 new_pos.QuadPart = 0xdeadbeef;
1936 hres = IStream_Seek(stream, pos, STREAM_SEEK_SET, &new_pos);
1937 ok(hres == S_OK, "Seek failed: %08lx\n", hres);
1938 ok(!new_pos.QuadPart, "new_pos.QuadPart != 0\n");
1939
1940 pos.QuadPart = 0;
1941 new_pos.QuadPart = 0xdeadbeef;
1942 hres = IStream_Seek(stream, pos, STREAM_SEEK_END, &new_pos);
1943 ok(hres == S_OK, "Seek failed: %08lx\n", hres);
1944 ok(new_pos.QuadPart, "new_pos.QuadPart = 0\n");
1945
1946 pos.QuadPart = 0;
1947 new_pos.QuadPart = 0xdeadbeef;
1948 hres = IStream_Seek(stream, pos, 100, &new_pos);
1949 ok(hres == E_FAIL, "Seek failed: %08lx\n", hres);
1950 ok(new_pos.QuadPart == 0xdeadbeef, "unexpected new_pos.QuadPart\n");
1951}
1952
1954 DWORD dwSize, FORMATETC* pformatetc, STGMEDIUM* pstgmed)
1955{
1956 HRESULT hres;
1957 DWORD read;
1958 BYTE buf[512];
1959 CHAR clipfmt[512];
1960
1961 if(iface == &objbsc)
1962 ok(0, "unexpected call\n");
1963
1964 CHECK_EXPECT2(OnDataAvailable);
1965
1966 ok(GetCurrentThreadId() == thread_id, "wrong thread %ld\n", GetCurrentThreadId());
1967
1969 "Download state was %d, expected DOWNLOADING or END_DOWNLOAD\n",
1972
1974 ok(grfBSCF == (BSCF_FIRSTDATANOTIFICATION|BSCF_LASTDATANOTIFICATION), "grfBSCF = %lx\n", grfBSCF);
1975
1976 ok(pformatetc != NULL, "pformatetc == NULL\n");
1977 if(pformatetc) {
1978 if (mime_type[0]) {
1979 INT ret;
1980 clipfmt[0] = 0;
1981 ret = GetClipboardFormatNameA(pformatetc->cfFormat, clipfmt, sizeof(clipfmt)-1);
1982 ok(ret, "GetClipboardFormatName failed, error %ld\n", GetLastError());
1983 ok(!strcmp(clipfmt, mime_type), "clipformat %x != mime_type, \"%s\" != \"%s\"\n",
1984 pformatetc->cfFormat, clipfmt, mime_type);
1985 } else {
1986 ok(pformatetc->cfFormat == 0, "clipformat=%x\n", pformatetc->cfFormat);
1987 }
1988 ok(pformatetc->ptd == NULL, "ptd = %p\n", pformatetc->ptd);
1989 ok(pformatetc->dwAspect == 1, "dwAspect=%lu\n", pformatetc->dwAspect);
1990 ok(pformatetc->lindex == -1, "lindex=%ld\n", pformatetc->lindex);
1991 ok(pformatetc->tymed == tymed, "tymed=%lu, expected %lu\n", pformatetc->tymed, tymed);
1992 }
1993
1994 ok(pstgmed != NULL, "stgmeg == NULL\n");
1995 ok(pstgmed->tymed == tymed, "tymed=%lu, expected %lu\n", pstgmed->tymed, tymed);
1996 ok(pstgmed->pUnkForRelease != NULL, "pUnkForRelease == NULL\n");
1997
1998 switch(pstgmed->tymed) {
1999 case TYMED_ISTREAM: {
2000 IStream *stream = pstgmed->pstm;
2001
2002 ok(stream != NULL, "pstgmed->pstm == NULL\n");
2003
2004 if(grfBSCF & BSCF_FIRSTDATANOTIFICATION) {
2005 STATSTG stat;
2006
2007 hres = IStream_Write(stream, buf, 10, NULL);
2009 "Write failed: %08lx, expected STG_E_ACCESSDENIED\n", hres);
2010
2011 hres = IStream_Commit(stream, 0);
2012 ok(hres == E_NOTIMPL, "Commit failed: %08lx, expected E_NOTIMPL\n", hres);
2013
2014 hres = IStream_Revert(stream);
2015 ok(hres == E_NOTIMPL, "Revert failed: %08lx, expected E_NOTIMPL\n", hres);
2016
2017 hres = IStream_Stat(stream, NULL, STATFLAG_NONAME);
2018 ok(hres == E_FAIL, "hres = %lx\n", hres);
2020 hres = IStream_Stat(stream, &stat, STATFLAG_DEFAULT);
2021 ok(hres == S_OK, "hres = %lx\n", hres);
2022 ok(!lstrcmpW(stat.pwcsName, cache_file_name),
2023 "stat.pwcsName = %s, cache_file_name = %s\n",
2025 CoTaskMemFree(stat.pwcsName);
2026 ok(stat.cbSize.LowPart == (bindf&BINDF_ASYNCHRONOUS?0:6500),
2027 "stat.cbSize.LowPart = %lu\n", stat.cbSize.LowPart);
2028 } else {
2029 hres = IStream_Stat(stream, &stat, STATFLAG_NONAME);
2030 ok(hres == S_OK, "hres = %lx\n", hres);
2031 ok(!stat.pwcsName || broken(stat.pwcsName!=NULL),
2032 "stat.pwcsName = %s\n", wine_dbgstr_w(stat.pwcsName));
2033 }
2034 ok(stat.type == STGTY_STREAM, "stat.type = %lx\n", stat.type);
2035 ok(stat.cbSize.HighPart == 0, "stat.cbSize.HighPart != 0\n");
2036 ok(stat.grfMode == (stat.cbSize.LowPart?GENERIC_READ:0), "stat.grfMode = %lx\n", stat.grfMode);
2037 ok(stat.grfLocksSupported == 0, "stat.grfLocksSupported = %lx\n", stat.grfLocksSupported);
2038 ok(stat.grfStateBits == 0, "stat.grfStateBits = %lx\n", stat.grfStateBits);
2039 ok(stat.reserved == 0, "stat.reserved = %lx\n", stat.reserved);
2040 }
2041
2042 if(callback_read) {
2043 do {
2044 hres = IStream_Read(stream, buf, 512, &read);
2046 ok(buf[0] == (use_cache_file && !(bindf&BINDF_ASYNCHRONOUS) ? 'X' : '?'), "buf[0] = '%c'\n", buf[0]);
2047 }while(hres == S_OK);
2048 ok(hres == S_FALSE || hres == E_PENDING, "IStream_Read returned %08lx\n", hres);
2049 }
2050
2051 if(use_cache_file && (grfBSCF & BSCF_FIRSTDATANOTIFICATION) && !(bindf & BINDF_PULLDATA))
2053 break;
2054 }
2055 case TYMED_FILE:
2057 ok(!lstrcmpW(pstgmed->lpszFileName, file_url+7),
2058 "unexpected file name %s\n", wine_dbgstr_w(pstgmed->lpszFileName));
2059 else if(emulate_protocol)
2060 ok(!lstrcmpW(pstgmed->lpszFileName, cache_fileW),
2061 "unexpected file name %s\n", wine_dbgstr_w(pstgmed->lpszFileName));
2062 else if(test_protocol == HTTP_TEST)
2063 lstrcpyW(http_cache_file, pstgmed->lpszFileName);
2064 else
2065 ok(pstgmed->lpszFileName != NULL, "lpszFileName == NULL\n");
2066 }
2067
2071
2072 return S_OK;
2073}
2074
2076{
2077 CHECK_EXPECT(OnObjectAvailable);
2078
2079 if(iface != &objbsc)
2080 ok(0, "unexpected call\n");
2081
2082 ok(IsEqualGUID(&IID_IUnknown, riid), "riid = %s\n", wine_dbgstr_guid(riid));
2083 ok(punk != NULL, "punk == NULL\n");
2084
2085 return S_OK;
2086}
2087
2088static HRESULT WINAPI statusclb_GetBindInfoEx(IBindStatusCallbackEx *iface, DWORD *grfBINDF, BINDINFO *pbindinfo,
2089 DWORD *grfBINDF2, DWORD *pdwReserved)
2090{
2091 CHECK_EXPECT(GetBindInfoEx);
2092
2093 ok(grfBINDF != NULL, "grfBINDF == NULL\n");
2094 ok(grfBINDF2 != NULL, "grfBINDF2 == NULL\n");
2095 ok(pbindinfo != NULL, "pbindinfo == NULL\n");
2096 ok(pdwReserved != NULL, "dwReserved == NULL\n");
2097
2098 return S_OK;
2099}
2100
2101static const IBindStatusCallbackExVtbl BindStatusCallbackVtbl = {
2114};
2115
2119
2121{
2122 *ppv = NULL;
2123 ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
2124 return E_NOINTERFACE;
2125}
2126
2128{
2129 return 2;
2130}
2131
2133{
2134 return 1;
2135}
2136
2137static HRESULT WINAPI MonikerProp_PutProperty(IMonikerProp *iface, MONIKERPROPERTY mkp, LPCWSTR val)
2138{
2139 switch(mkp) {
2140 case MIMETYPEPROP:
2141 CHECK_EXPECT(PutProperty_MIMETYPEPROP);
2142 ok(!lstrcmpW(val, wszTextHtml), "val = %s\n", wine_dbgstr_w(val));
2143 break;
2144 case CLASSIDPROP:
2145 CHECK_EXPECT(PutProperty_CLASSIDPROP);
2146 break;
2147 default:
2148 break;
2149 }
2150
2151 return S_OK;
2152}
2153
2154static const IMonikerPropVtbl MonikerPropVtbl = {
2159};
2160
2162
2164{
2165 *ppv = NULL;
2166
2167 if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IPersistMoniker, riid))
2168 *ppv = iface;
2169 else if(IsEqualGUID(&IID_IMonikerProp, riid))
2170 *ppv = &MonikerProp;
2171
2172 if(*ppv)
2173 return S_OK;
2174
2175 ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
2176 return E_NOINTERFACE;
2177}
2178
2180{
2181 return 2;
2182}
2183
2185{
2186 return 1;
2187}
2188
2190{
2191 ok(0, "unexpected call\n");
2192 return E_NOTIMPL;
2193}
2194
2196{
2197 ok(0, "unexpected call\n");
2198 return E_NOTIMPL;
2199}
2200
2202 IMoniker *pimkName, LPBC pibc, DWORD grfMode)
2203{
2204 IUnknown *unk;
2205 HRESULT hres;
2206
2207 static WCHAR cbinding_contextW[] =
2208 {'C','B','i','n','d','i','n','g',' ','C','o','n','t','e','x','t',0};
2209
2211 ok(GetCurrentThreadId() == thread_id, "wrong thread %ld\n", GetCurrentThreadId());
2212
2214 ok(!fFullyAvailable, "fFullyAvailable = %x\n", fFullyAvailable);
2215 else
2216 ok(fFullyAvailable, "fFullyAvailable = %x\n", fFullyAvailable);
2217 ok(pimkName != NULL, "pimkName == NULL\n");
2218 ok(pibc != NULL, "pibc == NULL\n");
2219 ok(grfMode == 0x12, "grfMode = %lx\n", grfMode);
2220
2221 hres = IBindCtx_GetObjectParam(pibc, cbinding_contextW, &unk);
2222 ok(hres == S_OK, "GetObjectParam(CBinding Context) failed: %08lx\n", hres);
2223 if(SUCCEEDED(hres)) {
2225
2226 hres = IUnknown_QueryInterface(unk, &IID_IBinding, (void**)&binding);
2227 ok(hres == S_OK, "Could not get IBinding: %08lx\n", hres);
2228
2229 IBinding_Release(binding);
2230 IUnknown_Release(unk);
2231 }
2232
2233 SET_EXPECT(QueryInterface_IServiceProvider);
2235 ok(hres == S_OK, "RegisterBindStatusCallback failed: %08lx\n", hres);
2236 CHECK_CALLED(QueryInterface_IServiceProvider);
2237
2238 SET_EXPECT(QueryInterface_IBindStatusCallbackEx);
2239 SET_EXPECT(GetBindInfo);
2240 SET_EXPECT(OnStartBinding);
2241 if(test_redirect)
2242 SET_EXPECT(OnProgress_REDIRECTING);
2243 SET_EXPECT(OnProgress_BEGINDOWNLOADDATA);
2245 SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE);
2247 SET_EXPECT(OnProgress_ENDDOWNLOADDATA);
2249 SET_EXPECT(OnDataAvailable);
2251 SET_EXPECT(OnStopBinding);
2252
2253 hres = IMoniker_BindToStorage(pimkName, pibc, NULL, &IID_IStream, (void**)&unk);
2254 ok(hres == S_OK, "Load failed: %08lx\n", hres);
2255
2256 CLEAR_CALLED(QueryInterface_IBindStatusCallbackEx); /* IE 8 */
2257 CHECK_CALLED(GetBindInfo);
2258 CHECK_CALLED(OnStartBinding);
2259 if(test_redirect)
2260 CHECK_CALLED(OnProgress_REDIRECTING);
2261 CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA);
2263 CHECK_CALLED(OnProgress_CACHEFILENAMEAVAILABLE);
2265 CHECK_CALLED(OnProgress_ENDDOWNLOADDATA);
2267 CHECK_CALLED(OnDataAvailable);
2269 CHECK_CALLED(OnStopBinding);
2270
2271 if(unk)
2272 IUnknown_Release(unk);
2273
2274 return S_OK;
2275}
2276
2277static HRESULT WINAPI PersistMoniker_Save(IPersistMoniker *iface, IMoniker *pimkName, LPBC pbc, BOOL fRemember)
2278{
2279 ok(0, "unexpected call\n");
2280 return E_NOTIMPL;
2281}
2282
2284{
2285 ok(0, "unexpected call\n");
2286 return E_NOTIMPL;
2287}
2288
2290{
2291 ok(0, "unexpected call\n");
2292 return E_NOTIMPL;
2293}
2294
2295static const IPersistMonikerVtbl PersistMonikerVtbl = {
2305};
2306
2308
2310{
2311 *ppv = NULL;
2312
2314 *ppv = iface;
2315 return S_OK;
2316 }
2317
2318 if(IsEqualGUID(&IID_IMarshal, riid))
2319 return E_NOINTERFACE;
2321 return E_NOINTERFACE;
2322
2323 ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
2324 return E_NOTIMPL;
2325}
2326
2328{
2329 return 2;
2330}
2331
2333{
2334 return 1;
2335}
2336
2338{
2340 ok(!outer, "outer = %p\n", outer);
2341 ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
2342 *ppv = &PersistMoniker;
2343 return S_OK;
2344}
2345
2347{
2348 ok(0, "unexpected call\n");
2349 return S_OK;
2350}
2351
2352static const IClassFactoryVtbl ClassFactoryVtbl = {
2358};
2359
2361
2363{
2364 *ppv = NULL;
2365
2367 *ppv = iface;
2368 return S_OK;
2369 }
2370
2371 if(IsEqualGUID(&IID_IInternetProtocolInfo, riid))
2372 return E_NOINTERFACE;
2373
2374 ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
2375 return E_NOTIMPL;
2376}
2377
2379{
2380 if(IsEqualGUID(&IID_IInternetProtocolInfo, riid))
2381 return E_NOINTERFACE;
2382
2383 ok(outer != NULL, "outer == NULL\n");
2384 ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
2385 *ppv = &Protocol;
2386 return S_OK;
2387}
2388
2389static const IClassFactoryVtbl ProtocolCFVtbl = {
2395};
2396
2398
2400{
2401 IBindCtx *bctx = (IBindCtx*)0x0ff00ff0;
2402 IUnknown *unk;
2403 HRESULT hres;
2404 ULONG ref;
2405 BIND_OPTS bindopts;
2406
2407 hres = CreateAsyncBindCtx(0, NULL, NULL, &bctx);
2408 ok(hres == E_INVALIDARG, "CreateAsyncBindCtx failed. expected: E_INVALIDARG, got: %08lx\n", hres);
2409 ok(bctx == (IBindCtx*)0x0ff00ff0, "bctx should not be changed\n");
2410
2412 ok(hres == E_INVALIDARG, "CreateAsyncBindCtx failed. expected: E_INVALIDARG, got: %08lx\n", hres);
2413
2414 SET_EXPECT(QueryInterface_IServiceProvider);
2416 ok(hres == S_OK, "CreateAsyncBindCtx failed: %08lx\n", hres);
2417 CHECK_CALLED(QueryInterface_IServiceProvider);
2418
2419 bindopts.cbStruct = sizeof(bindopts);
2420 hres = IBindCtx_GetBindOptions(bctx, &bindopts);
2421 ok(hres == S_OK, "IBindCtx_GetBindOptions failed: %08lx\n", hres);
2422 ok(bindopts.grfFlags == BIND_MAYBOTHERUSER,
2423 "bindopts.grfFlags = %08lx, expected: BIND_MAYBOTHERUSER\n", bindopts.grfFlags);
2424 ok(bindopts.grfMode == (STGM_READWRITE | STGM_SHARE_EXCLUSIVE),
2425 "bindopts.grfMode = %08lx, expected: STGM_READWRITE | STGM_SHARE_EXCLUSIVE\n",
2426 bindopts.grfMode);
2427 ok(bindopts.dwTickCountDeadline == 0,
2428 "bindopts.dwTickCountDeadline = %08lx, expected: 0\n", bindopts.dwTickCountDeadline);
2429
2430 hres = IBindCtx_QueryInterface(bctx, &IID_IAsyncBindCtx, (void**)&unk);
2431 ok(hres == E_NOINTERFACE, "QueryInterface(IID_IAsyncBindCtx) failed: %08lx, expected E_NOINTERFACE\n", hres);
2432 if(SUCCEEDED(hres))
2433 IUnknown_Release(unk);
2434
2435 ref = IBindCtx_Release(bctx);
2436 ok(ref == 0, "bctx should be destroyed here\n");
2437}
2438
2440{
2441 IBindCtx *bctx = NULL, *bctx2 = NULL, *bctx_arg = NULL;
2442 IUnknown *unk;
2443 BIND_OPTS bindopts;
2444 HRESULT hres;
2445
2446 static WCHAR testW[] = {'t','e','s','t',0};
2447
2448 if (!pCreateAsyncBindCtxEx) {
2449 win_skip("CreateAsyncBindCtxEx not present\n");
2450 return;
2451 }
2452
2453 hres = pCreateAsyncBindCtxEx(NULL, 0, NULL, NULL, NULL, 0);
2454 ok(hres == E_INVALIDARG, "CreateAsyncBindCtx failed: %08lx, expected E_INVALIDARG\n", hres);
2455
2456 hres = pCreateAsyncBindCtxEx(NULL, 0, NULL, NULL, &bctx, 0);
2457 ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08lx\n", hres);
2458
2459 if(SUCCEEDED(hres)) {
2460 bindopts.cbStruct = sizeof(bindopts);
2461 hres = IBindCtx_GetBindOptions(bctx, &bindopts);
2462 ok(hres == S_OK, "IBindCtx_GetBindOptions failed: %08lx\n", hres);
2463 ok(bindopts.grfFlags == BIND_MAYBOTHERUSER,
2464 "bindopts.grfFlags = %08lx, expected: BIND_MAYBOTHERUSER\n", bindopts.grfFlags);
2465 ok(bindopts.grfMode == (STGM_READWRITE | STGM_SHARE_EXCLUSIVE),
2466 "bindopts.grfMode = %08lx, expected: STGM_READWRITE | STGM_SHARE_EXCLUSIVE\n",
2467 bindopts.grfMode);
2468 ok(bindopts.dwTickCountDeadline == 0,
2469 "bindopts.dwTickCountDeadline = %08lx, expected: 0\n", bindopts.dwTickCountDeadline);
2470
2471 IBindCtx_Release(bctx);
2472 }
2473
2474 CreateBindCtx(0, &bctx_arg);
2475 hres = pCreateAsyncBindCtxEx(NULL, 0, NULL, NULL, &bctx, 0);
2476 ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08lx\n", hres);
2477
2478 if(SUCCEEDED(hres)) {
2479 bindopts.cbStruct = sizeof(bindopts);
2480 hres = IBindCtx_GetBindOptions(bctx, &bindopts);
2481 ok(hres == S_OK, "IBindCtx_GetBindOptions failed: %08lx\n", hres);
2482 ok(bindopts.grfFlags == BIND_MAYBOTHERUSER,
2483 "bindopts.grfFlags = %08lx, expected: BIND_MAYBOTHERUSER\n", bindopts.grfFlags);
2484 ok(bindopts.grfMode == (STGM_READWRITE | STGM_SHARE_EXCLUSIVE),
2485 "bindopts.grfMode = %08lx, expected: STGM_READWRITE | STGM_SHARE_EXCLUSIVE\n",
2486 bindopts.grfMode);
2487 ok(bindopts.dwTickCountDeadline == 0,
2488 "bindopts.dwTickCountDeadline = %08lx, expected: 0\n", bindopts.dwTickCountDeadline);
2489
2490 IBindCtx_Release(bctx);
2491 }
2492
2493 IBindCtx_Release(bctx_arg);
2494
2495 SET_EXPECT(QueryInterface_IServiceProvider);
2496 hres = pCreateAsyncBindCtxEx(NULL, 0, (IBindStatusCallback*)&bsc, NULL, &bctx, 0);
2497 ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08lx\n", hres);
2498 CHECK_CALLED(QueryInterface_IServiceProvider);
2499
2500 hres = IBindCtx_QueryInterface(bctx, &IID_IAsyncBindCtx, (void**)&unk);
2501 ok(hres == S_OK, "QueryInterface(IID_IAsyncBindCtx) failed: %08lx\n", hres);
2502 if(SUCCEEDED(hres))
2503 IUnknown_Release(unk);
2504
2505 IBindCtx_Release(bctx);
2506
2507 hres = CreateBindCtx(0, &bctx2);
2508 ok(hres == S_OK, "CreateBindCtx failed: %08lx\n", hres);
2509
2510 hres = pCreateAsyncBindCtxEx(bctx2, 0, NULL, NULL, &bctx, 0);
2511 ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08lx\n", hres);
2512
2513 hres = IBindCtx_RegisterObjectParam(bctx2, testW, (IUnknown*)&Protocol);
2514 ok(hres == S_OK, "RegisterObjectParam failed: %08lx\n", hres);
2515
2516 hres = IBindCtx_GetObjectParam(bctx, testW, &unk);
2517 ok(hres == S_OK, "GetObjectParam failed: %08lx\n", hres);
2518 ok(unk == (IUnknown*)&Protocol, "unexpected unk %p\n", unk);
2519
2520 IBindCtx_Release(bctx);
2521 IBindCtx_Release(bctx2);
2522}
2523
2525{
2526 IBindStatusCallbackEx *bscex;
2527 BINDINFO bindinfo = {sizeof(bindinfo)};
2528 DWORD bindf, bindf2, dw;
2529 HRESULT hres;
2530
2531 hres = IBindStatusCallback_QueryInterface(holder, &IID_IBindStatusCallbackEx, (void**)&bscex);
2532 if(FAILED(hres)) {
2533 win_skip("IBindStatusCallbackEx not supported\n");
2534 return;
2535 }
2536
2537 use_bscex = TRUE;
2538
2539 bindf = 0;
2540 SET_EXPECT(QueryInterface_IBindStatusCallbackEx);
2541 SET_EXPECT(GetBindInfoEx);
2542 hres = IBindStatusCallback_GetBindInfo(holder, &bindf, &bindinfo);
2543 ok(hres == S_OK, "GetBindInfo failed: %08lx\n", hres);
2544 CHECK_CALLED(QueryInterface_IBindStatusCallbackEx);
2545 CHECK_CALLED(GetBindInfoEx);
2546
2547 bindf = bindf2 = dw = 0;
2548 SET_EXPECT(QueryInterface_IBindStatusCallbackEx);
2549 SET_EXPECT(GetBindInfoEx);
2550 hres = IBindStatusCallbackEx_GetBindInfoEx(bscex, &bindf, &bindinfo, &bindf2, &dw);
2551 ok(hres == S_OK, "GetBindInfo failed: %08lx\n", hres);
2552 CHECK_CALLED(QueryInterface_IBindStatusCallbackEx);
2553 CHECK_CALLED(GetBindInfoEx);
2554
2555 use_bscex = FALSE;
2556
2557 bindf = bindf2 = dw = 0xdeadbeef;
2558 SET_EXPECT(QueryInterface_IBindStatusCallbackEx);
2559 SET_EXPECT(GetBindInfo);
2560 hres = IBindStatusCallbackEx_GetBindInfoEx(bscex, &bindf, &bindinfo, &bindf2, &dw);
2561 ok(hres == S_OK, "GetBindInfo failed: %08lx\n", hres);
2562 CHECK_CALLED(QueryInterface_IBindStatusCallbackEx);
2563 CHECK_CALLED(GetBindInfo);
2564 ok(bindf2 == 0xdeadbeef, "bindf2 = %lx\n", bindf2);
2565 ok(dw == 0xdeadbeef, "dw = %lx\n", dw);
2566
2567 IBindStatusCallbackEx_Release(bscex);
2568}
2569
2571{
2572 IServiceProvider *serv_prov;
2573 IHttpNegotiate *http_negotiate, *http_negotiate_serv;
2574 IHttpNegotiate2 *http_negotiate2, *http_negotiate2_serv;
2575 IAuthenticate *authenticate, *authenticate_serv;
2578 BINDINFO bindinfo = {sizeof(bindinfo)};
2579 BOOL ret = TRUE;
2580 LPWSTR wstr;
2581 DWORD dw;
2582 HRESULT hres;
2583
2584 hres = IBindStatusCallback_QueryInterface(holder, &IID_IServiceProvider, (void**)&serv_prov);
2585 ok(hres == S_OK, "Could not get IServiceProvider interface: %08lx\n", hres);
2586
2587 dw = 0xdeadbeef;
2588 SET_EXPECT(QueryInterface_IBindStatusCallbackEx);
2589 SET_EXPECT(GetBindInfo);
2590 hres = IBindStatusCallback_GetBindInfo(holder, &dw, &bindinfo);
2591 ok(hres == S_OK, "GetBindInfo failed: %08lx\n", hres);
2592 CLEAR_CALLED(QueryInterface_IBindStatusCallbackEx); /* IE 8 */
2593 CHECK_CALLED(GetBindInfo);
2594
2595 test_GetBindInfoEx(holder);
2596
2597 SET_EXPECT(OnStartBinding);
2598 hres = IBindStatusCallback_OnStartBinding(holder, 0, (void*)0xdeadbeef);
2599 ok(hres == S_OK, "OnStartBinding failed: %08lx\n", hres);
2600 CHECK_CALLED(OnStartBinding);
2601
2602 hres = IBindStatusCallback_QueryInterface(holder, &IID_IHttpNegotiate, (void**)&http_negotiate);
2603 ok(hres == S_OK, "Could not get IHttpNegotiate interface: %08lx\n", hres);
2604
2605 SET_EXPECT(QueryInterface_IHttpNegotiate);
2606 hres = IServiceProvider_QueryService(serv_prov, &IID_IHttpNegotiate, &IID_IHttpNegotiate,
2607 (void**)&http_negotiate_serv);
2608 ok(hres == S_OK, "Could not get IHttpNegotiate service: %08lx\n", hres);
2609 CLEAR_CALLED(QueryInterface_IHttpNegotiate); /* IE <8 */
2610
2611 ok(http_negotiate == http_negotiate_serv, "http_negotiate != http_negotiate_serv\n");
2612
2613 wstr = (void*)0xdeadbeef;
2614 SET_EXPECT(QueryInterface_IHttpNegotiate);
2615 SET_EXPECT(BeginningTransaction);
2616 hres = IHttpNegotiate_BeginningTransaction(http_negotiate_serv, current_url, emptyW, 0, &wstr);
2617 CHECK_CALLED_BROKEN(QueryInterface_IHttpNegotiate); /* IE8 */
2618 CHECK_CALLED(BeginningTransaction);
2619 ok(hres == S_OK, "BeginningTransaction failed: %08lx\n", hres);
2620 ok(wstr == NULL, "wstr = %p\n", wstr);
2621
2622 IHttpNegotiate_Release(http_negotiate_serv);
2623
2624 hres = IServiceProvider_QueryService(serv_prov, &IID_IHttpNegotiate, &IID_IHttpNegotiate,
2625 (void**)&http_negotiate_serv);
2626 ok(hres == S_OK, "Could not get IHttpNegotiate service: %08lx\n", hres);
2627 ok(http_negotiate == http_negotiate_serv, "http_negotiate != http_negotiate_serv\n");
2628 IHttpNegotiate_Release(http_negotiate_serv);
2629
2630 hres = IBindStatusCallback_QueryInterface(holder, &IID_IHttpNegotiate2, (void**)&http_negotiate2);
2631 if(SUCCEEDED(hres)) {
2633
2634 SET_EXPECT(QueryInterface_IHttpNegotiate2);
2635 hres = IServiceProvider_QueryService(serv_prov, &IID_IHttpNegotiate2, &IID_IHttpNegotiate2,
2636 (void**)&http_negotiate2_serv);
2637 ok(hres == S_OK, "Could not get IHttpNegotiate2 service: %08lx\n", hres);
2638 CLEAR_CALLED(QueryInterface_IHttpNegotiate2); /* IE <8 */
2639 ok(http_negotiate2 == http_negotiate2_serv, "http_negotiate != http_negotiate_serv\n");
2640
2641 SET_EXPECT(QueryInterface_IHttpNegotiate2);
2642 SET_EXPECT(GetRootSecurityId);
2643 hres = IHttpNegotiate2_GetRootSecurityId(http_negotiate2, (void*)0xdeadbeef, (void*)0xdeadbeef, 0);
2644 ok(hres == E_NOTIMPL, "GetRootSecurityId failed: %08lx\n", hres);
2645 CHECK_CALLED_BROKEN(QueryInterface_IHttpNegotiate2); /* IE8 */
2646 CHECK_CALLED(GetRootSecurityId);
2647
2648 IHttpNegotiate2_Release(http_negotiate2_serv);
2649 IHttpNegotiate2_Release(http_negotiate2);
2650 }else {
2651 skip("Could not get IHttpNegotiate2\n");
2652 ret = FALSE;
2653 }
2654
2655 SET_EXPECT(OnProgress_FINDINGRESOURCE);
2656 hres = IBindStatusCallback_OnProgress(holder, 0, 0, BINDSTATUS_FINDINGRESOURCE, NULL);
2657 ok(hres == S_OK, "OnProgress failed: %08lx\n", hres);
2658 CHECK_CALLED(OnProgress_FINDINGRESOURCE);
2659
2660 SET_EXPECT(QueryInterface_IHttpNegotiate);
2661 SET_EXPECT(OnResponse);
2662 wstr = (void*)0xdeadbeef;
2663 hres = IHttpNegotiate_OnResponse(http_negotiate, 200, emptyW, NULL, NULL);
2664 ok(hres == S_OK, "OnResponse failed: %08lx\n", hres);
2665 CHECK_CALLED_BROKEN(QueryInterface_IHttpNegotiate); /* IE8 */
2666 CHECK_CALLED(OnResponse);
2667
2668 IHttpNegotiate_Release(http_negotiate);
2669
2670 hres = IBindStatusCallback_QueryInterface(holder, &IID_IAuthenticate, (void**)&authenticate);
2671 ok(hres == S_OK, "Could not get IAuthenticate interface: %08lx\n", hres);
2672
2673 SET_EXPECT(QueryInterface_IAuthenticate);
2674 SET_EXPECT(QueryService_IAuthenticate);
2675 hres = IServiceProvider_QueryService(serv_prov, &IID_IAuthenticate, &IID_IAuthenticate,
2676 (void**)&authenticate_serv);
2677 ok(hres == S_OK, "Could not get IAuthenticate service: %08lx\n", hres);
2678 CLEAR_CALLED(QueryInterface_IAuthenticate); /* IE <8 */
2679 CLEAR_CALLED(QueryService_IAuthenticate); /* IE <8 */
2680 ok(authenticate == authenticate_serv, "authenticate != authenticate_serv\n");
2681 IAuthenticate_Release(authenticate_serv);
2682
2683 hres = IServiceProvider_QueryService(serv_prov, &IID_IAuthenticate, &IID_IAuthenticate,
2684 (void**)&authenticate_serv);
2685 ok(hres == S_OK, "Could not get IAuthenticate service: %08lx\n", hres);
2686 ok(authenticate == authenticate_serv, "authenticate != authenticate_serv\n");
2687
2688 IAuthenticate_Release(authenticate);
2689 IAuthenticate_Release(authenticate_serv);
2690
2691 hres = IBindStatusCallback_QueryInterface(holder, &IID_IInternetBindInfo, (void**)&bind_info);
2692 ok(hres == S_OK || broken(hres == E_NOINTERFACE /* win2k */), "Could not get IInternetBindInfo interface: %08lx\n", hres);
2693
2694 if(SUCCEEDED(hres)) {
2695 hres = IInternetBindInfo_GetBindString(bind_info, BINDSTRING_USER_AGENT, &wstr, 1, &dw);
2696 ok(hres == E_NOINTERFACE, "GetBindString(BINDSTRING_USER_AGENT) failed: %08lx\n", hres);
2697
2698 IInternetBindInfo_Release(bind_info);
2699 }
2700
2701 SET_EXPECT(OnStopBinding);
2702 hres = IBindStatusCallback_OnStopBinding(holder, S_OK, NULL);
2703 ok(hres == S_OK, "OnStopBinding failed: %08lx\n", hres);
2704 CHECK_CALLED(OnStopBinding);
2705
2706 SET_EXPECT(QueryInterface_IInternetProtocol);
2707 SET_EXPECT(QueryService_IInternetProtocol);
2708 hres = IServiceProvider_QueryService(serv_prov, &IID_IInternetProtocol, &IID_IInternetProtocol,
2709 (void**)&protocol);
2710 ok(hres == E_NOINTERFACE, "QueryService(IInternetProtocol) failed: %08lx\n", hres);
2711 CHECK_CALLED(QueryInterface_IInternetProtocol);
2712 CHECK_CALLED(QueryService_IInternetProtocol);
2713
2714 IServiceProvider_Release(serv_prov);
2715 return ret;
2716}
2717
2719{
2720 IBindStatusCallback *prevbsc, *clb, *prev_clb;
2721 IBindCtx *bindctx;
2722 BOOL ret = TRUE;
2723 IUnknown *unk;
2724 HRESULT hres;
2725
2727
2728 hres = CreateBindCtx(0, &bindctx);
2729 ok(hres == S_OK, "BindCtx failed: %08lx\n", hres);
2730
2731 SET_EXPECT(QueryInterface_IServiceProvider);
2732
2733 hres = IBindCtx_RegisterObjectParam(bindctx, BSCBHolder, (IUnknown*)&bsc);
2734 ok(hres == S_OK, "RegisterObjectParam failed: %08lx\n", hres);
2735
2736 SET_EXPECT(QueryInterface_IBindStatusCallback);
2737 SET_EXPECT(QueryInterface_IBindStatusCallbackHolder);
2738 prevbsc = (void*)0xdeadbeef;
2739 hres = RegisterBindStatusCallback(bindctx, (IBindStatusCallback*)&bsc, &prevbsc, 0);
2740 ok(hres == S_OK, "RegisterBindStatusCallback failed: %08lx\n", hres);
2741 ok(prevbsc == (IBindStatusCallback*)&bsc, "prevbsc=%p\n", prevbsc);
2742 CHECK_CALLED(QueryInterface_IBindStatusCallback);
2743 CHECK_CALLED(QueryInterface_IBindStatusCallbackHolder);
2744
2745 CHECK_CALLED(QueryInterface_IServiceProvider);
2746
2747 hres = IBindCtx_GetObjectParam(bindctx, BSCBHolder, &unk);
2748 ok(hres == S_OK, "GetObjectParam failed: %08lx\n", hres);
2749
2750 hres = IUnknown_QueryInterface(unk, &IID_IBindStatusCallback, (void**)&clb);
2751 IUnknown_Release(unk);
2752 ok(hres == S_OK, "QueryInterface(IID_IBindStatusCallback) failed: %08lx\n", hres);
2753 ok(clb != (IBindStatusCallback*)&bsc, "bsc == clb\n");
2754
2755 if(!test_bscholder(clb))
2756 ret = FALSE;
2757
2758 IBindStatusCallback_Release(clb);
2759
2761 ok(hres == S_OK, "RevokeBindStatusCallback failed: %08lx\n", hres);
2762
2763 unk = (void*)0xdeadbeef;
2764 hres = IBindCtx_GetObjectParam(bindctx, BSCBHolder, &unk);
2765 ok(hres == E_FAIL, "GetObjectParam failed: %08lx\n", hres);
2766 ok(unk == NULL, "unk != NULL\n");
2767
2768 if(unk)
2769 IUnknown_Release(unk);
2770
2771 hres = RevokeBindStatusCallback(bindctx, (void*)0xdeadbeef);
2772 ok(hres == S_OK, "RevokeBindStatusCallback failed: %08lx\n", hres);
2773
2774 hres = RevokeBindStatusCallback(NULL, (void*)0xdeadbeef);
2775 ok(hres == E_INVALIDARG, "RevokeBindStatusCallback failed: %08lx\n", hres);
2776
2778 ok(hres == E_INVALIDARG, "RevokeBindStatusCallback failed: %08lx\n", hres);
2779
2780 SET_EXPECT(QueryInterface_IServiceProvider);
2781 prevbsc = (void*)0xdeadbeef;
2782 hres = RegisterBindStatusCallback(bindctx, (IBindStatusCallback*)&bsc, &prevbsc, 0);
2783 ok(hres == S_OK, "RegisterBindStatusCallback failed: %08lx\n", hres);
2784 ok(!prevbsc, "prevbsc=%p\n", prevbsc);
2785 CHECK_CALLED(QueryInterface_IServiceProvider);
2786
2787 hres = IBindCtx_GetObjectParam(bindctx, BSCBHolder, &unk);
2788 ok(hres == S_OK, "GetObjectParam failed: %08lx\n", hres);
2789
2790 hres = IUnknown_QueryInterface(unk, &IID_IBindStatusCallback, (void**)&prev_clb);
2791 IUnknown_Release(unk);
2792 ok(hres == S_OK, "QueryInterface(IID_IBindStatusCallback) failed: %08lx\n", hres);
2793 ok(prev_clb != (IBindStatusCallback*)&bsc, "bsc == clb\n");
2794
2795 SET_EXPECT(QueryInterface_IServiceProvider);
2796 prevbsc = (void*)0xdeadbeef;
2797 hres = RegisterBindStatusCallback(bindctx, (IBindStatusCallback*)&bsc2, &prevbsc, 0);
2798 ok(hres == S_OK, "RegisterBindStatusCallback failed: %08lx\n", hres);
2799 ok(prevbsc == (IBindStatusCallback*)&bsc, "prevbsc != bsc\n");
2800 CHECK_CALLED(QueryInterface_IServiceProvider);
2801
2802 hres = IBindCtx_GetObjectParam(bindctx, BSCBHolder, &unk);
2803 ok(hres == S_OK, "GetObjectParam failed: %08lx\n", hres);
2804
2805 hres = IUnknown_QueryInterface(unk, &IID_IBindStatusCallback, (void**)&clb);
2806 IUnknown_Release(unk);
2807 ok(hres == S_OK, "QueryInterface(IID_IBindStatusCallback) failed: %08lx\n", hres);
2808 ok(prev_clb == clb, "bsc != clb\n");
2809
2810 IBindStatusCallback_Release(clb);
2811 IBindStatusCallback_Release(prev_clb);
2812
2813 IBindCtx_Release(bindctx);
2814
2816 return ret;
2817}
2818
2819#define BINDTEST_EMULATE 0x0001
2820#define BINDTEST_TOOBJECT 0x0002
2821#define BINDTEST_FILEDWLAPI 0x0004
2822#define BINDTEST_HTTPRESPONSE 0x0008
2823#define BINDTEST_REDIRECT 0x0010
2824#define BINDTEST_USE_CACHE 0x0020
2825#define BINDTEST_NO_CALLBACK_READ 0x0040
2826#define BINDTEST_NO_CALLBACK 0x0080
2827#define BINDTEST_ABORT 0x0100
2828#define BINDTEST_INVALID_CN 0x0200
2829#define BINDTEST_ABORT_START 0x0400
2830#define BINDTEST_ABORT_PROGRESS 0x0800
2831#define BINDTEST_ASYNC_SWITCH 0x1000
2832#define BINDTEST_ALLOW_FINDINGRESOURCE 0x2000
2833
2835{
2836 const char *url_a = NULL;
2837
2845 mime_type[0] = 0;
2848 tymed = t;
2851
2852 switch(protocol) {
2853 case HTTP_TEST:
2854 if(post_test)
2855 url_a = "http://test.winehq.org/tests/post.php";
2856 else
2858 break;
2859 case ABOUT_TEST:
2860 url_a = "about:blank";
2861 break;
2862 case FILE_TEST:
2864 break;
2865 case MK_TEST:
2866 url_a = "mk:@MSITStore:test.chm::/blank.html";
2867 break;
2868 case ITS_TEST:
2869 url_a = "its:test.chm::/blank.html";
2870 break;
2871 case HTTPS_TEST:
2872 url_a = (flags & BINDTEST_INVALID_CN) ? "https://" WINEHQ_IP "/robots.txt" : "https://test.winehq.org/tests/hello.html";
2873 break;
2874 case FTP_TEST:
2875 url_a = "ftp://ftp.winehq.org/welcome%2emsg";
2876 break;
2877 default:
2878 url_a = "winetest:test";
2879 }
2880
2881 if(url_a)
2883
2888 test_abort = (flags & BINDTEST_ABORT) != 0;
2893 prot_state = 0;
2895
2896 if (winetest_debug > 1) trace("URL: %s\n", wine_dbgstr_w(current_url));
2897}
2898
2900{
2901 static const struct test_data
2902 {
2903 const WCHAR *l, *r, *expected;
2904 } data[] =
2905 {
2906 {L"https://test.winehq.org/", L"/tests/hello.html", L"https://test.winehq.org/tests/hello.html"},
2907 {L"url1", L"url2", L"url2"},
2908 {L"http://", L"tests.winehq.org", L"http:///tests.winehq.org"},
2909 {L"http://a/b/c/d;p?q#f", L"g", L"http://a/b/c/g"},
2910 {L"http://a/b/c/d;p?q#f", L"./g", L"http://a/b/c/g"},
2911 {L"http://a/b/c/d;p?q#f", L"g/", L"http://a/b/c/g/"},
2912 {L"http://a/b/c/d;p?q#f", L"/g", L"http://a/g"},
2913 {L"http://a/b/c/d;p?q#f", L"//g", L"http://g/"},
2914 {L"http://a/b/c/d;p?q#f", L"?y", L"http://a/b/c/d;p?y"},
2915 {L"http://a/b/c/d;p?q#f", L"g?y", L"http://a/b/c/g?y"},
2916 {L"http://a/b/c/d;p?q#f", L"g?y/./x", L"http://a/b/c/g?y/./x"},
2917 {L"http://a/b/c/d;p?q#f", L"#s", L"http://a/b/c/d;p?q#s"},
2918 {L"http://a/b/c/d;p?q#f", L"g#s", L"http://a/b/c/g#s"},
2919 {L"http://a/b/c/d;p?q#f", L"g#s/./x", L"http://a/b/c/g#s/./x"},
2920 {L"http://a/b/c/d;p?q#f", L"g?y#s", L"http://a/b/c/g?y#s"},
2921 {L"http://a/b/c/d;p?q#f", L";x", L"http://a/b/c/;x"},
2922 {L"http://a/b/c/d;p?q#f", L"g;x", L"http://a/b/c/g;x"},
2923 {L"http://a/b/c/d;p?q#f", L"g;x?y#s", L"http://a/b/c/g;x?y#s"},
2924 {L"http://a/b/c/d;p?q#f", L".", L"http://a/b/c/"},
2925 {L"http://a/b/c/d;p?q#f", L"./", L"http://a/b/c/"},
2926 {L"http://a/b/c/d;p?q#f", L"..", L"http://a/b/"},
2927 {L"http://a/b/c/d;p?q#f", L"../", L"http://a/b/"},
2928 {L"http://a/b/c/d;p?q#f", L"../g", L"http://a/b/g"},
2929 {L"http://a/b/c/d;p?q#f", L"../..", L"http://a/"},
2930 {L"http://a/b/c/d;p?q#f", L"../../", L"http://a/"},
2931 {L"http://a/b/c/d;p?q#f", L"../../g", L"http://a/g"},
2932 {L"http://a/b/c/d;p?q#f", L"../../../g", L"http://a/g"},
2933 {L"http://a/b/c/d;p?q#f", L"../../../../g", L"http://a/g"},
2934 {L"http://a/b/c/d;p?q#f", L"/./g", L"http://a/g"},
2935 {L"http://a/b/c/d;p?q#f", L"/../g", L"http://a/g"},
2936 {L"http://a/b/c/d;p?q#f", L"g.", L"http://a/b/c/g."},
2937 {L"http://a/b/c/d;p?q#f", L".g", L"http://a/b/c/.g"},
2938 {L"http://a/b/c/d;p?q#f", L"g..", L"http://a/b/c/g.."},
2939 {L"http://a/b/c/d;p?q#f", L"..g", L"http://a/b/c/..g"},
2940 {L"http://a/b/c/d;p?q#f", L"./../g", L"http://a/b/g"},
2941 {L"http://a/b/c/d;p?q#f", L"./g/.", L"http://a/b/c/g/"},
2942 {L"http://a/b/c/d;p?q#f", L"g/./h", L"http://a/b/c/g/h"},
2943 {L"http://a/b/c/d;p?q#f", L"g/../h", L"http://a/b/c/h"},
2944 {L"file://a/b/c/d;p?q#f", L"http:g", L"http:g"},
2945 {L"http://a/b/c/d;p?q#f", L"http://g/h", L"http://g/h"},
2946 };
2947 IMoniker *lmon, *rmon, *outmon, *filemon;
2948 HRESULT hres;
2949 LPOLESTR urlpath;
2950 CLSID clsid;
2951 int i;
2952 IBindCtx* bind;
2953
2954 CreateBindCtx(0, &bind);
2955 for(i = 0; i < ARRAY_SIZE( data ); i++){
2956 hres = CreateURLMoniker(NULL, data[i].l, &lmon);
2957 ok(hres == S_OK, "failed to create moniker: %08lx\n", hres);
2958 hres = CreateURLMoniker(NULL, data[i].r, &rmon);
2959 ok(hres == S_OK, "failed to create moniker: %08lx\n", hres);
2960
2961 hres = IMoniker_ComposeWith(lmon, rmon, FALSE, &outmon);
2962 ok(hres == S_OK,
2963 "ComposeWith failed: l: %s, r: %s, ret: %08lx\n", wine_dbgstr_w(data[i].l), wine_dbgstr_w(data[i].r), hres);
2964
2965 IMoniker_GetClassID(outmon, &clsid);
2966 ok(IsEqualCLSID(&clsid, &CLSID_StdURLMoniker),
2967 "ComposeWith error: expected URL CLSID, got %s\n", wine_dbgstr_guid(&clsid));
2968 IMoniker_GetDisplayName(outmon, bind, NULL, &urlpath);
2969 ok(lstrcmpW(data[i].expected, urlpath) == S_OK,
2970 "ComposeWith expected %s got %s\n", wine_dbgstr_w(data[i].expected), wine_dbgstr_w(urlpath));
2971
2972 IMoniker_Release(lmon);
2973 IMoniker_Release(rmon);
2974 IMoniker_Release(outmon);
2975 CoTaskMemFree(urlpath);
2976 }
2977 IBindCtx_Release(bind);
2978
2979 hres = CreateURLMoniker(NULL, data[0].l, &lmon);
2980 ok(hres == S_OK, "failed to create moniker: %08lx\n", hres);
2981 hres = CreateURLMoniker(NULL, data[0].r, &rmon);
2982 ok(hres == S_OK, "failed to create moniker: %08lx\n", hres);
2983 hres = CreateFileMoniker(L"/a/b", &filemon);
2984 ok(hres == S_OK, "failed to create moniker: %08lx\n", hres);
2985
2986 hres = IMoniker_ComposeWith(lmon, NULL, FALSE, &outmon);
2987 ok(hres == E_INVALIDARG, "ComposeWith error: %08lx\n", hres);
2988
2989 hres = IMoniker_ComposeWith(lmon, rmon, FALSE, NULL);
2990 ok(hres == E_INVALIDARG, "ComposeWith error: %08lx\n", hres);
2991
2992 hres = IMoniker_ComposeWith(lmon, filemon, TRUE, &outmon);
2993 ok(hres == MK_E_NEEDGENERIC, "ComposeWith error: %08lx\n", hres);
2994 hres = IMoniker_ComposeWith(lmon, filemon, FALSE, &outmon);
2995 ok(hres == S_OK, "ComposeWith error: %08lx\n", hres);
2996
2997 IMoniker_GetClassID(outmon, &clsid);
2998 ok(IsEqualCLSID(&clsid, &CLSID_CompositeMoniker),
2999 "ComposeWith: got CLSID %s, not generic\n", wine_dbgstr_guid(&clsid));
3000
3001 IMoniker_Release(lmon);
3002 IMoniker_Release(rmon);
3003 IMoniker_Release(filemon);
3004 IMoniker_Release(outmon);
3005}
3006
3008{
3009 IMoniker *mon;
3010 HRESULT hres;
3011 LPOLESTR display_name;
3012 IBindCtx *bctx = NULL;
3013 MSG msg;
3014 IBindStatusCallback *previousclb;
3015 IUnknown *unk = (IUnknown*)0x00ff00ff;
3016 BOOL allow_finding_resource;
3017 IBinding *bind;
3018
3020 allow_finding_resource = (flags & BINDTEST_ALLOW_FINDINGRESOURCE) != 0;
3021
3022 if(no_callback) {
3023 hres = CreateBindCtx(0, &bctx);
3024 ok(hres == S_OK, "CreateBindCtx failed: %08lx\n", hres);
3025 }else {
3026 SET_EXPECT(QueryInterface_IServiceProvider);
3028 ok(hres == S_OK, "CreateAsyncBindCtx failed: %08lx\n\n", hres);
3029 CHECK_CALLED(QueryInterface_IServiceProvider);
3030 if(FAILED(hres))
3031 return;
3032
3033 SET_EXPECT(QueryInterface_IServiceProvider);
3034 hres = RegisterBindStatusCallback(bctx, (IBindStatusCallback*)&bsc, &previousclb, 0);
3035 ok(hres == S_OK, "RegisterBindStatusCallback failed: %08lx\n", hres);
3036 ok(previousclb == (IBindStatusCallback*)&bsc, "previousclb(%p) != sclb(%p)\n", previousclb, &bsc);
3037 CHECK_CALLED(QueryInterface_IServiceProvider);
3038 if(previousclb)
3039 IBindStatusCallback_Release(previousclb);
3040 }
3041
3043 ok(hres == S_OK, "failed to create moniker: %08lx\n", hres);
3044 if(FAILED(hres))
3045 return;
3046
3047 if(protocol == FTP_TEST)
3048 {
3049 /* FTP urls don't have any escape characters so convert the url to what is expected */
3050 DWORD size = 0;
3052 }
3053
3054 hres = IMoniker_QueryInterface(mon, &IID_IBinding, (void**)&bind);
3055 ok(hres == E_NOINTERFACE, "IMoniker should not have IBinding interface\n");
3056 if(SUCCEEDED(hres))
3057 IBinding_Release(bind);
3058
3059 hres = IMoniker_GetDisplayName(mon, bctx, NULL, &display_name);
3060 ok(hres == S_OK, "GetDisplayName failed %08lx\n", hres);
3061 ok(!lstrcmpW(display_name, current_url), "GetDisplayName got wrong name %s, expected %s\n",
3062 wine_dbgstr_w(display_name), wine_dbgstr_w(current_url));
3063 CoTaskMemFree(display_name);
3064
3065 if(tymed == TYMED_FILE && (test_protocol == ABOUT_TEST || test_protocol == ITS_TEST))
3071 else
3073 }
3074
3075
3077 SET_EXPECT(OnStopBinding);
3078 if(!no_callback) {
3079 SET_EXPECT(QueryInterface_IBindStatusCallbackEx);
3080 SET_EXPECT(GetBindInfo);
3081 SET_EXPECT(QueryInterface_IInternetProtocol);
3082 if(!emulate_protocol)
3083 SET_EXPECT(QueryService_IInternetProtocol);
3084 SET_EXPECT(OnStartBinding);
3085 }
3086 if(emulate_protocol) {
3092 SET_EXPECT(Terminate);
3093 if(tymed != TYMED_FILE || (test_protocol != ABOUT_TEST && test_protocol != ITS_TEST))
3095 }else {
3097 SET_EXPECT(QueryService_IInternetBindInfo);
3098 if(!abort_start)
3099 SET_EXPECT(QueryInterface_IHttpNegotiate);
3100 SET_EXPECT(QueryInterface_IWindowForBindingUI);
3101 SET_EXPECT(QueryService_IWindowForBindingUI);
3102 SET_EXPECT(GetWindow_IWindowForBindingUI);
3103 if(!abort_start) {
3104 SET_EXPECT(BeginningTransaction);
3105 SET_EXPECT(QueryInterface_IHttpNegotiate2);
3106 SET_EXPECT(GetRootSecurityId);
3107 if(http_is_first || allow_finding_resource)
3108 SET_EXPECT(OnProgress_FINDINGRESOURCE);
3109 SET_EXPECT(OnProgress_CONNECTING);
3110 }
3112 SET_EXPECT(QueryInterface_IHttpSecurity);
3113 SET_EXPECT(QueryService_IHttpSecurity);
3114 SET_EXPECT(OnSecurityProblem);
3116 SET_EXPECT(GetWindow_IHttpSecurity);
3117 }
3118 }
3119 if(!no_callback) {
3122 SET_EXPECT(OnProgress_SENDINGREQUEST);
3124 SET_EXPECT(QueryInterface_IHttpNegotiate);
3125 SET_EXPECT(OnResponse);
3126 }
3127 if(!abort_start) {
3128 SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
3129 SET_EXPECT(OnProgress_BEGINDOWNLOADDATA);
3130 }
3132 SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE);
3134 SET_EXPECT(OnProgress_DOWNLOADINGDATA);
3135 if(!abort_start)
3136 SET_EXPECT(OnProgress_ENDDOWNLOADDATA);
3137 if((tymed != TYMED_FILE || test_protocol != ABOUT_TEST) && !abort_start)
3138 SET_EXPECT(OnDataAvailable);
3139 SET_EXPECT(OnStopBinding);
3140 }
3141 }
3142
3143 hres = IMoniker_BindToStorage(mon, bctx, NULL, tymed == TYMED_ISTREAM ? &IID_IStream : &IID_IUnknown, (void**)&unk);
3146 {
3147 skip("Network unreachable, skipping tests\n");
3148 return;
3149 }
3150
3152 ok(hres == E_FAIL, "Got %08lx\n", hres);
3153 CHECK_CALLED(OnStopBinding);
3154 } else if(abort_start)
3155 ok(hres == abort_hres, "IMoniker_BindToStorage failed: %08lx, expected %08lx\n", hres, abort_hres);
3156 else if(abort_progress)
3157 ok(hres == MK_S_ASYNCHRONOUS, "IMoniker_BindToStorage failed: %08lx\n", hres);
3158 else if(no_callback) {
3160 ok( WaitForSingleObject(complete_event2, 90000) == WAIT_OBJECT_0, "wait timed out\n" );
3161 ok(hres == S_OK, "IMoniker_BindToStorage failed: %08lx\n", hres);
3162 ok(unk != NULL, "unk == NULL\n");
3163 }else if(!(bindf & BINDF_ASYNCHRONOUS) && tymed == TYMED_FILE) {
3164 ok(hres == S_OK, "IMoniker_BindToStorage failed: %08lx\n", hres);
3165 ok(unk == NULL, "unk != NULL\n");
3166 }else if(((bindf & BINDF_ASYNCHRONOUS) && !data_available)
3167 || (tymed == TYMED_FILE && test_protocol == FILE_TEST)) {
3168 ok(hres == MK_S_ASYNCHRONOUS, "IMoniker_BindToStorage failed: %08lx\n", hres);
3169 ok(unk == NULL, "istr should be NULL\n");
3170 }else if(tymed == TYMED_FILE && test_protocol == ABOUT_TEST) {
3172 "IMoniker_BindToStorage failed: %08lx, expected INET_E_DATA_NOT_AVAILABLE\n", hres);
3173 ok(unk == NULL, "istr should be NULL\n");
3174 }else if((flags & BINDTEST_INVALID_CN) && binding_hres != S_OK) {
3175 ok(hres == binding_hres, "Got %08lx\n", hres);
3176 ok(unk == NULL, "Got %p\n", unk);
3178 ok(hres == S_OK, "IMoniker_BindToStorage failed: %08lx\n", hres);
3179 ok(unk != NULL, "unk == NULL\n");
3180 if(unk == NULL) {
3181 ok(0, "Expected security problem to be ignored.\n");
3184 }
3185 }else {
3186 ok(hres == S_OK, "IMoniker_BindToStorage failed: %08lx\n", hres);
3187 ok(unk != NULL, "unk == NULL\n");
3188 }
3189 if(unk && callback_read && !no_callback) {
3190 IUnknown_Release(unk);
3191 unk = NULL;
3192 }
3193
3195 return;
3196
3197 if((bindf & BINDF_ASYNCHRONOUS) && !no_callback) {
3198 while(!stopped_binding && GetMessageA(&msg,NULL,0,0)) {
3201 }
3202 }
3203
3204 if(async_switch) {
3205 CHECK_CALLED(OnProgress_SENDINGREQUEST);
3206 CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE);
3207 CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA);
3209 CHECK_CALLED(OnStopBinding);
3210 }
3211 if(!no_callback) {
3212 CLEAR_CALLED(QueryInterface_IBindStatusCallbackEx); /* IE 8 */
3213 CHECK_CALLED(GetBindInfo);
3215 CHECK_CALLED(QueryInterface_IInternetProtocol);
3216 if(!emulate_protocol) {
3218 CHECK_CALLED(QueryService_IInternetProtocol);
3219 }
3220 CHECK_CALLED(OnStartBinding);
3221 }
3222 if(emulate_protocol) {
3224 CLEAR_CALLED(SetPriority); /* Not called by IE11 */
3228 if(tymed == TYMED_FILE)
3230 CHECK_CALLED(Terminate);
3231 }
3232 if(tymed != TYMED_FILE || (test_protocol != ABOUT_TEST && test_protocol != ITS_TEST))
3234 }else {
3236 CLEAR_CALLED(QueryService_IInternetBindInfo);
3237 if(!abort_start)
3238 CHECK_CALLED(QueryInterface_IHttpNegotiate);
3239 CLEAR_CALLED(QueryInterface_IWindowForBindingUI);
3240 CLEAR_CALLED(QueryService_IWindowForBindingUI);
3241 CLEAR_CALLED(GetWindow_IWindowForBindingUI);
3242 if(!abort_start)
3243 CHECK_CALLED(BeginningTransaction);
3245 {
3246 CHECK_CALLED(QueryInterface_IHttpNegotiate2);
3247 CHECK_CALLED(GetRootSecurityId);
3248 }
3249 if(http_is_first) {
3250 if (! proxy_active())
3251 {
3252 CHECK_CALLED(OnProgress_FINDINGRESOURCE);
3253 CHECK_CALLED(OnProgress_CONNECTING);
3254 }
3255 else
3256 {
3257 CLEAR_CALLED(OnProgress_FINDINGRESOURCE);
3258 CLEAR_CALLED(OnProgress_CONNECTING);
3259 }
3260 }else if(!abort_start) {
3261 if(allow_finding_resource)
3262 CLEAR_CALLED(OnProgress_FINDINGRESOURCE);
3263 /* IE7 does call this */
3264 CLEAR_CALLED(OnProgress_CONNECTING);
3265 }
3267 CHECK_CALLED(QueryInterface_IHttpSecurity);
3268 CHECK_CALLED(QueryService_IHttpSecurity);
3269 CHECK_CALLED(OnSecurityProblem);
3270 }else {
3271 CHECK_NOT_CALLED(QueryInterface_IHttpSecurity);
3272 CHECK_NOT_CALLED(QueryService_IHttpSecurity);
3273 CHECK_NOT_CALLED(OnSecurityProblem);
3274 }
3275 }
3276 if(!no_callback) {
3279 CLEAR_CALLED(OnProgress_SENDINGREQUEST);
3280 else if(!abort_start)
3281 CHECK_CALLED(OnProgress_SENDINGREQUEST);
3282 } else if(test_protocol == FTP_TEST)
3283 todo_wine CHECK_CALLED(OnProgress_SENDINGREQUEST);
3285 CLEAR_CALLED(QueryInterface_IHttpNegotiate);
3286 if((!(flags & BINDTEST_INVALID_CN) || (binding_hres == S_OK)) && !abort_start) {
3287 CHECK_CALLED(OnResponse);
3288 }
3289 }
3291 CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE);
3292 CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA);
3293 CHECK_CALLED(OnProgress_ENDDOWNLOADDATA);
3294 }
3296 CHECK_CALLED(OnProgress_CACHEFILENAMEAVAILABLE);
3298 CLEAR_CALLED(OnProgress_DOWNLOADINGDATA);
3299 if((flags & BINDTEST_INVALID_CN)) {
3300 if(binding_hres == S_OK)
3301 CHECK_CALLED(OnDataAvailable);
3302 else
3303 CHECK_NOT_CALLED(OnDataAvailable);
3304 }else if((tymed != TYMED_FILE || test_protocol != ABOUT_TEST) && !abort_start)
3305 CHECK_CALLED(OnDataAvailable);
3306 CHECK_CALLED(OnStopBinding);
3307 }
3308 }
3309
3310 ok(IMoniker_Release(mon) == 0, "mon should be destroyed here\n");
3311 if(bctx)
3312 ok(IBindCtx_Release(bctx) == 0, "bctx should be destroyed here\n");
3313
3316
3319
3320 if(unk) {
3321 BYTE buf[512];
3322 DWORD read;
3323 IStream *stream;
3324
3325 hres = IUnknown_QueryInterface(unk, &IID_IStream, (void**)&stream);
3326 ok(hres == S_OK, "Could not get IStream iface: %08lx\n", hres);
3327 IUnknown_Release(unk);
3328
3329 do {
3330 read = 0xdeadbeef;
3331 hres = IStream_Read(stream, buf, sizeof(buf), &read);
3332 ok(read != 0xdeadbeef, "read = 0xdeadbeef\n");
3334 ok(buf[0] == (use_cache_file && !(bindf&BINDF_ASYNCHRONOUS) ? 'X' : '?'), "buf[0] = '%c'\n", buf[0]);
3335 }while(hres == S_OK);
3336 ok(hres == S_FALSE, "IStream_Read returned %08lx\n", hres);
3337 ok(!read, "read = %ld\n", read);
3338
3339 IStream_Release(stream);
3340 }
3341}
3342
3344{
3345 IMoniker *mon;
3346 HRESULT hres;
3347 LPOLESTR display_name;
3348 IBindCtx *bctx;
3349 DWORD regid;
3350 MSG msg;
3351 IUnknown *unk = (IUnknown*)0x00ff00ff;
3352 IBinding *bind;
3353
3355 binding_hres = exhres;
3356
3358 CoRegisterClassObject(&CLSID_HTMLDocument, (IUnknown *)&mime_cf,
3359 CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &regid);
3360
3361 SET_EXPECT(QueryInterface_IServiceProvider);
3363 ok(hres == S_OK, "CreateAsyncBindCtx failed: %08lx\n\n", hres);
3364 CHECK_CALLED(QueryInterface_IServiceProvider);
3365 if(FAILED(hres))
3366 return;
3367
3369 ok(hres == S_OK, "failed to create moniker: %08lx\n", hres);
3370 if(FAILED(hres)) {
3371 IBindCtx_Release(bctx);
3372 return;
3373 }
3374
3375 hres = IMoniker_QueryInterface(mon, &IID_IBinding, (void**)&bind);
3376 ok(hres == E_NOINTERFACE, "IMoniker should not have IBinding interface\n");
3377 if(SUCCEEDED(hres))
3378 IBinding_Release(bind);
3379
3380 hres = IMoniker_GetDisplayName(mon, bctx, NULL, &display_name);
3381 ok(hres == S_OK, "GetDisplayName failed %08lx\n", hres);
3382 ok(!lstrcmpW(display_name, current_url), "GetDisplayName got wrong name\n");
3383 CoTaskMemFree(display_name);
3384
3385 SET_EXPECT(QueryInterface_IBindStatusCallbackEx);
3386 SET_EXPECT(Obj_GetBindInfo);
3387 SET_EXPECT(QueryInterface_IInternetProtocol);
3388 if(!emulate_protocol)
3389 SET_EXPECT(QueryService_IInternetProtocol);
3390 SET_EXPECT(Obj_OnStartBinding);
3391 if(emulate_protocol) {
3396 SET_EXPECT(Terminate);
3398 SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
3400 }else {
3402 SET_EXPECT(QueryInterface_IHttpNegotiate);
3403 SET_EXPECT(BeginningTransaction);
3404 SET_EXPECT(QueryInterface_IHttpNegotiate2);
3405 SET_EXPECT(GetRootSecurityId);
3406 if(http_is_first)
3407 SET_EXPECT(Obj_OnProgress_FINDINGRESOURCE);
3408 SET_EXPECT(Obj_OnProgress_CONNECTING);
3409 SET_EXPECT(QueryInterface_IWindowForBindingUI);
3410 SET_EXPECT(QueryService_IWindowForBindingUI);
3411 SET_EXPECT(GetWindow_IWindowForBindingUI);
3412 }
3414 SET_EXPECT(Obj_OnProgress_SENDINGREQUEST);
3416 SET_EXPECT(QueryInterface_IHttpNegotiate);
3417 SET_EXPECT(OnResponse);
3418 }
3419 SET_EXPECT(Obj_OnProgress_MIMETYPEAVAILABLE);
3420 SET_EXPECT(Obj_OnProgress_BEGINDOWNLOADDATA);
3422 SET_EXPECT(Obj_OnProgress_CACHEFILENAMEAVAILABLE);
3424 SET_EXPECT(OnProgress_DOWNLOADINGDATA);
3425 SET_EXPECT(Obj_OnProgress_ENDDOWNLOADDATA);
3426 if(SUCCEEDED(hres))
3427 SET_EXPECT(Obj_OnProgress_CLASSIDAVAILABLE);
3428 SET_EXPECT(Obj_OnProgress_BEGINSYNCOPERATION);
3429 if(exhres == REGDB_E_CLASSNOTREG) {
3430 SET_EXPECT(QueryInterface_IWindowForBindingUI);
3431 SET_EXPECT(QueryService_IWindowForBindingUI);
3432 SET_EXPECT(GetWindow_ICodeInstall);
3433 }
3434 SET_EXPECT(Obj_OnProgress_ENDSYNCOPERATION);
3435 if(SUCCEEDED(hres))
3436 SET_EXPECT(OnObjectAvailable);
3437 SET_EXPECT(Obj_OnStopBinding);
3438 }
3439
3440 hres = IMoniker_BindToObject(mon, bctx, NULL, &IID_IUnknown, (void**)&unk);
3441
3444 {
3445 skip( "Network unreachable, skipping tests\n" );
3446 return;
3447 }
3448
3449 if(FAILED(exhres)) {
3450 ok(hres == exhres, "BindToObject failed: %08lx, expected %08lx\n", hres, exhres);
3451 ok(!unk, "unk = %p, expected NULL\n", unk);
3452 }else if(bindf & BINDF_ASYNCHRONOUS) {
3453 ok(hres == MK_S_ASYNCHRONOUS, "IMoniker_BindToObject failed: %08lx\n", hres);
3454 ok(unk == NULL, "istr should be NULL\n");
3455 }else {
3456 ok(hres == S_OK, "IMoniker_BindToStorage failed: %08lx\n", hres);
3457 ok(unk != NULL, "unk == NULL\n");
3459 ok(unk == (IUnknown*)&PersistMoniker, "unk != PersistMoniker\n");
3460 }
3461 if(unk)
3462 IUnknown_Release(unk);
3463
3464 while((bindf & BINDF_ASYNCHRONOUS) &&
3468 }
3469
3470 CLEAR_CALLED(QueryInterface_IBindStatusCallbackEx);
3471 CHECK_CALLED(Obj_GetBindInfo);
3472 CHECK_CALLED(QueryInterface_IInternetProtocol);
3473 if(!emulate_protocol)
3474 CHECK_CALLED(QueryService_IInternetProtocol);
3475 CHECK_CALLED(Obj_OnStartBinding);
3476 if(emulate_protocol) {
3478 CLEAR_CALLED(SetPriority); /* Not called by IE11 */
3481 CHECK_CALLED(Terminate);
3483 CLEAR_CALLED(OnProgress_MIMETYPEAVAILABLE); /* not called in IE7 */
3485 }else {
3487 CHECK_CALLED(QueryInterface_IHttpNegotiate);
3488 CHECK_CALLED(BeginningTransaction);
3490 {
3491 CHECK_CALLED(QueryInterface_IHttpNegotiate2);
3492 CHECK_CALLED(GetRootSecurityId);
3493 }
3494 if(http_is_first) {
3495 CHECK_CALLED(Obj_OnProgress_FINDINGRESOURCE);
3496 CHECK_CALLED(Obj_OnProgress_CONNECTING);
3497 }else {
3498 /* IE7 does call this */
3499 CLEAR_CALLED(Obj_OnProgress_CONNECTING);
3500 }
3501 CLEAR_CALLED(QueryInterface_IWindowForBindingUI);
3502 CLEAR_CALLED(QueryService_IWindowForBindingUI);
3503 CLEAR_CALLED(GetWindow_IWindowForBindingUI);
3504 }
3506 if(post_test)
3507 CLEAR_CALLED(Obj_OnProgress_SENDINGREQUEST);
3508 else
3509 CHECK_CALLED(Obj_OnProgress_SENDINGREQUEST);
3510 }
3512 CLEAR_CALLED(QueryInterface_IHttpNegotiate);
3513 CHECK_CALLED(OnResponse);
3514 }
3515 CHECK_CALLED(Obj_OnProgress_MIMETYPEAVAILABLE);
3516 CHECK_CALLED(Obj_OnProgress_BEGINDOWNLOADDATA);
3518 CHECK_CALLED(Obj_OnProgress_CACHEFILENAMEAVAILABLE);
3520 CLEAR_CALLED(OnProgress_DOWNLOADINGDATA);
3521 CLEAR_CALLED(Obj_OnProgress_ENDDOWNLOADDATA);
3522 if(SUCCEEDED(hres))
3523 CHECK_CALLED(Obj_OnProgress_CLASSIDAVAILABLE);
3524 CHECK_CALLED(Obj_OnProgress_BEGINSYNCOPERATION);
3525 if(exhres == REGDB_E_CLASSNOTREG) {
3526 todo_wine CHECK_CALLED(QueryInterface_IWindowForBindingUI);
3527 todo_wine CHECK_CALLED(QueryService_IWindowForBindingUI);
3528 todo_wine CHECK_CALLED(GetWindow_ICodeInstall);
3529 }
3530 CHECK_CALLED(Obj_OnProgress_ENDSYNCOPERATION);
3531 if(SUCCEEDED(hres))
3532 CHECK_CALLED(OnObjectAvailable);
3533 CHECK_CALLED(Obj_OnStopBinding);
3534 }
3535
3536 ok(IMoniker_Release(mon) == 0, "mon should be destroyed here\n");
3537 IBindCtx_Release(bctx);
3538
3541
3544}
3545
3546static void test_URLDownloadToFile(DWORD prot, BOOL emul)
3547{
3548 BOOL res;
3549 HRESULT hres;
3550
3551 init_bind_test(prot, BINDTEST_FILEDWLAPI | (emul ? BINDTEST_EMULATE : 0), TYMED_FILE);
3552
3553 SET_EXPECT(GetBindInfo);
3554 SET_EXPECT(QueryInterface_IInternetProtocol);
3555 SET_EXPECT(QueryInterface_IServiceProvider);
3556 if(!emulate_protocol)
3557 SET_EXPECT(QueryService_IInternetProtocol);
3558 SET_EXPECT(OnStartBinding);
3559 if(emulate_protocol) {
3564 }else {
3566 SET_EXPECT(QueryInterface_IHttpNegotiate);
3567 SET_EXPECT(BeginningTransaction);
3568 SET_EXPECT(QueryInterface_IHttpNegotiate2);
3569 SET_EXPECT(GetRootSecurityId);
3570 SET_EXPECT(QueryInterface_IWindowForBindingUI);
3571 SET_EXPECT(OnProgress_CONNECTING);
3572 }
3574 SET_EXPECT(OnProgress_SENDINGREQUEST);
3576 SET_EXPECT(QueryInterface_IHttpNegotiate);
3577 SET_EXPECT(OnResponse);
3578 }
3579 SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
3580 SET_EXPECT(OnProgress_BEGINDOWNLOADDATA);
3582 SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE);
3584 SET_EXPECT(OnProgress_DOWNLOADINGDATA);
3585 SET_EXPECT(OnProgress_ENDDOWNLOADDATA);
3586 SET_EXPECT(OnStopBinding);
3587 }
3588
3590 ok(hres == S_OK, "URLDownloadToFile failed: %08lx\n", hres);
3591
3592 CHECK_CALLED(GetBindInfo);
3593 CHECK_CALLED(QueryInterface_IInternetProtocol);
3594 if(!emulate_protocol) {
3595 CHECK_CALLED(QueryInterface_IServiceProvider);
3596 CHECK_CALLED(QueryService_IInternetProtocol);
3597 }else {
3598 CLEAR_CALLED(QueryInterface_IServiceProvider);
3599 }
3600 CHECK_CALLED(OnStartBinding);
3601 if(emulate_protocol) {
3603 CLEAR_CALLED(SetPriority); /* Not called by IE11 */
3606 }else {
3608 CHECK_CALLED(QueryInterface_IHttpNegotiate);
3609 CHECK_CALLED(BeginningTransaction);
3611 {
3612 CHECK_CALLED(QueryInterface_IHttpNegotiate2);
3613 CHECK_CALLED(GetRootSecurityId);
3614 }
3615 CLEAR_CALLED(QueryInterface_IWindowForBindingUI);
3616 CLEAR_CALLED(OnProgress_CONNECTING);
3617 }
3619 CHECK_CALLED(OnProgress_SENDINGREQUEST);
3621 CLEAR_CALLED(OnProgress_SENDINGREQUEST); /* not called by IE7 */
3623 CLEAR_CALLED(QueryInterface_IHttpNegotiate);
3624 CHECK_CALLED(OnResponse);
3625 }
3626 CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE);
3627 CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA);
3629 CHECK_CALLED(OnProgress_CACHEFILENAMEAVAILABLE);
3631 CLEAR_CALLED(OnProgress_DOWNLOADINGDATA);
3632 CHECK_CALLED(OnProgress_ENDDOWNLOADDATA);
3633 CHECK_CALLED(OnStopBinding);
3634 }
3635
3637 ok(res, "DeleteFile failed: %lu\n", GetLastError());
3638
3639 if(prot != FILE_TEST || emul)
3640 return;
3641
3643 ok(hres == S_OK, "URLDownloadToFile failed: %08lx\n", hres);
3644
3646 ok(res, "DeleteFile failed: %lu\n", GetLastError());
3647}
3648
3650{
3651 HRESULT hres;
3652
3654
3655 SET_EXPECT(GetBindInfo);
3656 SET_EXPECT(QueryInterface_IInternetProtocol);
3657 SET_EXPECT(QueryInterface_IServiceProvider);
3658 SET_EXPECT(QueryService_IInternetProtocol);
3659 SET_EXPECT(OnStartBinding);
3660 SET_EXPECT(QueryInterface_IHttpNegotiate);
3661 SET_EXPECT(QueryInterface_IHttpNegotiate2);
3662 SET_EXPECT(BeginningTransaction);
3663 SET_EXPECT(GetRootSecurityId);
3664 SET_EXPECT(QueryInterface_IWindowForBindingUI);
3665 SET_EXPECT(OnProgress_CONNECTING);
3666 SET_EXPECT(OnProgress_SENDINGREQUEST);
3667 SET_EXPECT(OnStopBinding);
3668
3670 ok(hres == E_ABORT, "URLDownloadToFile failed: %08lx, expected E_ABORT\n", hres);
3671
3672 CHECK_CALLED(GetBindInfo);
3673 CHECK_CALLED(QueryInterface_IInternetProtocol);
3674 CHECK_CALLED(QueryInterface_IServiceProvider);
3675 CHECK_CALLED(QueryService_IInternetProtocol);
3676 CHECK_CALLED(OnStartBinding);
3677 CHECK_CALLED(QueryInterface_IHttpNegotiate);
3678 CHECK_CALLED(QueryInterface_IHttpNegotiate2);
3679 CHECK_CALLED(BeginningTransaction);
3680 CHECK_CALLED(GetRootSecurityId);
3681 CLEAR_CALLED(QueryInterface_IWindowForBindingUI);
3682 CHECK_CALLED(OnProgress_SENDINGREQUEST);
3683 CLEAR_CALLED(OnProgress_CONNECTING);
3684 CHECK_CALLED(OnStopBinding);
3685
3687
3688 SET_EXPECT(GetBindInfo);
3689 SET_EXPECT(QueryInterface_IInternetProtocol);
3690 SET_EXPECT(QueryInterface_IServiceProvider);
3691 SET_EXPECT(QueryService_IInternetProtocol);
3692 SET_EXPECT(OnStartBinding);
3693 SET_EXPECT(OnStopBinding);
3694
3697 ok(hres == E_ABORT, "URLDownloadToFile failed: %08lx, expected E_ABORT\n", hres);
3698
3699 CHECK_CALLED(GetBindInfo);
3700 todo_wine CHECK_CALLED(QueryInterface_IInternetProtocol);
3701 todo_wine CHECK_CALLED(QueryInterface_IServiceProvider);
3702 todo_wine CHECK_CALLED(QueryService_IInternetProtocol);
3703 CHECK_CALLED(OnStartBinding);
3704 CHECK_CALLED(OnStopBinding);
3705
3707
3708 SET_EXPECT(GetBindInfo);
3709 SET_EXPECT(QueryInterface_IInternetProtocol);
3710 SET_EXPECT(QueryInterface_IServiceProvider);
3711 SET_EXPECT(QueryService_IInternetProtocol);
3712 SET_EXPECT(OnStartBinding);
3713 SET_EXPECT(QueryInterface_IHttpNegotiate);
3714 SET_EXPECT(QueryInterface_IHttpNegotiate2);
3715 SET_EXPECT(BeginningTransaction);
3716 SET_EXPECT(GetRootSecurityId);
3717 SET_EXPECT(QueryInterface_IWindowForBindingUI);
3718 SET_EXPECT(OnResponse);
3719 SET_EXPECT(OnProgress_CONNECTING);
3720 SET_EXPECT(OnProgress_SENDINGREQUEST);
3721 SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
3722 SET_EXPECT(OnProgress_BEGINDOWNLOADDATA);
3723 SET_EXPECT(OnProgress_DOWNLOADINGDATA);
3724 SET_EXPECT(OnProgress_ENDDOWNLOADDATA);
3725 SET_EXPECT(OnStopBinding);
3726
3727 /* URLDownloadToFile doesn't abort if E_NOTIMPL is returned from the
3728 * IBindStatusCallback's OnStartBinding function.
3729 */
3732 ok(hres == S_OK, "URLDownloadToFile failed: %08lx\n", hres);
3733
3734 CHECK_CALLED(GetBindInfo);
3735 CHECK_CALLED(QueryInterface_IInternetProtocol);
3736 CHECK_CALLED(QueryInterface_IServiceProvider);
3737 CHECK_CALLED(QueryService_IInternetProtocol);
3738 CHECK_CALLED(OnStartBinding);
3739 CHECK_CALLED(QueryInterface_IHttpNegotiate);
3740 CHECK_CALLED(QueryInterface_IHttpNegotiate2);
3741 CHECK_CALLED(BeginningTransaction);
3742 CHECK_CALLED(GetRootSecurityId);
3743 CLEAR_CALLED(QueryInterface_IWindowForBindingUI);
3744 CHECK_CALLED(OnResponse);
3745 CLEAR_CALLED(OnProgress_CONNECTING);
3746 CHECK_CALLED(OnProgress_SENDINGREQUEST);
3747 CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE);
3748 CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA);
3749 CLEAR_CALLED(OnProgress_DOWNLOADINGDATA);
3750 CHECK_CALLED(OnProgress_ENDDOWNLOADDATA);
3751 CHECK_CALLED(OnStopBinding);
3752
3754}
3755
3756static void set_file_url(char *path)
3757{
3758 CHAR file_urlA[INTERNET_MAX_URL_LENGTH];
3759
3760 lstrcpyA(file_urlA, "file://");
3761 lstrcatA(file_urlA, path);
3763}
3764
3765static void create_file(const char *file_name, const char *content)
3766{
3767 HANDLE file;
3768 DWORD size;
3770
3773 ok(file != INVALID_HANDLE_VALUE, "CreateFile failed: %lu\n", GetLastError());
3775 return;
3776
3777 if(test_file)
3782
3784 lstrcatA(path, "\\");
3787}
3788
3789static void create_html_file(void)
3790{
3791 create_file(wszIndexHtmlA, "<HTML></HTML>");
3792}
3793
3794static void create_cache_file(void)
3795{
3796 char buf[6500], curdir[MAX_PATH];
3797 HANDLE file;
3798 DWORD size;
3799
3802 ok(file != INVALID_HANDLE_VALUE, "CreateFile failed\n");
3804 return;
3805
3806 memset(buf, 'X', sizeof(buf));
3807 WriteFile(file, buf, sizeof(buf), &size, NULL);
3809
3810 memset(curdir, 0, sizeof(curdir));
3812 lstrcatA(curdir, "\\");
3813 lstrcatA(curdir, test_txtA);
3814
3816}
3817
3818static void test_ReportResult(HRESULT exhres)
3819{
3820 IMoniker *mon = NULL;
3821 IBindCtx *bctx = NULL;
3822 IUnknown *unk = (void*)0xdeadbeef;
3823 HRESULT hres;
3824
3826 binding_hres = exhres;
3827
3829 ok(hres == S_OK, "CreateURLMoniker failed: %08lx\n", hres);
3830
3831 SET_EXPECT(QueryInterface_IServiceProvider);
3833 ok(hres == S_OK, "CreateAsyncBindCtx failed: %08lx\n\n", hres);
3834 CHECK_CALLED(QueryInterface_IServiceProvider);
3835
3836 SET_EXPECT(QueryInterface_IBindStatusCallbackEx);
3837 SET_EXPECT(GetBindInfo);
3838 SET_EXPECT(QueryInterface_IInternetProtocol);
3839 SET_EXPECT(OnStartBinding);
3843
3844 hres = IMoniker_BindToStorage(mon, bctx, NULL, &IID_IStream, (void**)&unk);
3845 if(SUCCEEDED(exhres))
3846 ok(hres == S_OK || hres == MK_S_ASYNCHRONOUS, "BindToStorage failed: %08lx\n", hres);
3847 else
3848 ok(hres == exhres || hres == MK_S_ASYNCHRONOUS,
3849 "BindToStorage failed: %08lx, expected %08lx or MK_S_ASYNCHRONOUS\n", hres, exhres);
3850
3851 CLEAR_CALLED(QueryInterface_IBindStatusCallbackEx); /* IE 8 */
3852 CHECK_CALLED(GetBindInfo);
3853 CHECK_CALLED(QueryInterface_IInternetProtocol);
3854 CHECK_CALLED(OnStartBinding);
3856 CLEAR_CALLED(SetPriority); /* Not called by IE11 */
3858
3859 ok(unk == NULL, "unk=%p\n", unk);
3860
3861 IBindCtx_Release(bctx);
3862 IMoniker_Release(mon);
3863}
3864
3866{
3867 IMoniker *mon = NULL;
3868 IBindCtx *bctx = NULL;
3869 IUnknown *unk;
3870 HRESULT hres;
3871
3873 ok(hres == S_OK, "CreateURLMoniker failed: %08lx\n", hres);
3874 if(FAILED(hres))
3875 return;
3876
3877 hres = pCreateAsyncBindCtxEx(NULL, 0, NULL, NULL, &bctx, 0);
3878 ok(hres == S_OK, "CreateAsyncBindCtxEx failed: %08lx\n", hres);
3879
3880 unk = (void*)0xdeadbeef;
3881 hres = IMoniker_BindToStorage(mon, bctx, NULL, &IID_IStream, (void**)&unk);
3883 "hres=%08lx, expected MK_E_SYNTAX or INET_E_DATA_NOT_AVAILABLE\n", hres);
3884 ok(unk == NULL, "got %p\n", unk);
3885
3886 IBindCtx_Release(bctx);
3887
3888 IMoniker_Release(mon);
3889
3892}
3893
3894static void test_StdURLMoniker(void)
3895{
3896 IMoniker *mon, *async_mon;
3897 LPOLESTR display_name;
3898 IBindCtx *bctx;
3899 IUnknown *unk;
3900 HRESULT hres;
3901
3902 hres = CoCreateInstance(&IID_IInternet, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
3903 &IID_IMoniker, (void**)&mon);
3904 ok(hres == S_OK, "Could not create IInternet instance: %08lx\n", hres);
3905 if(FAILED(hres))
3906 return;
3907
3908 hres = IMoniker_QueryInterface(mon, &IID_IAsyncMoniker, (void**)&async_mon);
3909 ok(hres == S_OK, "Could not get IAsyncMoniker iface: %08lx\n", hres);
3910 ok(mon == async_mon, "mon != async_mon\n");
3911 IMoniker_Release(async_mon);
3912
3913 hres = IMoniker_GetDisplayName(mon, NULL, NULL, &display_name);
3914 ok(hres == E_OUTOFMEMORY, "GetDisplayName failed: %08lx, expected E_OUTOFMEMORY\n", hres);
3915
3916 if(pCreateUri) {
3917 IUriContainer *uri_container;
3918 IUri *uri;
3919
3920 hres = IMoniker_QueryInterface(mon, &IID_IUriContainer, (void**)&uri_container);
3921 ok(hres == S_OK, "Could not get IUriMoniker iface: %08lx\n", hres);
3922
3923
3924 uri = (void*)0xdeadbeef;
3925 hres = IUriContainer_GetIUri(uri_container, &uri);
3926 ok(hres == S_FALSE, "GetIUri failed: %08lx\n", hres);
3927 ok(!uri, "uri = %p, expected NULL\n", uri);
3928
3929 IUriContainer_Release(uri_container);
3930 }
3931
3932 SET_EXPECT(QueryInterface_IServiceProvider);
3934 ok(hres == S_OK, "CreateAsyncBindCtx failed: %08lx\n\n", hres);
3935 CHECK_CALLED(QueryInterface_IServiceProvider);
3936
3937 if(pCreateUri) { /* Skip these tests on old IEs */
3938 unk = (void*)0xdeadbeef;
3939 hres = IMoniker_BindToStorage(mon, bctx, NULL, &IID_IStream, (void**)&unk);
3940 ok(hres == MK_E_SYNTAX, "BindToStorage failed: %08lx, expected MK_E_SYNTAX\n", hres);
3941 ok(!unk, "unk = %p\n", unk);
3942
3943 unk = (void*)0xdeadbeef;
3944 hres = IMoniker_BindToObject(mon, bctx, NULL, &IID_IUnknown, (void**)&unk);
3945 ok(hres == MK_E_SYNTAX, "BindToStorage failed: %08lx, expected MK_E_SYNTAX\n", hres);
3946 ok(!unk, "unk = %p\n", unk);
3947 }
3948
3949 IMoniker_Release(mon);
3950}
3951
3952static void register_protocols(void)
3953{
3955 HRESULT hres;
3956
3957 static const WCHAR winetestW[] = {'w','i','n','e','t','e','s','t',0};
3958
3960 ok(hres == S_OK, "CoInternetGetSession failed: %08lx\n", hres);
3961 if(FAILED(hres))
3962 return;
3963
3964 hres = IInternetSession_RegisterNameSpace(session, &protocol_cf, &IID_NULL,
3965 winetestW, 0, NULL, 0);
3966 ok(hres == S_OK, "RegisterNameSpace failed: %08lx\n", hres);
3967
3968 IInternetSession_Release(session);
3969}
3970
3971static BOOL can_do_https(void)
3972{
3973 HINTERNET ses, con, req;
3974 BOOL ret;
3975
3976 ses = InternetOpenA("winetest", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
3977 ok(ses != NULL, "InternetOpen failed\n");
3978
3979 con = InternetConnectA(ses, "gitlab.winehq.org", INTERNET_DEFAULT_HTTPS_PORT,
3981 ok(con != NULL, "InternetConnect failed\n");
3982
3983 req = HttpOpenRequestA(con, "GET", "/robots.txt", NULL, NULL, NULL,
3985 ok(req != NULL, "HttpOpenRequest failed\n");
3986
3987 ret = HttpSendRequestA(req, NULL, 0, NULL, 0);
3990 "request failed: %lu\n", GetLastError());
3991
3995 return ret;
3996}
3997
3999{
4000 HMODULE hurlmon;
4001
4002 hurlmon = GetModuleHandleA("urlmon.dll");
4003 pCreateAsyncBindCtxEx = (void*) GetProcAddress(hurlmon, "CreateAsyncBindCtxEx");
4004
4005 if(!GetProcAddress(hurlmon, "CompareSecurityIds")) {
4006 win_skip("Too old IE\n");
4007 return;
4008 }
4009
4010 pCreateUri = (void*) GetProcAddress(hurlmon, "CreateUri");
4011 if(!pCreateUri)
4012 win_skip("IUri not supported\n");
4013
4020
4021 test_create();
4022
4023 trace("test CreateAsyncBindCtx...\n");
4025
4026 trace("test CreateAsyncBindCtxEx...\n");
4028
4029 trace("test RegisterBindStatusCallback...\n");
4031 trace("test BindToStorage failures...\n");
4033
4034 trace("synchronous http test (COM not initialised)...\n");
4035 test_BindToStorage(HTTP_TEST, 0, TYMED_ISTREAM);
4036
4038
4039 trace("test StdURLMoniker...\n");
4041
4042 trace("test URLMonikerComposeWith...\n");
4044
4045 trace("synchronous http test...\n");
4046 test_BindToStorage(HTTP_TEST, 0, TYMED_ISTREAM);
4047
4048 trace("emulated synchronous http test (to file)...\n");
4050
4051 trace("synchronous http test (to object)...\n");
4053
4054 trace("emulated synchronous http test (with cache)...\n");
4056
4057 trace("emulated synchronous http test (with cache, no read)...\n");
4059
4060 trace("synchronous http test (with cache, no read)...\n");
4062
4063 trace("synchronous file test...\n");
4064 test_BindToStorage(FILE_TEST, 0, TYMED_ISTREAM);
4065
4066 trace("emulated synchronous file test (to file)...\n");
4068
4069 trace("synchronous file test (to object)...\n");
4071
4072 trace("bind to an object of not registered MIME type...\n");
4073 create_file("test.winetest", "\x01\x02\x03xxxxxxxxxxxxxxxxxxxxxxxxx");
4076
4077 trace("file test (no callback)...\n");
4079
4080 if(can_do_https()) {
4081 trace("synchronous https test (invalid CN, dialog)\n");
4085
4086 bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
4087
4088 trace("asynchronous https test (invalid CN, fail)\n");
4091
4092 trace("asynchronous https test (invalid CN, accept)\n");
4095
4096 trace("asynchronous https test (invalid CN, dialog 2)\n");
4100
4101 trace("asynchronous https test...\n");
4102 test_BindToStorage(HTTPS_TEST, 0, TYMED_ISTREAM);
4103 }else {
4104 win_skip("Skipping https tests\n");
4105 }
4106
4107 bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
4108
4109 trace("winetest test (async switch)...\n");
4111
4112 trace("about test (no read)...\n");
4114
4115 trace("http test...\n");
4116 test_BindToStorage(HTTP_TEST, 0, TYMED_ISTREAM);
4117
4118 trace("http test (to file)...\n");
4119 test_BindToStorage(HTTP_TEST, 0, TYMED_FILE);
4120
4121 trace("http test (to object)...\n");
4123
4124 trace("http test (short response)...\n");
4126
4127 trace("http test (short response, to object)...\n");
4129
4130 trace("http test (abort start binding E_NOTIMPL)...\n");
4133
4134 trace("http test (abort start binding E_ABORT)...\n");
4137
4138 trace("http test (abort progress)...\n");
4140
4141 trace("emulated http test...\n");
4143
4144 trace("emulated http test (to object)...\n");
4146
4147 trace("emulated http test (to object, redirect)...\n");
4149
4150 trace("emulated http test (to file)...\n");
4152
4153 trace("emulated http test (redirect)...\n");
4155
4156 trace("emulated http test (with cache)...\n");
4158
4159 trace("winetest test (no callback)...\n");
4161
4162 trace("emulated https test...\n");
4164
4165 trace("about test...\n");
4166 test_BindToStorage(ABOUT_TEST, 0, TYMED_ISTREAM);
4167
4168 trace("about test (to file)...\n");
4169 test_BindToStorage(ABOUT_TEST, 0, TYMED_FILE);
4170
4171 trace("about test (to object)...\n");
4173
4174 trace("emulated about test...\n");
4176
4177 trace("emulated about test (to file)...\n");
4179
4180 trace("emulated about test (to object)...\n");
4182
4183 trace("emulated test reporting result in read...\n");
4185
4186 trace("file test...\n");
4187 test_BindToStorage(FILE_TEST, 0, TYMED_ISTREAM);
4188
4189 trace("file test (to file)...\n");
4190 test_BindToStorage(FILE_TEST, 0, TYMED_FILE);
4191
4192 trace("file test (to object)...\n");
4194
4195 trace("emulated file test...\n");
4197
4198 trace("emulated file test (to file)...\n");
4200
4201 trace("emulated file test (to object)...\n");
4203
4204 trace("emulated its test...\n");
4206
4207 trace("emulated its test (to file)...\n");
4209
4210 trace("emulated mk test...\n");
4212
4213 trace("test URLDownloadToFile for file protocol...\n");
4215
4216 trace("test URLDownloadToFile for emulated file protocol...\n");
4218
4219 trace("test URLDownloadToFile for http protocol...\n");
4221
4222 trace("test URLDownloadToFile abort...\n");
4224
4225 trace("test emulated http abort...\n");
4227
4228 bindf |= BINDF_NOWRITECACHE;
4229
4230 trace("ftp test...\n");
4231#ifdef __REACTOS__
4232 if (is_reactos())
4233 {
4234 win_skip("Skipping test_BindToStorage(FTP_TEST, 0, TYMED_ISTREAM) because it doesn't progress.");
4235 }
4236 else
4237#endif
4238 test_BindToStorage(FTP_TEST, 0, TYMED_ISTREAM);
4239
4240 trace("test failures...\n");
4242
4243 bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE;
4244 only_check_prot_args = TRUE; /* Fail after checking arguments to Protocol_Start */
4245
4246 trace("check emulated http protocol arguments...\n");
4248 }
4249
4255}
#define stat
Definition: acwin.h:100
#define read
Definition: acwin.h:97
#define trace
Definition: atltest.h:70
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
#define broken(x)
Definition: atltest.h:178
#define START_TEST(x)
Definition: atltest.h:75
#define msg(x)
Definition: auth_time.c:54
#define ARRAY_SIZE(A)
Definition: main.h:20
unsigned long HANDLE_PTR
Definition: basetsd.h:72
const GUID IID_IUnknown
const GUID IID_IClassFactory
static WCHAR cbinding_contextW[]
Definition: binding.c:29
#define RegCloseKey(hKey)
Definition: registry.h:49
r l[0]
Definition: byte_order.h:168
cd_progress_ptr progress
Definition: cdjpeg.h:152
const CLSID CLSID_IdentityUnmarshal
static const WCHAR proxy_enable[]
Definition: connections.c:39
static const WCHAR internet_settings[]
Definition: connections.c:35
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
HRESULT hr
Definition: delayimp.cpp:582
#define ERROR_SUCCESS
Definition: deptool.c:10
#define E_PENDING
Definition: dinput.h:172
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
Definition: reg.c:3298
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
Definition: reg.c:4009
content
Definition: atl_ax.c:994
HRESULT WINAPI DECLSPEC_HOTPATCH CoRevokeClassObject(DWORD cookie)
Definition: combase.c:3107
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
HRESULT WINAPI CLSIDFromString(LPCOLESTR str, LPCLSID clsid)
Definition: combase.c:1470
HRESULT WINAPI CoRegisterClassObject(REFCLSID rclsid, IUnknown *object, DWORD clscontext, DWORD flags, DWORD *cookie)
Definition: combase.c:2970
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389
#define CloseHandle
Definition: compat.h:739
#define CP_ACP
Definition: compat.h:109
#define OPEN_EXISTING
Definition: compat.h:775
#define GetProcAddress(x, y)
Definition: compat.h:753
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define CreateFileA(a, b, c, d, e, f, g)
Definition: compat.h:740
#define GENERIC_READ
Definition: compat.h:135
#define MAX_PATH
Definition: compat.h:34
#define CreateFileW
Definition: compat.h:741
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define lstrcpyW
Definition: compat.h:749
#define WideCharToMultiByte
Definition: compat.h:111
#define MultiByteToWideChar
Definition: compat.h:110
#define FILE_SHARE_READ
Definition: compat.h:136
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
Definition: delete.c:24
BOOL WINAPI WriteFile(_In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
Definition: rw.c:25
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
DWORD WINAPI GetCurrentDirectoryA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
Definition: path.c:2065
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
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
HRESULT WINAPI UrlUnescapeW(WCHAR *url, WCHAR *unescaped, DWORD *unescaped_len, DWORD flags)
Definition: path.c:2912
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
_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
_ACRTIMP int __cdecl strcmp(const char *, const char *)
Definition: string.c:3324
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:531
HRESULT WINAPI CoInternetGetSession(DWORD dwSessionMode, IInternetSession **ppIInternetSession, DWORD dwReserved)
Definition: session.c:485
HINTERNET WINAPI HttpOpenRequestA(HINTERNET hHttpSession, LPCSTR lpszVerb, LPCSTR lpszObjectName, LPCSTR lpszVersion, LPCSTR lpszReferrer, LPCSTR *lpszAcceptTypes, DWORD dwFlags, DWORD_PTR dwContext)
Definition: http.c:1410
BOOL WINAPI HttpSendRequestA(HINTERNET hHttpRequest, LPCSTR lpszHeaders, DWORD dwHeaderLength, LPVOID lpOptional, DWORD dwOptionalLength)
Definition: http.c:5677
HINTERNET WINAPI InternetOpenA(LPCSTR lpszAgent, DWORD dwAccessType, LPCSTR lpszProxy, LPCSTR lpszProxyBypass, DWORD dwFlags)
Definition: internet.c:1057
BOOL WINAPI InternetCloseHandle(HINTERNET hInternet)
Definition: internet.c:1414
HINTERNET WINAPI InternetConnectA(HINTERNET hInternet, LPCSTR lpszServerName, INTERNET_PORT nServerPort, LPCSTR lpszUserName, LPCSTR lpszPassword, DWORD dwService, DWORD dwFlags, DWORD_PTR dwContext)
Definition: internet.c:1321
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
r reserved
Definition: btrfs.c:3006
PVOID LockRequest(PIRP Irp, PIO_STACK_LOCATION IrpSp, BOOLEAN Output, KPROCESSOR_MODE *LockMode)
Definition: lock.c:24
VOID UnlockRequest(PIRP Irp, PIO_STACK_LOCATION IrpSp)
Definition: lock.c:180
#define regid
Definition: ecma_167.h:64
HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, IMoniker **ppmk)
Definition: filemoniker.c:1360
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
return pTarget Start()
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLdouble GLdouble t
Definition: gl.h:2047
GLuint res
Definition: glext.h:9613
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLbitfield flags
Definition: glext.h:7161
GLuint GLfloat * val
Definition: glext.h:7180
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
@ SetPriority
Definition: halhw.h:216
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
REFIID LPVOID DWORD_PTR dw
Definition: atlbase.h:40
static CInternetFolder * CreateInstance(void)
Definition: inetfolder.c:330
static TfClientId tid
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
#define wine_dbgstr_w
Definition: kernel32.h:34
#define GUID_NULL
Definition: ks.h:106
static HRESULT Load(IUnknown *pUnk, IStream *pStream)
Definition: lnktool.cpp:294
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:100
LPSTR WINAPI lstrcatA(LPSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:123
int winetest_debug
#define win_skip
Definition: minitest.h:67
#define todo_wine_if(is_todo)
Definition: minitest.h:81
#define todo_wine
Definition: minitest.h:80
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define CREATE_ALWAYS
Definition: disk.h:72
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
static const WCHAR url[]
Definition: encode.c:1384
BOOL expected
Definition: store.c:2000
#define create_file(name, size)
Definition: asmcache.c:813
static IServiceProvider service_provider
Definition: mimeole.c:1286
static void test_BindToObject(void)
Definition: mimeole.c:1088
static IInternetBindInfo bind_info
Definition: mimeole.c:1246
HRESULT hres
Definition: protocol.c:465
static IUnknown * outer
Definition: compobj.c:82
static const WCHAR testW[]
Definition: typelib.c:1450
static RPC_BINDING_HANDLE binding
Definition: server.c:166
DWORD flags
Definition: url.c:297
const char * expect
Definition: url.c:286
static const WCHAR url1[]
Definition: misc.c:277
static const WCHAR url2[]
Definition: misc.c:279
static PROTOCOLDATA protocoldata
Definition: protocol.c:163
static IHttpSecurity http_security
Definition: protocol.c:292
static IHttpNegotiate2 http_negotiate
Definition: protocol.c:393
static LPCWSTR file_name
Definition: protocol.c:152
static IInternetProtocolSink * binding_sink
Definition: protocol.c:159
const WCHAR * uri
Definition: sec_mgr.c:1564
static void test_CreateURLMoniker(void)
Definition: uri.c:11708
static const WCHAR about_blankW[]
Definition: url.c:154
static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
Definition: url.c:1392
static BOOL strict_bsc_qi
Definition: url.c:190
#define SET_EXPECT(func)
Definition: url.c:51
static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: url.c:2337
static IInternetPriority InternetPriority
Definition: url.c:363
static HRESULT WINAPI PersistMoniker_GetClassID(IPersistMoniker *iface, CLSID *pClassID)
Definition: url.c:2189
#define BINDTEST_ABORT_START
Definition: url.c:2829
#define BINDTEST_USE_CACHE
Definition: url.c:2824
static HRESULT WINAPI statusclb_GetBindInfo(IBindStatusCallbackEx *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
Definition: url.c:1909
static HRESULT WINAPI Protocol_Read(IInternetProtocol *iface, void *pv, ULONG cb, ULONG *pcbRead)
Definition: url.c:1089
static IBinding * current_binding
Definition: url.c:176
#define BINDTEST_NO_CALLBACK
Definition: url.c:2826
#define CLEAR_CALLED(func)
Definition: url.c:84
#define BINDTEST_HTTPRESPONSE
Definition: url.c:2822
static HRESULT WINAPI statusclb_OnStopBinding(IBindStatusCallbackEx *iface, HRESULT hresult, LPCWSTR szError)
Definition: url.c:1816
static BOOL abort_start
Definition: url.c:187
static const IClassFactoryVtbl ProtocolCFVtbl
Definition: url.c:2389
static HANDLE complete_event2
Definition: url.c:177
static void test_MonikerComposeWith(void)
Definition: url.c:2899
CLSID CLSID_AboutProtocol
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL dolock)
Definition: url.c:2346
static BOOL is_async_prot
Definition: url.c:181
static HRESULT WINAPI Priority_SetPriority(IInternetPriority *iface, LONG nPriority)
Definition: url.c:342
@ FTP_TEST
Definition: url.c:203
@ WINETEST_SYNC_TEST
Definition: url.c:205
@ FILE_TEST
Definition: url.c:199
@ HTTPS_TEST
Definition: url.c:202
@ HTTP_TEST
Definition: url.c:197
@ WINETEST_TEST
Definition: url.c:204
@ MK_TEST
Definition: url.c:201
@ ABOUT_TEST
Definition: url.c:198
@ ITS_TEST
Definition: url.c:200
static BOOL can_do_https(void)
Definition: url.c:3971
static IClassFactory mime_cf
Definition: url.c:2360
static DWORD security_problem
Definition: url.c:172
static ULONG WINAPI ServiceProvider_Release(IServiceProvider *iface)
Definition: url.c:1387
static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, DWORD grfPI, HANDLE_PTR dwReserved)
Definition: url.c:569
#define BINDTEST_NO_CALLBACK_READ
Definition: url.c:2825
static HRESULT WINAPI HttpNegotiate_OnResponse(IHttpNegotiate2 *iface, DWORD dwResponseCode, LPCWSTR szResponseHeaders, LPCWSTR szRequestHeaders, LPWSTR *pszAdditionalRequestHeaders)
Definition: url.c:1251
static void test_ReportResult(HRESULT exhres)
Definition: url.c:3818
static const WCHAR wszWineHQIP[]
Definition: url.c:162
static HANDLE complete_event
Definition: url.c:177
static HRESULT WINAPI PersistMoniker_Save(IPersistMoniker *iface, IMoniker *pimkName, LPBC pbc, BOOL fRemember)
Definition: url.c:2277
static HRESULT abort_hres
Definition: url.c:180
static DWORD nread
Definition: url.c:172
static HRESULT WINAPI statusclb_OnObjectAvailable(IBindStatusCallbackEx *iface, REFIID riid, IUnknown *punk)
Definition: url.c:2075
static WCHAR file_url[INTERNET_MAX_URL_LENGTH]
Definition: url.c:194
static HRESULT WINAPI HttpSecurity_QueryInterface(IHttpSecurity *iface, REFIID riid, void **ppv)
Definition: url.c:1307
#define BINDTEST_TOOBJECT
Definition: url.c:2820
static HRESULT WINAPI MonikerProp_PutProperty(IMonikerProp *iface, MONIKERPROPERTY mkp, LPCWSTR val)
Definition: url.c:2137
static BOOL no_callback
Definition: url.c:182
static BOOL bind_to_object
Definition: url.c:171
static const WCHAR dwl_htmlW[]
Definition: url.c:166
static const WCHAR winetest_data_urlW[]
Definition: url.c:151
static HRESULT WINAPI Protocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv)
Definition: url.c:365
#define BINDTEST_FILEDWLAPI
Definition: url.c:2821
static void test_URLDownloadToFile_abort(void)
Definition: url.c:3649
static HRESULT WINAPI statusclb_OnLowResource(IBindStatusCallbackEx *iface, DWORD reserved)
Definition: url.c:1617
static BOOL post_test
Definition: url.c:171
static const IClassFactoryVtbl ClassFactoryVtbl
Definition: url.c:2352
static HRESULT WINAPI Protocol_Suspend(IInternetProtocol *iface)
Definition: url.c:1077
static ULONG WINAPI MonikerProp_AddRef(IMonikerProp *iface)
Definition: url.c:2127
static HRESULT WINAPI Protocol_Terminate(IInternetProtocol *iface, DWORD dwOptions)
Definition: url.c:1061
static ULONG WINAPI PersistMoniker_Release(IPersistMoniker *iface)
Definition: url.c:2184
static HRESULT WINAPI PersistMoniker_IsDirty(IPersistMoniker *iface)
Definition: url.c:2195
@ END_DOWNLOAD
Definition: url.c:211
@ BEFORE_DOWNLOAD
Definition: url.c:209
@ DOWNLOADING
Definition: url.c:210
static ULONG WINAPI HttpNegotiate_Release(IHttpNegotiate2 *iface)
Definition: url.c:1227
static const IPersistMonikerVtbl PersistMonikerVtbl
Definition: url.c:2295
static BOOL test_bscholder(IBindStatusCallback *holder)
Definition: url.c:2570
static HRESULT WINAPI HttpSecurity_GetWindow(IHttpSecurity *iface, REFGUID rguidReason, HWND *phwnd)
Definition: url.c:1334
static IBindStatusCallbackEx bsc2
Definition: url.c:2117
static void test_create(void)
Definition: url.c:274
#define BINDTEST_INVALID_CN
Definition: url.c:2828
#define BINDTEST_EMULATE
Definition: url.c:2819
static BOOL stopped_binding
Definition: url.c:170
static IServiceProvider ServiceProvider
Definition: url.c:1437
#define CHECK_EXPECT(func)
Definition: url.c:60
static HRESULT binding_hres
Definition: url.c:178
static void test_GetBindInfoEx(IBindStatusCallback *holder)
Definition: url.c:2524
#define BINDTEST_REDIRECT
Definition: url.c:2823
static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
Definition: url.c:2332
#define DEFINE_EXPECT(func)
Definition: url.c:48
static const CHAR test_txtA[]
Definition: url.c:167
static BOOL emulate_protocol
Definition: url.c:170
static DWORD_PTR
Definition: url.c:40
static BOOL only_check_prot_args
Definition: url.c:185
static void test_CreateAsyncBindCtx(void)
Definition: url.c:2399
#define BINDTEST_ALLOW_FINDINGRESOURCE
Definition: url.c:2832
static HRESULT WINAPI statusclb_OnStartBinding(IBindStatusCallbackEx *iface, DWORD dwReserved, IBinding *pib)
Definition: url.c:1553
static HRESULT WINAPI statusclb_QueryInterface(IBindStatusCallbackEx *iface, REFIID riid, void **ppv)
Definition: url.c:1487
static IHttpNegotiate2Vtbl HttpNegotiateVtbl
Definition: url.c:1296
static IHttpSecurity HttpSecurity
Definition: url.c:1374
static ULONG WINAPI HttpSecurity_Release(IHttpSecurity *iface)
Definition: url.c:1329
static IMonikerProp MonikerProp
Definition: url.c:2161
#define BINDTEST_ASYNC_SWITCH
Definition: url.c:2831
static HRESULT WINAPI ProtocolCF_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: url.c:2378
static BOOL test_abort
Definition: url.c:182
static ULONG WINAPI Priority_AddRef(IInternetPriority *iface)
Definition: url.c:332
static enum @1885 test_protocol
static BOOL abort_progress
Definition: url.c:188
static HRESULT WINAPI HttpSecurity_OnSecurityProblem(IHttpSecurity *iface, DWORD dwProblem)
Definition: url.c:1349
static const IMonikerPropVtbl MonikerPropVtbl
Definition: url.c:2154
static const CHAR dwl_htmlA[]
Definition: url.c:165
static void test_BindToStorage_fail(void)
Definition: url.c:3865
static ULONG WINAPI Protocol_AddRef(IInternetProtocol *iface)
Definition: url.c:387
static DWORD WINAPI thread_proc(PVOID arg)
Definition: url.c:419
static enum @1886 download_state
static BOOL callback_read
Definition: url.c:182
static IHttpNegotiate2 HttpNegotiate
Definition: url.c:1305
static HRESULT WINAPI HttpNegotiate_GetRootSecurityId(IHttpNegotiate2 *iface, BYTE *pbSecurityId, DWORD *pcbSecurityId, DWORD_PTR dwReserved)
Definition: url.c:1269
static const WCHAR cache_fileW[]
Definition: url.c:164
static void test_WinInetHttpInfo(IWinInetHttpInfo *http_info, DWORD progress)
Definition: url.c:1441
static HRESULT WINAPI statusclb_GetBindInfoEx(IBindStatusCallbackEx *iface, DWORD *grfBINDF, BINDINFO *pbindinfo, DWORD *grfBINDF2, DWORD *pdwReserved)
Definition: url.c:2088
static DWORD tymed
Definition: url.c:172
static IPersistMoniker PersistMoniker
Definition: url.c:2307
static BOOL have_IHttpNegotiate2
Definition: url.c:181
static void register_protocols(void)
Definition: url.c:3952
static HRESULT WINAPI MonikerProp_QueryInterface(IMonikerProp *iface, REFIID riid, void **ppv)
Definition: url.c:2120
#define CHECK_EXPECT2(func)
Definition: url.c:54
static HRESULT WINAPI HttpNegotiate_BeginningTransaction(IHttpNegotiate2 *iface, LPCWSTR szURL, LPCWSTR szHeaders, DWORD dwReserved, LPWSTR *pszAdditionalHeaders)
Definition: url.c:1232
static HRESULT WINAPI statusclb_OnProgress(IBindStatusCallbackEx *iface, ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
Definition: url.c:1623
static HRESULT WINAPI PersistMoniker_GetCurMoniker(IPersistMoniker *iface, IMoniker **pimkName)
Definition: url.c:2289
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
Definition: url.c:2309
static const IHttpSecurityVtbl HttpSecurityVtbl
Definition: url.c:1366
static HRESULT WINAPI Priority_QueryInterface(IInternetPriority *iface, REFIID riid, void **ppv)
Definition: url.c:326
#define BINDTEST_ABORT
Definition: url.c:2827
static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAvailable, IMoniker *pimkName, LPBC pibc, DWORD grfMode)
Definition: url.c:2201
static HRESULT WINAPI PersistMoniker_SaveCompleted(IPersistMoniker *iface, IMoniker *pimkName, LPBC pibc)
Definition: url.c:2283
static const WCHAR emptyW[]
Definition: url.c:168
static void create_html_file(void)
Definition: url.c:3789
static ULONG WINAPI Protocol_Release(IInternetProtocol *iface)
Definition: url.c:392
static BOOL test_RegisterBindStatusCallback(void)
Definition: url.c:2718
static const CHAR wszIndexHtmlA[]
Definition: url.c:163
static HRESULT WINAPI ProtocolCF_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
Definition: url.c:2362
static HRESULT WINAPI statusclb_GetPriority(IBindStatusCallbackEx *iface, LONG *pnPriority)
Definition: url.c:1611
static DWORD bindtest_flags
Definition: url.c:191
static ULONG WINAPI Priority_Release(IInternetPriority *iface)
Definition: url.c:337
static ULONG WINAPI statusclb_AddRef(IBindStatusCallbackEx *iface)
Definition: url.c:1543
static ULONG WINAPI statusclb_Release(IBindStatusCallbackEx *iface)
Definition: url.c:1548
static BOOL http_is_first
Definition: url.c:171
#define CHECK_CALLED(func)
Definition: url.c:66
static void set_file_url(char *path)
Definition: url.c:3756
static DWORD bindf
Definition: url.c:172
static HRESULT WINAPI Protocol_Resume(IInternetProtocol *iface)
Definition: url.c:1083
static HRESULT WINAPI Protocol_UnlockRequest(IInternetProtocol *iface)
Definition: url.c:1185
static BOOL filedwl_api
Definition: url.c:171
static BOOL async_switch
Definition: url.c:189
static const WCHAR * reported_url
Definition: url.c:173
static HRESULT WINAPI Protocol_Abort(IInternetProtocol *iface, HRESULT hrReason, DWORD dwOptions)
Definition: url.c:1045
static void test_StdURLMoniker(void)
Definition: url.c:3894
static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
Definition: url.c:2327
static const char * test_file
Definition: url.c:192
static ULONG WINAPI HttpNegotiate_AddRef(IHttpNegotiate2 *iface)
Definition: url.c:1222
static BOOL stopped_obj_binding
Definition: url.c:170
static IInternetProtocolSink * protocol_sink
Definition: url.c:175
static BOOL invalid_cn_accepted
Definition: url.c:186
static BOOL is_urlmon_protocol(int prot)
Definition: url.c:233
#define BINDTEST_ABORT_PROGRESS
Definition: url.c:2830
static void init_bind_test(int protocol, DWORD flags, DWORD t)
Definition: url.c:2834
static ULONG WINAPI PersistMoniker_AddRef(IPersistMoniker *iface)
Definition: url.c:2179
static const IInternetPriorityVtbl InternetPriorityVtbl
Definition: url.c:355
static void test_CreateAsyncBindCtxEx(void)
Definition: url.c:2439
static WCHAR BSCBHolder[]
Definition: url.c:158
static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
Definition: url.c:3007
static HRESULT WINAPI statusclb_OnDataAvailable(IBindStatusCallbackEx *iface, DWORD grfBSCF, DWORD dwSize, FORMATETC *pformatetc, STGMEDIUM *pstgmed)
Definition: url.c:1953
static HRESULT WINAPI HttpNegotiate_QueryInterface(IHttpNegotiate2 *iface, REFIID riid, void **ppv)
Definition: url.c:1209
static HRESULT onsecurityproblem_hres
Definition: url.c:179
static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
Definition: url.c:1376
static HRESULT WINAPI Protocol_LockRequest(IInternetProtocol *iface, DWORD dwOptions)
Definition: url.c:1177
static ULONG WINAPI MonikerProp_Release(IMonikerProp *iface)
Definition: url.c:2132
static IInternetProtocol Protocol
Definition: url.c:1207
static WCHAR current_url[INTERNET_MAX_URL_LENGTH]
Definition: url.c:194
static IClassFactory protocol_cf
Definition: url.c:2397
static const IBindStatusCallbackExVtbl BindStatusCallbackVtbl
Definition: url.c:2101
static IServiceProviderVtbl ServiceProviderVtbl
Definition: url.c:1430
static HRESULT WINAPI Priority_GetPriority(IInternetPriority *iface, LONG *pnPriority)
Definition: url.c:349
static ULONG WINAPI ServiceProvider_AddRef(IServiceProvider *iface)
Definition: url.c:1382
static HRESULT WINAPI Protocol_Continue(IInternetProtocol *iface, PROTOCOLDATA *pProtocolData)
Definition: url.c:914
#define CHECK_NOT_CALLED(func)
Definition: url.c:72
static IBindStatusCallbackEx objbsc
Definition: url.c:1439
static BOOL use_bscex
Definition: url.c:181
static void test_stream_seek(IStream *stream)
Definition: url.c:1928
static void create_cache_file(void)
Definition: url.c:3794
static BOOL test_redirect
Definition: url.c:182
static HRESULT WINAPI Protocol_Seek(IInternetProtocol *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
Definition: url.c:1170
#define CHECK_CALLED_BROKEN(func)
Definition: url.c:78
static WCHAR cache_file_name[MAX_PATH]
Definition: url.c:183
static void test_URLDownloadToFile(DWORD prot, BOOL emul)
Definition: url.c:3546
static HRESULT WINAPI PersistMoniker_QueryInterface(IPersistMoniker *iface, REFIID riid, void **ppv)
Definition: url.c:2163
static BOOL proxy_active(void)
Definition: url.c:214
static void test_switch_fail(void)
Definition: url.c:397
static DWORD prot_state
Definition: url.c:172
static ULONG WINAPI HttpSecurity_AddRef(IHttpSecurity *iface)
Definition: url.c:1324
static const WCHAR wszWineHQSite[]
Definition: url.c:161
static BOOL data_available
Definition: url.c:171
#define WINEHQ_IP
Definition: url.c:160
static const WCHAR wszTextHtml[]
Definition: url.c:156
static BOOL use_cache_file
Definition: url.c:182
static DWORD thread_id
Definition: url.c:172
static CHAR mime_type[512]
Definition: url.c:174
static WCHAR http_cache_file[MAX_PATH]
Definition: url.c:184
const CLSID * clsid
Definition: msctf.cpp:50
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
#define FILE_SHARE_DELETE
Definition: nt_native.h:682
#define KEY_QUERY_VALUE
Definition: nt_native.h:1019
#define DELETE
Definition: nt_native.h:57
#define DWORD
Definition: nt_native.h:44
#define GENERIC_WRITE
Definition: nt_native.h:90
@ REGCLS_MULTIPLEUSE
Definition: objbase.h:398
#define STGM_READWRITE
Definition: objbase.h:938
#define STGM_SHARE_EXCLUSIVE
Definition: objbase.h:942
interface IBindCtx * LPBC
Definition: objfwd.h:18
HRESULT WINAPI CreateBindCtx(DWORD reserved, IBindCtx **bind_context)
Definition: bindctx.c:491
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
char CHAR
Definition: pedump.c:57
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
Definition: guiddef.h:68
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define CLSID_NULL
Definition: guiddef.h:99
#define DEFINE_OLEGUID(name, l, w1, w2)
Definition: guiddef.h:73
#define REFIID
Definition: guiddef.h:118
#define IID_NULL
Definition: guiddef.h:98
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
#define URL_UNESCAPE_INPLACE
Definition: shlwapi.h:525
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:171
#define memset(x, y, z)
Definition: compat.h:39
static const WCHAR winetestW[]
Definition: shelldispatch.c:47
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
Definition: socklife.c:36
DWORD dwOptions
Definition: solitaire.cpp:25
_In_ BOOLEAN Read
Definition: strmini.h:479
Definition: scsiwmi.h:51
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185
Definition: xmldoc.c:231
Definition: fci.c:127
Definition: send.c:48
Definition: stat.h:66
Definition: ps.c:97
Definition: parse.h:23
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
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:669
BOOL WINAPI DECLSPEC_HOTPATCH ResetEvent(IN HANDLE hEvent)
Definition: synch.c:650
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
const uint16_t * LPCWSTR
Definition: typedefs.h:57
uint32_t DWORD_PTR
Definition: typedefs.h:65
unsigned char * LPBYTE
Definition: typedefs.h:53
uint16_t * LPWSTR
Definition: typedefs.h:56
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk)
Definition: umon.c:732
HRESULT WINAPI RevokeBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc)
Definition: bindctx.c:676
HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbscPrevious, DWORD dwReserved)
Definition: bindctx.c:615
IID IID_IBindStatusCallbackHolder
HRESULT WINAPI CreateAsyncBindCtx(DWORD reserved, IBindStatusCallback *callback, IEnumFORMATETC *format, IBindCtx **pbind)
Definition: bindctx.c:899
HRESULT WINAPI URLDownloadToFileW(LPUNKNOWN pCaller, LPCWSTR szURL, LPCWSTR szFileName, DWORD dwReserved, LPBINDSTATUSCALLBACK lpfnCB)
Definition: download.c:427
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
#define WAIT_OBJECT_0
Definition: winbase.h:383
#define HRESULT
Definition: msvc.h:7
#define WINAPI
Definition: msvc.h:6
#define REGDB_E_CLASSNOTREG
Definition: winerror.h:3801
#define INET_E_DATA_NOT_AVAILABLE
Definition: winerror.h:4657
#define INET_E_INVALID_CERTIFICATE
Definition: winerror.h:4669
#define S_FALSE
Definition: winerror.h:3451
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define ERROR_SHARING_VIOLATION
Definition: winerror.h:257
#define E_NOINTERFACE
Definition: winerror.h:3479
#define INET_E_SECURITY_PROBLEM
Definition: winerror.h:4664
#define MK_E_SYNTAX
Definition: winerror.h:3896
#define STG_E_ACCESSDENIED
Definition: winerror.h:3663
#define MK_E_NEEDGENERIC
Definition: winerror.h:3893
#define INET_E_UNKNOWN_PROTOCOL
Definition: winerror.h:4663
#define E_ABORT
Definition: winerror.h:3481
#define HTTP_STATUS_OK
Definition: winhttp.h:301
#define INTERNET_DEFAULT_HTTPS_PORT
Definition: winhttp.h:42
#define INTERNET_HANDLE_TYPE_HTTP_REQUEST
Definition: wininet.h:814
#define ERROR_INTERNET_SEC_CERT_CN_INVALID
Definition: wininet.h:2026
#define INTERNET_MAX_URL_LENGTH
Definition: wininet.h:51
#define ERROR_INTERNET_SECURITY_CHANNEL_ERROR
Definition: wininet.h:2069
#define HTTP_QUERY_FLAG_NUMBER
Definition: wininet.h:1606
#define INTERNET_FLAG_SECURE
Definition: wininet.h:71
#define HTTP_QUERY_STATUS_CODE
Definition: wininet.h:1542
#define INTERNET_OPEN_TYPE_PRECONFIG
Definition: wininet.h:521
#define ERROR_INTERNET_CANNOT_CONNECT
Definition: wininet.h:2018
#define ERROR_INTERNET_NAME_NOT_RESOLVED
Definition: wininet.h:1996
#define INTERNET_OPTION_HANDLE_TYPE
Definition: wininet.h:710
#define INTERNET_HANDLE_TYPE_FTP_FILE
Definition: wininet.h:808
#define ERROR_INTERNET_SEC_CERT_ERRORS
Definition: wininet.h:2042
#define INTERNET_SERVICE_HTTP
Definition: wininet.h:562
#define HKEY_CURRENT_USER
Definition: winreg.h:11
LRESULT WINAPI DispatchMessageA(_In_ const MSG *)
BOOL WINAPI TranslateMessage(_In_ const MSG *)
int WINAPI GetClipboardFormatNameA(_In_ UINT format, _Out_writes_(cchMaxCount) LPSTR lpszFormatName, _In_ int cchMaxCount)
BOOL WINAPI GetMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
unsigned char BYTE
Definition: xxhash.c:193