wininet: INTERNET_STATUS_REQUEST_COMPLETE callback must supply a handle.

This commit is contained in:
Hans Leidekker 2008-05-16 13:50:36 +02:00 committed by Alexandre Julliard
parent 6021fa09f3
commit e1b889830d
2 changed files with 58 additions and 1 deletions

View File

@ -3397,7 +3397,7 @@ lend:
/* TODO: send notification for P3P header */ /* TODO: send notification for P3P header */
iar.dwResult = (DWORD)bSuccess; iar.dwResult = (DWORD_PTR)lpwhr->hdr.hInternet;
iar.dwError = bSuccess ? ERROR_SUCCESS : INTERNET_GetLastError(); iar.dwError = bSuccess ? ERROR_SUCCESS : INTERNET_GetLastError();
INTERNET_SendCallback(&lpwhr->hdr, lpwhr->hdr.dwContext, INTERNET_SendCallback(&lpwhr->hdr, lpwhr->hdr.dwContext,

View File

@ -1801,6 +1801,62 @@ static void test_bogus_accept_types_array(void)
InternetCloseHandle(ses); InternetCloseHandle(ses);
} }
struct context
{
HANDLE event;
HINTERNET req;
};
static void WINAPI cb(HINTERNET handle, DWORD_PTR context, DWORD status, LPVOID info, DWORD size)
{
trace("%p 0x%08lx %u %p 0x%08x\n", handle, context, status, info, size);
if (status == INTERNET_STATUS_REQUEST_COMPLETE)
{
INTERNET_ASYNC_RESULT *result = info;
struct context *ctx = (struct context *)context;
trace("request handle: 0x%08lx\n", result->dwResult);
ctx->req = (HINTERNET)result->dwResult;
SetEvent(ctx->event);
}
}
static void test_open_url_async(void)
{
BOOL ret;
HINTERNET ses, req;
DWORD size;
struct context ctx;
ULONG type;
ctx.req = NULL;
ctx.event = CreateEvent(NULL, TRUE, FALSE, "Z:_home_hans_jaman-installer.exe_ev1");
ses = InternetOpen("AdvancedInstaller", 0, NULL, NULL, INTERNET_FLAG_ASYNC);
ok(ses != NULL, "InternetOpen failed\n");
InternetSetStatusCallback(ses, cb);
ResetEvent(ctx.event);
req = InternetOpenUrl(ses, "http://www.winehq.org", NULL, 0, 0, (DWORD_PTR)&ctx);
ok(!req && GetLastError() == ERROR_IO_PENDING, "InternetOpenUrl failed\n");
WaitForSingleObject(ctx.event, INFINITE);
type = 0;
size = sizeof(type);
ret = InternetQueryOption(ctx.req, INTERNET_OPTION_HANDLE_TYPE, &type, &size);
ok(ret, "HttpQueryInfo failed: %u\n", GetLastError());
ok(type == INTERNET_HANDLE_TYPE_HTTP_REQUEST,
"expected INTERNET_HANDLE_TYPE_HTTP_REQUEST, got %u\n", type);
CloseHandle(ctx.event);
InternetCloseHandle(ctx.req);
InternetCloseHandle(ses);
}
#define STATUS_STRING(status) \ #define STATUS_STRING(status) \
memcpy(status_string[status], #status, sizeof(CHAR) * \ memcpy(status_string[status], #status, sizeof(CHAR) * \
(strlen(#status) < MAX_STATUS_NAME ? \ (strlen(#status) < MAX_STATUS_NAME ? \
@ -1877,4 +1933,5 @@ START_TEST(http)
test_http_connection(); test_http_connection();
test_user_agent_header(); test_user_agent_header();
test_bogus_accept_types_array(); test_bogus_accept_types_array();
test_open_url_async();
} }