diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index e93658ab8a3..79ac281a030 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -160,6 +160,7 @@ struct BSCallback {
LPWSTR headers;
HGLOBAL post_data;
ULONG post_data_len;
+ ULONG readed;
nsChannel *nschannel;
nsIStreamListener *nslistener;
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index ecd83333ee7..2b0b1940b96 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -365,19 +365,20 @@ static HRESULT WINAPI BindStatusCallback_OnDataAvailable(IBindStatusCallback *if
do {
hres = IStream_Read(pstgmed->u.pstm, This->nsstream->buf, sizeof(This->nsstream->buf),
- &This->nsstream->buf_size);
- if(This->nsstream->buf_size) {
- nsres = nsIStreamListener_OnDataAvailable(This->nslistener,
- (nsIRequest*)NSCHANNEL(This->nschannel), This->nscontext,
- NSINSTREAM(This->nsstream), 0 /* FIXME */, dwSize);
- if(NS_FAILED(nsres))
- FIXME("OnDataAvailable failed: %08lx\n", nsres);
-
- if(This->nsstream->buf_size)
- FIXME("buffer is not empty!\n");
- }else {
+ &This->nsstream->buf_size);
+ if(!This->nsstream->buf_size)
break;
- }
+
+ nsres = nsIStreamListener_OnDataAvailable(This->nslistener,
+ (nsIRequest*)NSCHANNEL(This->nschannel), This->nscontext,
+ NSINSTREAM(This->nsstream), This->readed, This->nsstream->buf_size);
+ if(NS_FAILED(nsres))
+ FIXME("OnDataAvailable failed: %08lx\n", nsres);
+
+ if(This->nsstream->buf_size)
+ FIXME("buffer is not empty!\n");
+
+ This->readed += This->nsstream->buf_size;
}while(hres == S_OK);
}
@@ -575,6 +576,7 @@ BSCallback *create_bscallback(HTMLDocument *doc, LPCOLESTR url)
ret->post_data = NULL;
ret->headers = NULL;
ret->post_data_len = 0;
+ ret->readed = 0;
ret->nschannel = NULL;
ret->nslistener = NULL;
ret->nscontext = NULL;