Module: wine Branch: master Commit: 99989f8241be0374a81a71842638951301de156f URL: http://source.winehq.org/git/wine.git/?a=commit;h=99989f8241be0374a81a718426...
Author: Misha Koshelev mk144210@bcm.edu Date: Fri Aug 3 13:35:35 2007 +0200
Revert "urlmon: Use BSCF_ values passed to report_data to keep track of download state."
This reverts commit 978f6b98c9a67055f5a0f878a44b3b66c16a6019.
---
dlls/urlmon/binding.c | 23 ++++++++++++++++------- 1 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c index bf0d027..e1fac1c 100644 --- a/dlls/urlmon/binding.c +++ b/dlls/urlmon/binding.c @@ -67,6 +67,12 @@ typedef struct { HRESULT hres; } ProtocolStream;
+typedef enum { + BEFORE_DOWNLOAD, + DOWNLOADING, + END_DOWNLOAD +} download_state_t; + struct Binding { const IBindingVtbl *lpBindingVtbl; const IInternetProtocolSinkVtbl *lpInternetProtocolSinkVtbl; @@ -88,6 +94,7 @@ struct Binding { BOOL report_mime; DWORD continue_call; BOOL request_locked; + download_state_t download_state;
DWORD apartment_thread; HWND notif_hwnd; @@ -905,10 +912,12 @@ static HRESULT WINAPI InternetProtocolSink_ReportProgress(IInternetProtocolSink static void report_data(Binding *This, DWORD bscf, ULONG progress, ULONG progress_max) { FORMATETC formatetc = {0, NULL, 1, -1, TYMED_ISTREAM}; - BOOL end_download = FALSE;
TRACE("(%p)->(%d %u %u)\n", This, bscf, progress, progress_max);
+ if(This->download_state == END_DOWNLOAD) + return; + if(GetCurrentThreadId() != This->apartment_thread) FIXME("called from worked hread\n");
@@ -926,17 +935,15 @@ static void report_data(Binding *This, DWORD bscf, ULONG progress, ULONG progres BINDSTATUS_MIMETYPEAVAILABLE, mime); }
- if(bscf & BSCF_FIRSTDATANOTIFICATION) { + if(This->download_state == BEFORE_DOWNLOAD) { fill_stream_buffer(This->stream);
+ This->download_state = DOWNLOADING; IBindStatusCallback_OnProgress(This->callback, progress, progress_max, BINDSTATUS_BEGINDOWNLOADDATA, This->url); }
- if((bscf & BSCF_LASTDATANOTIFICATION) || - (bscf & BSCF_DATAFULLYAVAILABLE) || - progress == progress_max) { - end_download = TRUE; + if(This->stream->hres == S_FALSE || (bscf & BSCF_LASTDATANOTIFICATION)) { IBindStatusCallback_OnProgress(This->callback, progress, progress_max, BINDSTATUS_ENDDOWNLOADDATA, This->url); } @@ -949,7 +956,8 @@ static void report_data(Binding *This, DWORD bscf, ULONG progress, ULONG progres IBindStatusCallback_OnDataAvailable(This->callback, bscf, progress, &formatetc, &This->stgmed);
- if(end_download) { + if(This->stream->hres == S_FALSE) { + This->download_state = END_DOWNLOAD; IBindStatusCallback_OnStopBinding(This->callback, S_OK, NULL); } } @@ -1302,6 +1310,7 @@ static HRESULT Binding_Create(LPCWSTR url, IBindCtx *pbc, REFIID riid, Binding * ret->report_mime = TRUE; ret->continue_call = 0; ret->request_locked = FALSE; + ret->download_state = BEFORE_DOWNLOAD; ret->task_queue_head = ret->task_queue_tail = NULL;
memset(&ret->bindinfo, 0, sizeof(BINDINFO));