urlmon: Set BINDF_NEEDFILE if BINDF_PULLDATA is not specified.
David Hedberg
dhedberg at codeweavers.com
Sun Dec 19 14:26:06 CST 2010
---
dlls/urlmon/binding.c | 2 +-
dlls/urlmon/tests/url.c | 25 +++++++++++++++++++++++--
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c
index 699bf98..beedddd 100644
--- a/dlls/urlmon/binding.c
+++ b/dlls/urlmon/binding.c
@@ -1496,7 +1496,7 @@ static HRESULT Binding_Create(IMoniker *mon, Binding *binding_ctx, IUri *uri, IB
if(to_obj)
ret->bindinfo.dwOptions |= 0x100000;
- if(!(ret->bindf & BINDF_ASYNCHRONOUS)) {
+ if(!(ret->bindf & BINDF_ASYNCHRONOUS) || !(ret->bindf & BINDF_PULLDATA)) {
ret->bindf |= BINDF_NEEDFILE;
ret->use_cache_file = TRUE;
}else if(!is_urlmon_protocol(uri)) {
diff --git a/dlls/urlmon/tests/url.c b/dlls/urlmon/tests/url.c
index 818fff9..c635da3 100644
--- a/dlls/urlmon/tests/url.c
+++ b/dlls/urlmon/tests/url.c
@@ -192,6 +192,7 @@ static HRESULT binding_hres;
static BOOL have_IHttpNegotiate2, use_bscex, is_async_prot;
static BOOL test_redirect, use_cache_file, callback_read, no_callback, test_abort;
static WCHAR cache_file_name[MAX_PATH];
+static BOOL only_check_prot_args = FALSE;
static LPCWSTR urls[] = {
WINE_ABOUT_URL,
@@ -566,7 +567,8 @@ static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
ok(bind_info & BINDF_FROMURLMON, "BINDF_FROMURLMON is not set\n");
- if(filedwl_api || !is_urlmon_protocol(test_protocol) || !(bindf&BINDF_ASYNCSTORAGE) || tymed != TYMED_ISTREAM)
+ if(filedwl_api || !is_urlmon_protocol(test_protocol) || tymed != TYMED_ISTREAM ||
+ !(bindf&BINDF_ASYNCSTORAGE) || !(bindf&BINDF_PULLDATA))
ok(bind_info & BINDF_NEEDFILE, "BINDF_NEEDFILE is not set\n");
else
ok(!(bind_info & BINDF_NEEDFILE), "BINDF_NEEDFILE is set\n");
@@ -593,6 +595,9 @@ static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
ok(!bindinfo.pUnk, "bindinfo.pUnk = %p\n", bindinfo.pUnk);
ok(!bindinfo.dwReserved, "bindinfo.dwReserved = %d\n", bindinfo.dwReserved);
+ if(only_check_prot_args)
+ return E_FAIL;
+
switch(test_protocol) {
case MK_TEST:
hres = IInternetProtocolSink_ReportProgress(pOIProtSink,
@@ -1543,6 +1548,11 @@ static HRESULT WINAPI statusclb_OnStopBinding(IBindStatusCallbackEx *iface, HRES
ok(GetCurrentThreadId() == thread_id, "wrong thread %d\n", GetCurrentThreadId());
+ if(only_check_prot_args) {
+ todo_wine ok(hresult == S_OK, "Got %08x\n", hresult);
+ return S_OK;
+ }
+
/* ignore DNS failure */
if (hresult == HRESULT_FROM_WIN32(ERROR_INTERNET_NAME_NOT_RESOLVED))
return S_OK;
@@ -2510,6 +2520,8 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
if(tymed == TYMED_FILE && (test_protocol == ABOUT_TEST || test_protocol == ITS_TEST))
binding_hres = INET_E_DATA_NOT_AVAILABLE;
+ if(only_check_prot_args)
+ SET_EXPECT(OnStopBinding);
if(!no_callback) {
SET_EXPECT(QueryInterface_IBindStatusCallbackEx);
SET_EXPECT(GetBindInfo);
@@ -2568,7 +2580,10 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
return;
}
- if(no_callback) {
+ if(only_check_prot_args) {
+ ok(hres == E_FAIL, "Got %08x\n", hres);
+ CHECK_CALLED(OnStopBinding);
+ }else if(no_callback) {
if(emulate_protocol)
WaitForSingleObject(complete_event2, INFINITE);
ok(hres == S_OK, "IMoniker_BindToStorage failed: %08x\n", hres);
@@ -3346,6 +3361,12 @@ START_TEST(url)
trace("test failures...\n");
test_BindToStorage_fail();
+
+ bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE;
+ only_check_prot_args = TRUE; /* Fail after checking arguments to Protocol_Start */
+
+ trace("check emulated http protocol arguments...\n");
+ test_BindToStorage(HTTP_TEST, BINDTEST_EMULATE, TYMED_ISTREAM);
}
DeleteFileA(wszIndexHtmlA);
--
1.7.3.3
More information about the wine-patches
mailing list