Module: wine Branch: master Commit: 8bee20d85f0ac1d33f0a53c8960b878bf7073155 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8bee20d85f0ac1d33f0a53c896...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Feb 15 17:02:02 2011 +0100
urlmon: Properly handle BINDSTATUS_BEGINDOWNLOADDATA.
---
dlls/urlmon/bindprot.c | 10 +++++++++- dlls/urlmon/tests/protocol.c | 32 ++++++++++++++++++++++++-------- dlls/urlmon/urlmon_main.h | 4 ++++ 3 files changed, 37 insertions(+), 9 deletions(-)
diff --git a/dlls/urlmon/bindprot.c b/dlls/urlmon/bindprot.c index 095194e..01a1b90 100644 --- a/dlls/urlmon/bindprot.c +++ b/dlls/urlmon/bindprot.c @@ -962,7 +962,6 @@ static void report_progress(BindProtocol *This, ULONG status_code, LPCWSTR statu case BINDSTATUS_FINDINGRESOURCE: case BINDSTATUS_CONNECTING: case BINDSTATUS_REDIRECTING: - case BINDSTATUS_BEGINDOWNLOADDATA: case BINDSTATUS_SENDINGREQUEST: case BINDSTATUS_CACHEFILENAMEAVAILABLE: case BINDSTATUS_DIRECTBIND: @@ -971,6 +970,11 @@ static void report_progress(BindProtocol *This, ULONG status_code, LPCWSTR statu IInternetProtocolSink_ReportProgress(This->protocol_sink, status_code, status_text); break;
+ case BINDSTATUS_BEGINDOWNLOADDATA: + if(This->protocol_sink) + IInternetProtocolSink_ReportData(This->protocol_sink, This->bscf, This->progress, This->progress_max); + break; + case BINDSTATUS_MIMETYPEAVAILABLE: mime_available(This, status_text, FALSE); break; @@ -1026,6 +1030,10 @@ static HRESULT WINAPI BPInternetProtocolSink_ReportProgress(IInternetProtocolSin
static HRESULT report_data(BindProtocol *This, DWORD bscf, ULONG progress, ULONG progress_max) { + This->bscf = bscf; + This->progress = progress; + This->progress_max = progress_max; + if(!This->protocol_sink) return S_OK;
diff --git a/dlls/urlmon/tests/protocol.c b/dlls/urlmon/tests/protocol.c index dcfe20c..cacad26 100644 --- a/dlls/urlmon/tests/protocol.c +++ b/dlls/urlmon/tests/protocol.c @@ -1,5 +1,5 @@ /* - * Copyright 2005-2009 Jacek Caban for CodeWeavers + * Copyright 2005-2011 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -166,6 +166,7 @@ static enum { HTTPS_TEST, FTP_TEST, MK_TEST, + ITS_TEST, BIND_TEST } tested_protocol;
@@ -175,6 +176,7 @@ static const WCHAR protocol_names[][10] = { {'h','t','t','p','s',0}, {'f','t','p',0}, {'m','k',0}, + {'i','t','s',0}, {'t','e','s','t',0} };
@@ -188,6 +190,7 @@ static const WCHAR binding_urls[][130] = { '/','p','u','b','/','o','t','h','e','r', '/','w','i','n','e','l','o','g','o','.','x','c','f','.','t','a','r','.','b','z','2',0}, {'m','k',':','t','e','s','t',0}, + {'i','t','s',':','t','e','s','t','.','c','h','m',':',':','/','b','l','a','n','k','.','h','t','m','l',0}, {'t','e','s','t',':','/','/','f','i','l','e','.','h','t','m','l',0} };
@@ -725,7 +728,7 @@ static HRESULT WINAPI ProtocolSink_ReportProgress(IInternetProtocolSink *iface, switch(ulStatusCode) { case BINDSTATUS_MIMETYPEAVAILABLE: CHECK_EXPECT(ReportProgress_MIMETYPEAVAILABLE); - if(tested_protocol != FILE_TEST && !mimefilter_test && (pi & PI_MIMEVERIFICATION)) { + if(tested_protocol != FILE_TEST && tested_protocol != ITS_TEST && !mimefilter_test && (pi & PI_MIMEVERIFICATION)) { if(!short_read || !direct_read) CHECK_CALLED(Read); /* set in Continue */ else if(short_read) @@ -779,7 +782,7 @@ static HRESULT WINAPI ProtocolSink_ReportProgress(IInternetProtocolSink *iface, break; case BINDSTATUS_SENDINGREQUEST: CHECK_EXPECT2(ReportProgress_SENDINGREQUEST); - if(tested_protocol == FILE_TEST) { + if(tested_protocol == FILE_TEST || tested_protocol == ITS_TEST) { ok(szStatusText != NULL, "szStatusText == NULL\n"); if(szStatusText) ok(!*szStatusText, "wrong szStatusText\n"); @@ -843,16 +846,19 @@ static HRESULT WINAPI ProtocolSink_ReportData(IInternetProtocolSink *iface, DWOR static int rec_depth; rec_depth++;
- if(!mimefilter_test && tested_protocol == FILE_TEST) { + if(!mimefilter_test && (tested_protocol == FILE_TEST || tested_protocol == ITS_TEST)) { CHECK_EXPECT2(ReportData);
ok(ulProgress == ulProgressMax, "ulProgress (%d) != ulProgressMax (%d)\n", ulProgress, ulProgressMax); ok(ulProgressMax == 13, "ulProgressMax=%d, expected 13\n", ulProgressMax); /* BSCF_SKIPDRAINDATAFORFILEURLS added in IE8 */ - ok((grfBSCF == (BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION)) || - (grfBSCF == (BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION | BSCF_SKIPDRAINDATAFORFILEURLS)), - "grcfBSCF = %08x\n", grfBSCF); + if(tested_protocol == FILE_TEST) + ok((grfBSCF == (BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION)) || + (grfBSCF == (BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION | BSCF_SKIPDRAINDATAFORFILEURLS)), + "grcfBSCF = %08x\n", grfBSCF); + else + ok(grfBSCF == (BSCF_FIRSTDATANOTIFICATION | BSCF_DATAFULLYAVAILABLE), "grcfBSCF = %08x\n", grfBSCF); }else if(direct_read) { BYTE buf[14096]; ULONG read; @@ -1634,13 +1640,21 @@ static void protocol_start(IInternetProtocolSink *pOIProtSink, IInternetBindInfo else SET_EXPECT(ReportData); hres = IInternetProtocolSink_ReportData(pOIProtSink, - BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION, 13, 13); + BSCF_FIRSTDATANOTIFICATION | (tested_protocol == ITS_TEST ? BSCF_DATAFULLYAVAILABLE : BSCF_LASTDATANOTIFICATION), + 13, 13); ok(hres == S_OK, "ReportData failed: %08x\n", hres); if(mimefilter_test) CHECK_CALLED(MimeFilter_ReportData); else CHECK_CALLED(ReportData);
+ if(tested_protocol == ITS_TEST) { + SET_EXPECT(ReportData); + hres = IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_BEGINDOWNLOADDATA, NULL); + ok(hres == S_OK, "ReportProgress(BINDSTATUS_BEGINDOWNLOADDATA) failed: %08x\n", hres); + CHECK_CALLED(ReportData); + } + if(tested_protocol == BIND_TEST) { hres = IInternetProtocol_Terminate(binding_protocol, 0); ok(hres == E_FAIL, "Termiante failed: %08x\n", hres); @@ -3503,6 +3517,8 @@ START_TEST(protocol) test_binding(FILE_TEST, PI_MIMEVERIFICATION, TEST_EMULATEPROT); trace("Testing http binding (mime verification, emulate prot)...\n"); test_binding(HTTP_TEST, PI_MIMEVERIFICATION, TEST_EMULATEPROT); + trace("Testing its binding (mime verification, emulate prot)...\n"); + test_binding(ITS_TEST, PI_MIMEVERIFICATION, TEST_EMULATEPROT); trace("Testing http binding (mime verification, emulate prot, short read, direct read)...\n"); test_binding(HTTP_TEST, PI_MIMEVERIFICATION, TEST_EMULATEPROT|TEST_SHORT_READ|TEST_DIRECT_READ); trace("Testing file binding (mime verification, emulate prot, mime filter)...\n"); diff --git a/dlls/urlmon/urlmon_main.h b/dlls/urlmon/urlmon_main.h index 8edb708..83b887e 100644 --- a/dlls/urlmon/urlmon_main.h +++ b/dlls/urlmon/urlmon_main.h @@ -191,6 +191,10 @@ typedef struct { BOOL from_urlmon; DWORD pi;
+ DWORD bscf; + ULONG progress; + ULONG progress_max; + DWORD apartment_thread; HWND notif_hwnd; DWORD continue_call;