ReactOS  0.4.15-dev-2993-g14fbe80
internet.c
Go to the documentation of this file.
1 /*
2  * Wininet - internet tests
3  *
4  * Copyright 2005 Vijay Kiran Kamuju
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #include <stdarg.h>
22 #include <stdio.h>
23 #include <string.h>
24 #include "windef.h"
25 #include "winbase.h"
26 #include "winuser.h"
27 #include "wininet.h"
28 #include "winineti.h"
29 #include "winerror.h"
30 #include "winreg.h"
31 
32 #include "wine/test.h"
33 
34 static BOOL (WINAPI *pCreateUrlCacheContainerA)(DWORD, DWORD, DWORD, DWORD,
35  DWORD, DWORD, DWORD, DWORD);
36 static BOOL (WINAPI *pCreateUrlCacheContainerW)(DWORD, DWORD, DWORD, DWORD,
37  DWORD, DWORD, DWORD, DWORD);
38 static BOOL (WINAPI *pInternetTimeFromSystemTimeA)(const SYSTEMTIME *, DWORD, LPSTR, DWORD);
39 static BOOL (WINAPI *pInternetTimeFromSystemTimeW)(const SYSTEMTIME *, DWORD, LPWSTR, DWORD);
40 static BOOL (WINAPI *pInternetTimeToSystemTimeA)(LPCSTR ,SYSTEMTIME *,DWORD);
41 static BOOL (WINAPI *pInternetTimeToSystemTimeW)(LPCWSTR ,SYSTEMTIME *,DWORD);
42 static BOOL (WINAPI *pIsDomainLegalCookieDomainW)(LPCWSTR, LPCWSTR);
43 static DWORD (WINAPI *pPrivacyGetZonePreferenceW)(DWORD, DWORD, LPDWORD, LPWSTR, LPDWORD);
44 static DWORD (WINAPI *pPrivacySetZonePreferenceW)(DWORD, DWORD, DWORD, LPCWSTR);
45 static BOOL (WINAPI *pInternetGetCookieExA)(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD,LPVOID);
46 static BOOL (WINAPI *pInternetGetCookieExW)(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD,LPVOID);
47 static BOOL (WINAPI *pInternetGetConnectedStateExA)(LPDWORD,LPSTR,DWORD,DWORD);
48 static BOOL (WINAPI *pInternetGetConnectedStateExW)(LPDWORD,LPWSTR,DWORD,DWORD);
49 
50 /* ############################### */
51 
53 {
54  CHAR buffer[256];
55  LPCSTR url;
56  DWORD urllen;
57  DWORD dwSize;
58  DWORD res;
59 
60  /* Acrobat Updater 5 calls this for Adobe Reader 8.1 */
61  url = "http://swupmf.adobe.com/manifest/50/win/AdobeUpdater.upd";
62  urllen = lstrlenA(url);
63 
64  memset(buffer, '#', sizeof(buffer)-1);
65  buffer[sizeof(buffer)-1] = '\0';
66  dwSize = 1; /* Acrobat Updater use this size */
67  SetLastError(0xdeadbeef);
69  ok( !res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER) && (dwSize == (urllen+1)),
70  "got %u and %u with size %u for '%s' (%d)\n",
72 
73 
74  /* buffer has no space for the terminating '\0' */
75  memset(buffer, '#', sizeof(buffer)-1);
76  buffer[sizeof(buffer)-1] = '\0';
77  dwSize = urllen;
78  SetLastError(0xdeadbeef);
80  /* dwSize is nr. of needed bytes with the terminating '\0' */
81  ok( !res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER) && (dwSize == (urllen+1)),
82  "got %u and %u with size %u for '%s' (%d)\n",
84 
85  /* buffer has the required size */
86  memset(buffer, '#', sizeof(buffer)-1);
87  buffer[sizeof(buffer)-1] = '\0';
88  dwSize = urllen+1;
89  SetLastError(0xdeadbeef);
91  /* dwSize is nr. of copied bytes without the terminating '\0' */
92  ok( res && (dwSize == urllen) && (lstrcmpA(url, buffer) == 0),
93  "got %u and %u with size %u for '%s' (%d)\n",
95 
96  memset(buffer, '#', sizeof(buffer)-1);
97  buffer[sizeof(buffer)-1] = '\0';
98  dwSize = sizeof(buffer);
99  SetLastError(0xdeadbeef);
100  res = InternetCanonicalizeUrlA("file:///C:/Program%20Files/Atmel/AVR%20Tools/STK500/STK500.xml", buffer, &dwSize, ICU_DECODE | ICU_NO_ENCODE);
101  ok(res, "InternetCanonicalizeUrlA failed %u\n", GetLastError());
102  ok(dwSize == lstrlenA(buffer), "got %d expected %d\n", dwSize, lstrlenA(buffer));
103  ok(!lstrcmpA("file://C:\\Program Files\\Atmel\\AVR Tools\\STK500\\STK500.xml", buffer),
104  "got %s expected 'file://C:\\Program Files\\Atmel\\AVR Tools\\STK500\\STK500.xml'\n", buffer);
105 
106  /* buffer is larger as the required size */
107  memset(buffer, '#', sizeof(buffer)-1);
108  buffer[sizeof(buffer)-1] = '\0';
109  dwSize = urllen+2;
110  SetLastError(0xdeadbeef);
112  /* dwSize is nr. of copied bytes without the terminating '\0' */
113  ok( res && (dwSize == urllen) && (lstrcmpA(url, buffer) == 0),
114  "got %u and %u with size %u for '%s' (%d)\n",
116 
117 
118  /* check NULL pointers */
119  memset(buffer, '#', urllen + 4);
120  buffer[urllen + 4] = '\0';
121  dwSize = urllen+1;
122  SetLastError(0xdeadbeef);
125  "got %u and %u with size %u for '%s' (%d)\n",
127 
128  memset(buffer, '#', urllen + 4);
129  buffer[urllen + 4] = '\0';
130  dwSize = urllen+1;
131  SetLastError(0xdeadbeef);
134  "got %u and %u with size %u for '%s' (%d)\n",
136 
137  memset(buffer, '#', urllen + 4);
138  buffer[urllen + 4] = '\0';
139  dwSize = urllen+1;
140  SetLastError(0xdeadbeef);
143  "got %u and %u with size %u for '%s' (%d)\n",
145 
146  /* test with trailing space */
147  dwSize = 256;
148  res = InternetCanonicalizeUrlA("http://www.winehq.org/index.php?x= ", buffer, &dwSize, ICU_BROWSER_MODE);
149  ok(res == 1, "InternetCanonicalizeUrlA failed\n");
150  ok(!strcmp(buffer, "http://www.winehq.org/index.php?x="), "Trailing space should have been stripped even in ICU_BROWSER_MODE (%s)\n", buffer);
151 
152  res = InternetSetOptionA(NULL, 0xdeadbeef, buffer, sizeof(buffer));
153  ok(!res, "InternetSetOptionA succeeded\n");
155  "InternetSetOptionA failed %u, expected ERROR_INTERNET_INVALID_OPTION\n", GetLastError());
156 }
157 
158 /* ############################### */
159 
160 static void test_InternetQueryOptionA(void)
161 {
162  HINTERNET hinet,hurl;
163  DWORD len, val;
164  DWORD err;
165  static const char useragent[] = {"Wininet Test"};
166  char *buffer;
167  int retval;
168  BOOL res;
169 
170  SetLastError(0xdeadbeef);
171  len = 0xdeadbeef;
173  ok(!retval && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "Got wrong error %x(%u)\n", retval, GetLastError());
174  ok(len >= sizeof(INTERNET_PROXY_INFOA) && len != 0xdeadbeef,"len = %u\n", len);
175 
176  hinet = InternetOpenA(useragent,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL, 0);
177  ok((hinet != 0x0),"InternetOpen Failed\n");
178 
179  SetLastError(0xdeadbeef);
181  err=GetLastError();
182  ok(retval == 0,"Got wrong return value %d\n",retval);
183  ok(err == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "Got wrong error code%d\n",err);
184 
185  SetLastError(0xdeadbeef);
186  len=strlen(useragent)+1;
188  err=GetLastError();
189  ok(len == strlen(useragent)+1,"Got wrong user agent length %d instead of %d\n",len,lstrlenA(useragent));
190  ok(retval == 0,"Got wrong return value %d\n",retval);
191  ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code %d\n",err);
192 
193  len=strlen(useragent)+1;
196  ok(retval == 1,"Got wrong return value %d\n",retval);
197  if (retval)
198  {
199  ok(!strcmp(useragent,buffer),"Got wrong user agent string %s instead of %s\n",buffer,useragent);
200  ok(len == strlen(useragent),"Got wrong user agent length %d instead of %d\n",len,lstrlenA(useragent));
201  }
203 
204  SetLastError(0xdeadbeef);
205  len=0;
208  err=GetLastError();
209  ok(len == strlen(useragent) + 1,"Got wrong user agent length %d instead of %d\n", len, lstrlenA(useragent) + 1);
210  ok(!retval, "Got wrong return value %d\n", retval);
211  ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code %d\n", err);
213 
215 
216  SetLastError(0xdeadbeef);
217  len=0;
219  err=GetLastError();
220  ok(len == 0,"Got wrong user agent length %d instead of 0\n",len);
221  ok(retval == 0,"Got wrong return value %d\n",retval);
222  ok(err == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "Got wrong error code %d\n",err);
223 
224  SetLastError(0xdeadbeef);
225  len = sizeof(DWORD);
227  err = GetLastError();
228  ok(retval == 0,"Got wrong return value %d\n",retval);
229  ok(err == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "Got wrong error code %d\n",err);
230  ok(len == sizeof(DWORD), "len = %d\n", len);
231 
232  SetLastError(0xdeadbeef);
233  len = sizeof(DWORD);
235  err = GetLastError();
236  ok(retval == 0,"Got wrong return value %d\n",retval);
237  ok(err == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "Got wrong error code %d\n",err);
238  ok(!len, "len = %d\n", len);
239 
240  InternetCloseHandle(hurl);
241  InternetCloseHandle(hinet);
242 
244  ok((hinet != 0x0),"InternetOpen Failed\n");
245 
246  SetLastError(0xdeadbeef);
247  len=0;
249  err=GetLastError();
250  ok(len == 1,"Got wrong user agent length %d instead of %d\n",len,1);
251  ok(retval == 0,"Got wrong return value %d\n",retval);
252  ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code%d\n",err);
253 
254  InternetCloseHandle(hinet);
255 
256  val = 12345;
258  ok(res, "InternetSetOptionA(INTERNET_OPTION_CONNECT_TIMEOUT) failed (%u)\n", GetLastError());
259 
260  len = sizeof(val);
262  ok(res, "InternetQueryOptionA failed %d)\n", GetLastError());
263  ok(val == 12345, "val = %d\n", val);
264  ok(len == sizeof(val), "len = %d\n", len);
265 
267  ok((hinet != 0x0),"InternetOpen Failed\n");
268  SetLastError(0xdeadbeef);
269  len=0;
271  err=GetLastError();
272  ok(len == 1,"Got wrong user agent length %d instead of %d\n",len,1);
273  ok(retval == 0,"Got wrong return value %d\n",retval);
274  ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code%d\n",err);
275 
276  len = sizeof(val);
277  val = 0xdeadbeef;
279  ok(!res, "InternetQueryOptionA(INTERNET_OPTION_MAX_CONNS_PER_SERVER) succeeded\n");
280  ok(GetLastError() == ERROR_INTERNET_INVALID_OPERATION, "GetLastError() = %u\n", GetLastError());
281 
282  val = 2;
284  ok(!res, "InternetSetOptionA(INTERNET_OPTION_MAX_CONNS_PER_SERVER) succeeded\n");
285  ok(GetLastError() == ERROR_INTERNET_INVALID_OPERATION, "GetLastError() = %u\n", GetLastError());
286 
287  len = sizeof(val);
289  ok(res, "InternetQueryOptionA failed %d)\n", GetLastError());
290  ok(val == 12345, "val = %d\n", val);
291  ok(len == sizeof(val), "len = %d\n", len);
292 
293  val = 1;
295  ok(res, "InternetSetOptionA(INTERNET_OPTION_CONNECT_TIMEOUT) failed (%u)\n", GetLastError());
296 
297  len = sizeof(val);
299  ok(res, "InternetQueryOptionA failed %d)\n", GetLastError());
300  ok(val == 1, "val = %d\n", val);
301  ok(len == sizeof(val), "len = %d\n", len);
302 
303  len = sizeof(val);
305  ok(res, "InternetQueryOptionA failed %d)\n", GetLastError());
306  ok(val == 12345, "val = %d\n", val);
307  ok(len == sizeof(val), "len = %d\n", len);
308 
309  InternetCloseHandle(hinet);
310 }
311 
312 static void test_max_conns(void)
313 {
314  DWORD len, val;
315  BOOL res;
316 
317  len = sizeof(val);
318  val = 0xdeadbeef;
320  ok(res,"Got wrong return value %x\n", res);
321  ok(len == sizeof(val), "got %d\n", len);
322  trace("INTERNET_OPTION_MAX_CONNS_PER_SERVER: %d\n", val);
323 
324  len = sizeof(val);
325  val = 0xdeadbeef;
327  ok(res,"Got wrong return value %x\n", res);
328  ok(len == sizeof(val), "got %d\n", len);
329  trace("INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER: %d\n", val);
330 
331  val = 3;
333  ok(res, "InternetSetOptionA(INTERNET_OPTION_MAX_CONNS_PER_SERVER) failed: %x\n", res);
334 
335  len = sizeof(val);
336  val = 0xdeadbeef;
338  ok(res,"Got wrong return value %x\n", res);
339  ok(len == sizeof(val), "got %d\n", len);
340  ok(val == 3, "got %d\n", val);
341 
342  val = 0;
344  ok(!res || broken(res), /* <= w2k3 */
345  "InternetSetOptionA(INTERNET_OPTION_MAX_CONNS_PER_SERVER, 0) succeeded\n");
346  if (!res) ok(GetLastError() == ERROR_BAD_ARGUMENTS, "GetLastError() = %u\n", GetLastError());
347 
348  val = 2;
350  ok(!res, "InternetSetOptionA(INTERNET_OPTION_MAX_CONNS_PER_SERVER) succeeded\n");
351  ok(GetLastError() == ERROR_INTERNET_BAD_OPTION_LENGTH, "GetLastError() = %u\n", GetLastError());
352 
353  val = 2;
355  ok(!res, "InternetSetOptionA(INTERNET_OPTION_MAX_CONNS_PER_SERVER) succeeded\n");
356  ok(GetLastError() == ERROR_INTERNET_BAD_OPTION_LENGTH, "GetLastError() = %u\n", GetLastError());
357 }
358 
359 static void test_get_cookie(void)
360 {
361  DWORD len;
362  BOOL ret;
363 
364  len = 1024;
365  SetLastError(0xdeadbeef);
366  ret = InternetGetCookieA("http://www.example.com", NULL, NULL, &len);
368  "InternetGetCookie should have failed with %s and error %d\n",
369  ret ? "TRUE" : "FALSE", GetLastError());
370  ok(!len, "len = %u\n", len);
371 }
372 
373 
374 static void test_complicated_cookie(void)
375 {
376  DWORD len;
377  BOOL ret;
378 
379  CHAR buffer[1024];
380  WCHAR wbuf[1024];
381 
382  static const WCHAR testing_example_comW[] =
383  {'h','t','t','p',':','/','/','t','e','s','t','i','n','g','.','e','x','a','m','p','l','e','.','c','o','m',0};
384 
385  ret = InternetSetCookieA("http://www.example.com/bar",NULL,"A=B; domain=.example.com");
386  ok(ret == TRUE,"InternetSetCookie failed\n");
387  ret = InternetSetCookieA("http://www.example.com/bar",NULL,"C=D; domain=.example.com; path=/");
388  ok(ret == TRUE,"InternetSetCookie failed\n");
389 
390  /* Technically illegal! domain should require 2 dots, but native wininet accepts it */
391  ret = InternetSetCookieA("http://www.example.com",NULL,"E=F; domain=example.com");
392  ok(ret == TRUE,"InternetSetCookie failed\n");
393  ret = InternetSetCookieA("http://www.example.com",NULL,"G=H; domain=.example.com; invalid=attr; path=/foo");
394  ok(ret == TRUE,"InternetSetCookie failed\n");
395  ret = InternetSetCookieA("http://www.example.com/bar.html",NULL,"I=J; domain=.example.com");
396  ok(ret == TRUE,"InternetSetCookie failed\n");
397  ret = InternetSetCookieA("http://www.example.com/bar/",NULL,"K=L; domain=.example.com");
398  ok(ret == TRUE,"InternetSetCookie failed\n");
399  ret = InternetSetCookieA("http://www.example.com/bar/",NULL,"M=N; domain=.example.com; path=/foo/");
400  ok(ret == TRUE,"InternetSetCookie failed\n");
401  ret = InternetSetCookieA("http://www.example.com/bar/",NULL,"O=P; secure; path=/bar");
402  ok(ret == TRUE,"InternetSetCookie failed\n");
403 
404  len = 1024;
405  ret = InternetGetCookieA("http://testing.example.com", NULL, NULL, &len);
406  ok(ret == TRUE,"InternetGetCookie failed\n");
407  ok(len == 19, "len = %u\n", len);
408 
409  len = 1024;
410  memset(buffer, 0xac, sizeof(buffer));
411  ret = InternetGetCookieA("http://testing.example.com", NULL, buffer, &len);
412  ok(ret == TRUE,"InternetGetCookie failed\n");
413  ok(len == 19, "len = %u\n", len);
414  ok(strlen(buffer) == 18, "strlen(buffer) = %u\n", lstrlenA(buffer));
415  ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
416  ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
417  ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
418  ok(strstr(buffer,"G=H")==NULL,"G=H present\n");
419  ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
420  ok(strstr(buffer,"K=L")==NULL,"K=L present\n");
421  ok(strstr(buffer,"M=N")==NULL,"M=N present\n");
422  ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
423 
424  len = 10;
425  memset(buffer, 0xac, sizeof(buffer));
426  ret = InternetGetCookieA("http://testing.example.com", NULL, buffer, &len);
428  "InternetGetCookie returned: %x(%u), expected ERROR_INSUFFICIENT_BUFFER\n", ret, GetLastError());
429  ok(len == 19, "len = %u\n", len);
430 
431  len = 1024;
432  ret = InternetGetCookieW(testing_example_comW, NULL, NULL, &len);
433  ok(ret == TRUE,"InternetGetCookieW failed\n");
434  ok(len == 38, "len = %u\n", len);
435 
436  len = 1024;
437  memset(wbuf, 0xac, sizeof(wbuf));
438  ret = InternetGetCookieW(testing_example_comW, NULL, wbuf, &len);
439  ok(ret == TRUE,"InternetGetCookieW failed\n");
440  ok(len == 19 || broken(len==18), "len = %u\n", len);
441  ok(lstrlenW(wbuf) == 18, "strlenW(wbuf) = %u\n", lstrlenW(wbuf));
442 
443  len = 10;
444  memset(wbuf, 0xac, sizeof(wbuf));
445  ret = InternetGetCookieW(testing_example_comW, NULL, wbuf, &len);
447  "InternetGetCookieW returned: %x(%u), expected ERROR_INSUFFICIENT_BUFFER\n", ret, GetLastError());
448  ok(len == 38, "len = %u\n", len);
449 
450  len = 1024;
451  ret = InternetGetCookieA("http://testing.example.com/foobar", NULL, buffer, &len);
452  ok(ret == TRUE,"InternetGetCookie failed\n");
453  ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
454  ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
455  ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
456  ok(strstr(buffer,"G=H")==NULL,"G=H present\n");
457  ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
458  ok(strstr(buffer,"K=L")==NULL,"K=L present\n");
459  ok(strstr(buffer,"M=N")==NULL,"M=N present\n");
460  ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
461 
462  len = 1024;
463  ret = InternetGetCookieA("http://testing.example.com/foobar/", NULL, buffer, &len);
464  ok(ret == TRUE,"InternetGetCookie failed\n");
465  ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
466  ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
467  ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
468  ok(strstr(buffer,"G=H")!=NULL,"G=H missing\n");
469  ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
470  ok(strstr(buffer,"K=L")==NULL,"K=L present\n");
471  ok(strstr(buffer,"M=N")==NULL,"M=N present\n");
472  ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
473 
474  len = 1024;
475  ret = InternetGetCookieA("http://testing.example.com/foo/bar", NULL, buffer, &len);
476  ok(ret == TRUE,"InternetGetCookie failed\n");
477  ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
478  ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
479  ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
480  ok(strstr(buffer,"G=H")!=NULL,"G=H missing\n");
481  ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
482  ok(strstr(buffer,"K=L")==NULL,"K=L present\n");
483  ok(strstr(buffer,"M=N")!=NULL,"M=N missing\n");
484  ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
485 
486  len = 1024;
487  ret = InternetGetCookieA("http://testing.example.com/barfoo", NULL, buffer, &len);
488  ok(ret == TRUE,"InternetGetCookie failed\n");
489  ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
490  ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
491  ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
492  ok(strstr(buffer,"G=H")==NULL,"G=H present\n");
493  ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
494  ok(strstr(buffer,"K=L")==NULL,"K=L present\n");
495  ok(strstr(buffer,"M=N")==NULL,"M=N present\n");
496  ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
497 
498  len = 1024;
499  ret = InternetGetCookieA("http://testing.example.com/barfoo/", NULL, buffer, &len);
500  ok(ret == TRUE,"InternetGetCookie failed\n");
501  ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
502  ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
503  ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
504  ok(strstr(buffer,"G=H")==NULL,"G=H present\n");
505  ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
506  ok(strstr(buffer,"K=L")==NULL,"K=L present\n");
507  ok(strstr(buffer,"M=N")==NULL,"M=N present\n");
508  ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
509 
510  len = 1024;
511  ret = InternetGetCookieA("http://testing.example.com/bar/foo", NULL, buffer, &len);
512  ok(ret == TRUE,"InternetGetCookie failed\n");
513  ok(len == 24, "len = %u\n", len);
514  ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
515  ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
516  ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
517  ok(strstr(buffer,"G=H")==NULL,"G=H present\n");
518  ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
519  ok(strstr(buffer,"K=L")!=NULL,"K=L missing\n");
520  ok(strstr(buffer,"M=N")==NULL,"M=N present\n");
521  ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
522 
523  /* Cookie name argument is not implemented */
524  len = 1024;
525  ret = InternetGetCookieA("http://testing.example.com/bar/foo", "A", buffer, &len);
526  ok(ret == TRUE,"InternetGetCookie failed\n");
527  ok(len == 24, "len = %u\n", len);
528 
529  /* test persistent cookies */
530  ret = InternetSetCookieA("http://testing.example.com", NULL, "A=B; expires=Fri, 01-Jan-2038 00:00:00 GMT");
531  ok(ret, "InternetSetCookie failed with error %d\n", GetLastError());
532 
533  /* test invalid expires parameter */
534  ret = InternetSetCookieA("http://testing.example.com", NULL, "Q=R; expires=");
535  ok(ret, "InternetSetCookie failed %#x.\n", GetLastError());
536  len = 1024;
537  memset(buffer, 0xac, sizeof(buffer));
538  ret = InternetGetCookieA("http://testing.example.com/", NULL, buffer, &len);
539  ok(ret, "InternetGetCookie failed %#x.\n", GetLastError());
540  ok(len == 29, "got len %u.\n", len);
541  ok(!!strstr(buffer, "Q=R"), "cookie is not present.\n");
542 
543  len = sizeof(buffer);
544  ret = InternetGetCookieA("http://testing.example.com/foobar", NULL, buffer, &len);
545  ok(ret, "got error %#x\n", GetLastError());
546  ok(len == 29, "got len %u\n", len);
547  ok(!!strstr(buffer, "A=B"), "cookie is not present\n");
548 
549  /* remove persistent cookie */
550  ret = InternetSetCookieA("http://testing.example.com", NULL, "A=B");
551  ok(ret, "InternetSetCookie failed with error %d\n", GetLastError());
552 
553  /* try setting cookie for different domain */
554  ret = InternetSetCookieA("http://www.aaa.example.com/bar",NULL,"E=F; domain=different.com");
555  ok(!ret, "InternetSetCookie succeeded\n");
556  ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError() = %d\n", GetLastError());
557  ret = InternetSetCookieA("http://www.aaa.example.com.pl/bar",NULL,"E=F; domain=example.com.pl");
558  ok(ret, "InternetSetCookie failed with error: %d\n", GetLastError());
559  ret = InternetSetCookieA("http://www.aaa.example.com.pl/bar",NULL,"E=F; domain=com.pl");
560  todo_wine ok(!ret, "InternetSetCookie succeeded\n");
561 }
562 
563 static void test_cookie_attrs(void)
564 {
565  char buf[100];
566  DWORD size, state;
567  BOOL ret;
568 
569  if(!GetProcAddress(GetModuleHandleA("wininet.dll"), "DeleteWpadCacheForNetworks")) {
570  win_skip("Skipping cookie attributes tests. Too old IE.\n");
571  return;
572  }
573 
574  ret = InternetSetCookieA("http://cookie.attrs.com/bar", NULL, "A=data; httponly");
575  ok(!ret && GetLastError() == ERROR_INVALID_OPERATION, "InternetSetCookie returned: %x (%u)\n", ret, GetLastError());
576 
577  SetLastError(0xdeadbeef);
578  state = InternetSetCookieExA("http://cookie.attrs.com/bar", NULL, "A=data; httponly", 0, 0);
580  "InternetSetCookieEx returned: %x (%u)\n", ret, GetLastError());
581 
582  size = sizeof(buf);
583  ret = InternetGetCookieExA("http://cookie.attrs.com/", NULL, buf, &size, INTERNET_COOKIE_HTTPONLY, NULL);
584  ok(!ret && GetLastError() == ERROR_NO_MORE_ITEMS, "InternetGetCookieEx returned: %x (%u)\n", ret, GetLastError());
585 
586  state = InternetSetCookieExA("http://cookie.attrs.com/bar",NULL,"A=data; httponly", INTERNET_COOKIE_HTTPONLY, 0);
587  ok(state == COOKIE_STATE_ACCEPT,"InternetSetCookieEx failed: %u\n", GetLastError());
588 
589  size = sizeof(buf);
590  ret = InternetGetCookieA("http://cookie.attrs.com/", NULL, buf, &size);
591  ok(!ret && GetLastError() == ERROR_NO_MORE_ITEMS, "InternetGetCookie returned: %x (%u)\n", ret, GetLastError());
592 
593  size = sizeof(buf);
594  ret = InternetGetCookieExA("http://cookie.attrs.com/", NULL, buf, &size, 0, NULL);
595  ok(!ret && GetLastError() == ERROR_NO_MORE_ITEMS, "InternetGetCookieEx returned: %x (%u)\n", ret, GetLastError());
596 
597  size = sizeof(buf);
598  ret = InternetGetCookieExA("http://cookie.attrs.com/", NULL, buf, &size, INTERNET_COOKIE_HTTPONLY, NULL);
599  ok(ret, "InternetGetCookieEx failed: %u\n", GetLastError());
600  ok(!strcmp(buf, "A=data"), "data = %s\n", buf);
601 
602  /* Try to override httponly cookie with non-httponly one */
603  ret = InternetSetCookieA("http://cookie.attrs.com/bar", NULL, "A=test");
604  ok(!ret && GetLastError() == ERROR_INVALID_OPERATION, "InternetSetCookie returned: %x (%u)\n", ret, GetLastError());
605 
606  SetLastError(0xdeadbeef);
607  state = InternetSetCookieExA("http://cookie.attrs.com/bar", NULL, "A=data", 0, 0);
609  "InternetSetCookieEx returned: %x (%u)\n", ret, GetLastError());
610 
611  size = sizeof(buf);
612  ret = InternetGetCookieExA("http://cookie.attrs.com/", NULL, buf, &size, INTERNET_COOKIE_HTTPONLY, NULL);
613  ok(ret, "InternetGetCookieEx failed: %u\n", GetLastError());
614  ok(!strcmp(buf, "A=data"), "data = %s\n", buf);
615 
616 }
617 
618 static void test_cookie_url(void)
619 {
620  char long_url[5000] = "http://long.url.test.com/", *p;
621  WCHAR bufw[512];
622  char buf[512];
623  DWORD len;
624  BOOL res;
625 
626  static const WCHAR about_blankW[] = {'a','b','o','u','t',':','b','l','a','n','k',0};
627 
628  len = sizeof(buf);
629  res = InternetGetCookieA("about:blank", NULL, buf, &len);
631  "InternetGetCookeA failed: %u, expected ERROR_INVALID_PARAMETER\n", GetLastError());
632 
633  len = ARRAY_SIZE(bufw);
636  "InternetGetCookeW failed: %u, expected ERROR_INVALID_PARAMETER\n", GetLastError());
637 
638  len = sizeof(buf);
639  res = pInternetGetCookieExA("about:blank", NULL, buf, &len, 0, NULL);
641  "InternetGetCookeExA failed: %u, expected ERROR_INVALID_PARAMETER\n", GetLastError());
642 
643  len = ARRAY_SIZE(bufw);
644  res = pInternetGetCookieExW(about_blankW, NULL, bufw, &len, 0, NULL);
646  "InternetGetCookeExW failed: %u, expected ERROR_INVALID_PARAMETER\n", GetLastError());
647 
648  p = long_url + strlen(long_url);
649  memset(p, 'x', long_url+sizeof(long_url)-p);
650  p += (long_url+sizeof(long_url)-p) - 3;
651  p[0] = '/';
652  p[2] = 0;
653  res = InternetSetCookieA(long_url, NULL, "A=B");
654  ok(res, "InternetSetCookieA failed: %u\n", GetLastError());
655 
656  len = sizeof(buf);
657  res = InternetGetCookieA(long_url, NULL, buf, &len);
658  ok(res, "InternetGetCookieA failed: %u\n", GetLastError());
659  ok(!strcmp(buf, "A=B"), "buf = %s\n", buf);
660 
661  len = sizeof(buf);
662  res = InternetGetCookieA("http://long.url.test.com/", NULL, buf, &len);
663  ok(!res && GetLastError() == ERROR_NO_MORE_ITEMS, "InternetGetCookieA failed: %u\n", GetLastError());
664 }
665 
666 static void test_null(void)
667 {
668  HINTERNET hi, hc;
669  static const WCHAR szServer[] = { 's','e','r','v','e','r',0 };
670  static const WCHAR szServer2[] = { 's','e','r','v','e','r','=',0 };
671  static const WCHAR szEmpty[] = { 0 };
672  static const WCHAR szUrl[] = { 'h','t','t','p',':','/','/','a','.','b','.','c',0 };
673  static const WCHAR szUrlEmpty[] = { 'h','t','t','p',':','/','/',0 };
674  static const WCHAR szExpect[] = { 's','e','r','v','e','r',';',' ','s','e','r','v','e','r',0 };
675  WCHAR buffer[0x20];
676  BOOL r;
677  DWORD sz;
678 
679  SetLastError(0xdeadbeef);
680  hi = InternetOpenW(NULL, 0, NULL, NULL, 0);
681  if (hi == NULL && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
682  {
683  win_skip("Internet*W functions are not implemented\n");
684  return;
685  }
686  ok(hi != NULL, "open failed\n");
687 
688  hc = InternetConnectW(hi, NULL, 0, NULL, NULL, 0, 0, 0);
689  ok(GetLastError() == ERROR_INVALID_PARAMETER, "wrong error\n");
690  ok(hc == NULL, "connect failed\n");
691 
692  hc = InternetConnectW(hi, NULL, 0, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
693  ok(GetLastError() == ERROR_INVALID_PARAMETER, "wrong error\n");
694  ok(hc == NULL, "connect failed\n");
695 
696  hc = InternetConnectW(hi, NULL, 0, NULL, NULL, INTERNET_SERVICE_FTP, 0, 0);
697  ok(GetLastError() == ERROR_INVALID_PARAMETER, "wrong error\n");
698  ok(hc == NULL, "connect failed\n");
699 
700  hc = InternetConnectW(NULL, szServer, 0, NULL, NULL, INTERNET_SERVICE_FTP, 0, 0);
701  ok(GetLastError() == ERROR_INVALID_HANDLE, "wrong error\n");
702  ok(hc == NULL, "connect failed\n");
703 
704  hc = InternetOpenUrlW(hi, NULL, NULL, 0, 0, 0);
706  GetLastError() == ERROR_INTERNET_UNRECOGNIZED_SCHEME, "wrong error\n");
707  ok(hc == NULL, "connect failed\n");
708 
709  hc = InternetOpenUrlW(hi, szServer, NULL, 0, 0, 0);
710  ok(GetLastError() == ERROR_INTERNET_UNRECOGNIZED_SCHEME, "wrong error\n");
711  ok(hc == NULL, "connect failed\n");
712 
714 
716  ok(GetLastError() == ERROR_INVALID_PARAMETER, "wrong error\n");
717  ok(r == FALSE, "return wrong\n");
718 
719  r = InternetSetCookieW(szServer, NULL, NULL);
720  ok(GetLastError() == ERROR_INVALID_PARAMETER, "wrong error\n");
721  ok(r == FALSE, "return wrong\n");
722 
723  r = InternetSetCookieW(szUrl, szServer, NULL);
724  ok(GetLastError() == ERROR_INVALID_PARAMETER, "wrong error\n");
725  ok(r == FALSE, "return wrong\n");
726 
727  r = InternetSetCookieW(szUrl, szServer, szServer);
728  ok(r == TRUE, "return wrong\n");
729 
730  r = InternetSetCookieW(szUrl, NULL, szServer);
731  ok(r == TRUE, "return wrong\n");
732 
733  r = InternetSetCookieW(szUrl, szServer, szEmpty);
734  ok(r == TRUE, "return wrong\n");
735 
736  r = InternetSetCookieW(szUrlEmpty, szServer, szServer);
737  ok(r == FALSE, "return wrong\n");
738 
739  r = InternetSetCookieW(szServer, NULL, szServer);
740  ok(GetLastError() == ERROR_INTERNET_UNRECOGNIZED_SCHEME, "wrong error\n");
741  ok(r == FALSE, "return wrong\n");
742 
743  sz = 0;
744  r = InternetGetCookieW(NULL, NULL, NULL, &sz);
746  "wrong error %u\n", GetLastError());
747  ok( r == FALSE, "return wrong\n");
748 
749  r = InternetGetCookieW(szServer, NULL, NULL, &sz);
750  todo_wine {
751  ok(GetLastError() == ERROR_INTERNET_UNRECOGNIZED_SCHEME, "wrong error\n");
752  }
753  ok( r == FALSE, "return wrong\n");
754 
755  sz = 0;
756  r = InternetGetCookieW(szUrlEmpty, szServer, NULL, &sz);
757  ok( r == FALSE, "return wrong\n");
758 
759  sz = 0;
760  r = InternetGetCookieW(szUrl, szServer, NULL, &sz);
761  ok( r == TRUE, "return wrong\n");
762 
763  /* sz is 14 on XP SP2 and beyond, 30 on XP SP1 and before, 16 on IE11 */
764  ok( sz == 14 || sz == 16 || sz == 30, "sz wrong, got %u, expected 14, 16 or 30\n", sz);
765 
766  sz = 0x20;
767  memset(buffer, 0, sizeof buffer);
768  r = InternetGetCookieW(szUrl, szServer, buffer, &sz);
769  ok( r == TRUE, "return wrong\n");
770 
771  /* sz == lstrlenW(buffer) only in XP SP1 */
772  ok( sz == 1 + lstrlenW(buffer) || sz == lstrlenW(buffer), "sz wrong %d\n", sz);
773 
774  /* before XP SP2, buffer is "server; server" */
775  ok( !lstrcmpW(szExpect, buffer) || !lstrcmpW(szServer, buffer) || !lstrcmpW(szServer2, buffer),
776  "cookie data wrong %s\n", wine_dbgstr_w(buffer));
777 
778  sz = sizeof(buffer);
780  ok(r == TRUE, "ret %d\n", r);
781 }
782 
783 static void test_version(void)
784 {
786  DWORD size;
787  BOOL res;
788 
789  size = sizeof(version);
791  ok(res, "Could not get version: %u\n", GetLastError());
792  ok(version.dwMajorVersion == 1, "dwMajorVersion=%d, expected 1\n", version.dwMajorVersion);
793  ok(version.dwMinorVersion == 2, "dwMinorVersion=%d, expected 2\n", version.dwMinorVersion);
794 }
795 
797 {
798  BOOL ret;
799  static const SYSTEMTIME time = { 2005, 1, 5, 7, 12, 6, 35, 0 };
800  char string[INTERNET_RFC1123_BUFSIZE];
801  static const char expect[] = "Fri, 07 Jan 2005 12:06:35 GMT";
802  DWORD error;
803 
804  ret = pInternetTimeFromSystemTimeA( &time, INTERNET_RFC1123_FORMAT, string, sizeof(string) );
805  ok( ret, "InternetTimeFromSystemTimeA failed (%u)\n", GetLastError() );
806 
807  ok( !memcmp( string, expect, sizeof(expect) ),
808  "InternetTimeFromSystemTimeA failed (%u)\n", GetLastError() );
809 
810  /* test NULL time parameter */
811  SetLastError(0xdeadbeef);
812  ret = pInternetTimeFromSystemTimeA( NULL, INTERNET_RFC1123_FORMAT, string, sizeof(string) );
813  error = GetLastError();
814  ok( !ret, "InternetTimeFromSystemTimeA should have returned FALSE\n" );
816  "InternetTimeFromSystemTimeA failed with ERROR_INVALID_PARAMETER instead of %u\n",
817  error );
818 
819  /* test NULL string parameter */
820  SetLastError(0xdeadbeef);
821  ret = pInternetTimeFromSystemTimeA( &time, INTERNET_RFC1123_FORMAT, NULL, sizeof(string) );
822  error = GetLastError();
823  ok( !ret, "InternetTimeFromSystemTimeA should have returned FALSE\n" );
825  "InternetTimeFromSystemTimeA failed with ERROR_INVALID_PARAMETER instead of %u\n",
826  error );
827 
828  /* test invalid format parameter */
829  SetLastError(0xdeadbeef);
830  ret = pInternetTimeFromSystemTimeA( &time, INTERNET_RFC1123_FORMAT + 1, string, sizeof(string) );
831  error = GetLastError();
832  ok( !ret, "InternetTimeFromSystemTimeA should have returned FALSE\n" );
834  "InternetTimeFromSystemTimeA failed with ERROR_INVALID_PARAMETER instead of %u\n",
835  error );
836 
837  /* test too small buffer size */
838  SetLastError(0xdeadbeef);
839  ret = pInternetTimeFromSystemTimeA( &time, INTERNET_RFC1123_FORMAT, string, 0 );
840  error = GetLastError();
841  ok( !ret, "InternetTimeFromSystemTimeA should have returned FALSE\n" );
843  "InternetTimeFromSystemTimeA failed with ERROR_INSUFFICIENT_BUFFER instead of %u\n",
844  error );
845 }
846 
848 {
849  BOOL ret;
850  static const SYSTEMTIME time = { 2005, 1, 5, 7, 12, 6, 35, 0 };
851  WCHAR string[INTERNET_RFC1123_BUFSIZE + 1];
852  static const WCHAR expect[] = { 'F','r','i',',',' ','0','7',' ','J','a','n',' ','2','0','0','5',' ',
853  '1','2',':','0','6',':','3','5',' ','G','M','T',0 };
854  DWORD error;
855 
856  ret = pInternetTimeFromSystemTimeW( &time, INTERNET_RFC1123_FORMAT, string, sizeof(string) );
857  ok( ret, "InternetTimeFromSystemTimeW failed (%u)\n", GetLastError() );
858 
859  ok( !memcmp( string, expect, sizeof(expect) ),
860  "InternetTimeFromSystemTimeW failed (%u)\n", GetLastError() );
861 
862  /* test NULL time parameter */
863  SetLastError(0xdeadbeef);
864  ret = pInternetTimeFromSystemTimeW( NULL, INTERNET_RFC1123_FORMAT, string, sizeof(string) );
865  error = GetLastError();
866  ok( !ret, "InternetTimeFromSystemTimeW should have returned FALSE\n" );
868  "InternetTimeFromSystemTimeW failed with ERROR_INVALID_PARAMETER instead of %u\n",
869  error );
870 
871  /* test NULL string parameter */
872  SetLastError(0xdeadbeef);
873  ret = pInternetTimeFromSystemTimeW( &time, INTERNET_RFC1123_FORMAT, NULL, sizeof(string) );
874  error = GetLastError();
875  ok( !ret, "InternetTimeFromSystemTimeW should have returned FALSE\n" );
877  "InternetTimeFromSystemTimeW failed with ERROR_INVALID_PARAMETER instead of %u\n",
878  error );
879 
880  /* test invalid format parameter */
881  SetLastError(0xdeadbeef);
882  ret = pInternetTimeFromSystemTimeW( &time, INTERNET_RFC1123_FORMAT + 1, string, sizeof(string) );
883  error = GetLastError();
884  ok( !ret, "InternetTimeFromSystemTimeW should have returned FALSE\n" );
886  "InternetTimeFromSystemTimeW failed with ERROR_INVALID_PARAMETER instead of %u\n",
887  error );
888 
889  /* test too small buffer size */
890  SetLastError(0xdeadbeef);
891  ret = pInternetTimeFromSystemTimeW( &time, INTERNET_RFC1123_FORMAT, string, ARRAY_SIZE(string));
892  error = GetLastError();
893  ok( !ret, "InternetTimeFromSystemTimeW should have returned FALSE\n" );
895  "InternetTimeFromSystemTimeW failed with ERROR_INSUFFICIENT_BUFFER instead of %u\n",
896  error );
897 }
898 
900 {
901  BOOL ret;
903  static const SYSTEMTIME expect = { 2005, 1, 5, 7, 12, 6, 35, 0 };
904  static const char string[] = "Fri, 07 Jan 2005 12:06:35 GMT";
905  static const char string2[] = " fri 7 jan 2005 12 06 35";
906 
907  ret = pInternetTimeToSystemTimeA( string, &time, 0 );
908  ok( ret, "InternetTimeToSystemTimeA failed (%u)\n", GetLastError() );
909  ok( !memcmp( &time, &expect, sizeof(expect) ),
910  "InternetTimeToSystemTimeA failed (%u)\n", GetLastError() );
911 
912  ret = pInternetTimeToSystemTimeA( string2, &time, 0 );
913  ok( ret, "InternetTimeToSystemTimeA failed (%u)\n", GetLastError() );
914  ok( !memcmp( &time, &expect, sizeof(expect) ),
915  "InternetTimeToSystemTimeA failed (%u)\n", GetLastError() );
916 }
917 
919 {
920  BOOL ret;
922  static const SYSTEMTIME expect = { 2005, 1, 5, 7, 12, 6, 35, 0 };
923  static const WCHAR string[] = { 'F','r','i',',',' ','0','7',' ','J','a','n',' ','2','0','0','5',' ',
924  '1','2',':','0','6',':','3','5',' ','G','M','T',0 };
925  static const WCHAR string2[] = { ' ','f','r','i',' ','7',' ','j','a','n',' ','2','0','0','5',' ',
926  '1','2',' ','0','6',' ','3','5',0 };
927  static const WCHAR string3[] = { 'F','r',0 };
928 
929  ret = pInternetTimeToSystemTimeW( NULL, NULL, 0 );
930  ok( !ret, "InternetTimeToSystemTimeW succeeded (%u)\n", GetLastError() );
931 
932  ret = pInternetTimeToSystemTimeW( NULL, &time, 0 );
933  ok( !ret, "InternetTimeToSystemTimeW succeeded (%u)\n", GetLastError() );
934 
935  ret = pInternetTimeToSystemTimeW( string, NULL, 0 );
936  ok( !ret, "InternetTimeToSystemTimeW succeeded (%u)\n", GetLastError() );
937 
938  ret = pInternetTimeToSystemTimeW( string, &time, 0 );
939  ok( ret, "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
940 
941  ret = pInternetTimeToSystemTimeW( string, &time, 0 );
942  ok( ret, "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
943  ok( !memcmp( &time, &expect, sizeof(expect) ),
944  "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
945 
946  ret = pInternetTimeToSystemTimeW( string2, &time, 0 );
947  ok( ret, "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
948  ok( !memcmp( &time, &expect, sizeof(expect) ),
949  "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
950 
951  ret = pInternetTimeToSystemTimeW( string3, &time, 0 );
952  ok( ret, "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
953 }
954 
956 {
957  BOOL ret;
958  static const WCHAR empty[] = {0};
959  static const WCHAR dot[] = {'.',0};
960  static const WCHAR uk[] = {'u','k',0};
961  static const WCHAR com[] = {'c','o','m',0};
962  static const WCHAR dot_com[] = {'.','c','o','m',0};
963  static const WCHAR gmail_com[] = {'g','m','a','i','l','.','c','o','m',0};
964  static const WCHAR dot_gmail_com[] = {'.','g','m','a','i','l','.','c','o','m',0};
965  static const WCHAR www_gmail_com[] = {'w','w','w','.','g','m','a','i','l','.','c','o','m',0};
966  static const WCHAR www_mail_gmail_com[] = {'w','w','w','.','m','a','i','l','.','g','m','a','i','l','.','c','o','m',0};
967  static const WCHAR mail_gmail_com[] = {'m','a','i','l','.','g','m','a','i','l','.','c','o','m',0};
968  static const WCHAR gmail_co_uk[] = {'g','m','a','i','l','.','c','o','.','u','k',0};
969  static const WCHAR co_uk[] = {'c','o','.','u','k',0};
970  static const WCHAR dot_co_uk[] = {'.','c','o','.','u','k',0};
971 
972  SetLastError(0xdeadbeef);
973  ret = pIsDomainLegalCookieDomainW(NULL, NULL);
975  {
976  win_skip("IsDomainLegalCookieDomainW is not implemented\n");
977  return;
978  }
979  ok(!ret ||
980  broken(ret), /* IE6 */
981  "IsDomainLegalCookieDomainW succeeded\n");
982 
983  SetLastError(0xdeadbeef);
984  ret = pIsDomainLegalCookieDomainW(com, NULL);
985  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
986 
987  SetLastError(0xdeadbeef);
988  ret = pIsDomainLegalCookieDomainW(NULL, gmail_com);
989  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
990 
991  SetLastError(0xdeadbeef);
992  ret = pIsDomainLegalCookieDomainW(empty, gmail_com);
993  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
994 
995  SetLastError(0xdeadbeef);
996  ret = pIsDomainLegalCookieDomainW(com, empty);
997  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
998 
999  SetLastError(0xdeadbeef);
1000  ret = pIsDomainLegalCookieDomainW(gmail_com, dot);
1001  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1002 
1003  SetLastError(0xdeadbeef);
1004  ret = pIsDomainLegalCookieDomainW(dot, gmail_com);
1005  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1006 
1007  SetLastError(0xdeadbeef);
1008  ret = pIsDomainLegalCookieDomainW(com, com);
1009  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1010 
1011  SetLastError(0xdeadbeef);
1012  ret = pIsDomainLegalCookieDomainW(com, dot_com);
1013  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1014 
1015  SetLastError(0xdeadbeef);
1016  ret = pIsDomainLegalCookieDomainW(dot_com, com);
1017  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1018 
1019  SetLastError(0xdeadbeef);
1020  ret = pIsDomainLegalCookieDomainW(com, gmail_com);
1021  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1022 
1023  ret = pIsDomainLegalCookieDomainW(gmail_com, gmail_com);
1024  ok(ret, "IsDomainLegalCookieDomainW failed\n");
1025 
1026  ret = pIsDomainLegalCookieDomainW(gmail_com, www_gmail_com);
1027  ok(ret, "IsDomainLegalCookieDomainW failed\n");
1028 
1029  ret = pIsDomainLegalCookieDomainW(gmail_com, www_mail_gmail_com);
1030  ok(ret, "IsDomainLegalCookieDomainW failed\n");
1031 
1032  SetLastError(0xdeadbeef);
1033  ret = pIsDomainLegalCookieDomainW(gmail_co_uk, co_uk);
1034  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1035 
1036  ret = pIsDomainLegalCookieDomainW(uk, co_uk);
1037  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1038 
1039  ret = pIsDomainLegalCookieDomainW(gmail_co_uk, dot_co_uk);
1040  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1041 
1042  ret = pIsDomainLegalCookieDomainW(co_uk, gmail_co_uk);
1043  todo_wine ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1044 
1045  ret = pIsDomainLegalCookieDomainW(gmail_co_uk, gmail_co_uk);
1046  ok(ret, "IsDomainLegalCookieDomainW failed\n");
1047 
1048  ret = pIsDomainLegalCookieDomainW(gmail_com, com);
1049  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1050 
1051  SetLastError(0xdeadbeef);
1052  ret = pIsDomainLegalCookieDomainW(dot_gmail_com, mail_gmail_com);
1053  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1054 
1055  ret = pIsDomainLegalCookieDomainW(gmail_com, mail_gmail_com);
1056  ok(ret, "IsDomainLegalCookieDomainW failed\n");
1057 
1058  ret = pIsDomainLegalCookieDomainW(mail_gmail_com, gmail_com);
1059  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1060 
1061  ret = pIsDomainLegalCookieDomainW(mail_gmail_com, com);
1062  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1063 
1064  ret = pIsDomainLegalCookieDomainW(dot_gmail_com, mail_gmail_com);
1065  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1066 
1067  ret = pIsDomainLegalCookieDomainW(mail_gmail_com, dot_gmail_com);
1068  ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
1069 }
1070 
1072 {
1073  DWORD ret, zone, type, template, old_template, pref_size = 0;
1074  WCHAR pref[256];
1075 
1076  zone = 3;
1077  type = 0;
1078  ret = pPrivacyGetZonePreferenceW(zone, type, NULL, NULL, NULL);
1079  ok(ret == 0, "expected ret == 0, got %u\n", ret);
1080 
1081  old_template = 0;
1082  ret = pPrivacyGetZonePreferenceW(zone, type, &old_template, NULL, NULL);
1083  ok(ret == 0, "expected ret == 0, got %u\n", ret);
1084 
1085  trace("template %u\n", old_template);
1086 
1087  if(old_template == PRIVACY_TEMPLATE_ADVANCED) {
1088  pref_size = ARRAY_SIZE(pref);
1089  ret = pPrivacyGetZonePreferenceW(zone, type, &old_template, pref, &pref_size);
1090  ok(ret == 0, "expected ret == 0, got %u\n", ret);
1091  }
1092 
1093  template = 5;
1094  ret = pPrivacySetZonePreferenceW(zone, type, template, NULL);
1095  ok(ret == 0, "expected ret == 0, got %u\n", ret);
1096 
1097  template = 0;
1098  ret = pPrivacyGetZonePreferenceW(zone, type, &template, NULL, NULL);
1099  ok(ret == 0, "expected ret == 0, got %u\n", ret);
1100  ok(template == 5, "expected template == 5, got %u\n", template);
1101 
1102  template = 5;
1103  ret = pPrivacySetZonePreferenceW(zone, type, old_template, pref_size ? pref : NULL);
1104  ok(ret == 0, "expected ret == 0, got %u\n", ret);
1105 }
1106 
1107 static void test_InternetSetOption(void)
1108 {
1109  HINTERNET ses, con, req;
1110  ULONG ulArg;
1111  DWORD size;
1112  BOOL ret;
1113 
1115  ok(ses != 0, "InternetOpen failed: 0x%08x\n", GetLastError());
1116  con = InternetConnectA(ses, "www.winehq.org", 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
1117  ok(con != 0, "InternetConnect failed: 0x%08x\n", GetLastError());
1118  req = HttpOpenRequestA(con, "GET", "/", NULL, NULL, NULL, 0, 0);
1119  ok(req != 0, "HttpOpenRequest failed: 0x%08x\n", GetLastError());
1120 
1121  /* INTERNET_OPTION_POLICY tests */
1122  SetLastError(0xdeadbeef);
1124  ok(ret == FALSE, "InternetSetOption should've failed\n");
1125  ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError should've "
1126  "given ERROR_INVALID_PARAMETER, gave: 0x%08x\n", GetLastError());
1127 
1128  SetLastError(0xdeadbeef);
1130  ok(ret == FALSE, "InternetQueryOption should've failed\n");
1131  ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError should've "
1132  "given ERROR_INVALID_PARAMETER, gave: 0x%08x\n", GetLastError());
1133 
1134  /* INTERNET_OPTION_ERROR_MASK tests */
1135  SetLastError(0xdeadbeef);
1136  size = sizeof(ulArg);
1138  ok(ret == FALSE, "InternetQueryOption should've failed\n");
1139  ok(GetLastError() == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "GetLastError() = %x\n", GetLastError());
1140 
1141  SetLastError(0xdeadbeef);
1142  ulArg = 11;
1143  ret = InternetSetOptionA(NULL, INTERNET_OPTION_ERROR_MASK, (void*)&ulArg, sizeof(ULONG));
1144  ok(ret == FALSE, "InternetSetOption should've failed\n");
1145  ok(GetLastError() == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "GetLastError() = %x\n", GetLastError());
1146 
1147  SetLastError(0xdeadbeef);
1148  ulArg = 11;
1149  ret = InternetSetOptionA(req, INTERNET_OPTION_ERROR_MASK, (void*)&ulArg, 20);
1150  ok(ret == FALSE, "InternetSetOption should've failed\n");
1151  ok(GetLastError() == ERROR_INTERNET_BAD_OPTION_LENGTH, "GetLastError() = %d\n", GetLastError());
1152 
1153  ulArg = 11;
1154  ret = InternetSetOptionA(req, INTERNET_OPTION_ERROR_MASK, (void*)&ulArg, sizeof(ULONG));
1155  ok(ret == TRUE, "InternetSetOption should've succeeded\n");
1156 
1157  SetLastError(0xdeadbeef);
1158  ulArg = 4;
1159  ret = InternetSetOptionA(req, INTERNET_OPTION_ERROR_MASK, (void*)&ulArg, sizeof(ULONG));
1160  ok(ret == FALSE, "InternetSetOption should've failed\n");
1161  ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError() = %x\n", GetLastError());
1162 
1163  SetLastError(0xdeadbeef);
1164  ulArg = 16;
1165  ret = InternetSetOptionA(req, INTERNET_OPTION_ERROR_MASK, (void*)&ulArg, sizeof(ULONG));
1166  ok(ret == FALSE, "InternetSetOption should've failed\n");
1167  ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError() = %x\n", GetLastError());
1168 
1170  ok(ret == TRUE, "InternetSetOption should've succeeded\n");
1171 
1173  ok(ret == TRUE, "InternetSetOption should've succeeded\n");
1174 
1176  ok(ret == TRUE, "InternetSetOption should've succeeded\n");
1177 
1179  ok(ret == TRUE, "InternetSetOption should've succeeded\n");
1180 
1181  SetLastError(0xdeadbeef);
1183  ok(ret == FALSE, "InternetSetOption should've failed\n");
1184  ok(GetLastError() == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "GetLastError() = %u\n", GetLastError());
1185 
1186  SetLastError(0xdeadbeef);
1188  ok(ret == FALSE, "InternetSetOption should've failed\n");
1189  ok(GetLastError() == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "GetLastError() = %u\n", GetLastError());
1190 
1191  ret = InternetCloseHandle(req);
1192  ok(ret == TRUE, "InternetCloseHandle failed: 0x%08x\n", GetLastError());
1193  ret = InternetCloseHandle(con);
1194  ok(ret == TRUE, "InternetCloseHandle failed: 0x%08x\n", GetLastError());
1195  ret = InternetCloseHandle(ses);
1196  ok(ret == TRUE, "InternetCloseHandle failed: 0x%08x\n", GetLastError());
1197 }
1198 
1199 static void test_end_browser_session(void)
1200 {
1201  DWORD len;
1202  BOOL ret;
1203 
1204  ret = InternetSetCookieA("http://www.example.com/test_end", NULL, "A=B");
1205  ok(ret == TRUE, "InternetSetCookie failed\n");
1206 
1207  len = 1024;
1208  ret = InternetGetCookieA("http://www.example.com/test_end", NULL, NULL, &len);
1209  ok(ret == TRUE,"InternetGetCookie failed\n");
1210  ok(len != 0, "len = 0\n");
1211 
1213  ok(ret, "InternetSetOption(INTERNET_OPTION_END_BROWSER_SESSION) failed: %u\n", GetLastError());
1214 
1215  len = 1024;
1216  ret = InternetGetCookieA("http://www.example.com/test_end", NULL, NULL, &len);
1217  ok(!ret && GetLastError() == ERROR_NO_MORE_ITEMS, "InternetGetCookie returned %x (%u)\n", ret, GetLastError());
1218  ok(!len, "len = %u\n", len);
1219 }
1220 
1221 #define verifyProxyEnable(e) r_verifyProxyEnable(__LINE__, e)
1223 {
1224  HKEY hkey;
1225  DWORD type, val, size = sizeof(DWORD);
1226  LONG ret;
1227  static const CHAR szInternetSettings[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
1228  static const CHAR szProxyEnable[] = "ProxyEnable";
1229 
1231  ok_(__FILE__,l) (!ret, "RegOpenKeyA failed: 0x%08x\n", ret);
1232 
1233  ret = RegQueryValueExA(hkey, szProxyEnable, 0, &type, (BYTE*)&val, &size);
1234  ok_(__FILE__,l) (!ret, "RegQueryValueExA failed: 0x%08x\n", ret);
1235  ok_(__FILE__,l) (type == REG_DWORD, "Expected regtype to be REG_DWORD, was: %d\n", type);
1236  ok_(__FILE__,l) (val == exp, "Expected ProxyEnabled to be %d, got: %d\n", exp, val);
1237 
1238  ret = RegCloseKey(hkey);
1239  ok_(__FILE__,l) (!ret, "RegCloseKey failed: 0x%08x\n", ret);
1240 }
1241 
1243 {
1244  BOOL ret;
1247  INTERNET_PER_CONN_OPTIONW *orig_settings;
1248  static WCHAR proxy_srvW[] = {'p','r','o','x','y','.','e','x','a','m','p','l','e',0};
1249 
1250  /* get the global IE proxy server info, to restore later */
1251  list.dwOptionCount = 2;
1252  list.pOptions = HeapAlloc(GetProcessHeap(), 0, 2 * sizeof(INTERNET_PER_CONN_OPTIONW));
1253 
1254  list.pOptions[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
1255  list.pOptions[1].dwOption = INTERNET_PER_CONN_FLAGS;
1256 
1258  &list, &size);
1259  ok(ret == TRUE, "InternetQueryOption should've succeeded\n");
1260  orig_settings = list.pOptions;
1261 
1262  /* set the global IE proxy server */
1263  list.dwOptionCount = 2;
1264  list.pOptions = HeapAlloc(GetProcessHeap(), 0, 2 * sizeof(INTERNET_PER_CONN_OPTIONW));
1265 
1266  list.pOptions[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
1267  list.pOptions[0].Value.pszValue = proxy_srvW;
1268  list.pOptions[1].dwOption = INTERNET_PER_CONN_FLAGS;
1269  list.pOptions[1].Value.dwValue = PROXY_TYPE_PROXY;
1270 
1272  &list, size);
1273  ok(ret == TRUE, "InternetSetOption should've succeeded\n");
1274 
1275  HeapFree(GetProcessHeap(), 0, list.pOptions);
1276 
1277  /* get & verify the global IE proxy server */
1278  list.dwOptionCount = 2;
1279  list.dwOptionError = 0;
1280  list.pOptions = HeapAlloc(GetProcessHeap(), 0, 2 * sizeof(INTERNET_PER_CONN_OPTIONW));
1281 
1282  list.pOptions[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
1283  list.pOptions[1].dwOption = INTERNET_PER_CONN_FLAGS;
1284 
1286  &list, &size);
1287  ok(ret == TRUE, "InternetQueryOption should've succeeded\n");
1288  ok(!lstrcmpW(list.pOptions[0].Value.pszValue, proxy_srvW),
1289  "Retrieved proxy server should've been %s, was: %s\n",
1290  wine_dbgstr_w(proxy_srvW), wine_dbgstr_w(list.pOptions[0].Value.pszValue));
1291  ok(list.pOptions[1].Value.dwValue == PROXY_TYPE_PROXY,
1292  "Retrieved flags should've been PROXY_TYPE_PROXY, was: %d\n",
1293  list.pOptions[1].Value.dwValue);
1294  verifyProxyEnable(1);
1295 
1296  HeapFree(GetProcessHeap(), 0, list.pOptions[0].Value.pszValue);
1297  HeapFree(GetProcessHeap(), 0, list.pOptions);
1298 
1299  /* disable the proxy server */
1300  list.dwOptionCount = 1;
1301  list.pOptions = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERNET_PER_CONN_OPTIONW));
1302 
1303  list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
1304  list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT;
1305 
1307  &list, size);
1308  ok(ret == TRUE, "InternetSetOption should've succeeded\n");
1309 
1310  HeapFree(GetProcessHeap(), 0, list.pOptions);
1311 
1312  /* verify that the proxy is disabled */
1313  list.dwOptionCount = 1;
1314  list.dwOptionError = 0;
1315  list.pOptions = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERNET_PER_CONN_OPTIONW));
1316 
1317  list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
1318 
1320  &list, &size);
1321  ok(ret == TRUE, "InternetQueryOption should've succeeded\n");
1322  ok(list.pOptions[0].Value.dwValue == PROXY_TYPE_DIRECT,
1323  "Retrieved flags should've been PROXY_TYPE_DIRECT, was: %d\n",
1324  list.pOptions[0].Value.dwValue);
1325  verifyProxyEnable(0);
1326 
1327  HeapFree(GetProcessHeap(), 0, list.pOptions);
1328 
1329  /* set the proxy flags to 'invalid' value */
1330  list.dwOptionCount = 1;
1331  list.pOptions = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERNET_PER_CONN_OPTIONW));
1332 
1333  list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
1334  list.pOptions[0].Value.dwValue = PROXY_TYPE_PROXY | PROXY_TYPE_DIRECT;
1335 
1337  &list, size);
1338  ok(ret == TRUE, "InternetSetOption should've succeeded\n");
1339 
1340  HeapFree(GetProcessHeap(), 0, list.pOptions);
1341 
1342  /* verify that the proxy is enabled */
1343  list.dwOptionCount = 1;
1344  list.dwOptionError = 0;
1345  list.pOptions = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERNET_PER_CONN_OPTIONW));
1346 
1347  list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
1348 
1350  &list, &size);
1351  ok(ret == TRUE, "InternetQueryOption should've succeeded\n");
1352  todo_wine ok(list.pOptions[0].Value.dwValue == (PROXY_TYPE_PROXY | PROXY_TYPE_DIRECT),
1353  "Retrieved flags should've been PROXY_TYPE_PROXY | PROXY_TYPE_DIRECT, was: %d\n",
1354  list.pOptions[0].Value.dwValue);
1355  verifyProxyEnable(1);
1356 
1357  HeapFree(GetProcessHeap(), 0, list.pOptions);
1358 
1359  /* restore original settings */
1360  list.dwOptionCount = 2;
1361  list.pOptions = orig_settings;
1362 
1364  &list, size);
1365  ok(ret == TRUE, "InternetSetOption should've succeeded\n");
1366 
1367  HeapFree(GetProcessHeap(), 0, list.pOptions);
1368 }
1369 
1371 {
1372  BOOL ret;
1375  INTERNET_PER_CONN_OPTIONA *orig_settings;
1376  char proxy_srv[] = "proxy.example";
1377 
1378  /* get the global IE proxy server info, to restore later */
1379  list.dwOptionCount = 2;
1380  list.pOptions = HeapAlloc(GetProcessHeap(), 0, 2 * sizeof(INTERNET_PER_CONN_OPTIONA));
1381 
1382  list.pOptions[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
1383  list.pOptions[1].dwOption = INTERNET_PER_CONN_FLAGS;
1384 
1386  &list, &size);
1387  ok(ret == TRUE, "InternetQueryOption should've succeeded\n");
1388  orig_settings = list.pOptions;
1389 
1390  /* set the global IE proxy server */
1391  list.dwOptionCount = 2;
1392  list.pOptions = HeapAlloc(GetProcessHeap(), 0, 2 * sizeof(INTERNET_PER_CONN_OPTIONA));
1393 
1394  list.pOptions[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
1395  list.pOptions[0].Value.pszValue = proxy_srv;
1396  list.pOptions[1].dwOption = INTERNET_PER_CONN_FLAGS;
1397  list.pOptions[1].Value.dwValue = PROXY_TYPE_PROXY;
1398 
1400  &list, size);
1401  ok(ret == TRUE, "InternetSetOption should've succeeded\n");
1402 
1403  HeapFree(GetProcessHeap(), 0, list.pOptions);
1404 
1405  /* get & verify the global IE proxy server */
1406  list.dwOptionCount = 2;
1407  list.dwOptionError = 0;
1408  list.pOptions = HeapAlloc(GetProcessHeap(), 0, 2 * sizeof(INTERNET_PER_CONN_OPTIONA));
1409 
1410  list.pOptions[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
1411  list.pOptions[1].dwOption = INTERNET_PER_CONN_FLAGS;
1412 
1414  &list, &size);
1415  ok(ret == TRUE, "InternetQueryOption should've succeeded\n");
1416  ok(!lstrcmpA(list.pOptions[0].Value.pszValue, "proxy.example"),
1417  "Retrieved proxy server should've been \"%s\", was: \"%s\"\n",
1418  proxy_srv, list.pOptions[0].Value.pszValue);
1419  ok(list.pOptions[1].Value.dwValue == PROXY_TYPE_PROXY,
1420  "Retrieved flags should've been PROXY_TYPE_PROXY, was: %d\n",
1421  list.pOptions[1].Value.dwValue);
1422 
1423  HeapFree(GetProcessHeap(), 0, list.pOptions[0].Value.pszValue);
1424  HeapFree(GetProcessHeap(), 0, list.pOptions);
1425 
1426  /* test with NULL as proxy server */
1427  list.dwOptionCount = 1;
1428  list.pOptions = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERNET_PER_CONN_OPTIONA));
1429  list.pOptions[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
1430  list.pOptions[0].Value.pszValue = NULL;
1431 
1433  ok(ret == TRUE, "InternetSetOption should've succeeded\n");
1434 
1436  ok(ret == TRUE, "InternetSetOption should've succeeded\n");
1437 
1438  HeapFree(GetProcessHeap(), 0, list.pOptions);
1439 
1440  /* get & verify the proxy server */
1441  list.dwOptionCount = 1;
1442  list.dwOptionError = 0;
1443  list.pOptions = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERNET_PER_CONN_OPTIONA));
1444  list.pOptions[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
1445 
1447  ok(ret == TRUE, "InternetQueryOption should've succeeded\n");
1448  ok(!list.pOptions[0].Value.pszValue,
1449  "Retrieved proxy server should've been NULL, was: \"%s\"\n",
1450  list.pOptions[0].Value.pszValue);
1451 
1452  HeapFree(GetProcessHeap(), 0, list.pOptions[0].Value.pszValue);
1453  HeapFree(GetProcessHeap(), 0, list.pOptions);
1454 
1455  /* restore original settings */
1456  list.dwOptionCount = 2;
1457  list.pOptions = orig_settings;
1458 
1460  &list, size);
1461  ok(ret == TRUE, "InternetSetOption should've succeeded\n");
1462 
1463  HeapFree(GetProcessHeap(), 0, list.pOptions);
1464 }
1465 
1466 #define FLAG_TODO 0x1
1467 #define FLAG_NEEDREQ 0x2
1468 #define FLAG_UNIMPL 0x4
1469 
1470 static void test_InternetErrorDlg(void)
1471 {
1472  HINTERNET ses, con, req;
1473  DWORD res;
1474  HWND hwnd;
1475  ULONG i;
1476  static const struct {
1477  DWORD error;
1478  DWORD res;
1479  DWORD test_flags;
1480  } no_ui_res[] = {
1500  };
1501 
1503  ok(res == ERROR_INVALID_HANDLE, "Got %d\n", res);
1504 
1506  ok(ses != 0, "InternetOpen failed: 0x%08x\n", GetLastError());
1507  con = InternetConnectA(ses, "www.winehq.org", 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
1508  ok(con != 0, "InternetConnect failed: 0x%08x\n", GetLastError());
1509  req = HttpOpenRequestA(con, "GET", "/", NULL, NULL, NULL, 0, 0);
1510  ok(req != 0, "HttpOpenRequest failed: 0x%08x\n", GetLastError());
1511 
1512  hwnd = GetDesktopWindow();
1513  ok(hwnd != NULL, "GetDesktopWindow failed (%d)\n", GetLastError());
1514 
1516  {
1517  DWORD expected = ERROR_NOT_SUPPORTED, test_flags = 0, j;
1518 
1519  for (j = 0; j < ARRAY_SIZE(no_ui_res); ++j)
1520  {
1521  if (no_ui_res[j].error == i)
1522  {
1523  test_flags = no_ui_res[j].test_flags;
1524  expected = no_ui_res[j].res;
1525  }
1526  }
1527 
1528  /* Try an invalid request handle */
1531  {
1532  ok(test_flags & FLAG_UNIMPL, "%i is unexpectedly unimplemented.\n", i);
1533  continue;
1534  }
1535  else
1536  ok(res == ERROR_INVALID_HANDLE, "Got %d (%d)\n", res, i);
1537 
1538  /* With a valid req */
1539  if(i == ERROR_INTERNET_NEED_UI)
1540  continue; /* Crashes on windows XP */
1541 
1543  continue; /* Interactive (XP, Win7) */
1545  continue; /* Interactive (Win10 1607+) */
1546 
1548 
1549  /* Handle some special cases */
1550  switch(i)
1551  {
1552  case ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR: /* later 9.x versions */
1553  case ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR: /* later 9.x versions */
1554  case ERROR_INTERNET_SEC_CERT_WEAK_SIGNATURE: /* later 11.x versions */
1555  if(res == ERROR_CANCELLED)
1557  break;
1559  if (res == NTE_PROV_TYPE_NOT_DEF) /* XP, 2003 */
1561  break;
1563  if(res == ERROR_SUCCESS) /* win10 returns ERROR_SUCCESS */
1565  break;
1566  default: break;
1567  }
1568 
1569  if (expected == ERROR_NOT_SUPPORTED && res == ERROR_CANCELLED) /* Win10 1607+ */
1571 
1572  todo_wine_if(test_flags & FLAG_TODO)
1573  ok(res == expected, "Got %d, expected %d (%d)\n", res, expected, i);
1574 
1575  /* Same thing with NULL hwnd */
1577  todo_wine_if(test_flags & FLAG_TODO)
1578  ok(res == expected, "Got %d, expected %d (%d)\n", res, expected, i);
1579 
1580 
1581  /* With a null req */
1582  if(test_flags & FLAG_NEEDREQ)
1584 
1587  ok(res == expected, "Got %d, expected %d (%d)\n", res, expected, i);
1588  }
1589 
1590  res = InternetCloseHandle(req);
1591  ok(res == TRUE, "InternetCloseHandle failed: 0x%08x\n", GetLastError());
1592  res = InternetCloseHandle(con);
1593  ok(res == TRUE, "InternetCloseHandle failed: 0x%08x\n", GetLastError());
1594  res = InternetCloseHandle(ses);
1595  ok(res == TRUE, "InternetCloseHandle failed: 0x%08x\n", GetLastError());
1596 }
1597 
1599 {
1600  BOOL res;
1601  CHAR buffer[256];
1602  DWORD flags, sz;
1603 
1604  if(!pInternetGetConnectedStateExA) {
1605  win_skip("InternetGetConnectedStateExA is not supported\n");
1606  return;
1607  }
1608 
1609  flags = 0;
1610  buffer[0] = 0;
1611  res = pInternetGetConnectedStateExA(&flags, buffer, sizeof(buffer), 0);
1612  trace("Internet Connection: Flags 0x%02x - Name '%s'\n", flags, buffer);
1613 todo_wine
1614  ok (flags & INTERNET_RAS_INSTALLED, "Missing RAS flag\n");
1615  if(!res) {
1616  win_skip("InternetGetConnectedStateExA tests require a valid connection\n");
1617  return;
1618  }
1619 
1620  res = pInternetGetConnectedStateExA(NULL, NULL, 0, 0);
1621  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1622 
1623  flags = 0;
1624  res = pInternetGetConnectedStateExA(&flags, NULL, 0, 0);
1625  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1627  {
1628  ok(flags & INTERNET_CONNECTION_MODEM, "Modem connection flag missing\n");
1629  ok(flags & ~INTERNET_CONNECTION_LAN, "Mixed Modem and LAN flags\n");
1630  }
1631  else
1632  {
1633  ok(flags & INTERNET_CONNECTION_LAN, "LAN connection flag missing\n");
1634  ok(flags & ~INTERNET_CONNECTION_MODEM, "Mixed Modem and LAN flags\n");
1635  }
1636 
1637  buffer[0] = 0;
1638  flags = 0;
1639  res = pInternetGetConnectedStateExA(&flags, buffer, 0, 0);
1640  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1641  ok(flags, "Expected at least one flag set\n");
1642  ok(!buffer[0], "Buffer must not change, got %02X\n", buffer[0]);
1643 
1644  buffer[0] = 0;
1645  res = pInternetGetConnectedStateExA(NULL, buffer, sizeof(buffer), 0);
1646  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1647  sz = strlen(buffer);
1648  ok(sz > 0, "Expected a connection name\n");
1649 
1650  buffer[0] = 0;
1651  flags = 0;
1652  res = pInternetGetConnectedStateExA(&flags, buffer, sizeof(buffer), 0);
1653  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1654  ok(flags, "Expected at least one flag set\n");
1655  sz = strlen(buffer);
1656  ok(sz > 0, "Expected a connection name\n");
1657 
1658  flags = 0;
1659  res = pInternetGetConnectedStateExA(&flags, NULL, sizeof(buffer), 0);
1660  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1661  ok(flags, "Expected at least one flag set\n");
1662 
1663  /* no space for complete string this time */
1664  buffer[0] = 0;
1665  flags = 0;
1666  res = pInternetGetConnectedStateExA(&flags, buffer, sz, 0);
1667  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1668  ok(flags, "Expected at least one flag set\n");
1669  ok(sz - 1 == strlen(buffer), "Expected %u bytes, got %u\n", sz - 1, lstrlenA(buffer));
1670 
1671  buffer[0] = 0;
1672  flags = 0;
1673  res = pInternetGetConnectedStateExA(&flags, buffer, sz / 2, 0);
1674  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1675  ok(flags, "Expected at least one flag set\n");
1676  ok(sz / 2 - 1 == strlen(buffer), "Expected %u bytes, got %u\n", sz / 2 - 1, lstrlenA(buffer));
1677 
1678  buffer[0] = 0;
1679  flags = 0;
1680  res = pInternetGetConnectedStateExA(&flags, buffer, 1, 0);
1681  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1682  ok(flags, "Expected at least one flag set\n");
1683  ok(!buffer[0], "Expected 0 bytes, got %u\n", lstrlenA(buffer));
1684 
1685  buffer[0] = 0;
1686  flags = 0;
1687  res = pInternetGetConnectedStateExA(&flags, buffer, 2, 0);
1688  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1689  ok(flags, "Expected at least one flag set\n");
1690  ok(strlen(buffer) == 1, "Expected 1 byte, got %u\n", lstrlenA(buffer));
1691 
1692  flags = 0;
1693  buffer[0] = 0xDE;
1694  res = pInternetGetConnectedStateExA(&flags, buffer, 1, 0);
1695  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1696  ok(flags, "Expected at least one flag set\n");
1697  ok(!buffer[0], "Expected 0 bytes, got %u\n", lstrlenA(buffer));
1698 }
1699 
1701 {
1702  BOOL res;
1703  WCHAR buffer[256];
1704  DWORD flags, sz;
1705 
1706  if(!pInternetGetConnectedStateExW) {
1707  win_skip("InternetGetConnectedStateExW is not supported\n");
1708  return;
1709  }
1710 
1711  flags = 0;
1712  buffer[0] = 0;
1713  res = pInternetGetConnectedStateExW(&flags, buffer, ARRAY_SIZE(buffer), 0);
1714  trace("Internet Connection: Flags 0x%02x - Name '%s'\n", flags, wine_dbgstr_w(buffer));
1715 todo_wine
1716  ok (flags & INTERNET_RAS_INSTALLED, "Missing RAS flag\n");
1717  if(!res) {
1718  win_skip("InternetGetConnectedStateExW tests require a valid connection\n");
1719  return;
1720  }
1721 
1722  res = pInternetGetConnectedStateExW(NULL, NULL, 0, 0);
1723  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1724 
1725  flags = 0;
1726  res = pInternetGetConnectedStateExW(&flags, NULL, 0, 0);
1727  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1729  {
1730  ok(flags & INTERNET_CONNECTION_MODEM, "Modem connection flag missing\n");
1731  ok(flags & ~INTERNET_CONNECTION_LAN, "Mixed Modem and LAN flags\n");
1732  }
1733  else
1734  {
1735  ok(flags & INTERNET_CONNECTION_LAN, "LAN connection flag missing\n");
1736  ok(flags & ~INTERNET_CONNECTION_MODEM, "Mixed Modem and LAN flags\n");
1737  }
1738 
1739  buffer[0] = 0;
1740  flags = 0;
1741  res = pInternetGetConnectedStateExW(&flags, buffer, 0, 0);
1742  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1743  ok(flags, "Expected at least one flag set\n");
1744  ok(!buffer[0], "Buffer must not change, got %02X\n", buffer[0]);
1745 
1746  buffer[0] = 0;
1747  res = pInternetGetConnectedStateExW(NULL, buffer, ARRAY_SIZE(buffer), 0);
1748  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1749  sz = lstrlenW(buffer);
1750  ok(sz > 0, "Expected a connection name\n");
1751 
1752  buffer[0] = 0;
1753  flags = 0;
1754  res = pInternetGetConnectedStateExW(&flags, buffer, ARRAY_SIZE(buffer), 0);
1755  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1756  ok(flags, "Expected at least one flag set\n");
1757  sz = lstrlenW(buffer);
1758  ok(sz > 0, "Expected a connection name\n");
1759 
1760  flags = 0;
1761  res = pInternetGetConnectedStateExW(&flags, NULL, ARRAY_SIZE(buffer), 0);
1762  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1763  ok(flags, "Expected at least one flag set\n");
1764 
1765  /* no space for complete string this time */
1766  buffer[0] = 0;
1767  flags = 0;
1768  res = pInternetGetConnectedStateExW(&flags, buffer, sz, 0);
1769  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1770  ok(flags, "Expected at least one flag set\n");
1772  ok(!buffer[0], "Expected 0 bytes, got %u\n", lstrlenW(buffer));
1773  else
1774  ok(sz - 1 == lstrlenW(buffer), "Expected %u bytes, got %u\n", sz - 1, lstrlenW(buffer));
1775 
1776  buffer[0] = 0;
1777  flags = 0;
1778  res = pInternetGetConnectedStateExW(&flags, buffer, sz / 2, 0);
1779  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1780  ok(flags, "Expected at least one flag set\n");
1782  ok(!buffer[0], "Expected 0 bytes, got %u\n", lstrlenW(buffer));
1783  else
1784  ok(sz / 2 - 1 == lstrlenW(buffer), "Expected %u bytes, got %u\n", sz / 2 - 1, lstrlenW(buffer));
1785 
1786  buffer[0] = 0;
1787  flags = 0;
1788  res = pInternetGetConnectedStateExW(&flags, buffer, 1, 0);
1789  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1790  ok(flags, "Expected at least one flag set\n");
1791  ok(!buffer[0], "Expected 0 bytes, got %u\n", lstrlenW(buffer));
1792 
1793  buffer[0] = 0;
1794  flags = 0;
1795  res = pInternetGetConnectedStateExW(&flags, buffer, 2, 0);
1796  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1797  ok(flags, "Expected at least one flag set\n");
1799  ok(!buffer[0], "Expected 0 bytes, got %u\n", lstrlenW(buffer));
1800  else
1801  ok(lstrlenW(buffer) == 1, "Expected 1 byte, got %u\n", lstrlenW(buffer));
1802 
1803  buffer[0] = 0xDEAD;
1804  flags = 0;
1805  res = pInternetGetConnectedStateExW(&flags, buffer, 1, 0);
1806  ok(res == TRUE, "Expected TRUE, got %d\n", res);
1807  ok(flags, "Expected at least one flag set\n");
1808  ok(!buffer[0], "Expected 0 bytes, got %u\n", lstrlenW(buffer));
1809 }
1810 
1812 {
1813  DWORD ret;
1814  CHAR out[0x100];
1815 
1816  /* These messages come from wininet and not the system. */
1819  ok(ret == 0, "FormatMessageA returned %d\n", ret);
1820 
1823  ok(ret != 0, "FormatMessageA returned %d\n", ret);
1824 
1827  ok(ret != 0, "FormatMessageA returned %d\n", ret);
1828 
1831  ok(ret != 0, "FormatMessageA returned %d\n", ret);
1832 
1835  ok(ret != 0, "FormatMessageA returned %d\n", ret);
1836 
1839  ok(ret != 0, "FormatMessageA returned %d\n", ret);
1840 
1843  ok(ret != 0 || broken(!ret) /* XP, w2k3 */, "FormatMessageA returned %d\n", ret);
1844 
1847  ok(ret != 0, "FormatMessageA returned %d\n", ret);
1848 
1851  ok(ret != 0, "FormatMessageA returned %d\n", ret);
1852 
1855  ok(ret != 0, "FormatMessageA returned %d\n", ret);
1856 
1859  ok(ret != 0, "FormatMessageA returned %d\n", ret);
1860 
1863  ok(ret != 0, "FormatMessageA returned %d\n", ret);
1864 
1867  ok(ret != 0, "FormatMessageA returned %d\n", ret);
1868 }
1869 
1870 /* ############################### */
1871 
1872 START_TEST(internet)
1873 {
1874  HMODULE hdll;
1875  hdll = GetModuleHandleA("wininet.dll");
1876 
1877  pCreateUrlCacheContainerA = (void*)GetProcAddress(hdll, "CreateUrlCacheContainerA");
1878  pCreateUrlCacheContainerW = (void*)GetProcAddress(hdll, "CreateUrlCacheContainerW");
1879  pInternetTimeFromSystemTimeA = (void*)GetProcAddress(hdll, "InternetTimeFromSystemTimeA");
1880  pInternetTimeFromSystemTimeW = (void*)GetProcAddress(hdll, "InternetTimeFromSystemTimeW");
1881  pInternetTimeToSystemTimeA = (void*)GetProcAddress(hdll, "InternetTimeToSystemTimeA");
1882  pInternetTimeToSystemTimeW = (void*)GetProcAddress(hdll, "InternetTimeToSystemTimeW");
1883  pIsDomainLegalCookieDomainW = (void*)GetProcAddress(hdll, (LPCSTR)117);
1884  pPrivacyGetZonePreferenceW = (void*)GetProcAddress(hdll, "PrivacyGetZonePreferenceW");
1885  pPrivacySetZonePreferenceW = (void*)GetProcAddress(hdll, "PrivacySetZonePreferenceW");
1886  pInternetGetCookieExA = (void*)GetProcAddress(hdll, "InternetGetCookieExA");
1887  pInternetGetCookieExW = (void*)GetProcAddress(hdll, "InternetGetCookieExW");
1888  pInternetGetConnectedStateExA = (void*)GetProcAddress(hdll, "InternetGetConnectedStateExA");
1889  pInternetGetConnectedStateExW = (void*)GetProcAddress(hdll, "InternetGetConnectedStateExW");
1890 
1891  if(!pInternetGetCookieExW) {
1892  win_skip("Too old IE (older than 6.0)\n");
1893  return;
1894  }
1895 
1900  test_get_cookie();
1902  test_cookie_url();
1904  test_version();
1905  test_null();
1909  test_max_conns();
1910 
1911  if (!pInternetTimeFromSystemTimeA)
1912  win_skip("skipping the InternetTime tests\n");
1913  else
1914  {
1919  }
1920  if (pIsDomainLegalCookieDomainW &&
1921  ((void*)pIsDomainLegalCookieDomainW == (void*)pCreateUrlCacheContainerA ||
1922  (void*)pIsDomainLegalCookieDomainW == (void*)pCreateUrlCacheContainerW))
1923  win_skip("IsDomainLegalCookieDomainW is not available on systems with IE5\n");
1924  else if (!pIsDomainLegalCookieDomainW)
1925  win_skip("IsDomainLegalCookieDomainW (or ordinal 117) is not available\n");
1926  else
1928 
1929  if (pPrivacyGetZonePreferenceW && pPrivacySetZonePreferenceW)
1931  else
1932  win_skip("Privacy[SG]etZonePreferenceW are not available\n");
1933 
1937 }
struct _INTERNET_PER_CONN_OPTION_LISTA INTERNET_PER_CONN_OPTION_LISTA
#define ERROR_INTERNET_INCORRECT_HANDLE_TYPE
Definition: wininet.h:2007
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
BOOL WINAPI InternetGetCookieW(const WCHAR *url, const WCHAR *name, WCHAR *data, DWORD *size)
Definition: cookie.c:792
#define ERROR_INTERNET_SEC_CERT_CN_INVALID
Definition: wininet.h:2026
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3257
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
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:4023
#define ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION
Definition: wininet.h:2066
static LPCSTR
Definition: internet.c:45
#define ERROR_INTERNET_CONNECTION_ABORTED
Definition: wininet.h:2019
#define ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR
Definition: wininet.h:2028
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
static BOOL(WINAPI *pCreateUrlCacheContainerA)(DWORD
BOOL WINAPI InternetGetCookieExA(LPCSTR lpszUrl, LPCSTR lpszCookieName, LPSTR lpCookieData, LPDWORD lpdwSize, DWORD flags, void *reserved)
Definition: cookie.c:809
#define ERROR_SUCCESS
Definition: deptool.c:10
#define error(str)
Definition: mkdosfs.c:1605
GLint x0
Definition: linetemp.h:95
static void InternetTimeFromSystemTimeA_test(void)
Definition: internet.c:796
#define INTERNET_OPTION_MAX_CONNS_PER_SERVER
Definition: wininet.h:763
#define ERROR_NO_MORE_ITEMS
Definition: compat.h:105
static LPCWSTR
Definition: internet.c:42
static void test_null(void)
Definition: internet.c:666
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
static void test_Option_PerConnectionOption(void)
Definition: internet.c:1242
#define TRUE
Definition: types.h:120
#define ERROR_INTERNET_SEC_CERT_REV_FAILED
Definition: wininet.h:2044
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: atltest.h:87
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
#define PRIVACY_TEMPLATE_ADVANCED
Definition: wininet.h:1962
#define ERROR_INTERNET_UNRECOGNIZED_SCHEME
Definition: wininet.h:1995
#define LANG_NEUTRAL
Definition: nls.h:22
#define INTERNET_PER_CONN_PROXY_SERVER
Definition: wininet.h:335
static void test_max_conns(void)
Definition: internet.c:312
int WINAPI lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:170
#define HKEY_CURRENT_USER
Definition: winreg.h:11
static LPWSTR
Definition: internet.c:39
#define ERROR_INTERNET_MIXED_SECURITY
Definition: wininet.h:2029
BOOL WINAPI InternetCanonicalizeUrlA(LPCSTR lpszUrl, LPSTR lpszBuffer, LPDWORD lpdwBufferLength, DWORD dwFlags)
Definition: internet.c:1978
DWORD WINAPI FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:483
static CHAR string2[MAX_PATH]
Definition: automation.c:468
char CHAR
Definition: xmlstorage.h:175
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
BOOL WINAPI InternetSetOptionW(HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, DWORD dwBufferLength)
Definition: internet.c:2837
static void test_cookie_attrs(void)
Definition: internet.c:563
#define ERROR_BAD_ARGUMENTS
Definition: winerror.h:232
#define ERROR_INTERNET_SEC_CERT_REVOKED
Definition: wininet.h:2078
#define ERROR_INTERNET_ITEM_NOT_FOUND
Definition: wininet.h:2017
int WINAPI lstrcmpA(LPCSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:18
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
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
static void test_InternetCanonicalizeUrlA(void)
Definition: internet.c:52
static void test_IsDomainLegalCookieDomainW(void)
Definition: internet.c:955
GLuint buffer
Definition: glext.h:5915
BOOL WINAPI InternetCloseHandle(HINTERNET hInternet)
Definition: internet.c:1414
BOOL WINAPI InternetSetOptionA(HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, DWORD dwBufferLength)
Definition: internet.c:3131
#define ERROR_INTERNET_PROXY_ALERT
Definition: winineti.h:112
__u16 time
Definition: mkdosfs.c:366
#define SUBLANG_NEUTRAL
Definition: nls.h:167
#define INTERNET_OPTION_PER_CONNECTION_OPTION
Definition: wininet.h:765
#define lstrlenW
Definition: compat.h:609
#define INTERNET_OPTION_PROXY
Definition: wininet.h:732
#define INTERNET_DEFAULT_HTTP_PORT
Definition: winhttp.h:36
#define ERROR_INTERNET_BAD_OPTION_LENGTH
Definition: wininet.h:1999
#define ERROR_INTERNET_CANNOT_CONNECT
Definition: wininet.h:2018
static void r_verifyProxyEnable(LONG l, DWORD exp)
Definition: internet.c:1222
HINTERNET WINAPI InternetOpenA(LPCSTR lpszAgent, DWORD dwAccessType, LPCSTR lpszProxy, LPCSTR lpszProxyBypass, DWORD dwFlags)
Definition: internet.c:1057
static DWORD
Definition: internet.c:34
HINTERNET WINAPI InternetOpenUrlW(HINTERNET hInternet, LPCWSTR lpszUrl, LPCWSTR lpszHeaders, DWORD dwHeadersLength, DWORD dwFlags, DWORD_PTR dwContext)
Definition: internet.c:3722
#define ERROR_HTTP_COOKIE_DECLINED
Definition: wininet.h:2067
#define ICU_BROWSER_MODE
Definition: winhttp.h:294
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define NTE_PROV_TYPE_NOT_DEF
Definition: winerror.h:2891
#define ERROR_INTERNET_INSERT_CDROM
Definition: wininet.h:2040
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
static void test_InternetSetOption(void)
Definition: internet.c:1107
#define FALSE
Definition: types.h:117
#define FLAGS_ERROR_UI_FLAGS_NO_UI
Definition: wininet.h:1909
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
#define ERROR_INTERNET_SEC_CERT_WEAK_SIGNATURE
Definition: wininet.h:2045
static void test_get_cookie(void)
Definition: internet.c:359
static void test_PrivacyGetSetZonePreferenceW(void)
Definition: internet.c:1071
static void InternetTimeToSystemTimeW_test(void)
Definition: internet.c:918
#define ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED
Definition: wininet.h:2032
static void InternetTimeToSystemTimeA_test(void)
Definition: internet.c:899
#define ERROR_INTERNET_INVALID_URL
Definition: wininet.h:1994
#define verifyProxyEnable(e)
Definition: internet.c:1221
static const WCHAR version[]
Definition: asmname.c:66
DWORD WINAPI InternetSetCookieExA(LPCSTR lpszURL, LPCSTR lpszCookieName, LPCSTR lpszCookieData, DWORD dwFlags, DWORD_PTR dwReserved)
Definition: cookie.c:1165
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:656
#define ERROR_INTERNET_SEC_CERT_ERRORS
Definition: wininet.h:2042
static LPVOID
Definition: internet.c:45
BOOL WINAPI InternetQueryOptionA(HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, LPDWORD lpdwBufferLength)
Definition: internet.c:2730
static void InternetTimeFromSystemTimeW_test(void)
Definition: internet.c:847
const char * LPCSTR
Definition: xmlstorage.h:183
static void test_end_browser_session(void)
Definition: internet.c:1199
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:420
#define FORMAT_MESSAGE_FROM_HMODULE
Definition: winbase.h:419
#define INTERNET_ERROR_LAST
Definition: wininet.h:2084
#define INTERNET_OPTION_REFRESH
Definition: wininet.h:731
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 GLint GLint j
Definition: glfuncs.h:250
#define FLAG_UNIMPL
Definition: internet.c:1468
#define INTERNET_OPTION_SETTINGS_CHANGED
Definition: wininet.h:733
r l[0]
Definition: byte_order.h:167
#define INTERNET_CONNECTION_LAN
Definition: wininet.h:2539
static const WCHAR szEmpty[]
Definition: provider.c:50
static void test_cookie_url(void)
Definition: internet.c:618
#define todo_wine_if(is_todo)
Definition: test.h:165
#define INTERNET_OPTION_REQUEST_FLAGS
Definition: wininet.h:718
#define INTERNET_CONNECTION_CONFIGURED
Definition: wininet.h:2544
GLsizeiptr size
Definition: glext.h:5919
static LPSTR
Definition: internet.c:38
#define GetProcessHeap()
Definition: compat.h:595
#define trace
Definition: atltest.h:70
#define INTERNET_RFC1123_BUFSIZE
Definition: wininet.h:408
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define ERROR_INTERNET_CHG_POST_IS_NON_SECURE
Definition: wininet.h:2030
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define INTERNET_RAS_INSTALLED
Definition: wininet.h:2542
BOOL WINAPI InternetSetCookieA(LPCSTR lpszUrl, LPCSTR lpszCookieName, LPCSTR lpCookieData)
Definition: cookie.c:1139
#define INTERNET_OPTION_CONNECTED_STATE
Definition: wininet.h:744
static const WCHAR url[]
Definition: encode.c:1432
#define WINAPI
Definition: msvc.h:6
static FILE * out
Definition: regtests2xml.c:44
unsigned long DWORD
Definition: ntddk_ex.h:95
#define ICU_NO_ENCODE
Definition: winhttp.h:290
#define INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER
Definition: wininet.h:764
#define ERROR_INTERNET_NAME_NOT_RESOLVED
Definition: wininet.h:1996
#define ERROR_INTERNET_OPERATION_CANCELLED
Definition: wininet.h:2006
#define INTERNET_RFC1123_FORMAT
Definition: wininet.h:407
#define SetLastError(x)
Definition: compat.h:611
BOOL WINAPI InternetGetCookieA(const char *url, const char *name, char *data, DWORD *size)
Definition: cookie.c:862
#define PROXY_TYPE_DIRECT
Definition: wininet.h:346
BOOL WINAPI InternetSetCookieW(const WCHAR *url, const WCHAR *name, const WCHAR *data)
Definition: cookie.c:1122
static void test_Option_PerConnectionOptionA(void)
Definition: internet.c:1370
#define INTERNET_OPTION_VERSION
Definition: wininet.h:734
static void test_format_message(HMODULE hdll)
Definition: internet.c:1811
static const WCHAR szInternetSettings[]
Definition: internet.c:100
GLbitfield flags
Definition: glext.h:7161
#define INTERNET_OPEN_TYPE_DIRECT
Definition: wininet.h:522
int ret
#define INTERNET_SERVICE_FTP
Definition: wininet.h:560
#define todo_wine
Definition: test.h:164
static int state
Definition: maze.c:121
static void test_InternetErrorDlg(void)
Definition: internet.c:1470
#define ERROR_INTERNET_INTERNAL_ERROR
Definition: wininet.h:1993
static void test_InternetGetConnectedStateExW(void)
Definition: internet.c:1700
GLenum GLsizei len
Definition: glext.h:6722
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
Definition: _list.h:228
#define err(...)
#define ERROR_INTERNET_INVALID_OPTION
Definition: wininet.h:1998
#define ERROR_INTERNET_TIMEOUT
Definition: wininet.h:1991
unsigned char BYTE
Definition: xxhash.c:193
#define ERROR_INTERNET_POST_IS_NON_SECURE
Definition: wininet.h:2031
#define broken(x)
Definition: _sntprintf.h:21
#define INTERNET_OPTION_POLICY
Definition: wininet.h:742
#define PROXY_TYPE_PROXY
Definition: wininet.h:347
#define INTERNET_ERROR_BASE
Definition: wininet.h:1988
#define INTERNET_OPTION_USER_AGENT
Definition: wininet.h:735
DWORD zone
Definition: sec_mgr.c:1754
#define FLAG_NEEDREQ
Definition: internet.c:1467
#define ERROR_INTERNET_SEC_CERT_DATE_INVALID
Definition: wininet.h:2025
#define ERROR_INTERNET_INVALID_CA
Definition: wininet.h:2033
#define INTERNET_OPTION_ERROR_MASK
Definition: wininet.h:755
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
#define ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR
Definition: wininet.h:2027
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define ERROR_CANCELLED
Definition: winerror.h:726
#define ARRAY_SIZE(a)
Definition: main.h:24
#define FLAG_TODO
Definition: internet.c:1466
#define ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR
Definition: wininet.h:2039
#define ok(value,...)
Definition: atltest.h:57
static LPDWORD
Definition: internet.c:43
#define expect(expected, got)
Definition: combo.c:36
static const WCHAR about_blankW[]
Definition: persist.c:24
HINTERNET WINAPI HttpOpenRequestA(HINTERNET hHttpSession, LPCSTR lpszVerb, LPCSTR lpszObjectName, LPCSTR lpszVersion, LPCSTR lpszReferrer, LPCSTR *lpszAcceptTypes, DWORD dwFlags, DWORD_PTR dwContext)
Definition: http.c:1410
#define NULL
Definition: types.h:112
BOOL empty
Definition: button.c:170
START_TEST(internet)
Definition: internet.c:1872
static PVOID hdll
Definition: shimdbg.c:126
DWORD exp
Definition: msg.c:16033
#define ERROR_INVALID_OPERATION
Definition: winerror.h:1261
#define INTERNET_OPTION_END_BROWSER_SESSION
Definition: wininet.h:736
#define ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED
Definition: wininet.h:2041
#define ERROR_INTERNET_INCORRECT_PASSWORD
Definition: wininet.h:2003
#define ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT
Definition: wininet.h:2075
#define ERROR_INTERNET_INVALID_OPERATION
Definition: wininet.h:2005
#define ERROR_NOT_SUPPORTED
Definition: compat.h:100
struct _INTERNET_PER_CONN_OPTION_LISTW INTERNET_PER_CONN_OPTION_LISTW
BOOL WINAPI InternetQueryOptionW(HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, LPDWORD lpdwBufferLength)
Definition: internet.c:2697
GLuint res
Definition: glext.h:9613
unsigned int ULONG
Definition: retypes.h:1
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
#define MAKELANGID(p, s)
Definition: nls.h:15
#define INTERNET_CONNECTION_MODEM
Definition: wininet.h:2538
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:102
static void test_InternetGetConnectedStateExA(void)
Definition: internet.c:1598
#define GetProcAddress(x, y)
Definition: compat.h:612
static void test_InternetQueryOptionA(void)
Definition: internet.c:160
#define ICU_DECODE
Definition: winhttp.h:291
#define ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION
Definition: wininet.h:2068
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define INTERNET_COOKIE_HTTPONLY
Definition: wininet.h:1828
GLfloat GLfloat p
Definition: glext.h:8902
HINTERNET WINAPI InternetConnectW(HINTERNET hInternet, LPCWSTR lpszServerName, INTERNET_PORT nServerPort, LPCWSTR lpszUserName, LPCWSTR lpszPassword, DWORD dwService, DWORD dwFlags, DWORD_PTR dwContext)
Definition: internet.c:1258
static CHAR string3[MAX_PATH]
Definition: editor.c:42
HINTERNET WINAPI InternetOpenW(LPCWSTR lpszAgent, DWORD dwAccessType, LPCWSTR lpszProxy, LPCWSTR lpszProxyBypass, DWORD dwFlags)
Definition: internet.c:979
static void test_version(void)
Definition: internet.c:783
#define ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT
Definition: wininet.h:2076
#define ERROR_INTERNET_NEED_UI
Definition: wininet.h:2023
static void test_complicated_cookie(void)
Definition: internet.c:374
#define memset(x, y, z)
Definition: compat.h:39
#define REG_DWORD
Definition: sdbapi.c:596
#define INTERNET_OPTION_CONNECT_TIMEOUT
Definition: wininet.h:701
#define win_skip
Definition: test.h:151
#define INTERNET_SERVICE_HTTP
Definition: wininet.h:562
DWORD WINAPI InternetErrorDlg(HWND hWnd, HINTERNET hRequest, DWORD dwError, DWORD dwFlags, LPVOID *lppvData)
Definition: dialogs.c:472
#define HeapFree(x, y, z)
Definition: compat.h:594
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
IUnknown uk
Definition: typelib.c:6156
BOOL expected
Definition: store.c:2063
#define INTERNET_PER_CONN_FLAGS
Definition: wininet.h:334
#define ok_(x1, x2)
Definition: atltest.h:61
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10