From: Sebastian Lackner Subject: [3/5] wininet: Send INTERNET_STATUS_RESPONSE_RECEIVED notification in async handler. (v4) Message-Id: Date: Thu, 28 Apr 2016 05:12:49 +0200 Signed-off-by: Sebastian Lackner --- Changes in v4: * Added this patch, which fixes a "regression". Previously, the application was always using synchronous reads. Actually, the whole notification stuff needs a lot more work, but I fear we have to start somewhere... dlls/wininet/http.c | 7 +++++++ dlls/wininet/tests/http.c | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index 08f5a08..66ee6ba 100644 --- a/dlls/wininet/http.c +++ b/dlls/wininet/http.c @@ -3134,6 +3134,13 @@ static void AsyncReadFileExProc(task_header_t *hdr) TRACE("INTERNETREADFILEEXW %p\n", task->hdr.hdr); res = HTTPREQ_Read(req, task->buf, task->size, task->ret_read); + if (res == ERROR_SUCCESS) + { + DWORD read = *task->ret_read; + INTERNET_SendCallback(&req->hdr, req->hdr.dwContext, INTERNET_STATUS_RESPONSE_RECEIVED, + &read, sizeof(read)); + } + send_request_complete(req, res == ERROR_SUCCESS, res); } diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c index 22f8fbe..c90e6d2 100644 --- a/dlls/wininet/tests/http.c +++ b/dlls/wininet/tests/http.c @@ -1099,7 +1099,7 @@ static void InternetReadFileExA_test(int flags) CHECK_NOTIFIED(INTERNET_STATUS_RECEIVING_RESPONSE); WaitForSingleObject(hCompleteEvent, INFINITE); CHECK_NOTIFIED(INTERNET_STATUS_REQUEST_COMPLETE); - CHECK_NOT_NOTIFIED(INTERNET_STATUS_RESPONSE_RECEIVED); + CHECK_NOTIFIED(INTERNET_STATUS_RESPONSE_RECEIVED); ok(req_error == ERROR_SUCCESS, "req_error = %u\n", req_error); } else @@ -4505,6 +4505,7 @@ static void test_async_read(int port) if (!ret) { ok( GetLastError() == ERROR_IO_PENDING, "expected ERROR_IO_PENDING, got %u\n", GetLastError() ); + CHECK_NOTIFIED( INTERNET_STATUS_RECEIVING_RESPONSE ); SET_EXPECT( INTERNET_STATUS_REQUEST_COMPLETE ); if (!pending_reads++) { @@ -4517,6 +4518,7 @@ static void test_async_read(int port) ok( req_error == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %u\n", req_error ); todo_wine_if( pending_reads > 1 ) ok( ib.dwBufferLength != 0, "expected ib.dwBufferLength != 0\n" ); + CHECK_NOTIFIED( INTERNET_STATUS_RESPONSE_RECEIVED ); CHECK_NOTIFIED( INTERNET_STATUS_REQUEST_COMPLETE ); } -- 2.8.0