[3/5] wininet: Send INTERNET_STATUS_RESPONSE_RECEIVED notification in async handler. (v4)

Sebastian Lackner sebastian at fds-team.de
Wed Apr 27 22:12:49 CDT 2016


Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
---

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



More information about the wine-patches mailing list