Module: wine Branch: master Commit: 9c464ca3cbff96e0f4339c2cb4ae2678c1f0b6b2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9c464ca3cbff96e0f4339c2cb4...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Nov 15 19:20:54 2011 +0100
urlmon: Fixed protocol tests on IE9.
---
dlls/urlmon/bindprot.c | 1 + dlls/urlmon/tests/protocol.c | 23 ++++++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/dlls/urlmon/bindprot.c b/dlls/urlmon/bindprot.c index cfb5cec..7c2aca6 100644 --- a/dlls/urlmon/bindprot.c +++ b/dlls/urlmon/bindprot.c @@ -203,6 +203,7 @@ static HRESULT handle_mime_filter(BindProtocol *This, IInternetProtocol *mime_fi return hres; }
+ /* NOTE: IE9 calls it on the new protocol_sink. It doesn't make sense to is seems to be a bug there. */ IInternetProtocolSink_ReportProgress(old_sink, BINDSTATUS_LOADINGMIMEHANDLER, NULL); IInternetProtocolSink_Release(old_sink);
diff --git a/dlls/urlmon/tests/protocol.c b/dlls/urlmon/tests/protocol.c index 52da99b..87be3fe 100644 --- a/dlls/urlmon/tests/protocol.c +++ b/dlls/urlmon/tests/protocol.c @@ -112,7 +112,6 @@ DEFINE_EXPECT(UnlockRequest); DEFINE_EXPECT(Abort); DEFINE_EXPECT(MimeFilter_CreateInstance); DEFINE_EXPECT(MimeFilter_Start); -DEFINE_EXPECT(MimeFilter_ReportProgress); DEFINE_EXPECT(MimeFilter_ReportData); DEFINE_EXPECT(MimeFilter_ReportResult); DEFINE_EXPECT(MimeFilter_Terminate); @@ -1043,7 +1042,20 @@ static HRESULT WINAPI MimeProtocolSink_Switch(IInternetProtocolSink *iface, PROT static HRESULT WINAPI MimeProtocolSink_ReportProgress(IInternetProtocolSink *iface, ULONG ulStatusCode, LPCWSTR szStatusText) { - CHECK_EXPECT(MimeFilter_ReportProgress); + switch(ulStatusCode) { + case BINDSTATUS_LOADINGMIMEHANDLER: + /* + * IE9 for some reason (bug?) calls this on mime handler's protocol sink instead of the + * main protocol sink. We check ReportProgress_LOADINGMIMEHANDLER both here and in + * ProtocolSink_ReportProgress to workaround it. + */ + CHECK_EXPECT(ReportProgress_LOADINGMIMEHANDLER); + ok(!szStatusText, "szStatusText = %s\n", wine_dbgstr_w(szStatusText)); + break; + default: + ok(0, "Unexpected status code %d\n", ulStatusCode); + } + return S_OK; }
@@ -1742,6 +1754,7 @@ static HRESULT WINAPI ProtocolEmul_Continue(IInternetProtocolEx *iface, if(pr == 200) { if(!mimefilter_test) SET_EXPECT(Read); /* checked in BINDSTATUS_MIMETYPEAVAILABLE or ReportData */ + SET_EXPECT(GetBindInfo); SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE); } if(pr >= 200) @@ -1759,6 +1772,7 @@ static HRESULT WINAPI ProtocolEmul_Continue(IInternetProtocolEx *iface, if(!short_read && pr < 200) CHECK_CALLED(Read); if(pr == 200) { + CLEAR_CALLED(GetBindInfo); /* IE9 */ CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE); } }else { @@ -1816,6 +1830,7 @@ static HRESULT WINAPI ProtocolEmul_Read(IInternetProtocolEx *iface, void *pv, prot_state = 4; if(short_read) { SET_EXPECT(Read2); /* checked in BINDSTATUS_MIMETYPEAVAILABLE */ + SET_EXPECT(GetBindInfo); SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE); } if(mimefilter_test) @@ -1827,8 +1842,10 @@ static HRESULT WINAPI ProtocolEmul_Read(IInternetProtocolEx *iface, void *pv, BSCF_LASTDATANOTIFICATION|BSCF_INTERMEDIATEDATANOTIFICATION, 0, 0); read_report_data--; ok(hres == S_OK, "ReportData failed: %08x\n", hres); - if(short_read) + if(short_read) { + CLEAR_CALLED(GetBindInfo); /* IE9 */ CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE); + } if(mimefilter_test) CHECK_CALLED(MimeFilter_ReportData); else if(direct_read)