urlmon: Stop binding with E_ABORT if the client returns that from OnStartBinding.
This commit is contained in:
parent
689840babb
commit
dad5913823
@ -1494,7 +1494,7 @@ static HRESULT start_binding(IMoniker *mon, Binding *binding_ctx, IUri *uri, IBi
|
|||||||
hres = IBindStatusCallback_OnStartBinding(binding->callback, 0, &binding->IBinding_iface);
|
hres = IBindStatusCallback_OnStartBinding(binding->callback, 0, &binding->IBinding_iface);
|
||||||
if(FAILED(hres)) {
|
if(FAILED(hres)) {
|
||||||
WARN("OnStartBinding failed: %08x\n", hres);
|
WARN("OnStartBinding failed: %08x\n", hres);
|
||||||
stop_binding(binding, INET_E_DOWNLOAD_FAILURE, NULL);
|
stop_binding(binding, hres == E_ABORT ? hres : INET_E_DOWNLOAD_FAILURE, NULL);
|
||||||
IBinding_Release(&binding->IBinding_iface);
|
IBinding_Release(&binding->IBinding_iface);
|
||||||
return hres;
|
return hres;
|
||||||
}
|
}
|
||||||
|
@ -203,6 +203,8 @@ static BOOL test_redirect, use_cache_file, callback_read, no_callback, test_abor
|
|||||||
static WCHAR cache_file_name[MAX_PATH];
|
static WCHAR cache_file_name[MAX_PATH];
|
||||||
static BOOL only_check_prot_args = FALSE;
|
static BOOL only_check_prot_args = FALSE;
|
||||||
static BOOL invalid_cn_accepted = FALSE;
|
static BOOL invalid_cn_accepted = FALSE;
|
||||||
|
static BOOL abort_start = FALSE;
|
||||||
|
static BOOL abort_progress = FALSE;
|
||||||
|
|
||||||
static LPCWSTR urls[] = {
|
static LPCWSTR urls[] = {
|
||||||
winetest_data_urlW,
|
winetest_data_urlW,
|
||||||
@ -1559,6 +1561,11 @@ static HRESULT WINAPI statusclb_OnStartBinding(IBindStatusCallbackEx *iface, DWO
|
|||||||
hres = IBinding_QueryInterface(pib, &IID_IWinInetHttpInfo, (void**)&http_info);
|
hres = IBinding_QueryInterface(pib, &IID_IWinInetHttpInfo, (void**)&http_info);
|
||||||
ok(hres == E_NOINTERFACE, "Could not get IID_IWinInetHttpInfo: %08x\n", hres);
|
ok(hres == E_NOINTERFACE, "Could not get IID_IWinInetHttpInfo: %08x\n", hres);
|
||||||
|
|
||||||
|
if(abort_start) {
|
||||||
|
binding_hres = E_ABORT;
|
||||||
|
return E_ABORT;
|
||||||
|
}
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1624,6 +1631,10 @@ static HRESULT WINAPI statusclb_OnProgress(IBindStatusCallbackEx *iface, ULONG u
|
|||||||
CHECK_EXPECT(OnProgress_SENDINGREQUEST);
|
CHECK_EXPECT(OnProgress_SENDINGREQUEST);
|
||||||
if(emulate_protocol && (test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == WINETEST_TEST))
|
if(emulate_protocol && (test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == WINETEST_TEST))
|
||||||
SetEvent(complete_event);
|
SetEvent(complete_event);
|
||||||
|
|
||||||
|
if(abort_progress)
|
||||||
|
return E_ABORT;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case BINDSTATUS_MIMETYPEAVAILABLE:
|
case BINDSTATUS_MIMETYPEAVAILABLE:
|
||||||
if(iface == &objbsc)
|
if(iface == &objbsc)
|
||||||
@ -2670,6 +2681,8 @@ static BOOL test_RegisterBindStatusCallback(void)
|
|||||||
#define BINDTEST_NO_CALLBACK 0x0080
|
#define BINDTEST_NO_CALLBACK 0x0080
|
||||||
#define BINDTEST_ABORT 0x0100
|
#define BINDTEST_ABORT 0x0100
|
||||||
#define BINDTEST_INVALID_CN 0x0200
|
#define BINDTEST_INVALID_CN 0x0200
|
||||||
|
#define BINDTEST_ABORT_START 0x0400
|
||||||
|
#define BINDTEST_ABORT_PROGRESS 0x0800
|
||||||
|
|
||||||
static void init_bind_test(int protocol, DWORD flags, DWORD t)
|
static void init_bind_test(int protocol, DWORD flags, DWORD t)
|
||||||
{
|
{
|
||||||
@ -2697,6 +2710,8 @@ static void init_bind_test(int protocol, DWORD flags, DWORD t)
|
|||||||
callback_read = !(flags & BINDTEST_NO_CALLBACK_READ);
|
callback_read = !(flags & BINDTEST_NO_CALLBACK_READ);
|
||||||
no_callback = (flags & BINDTEST_NO_CALLBACK) != 0;
|
no_callback = (flags & BINDTEST_NO_CALLBACK) != 0;
|
||||||
test_abort = (flags & BINDTEST_ABORT) != 0;
|
test_abort = (flags & BINDTEST_ABORT) != 0;
|
||||||
|
abort_start = (flags & BINDTEST_ABORT_START) != 0;
|
||||||
|
abort_progress = (flags & BINDTEST_ABORT_PROGRESS) != 0;
|
||||||
is_async_prot = protocol == HTTP_TEST || protocol == HTTPS_TEST || protocol == FTP_TEST || protocol == WINETEST_TEST;
|
is_async_prot = protocol == HTTP_TEST || protocol == HTTPS_TEST || protocol == FTP_TEST || protocol == WINETEST_TEST;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2782,15 +2797,18 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
|
|||||||
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == WINETEST_TEST) {
|
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == WINETEST_TEST) {
|
||||||
SET_EXPECT(QueryInterface_IInternetBindInfo);
|
SET_EXPECT(QueryInterface_IInternetBindInfo);
|
||||||
SET_EXPECT(QueryService_IInternetBindInfo);
|
SET_EXPECT(QueryService_IInternetBindInfo);
|
||||||
|
if(!abort_start)
|
||||||
SET_EXPECT(QueryInterface_IHttpNegotiate);
|
SET_EXPECT(QueryInterface_IHttpNegotiate);
|
||||||
SET_EXPECT(QueryInterface_IWindowForBindingUI);
|
SET_EXPECT(QueryInterface_IWindowForBindingUI);
|
||||||
SET_EXPECT(QueryService_IWindowForBindingUI);
|
SET_EXPECT(QueryService_IWindowForBindingUI);
|
||||||
SET_EXPECT(GetWindow_IWindowForBindingUI);
|
SET_EXPECT(GetWindow_IWindowForBindingUI);
|
||||||
|
if(!abort_start) {
|
||||||
SET_EXPECT(BeginningTransaction);
|
SET_EXPECT(BeginningTransaction);
|
||||||
SET_EXPECT(QueryInterface_IHttpNegotiate2);
|
SET_EXPECT(QueryInterface_IHttpNegotiate2);
|
||||||
SET_EXPECT(GetRootSecurityId);
|
SET_EXPECT(GetRootSecurityId);
|
||||||
SET_EXPECT(OnProgress_FINDINGRESOURCE);
|
SET_EXPECT(OnProgress_FINDINGRESOURCE);
|
||||||
SET_EXPECT(OnProgress_CONNECTING);
|
SET_EXPECT(OnProgress_CONNECTING);
|
||||||
|
}
|
||||||
if(flags & BINDTEST_INVALID_CN) {
|
if(flags & BINDTEST_INVALID_CN) {
|
||||||
SET_EXPECT(QueryInterface_IHttpSecurity);
|
SET_EXPECT(QueryInterface_IHttpSecurity);
|
||||||
SET_EXPECT(QueryService_IHttpSecurity);
|
SET_EXPECT(QueryService_IHttpSecurity);
|
||||||
@ -2800,21 +2818,24 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!no_callback) {
|
if(!no_callback) {
|
||||||
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FTP_TEST
|
if((test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FTP_TEST
|
||||||
|| test_protocol == FILE_TEST || test_protocol == WINETEST_TEST)
|
|| test_protocol == FILE_TEST || test_protocol == WINETEST_TEST) && !abort_start)
|
||||||
SET_EXPECT(OnProgress_SENDINGREQUEST);
|
SET_EXPECT(OnProgress_SENDINGREQUEST);
|
||||||
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == WINETEST_TEST) {
|
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == WINETEST_TEST) {
|
||||||
SET_EXPECT(QueryInterface_IHttpNegotiate);
|
SET_EXPECT(QueryInterface_IHttpNegotiate);
|
||||||
SET_EXPECT(OnResponse);
|
SET_EXPECT(OnResponse);
|
||||||
}
|
}
|
||||||
|
if(!abort_start) {
|
||||||
SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
|
SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
|
||||||
SET_EXPECT(OnProgress_BEGINDOWNLOADDATA);
|
SET_EXPECT(OnProgress_BEGINDOWNLOADDATA);
|
||||||
|
}
|
||||||
if(test_protocol == FILE_TEST)
|
if(test_protocol == FILE_TEST)
|
||||||
SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE);
|
SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE);
|
||||||
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FTP_TEST || test_protocol == WINETEST_TEST)
|
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FTP_TEST || test_protocol == WINETEST_TEST)
|
||||||
SET_EXPECT(OnProgress_DOWNLOADINGDATA);
|
SET_EXPECT(OnProgress_DOWNLOADINGDATA);
|
||||||
|
if(!abort_start)
|
||||||
SET_EXPECT(OnProgress_ENDDOWNLOADDATA);
|
SET_EXPECT(OnProgress_ENDDOWNLOADDATA);
|
||||||
if(tymed != TYMED_FILE || test_protocol != ABOUT_TEST)
|
if((tymed != TYMED_FILE || test_protocol != ABOUT_TEST) && !abort_start)
|
||||||
SET_EXPECT(OnDataAvailable);
|
SET_EXPECT(OnDataAvailable);
|
||||||
SET_EXPECT(OnStopBinding);
|
SET_EXPECT(OnStopBinding);
|
||||||
}
|
}
|
||||||
@ -2831,7 +2852,11 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
|
|||||||
if(only_check_prot_args) {
|
if(only_check_prot_args) {
|
||||||
ok(hres == E_FAIL, "Got %08x\n", hres);
|
ok(hres == E_FAIL, "Got %08x\n", hres);
|
||||||
CHECK_CALLED(OnStopBinding);
|
CHECK_CALLED(OnStopBinding);
|
||||||
}else if(no_callback) {
|
} else if(abort_start)
|
||||||
|
ok(hres == E_ABORT, "IMoniker_BindToStorage failed: %08x, expected E_ABORT\n", hres);
|
||||||
|
else if(abort_progress)
|
||||||
|
ok(hres == MK_S_ASYNCHRONOUS, "IMoniker_BindToStorage failed: %08x\n", hres);
|
||||||
|
else if(no_callback) {
|
||||||
if(emulate_protocol)
|
if(emulate_protocol)
|
||||||
WaitForSingleObject(complete_event2, INFINITE);
|
WaitForSingleObject(complete_event2, INFINITE);
|
||||||
ok(hres == S_OK, "IMoniker_BindToStorage failed: %08x\n", hres);
|
ok(hres == S_OK, "IMoniker_BindToStorage failed: %08x\n", hres);
|
||||||
@ -2869,7 +2894,7 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
|
|||||||
unk = NULL;
|
unk = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(FAILED(hres) && !(flags & BINDTEST_INVALID_CN))
|
if(FAILED(hres) && !(flags & BINDTEST_INVALID_CN) && !(flags & BINDTEST_ABORT_START))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if((bindf & BINDF_ASYNCHRONOUS) && !no_callback) {
|
if((bindf & BINDF_ASYNCHRONOUS) && !no_callback) {
|
||||||
@ -2882,9 +2907,16 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
|
|||||||
if(!no_callback) {
|
if(!no_callback) {
|
||||||
CLEAR_CALLED(QueryInterface_IBindStatusCallbackEx); /* IE 8 */
|
CLEAR_CALLED(QueryInterface_IBindStatusCallbackEx); /* IE 8 */
|
||||||
CHECK_CALLED(GetBindInfo);
|
CHECK_CALLED(GetBindInfo);
|
||||||
|
if(abort_start)
|
||||||
|
todo_wine CHECK_CALLED(QueryInterface_IInternetProtocol);
|
||||||
|
else
|
||||||
CHECK_CALLED(QueryInterface_IInternetProtocol);
|
CHECK_CALLED(QueryInterface_IInternetProtocol);
|
||||||
if(!emulate_protocol)
|
if(!emulate_protocol) {
|
||||||
|
if(abort_start)
|
||||||
|
todo_wine CHECK_CALLED(QueryService_IInternetProtocol);
|
||||||
|
else
|
||||||
CHECK_CALLED(QueryService_IInternetProtocol);
|
CHECK_CALLED(QueryService_IInternetProtocol);
|
||||||
|
}
|
||||||
CHECK_CALLED(OnStartBinding);
|
CHECK_CALLED(OnStartBinding);
|
||||||
}
|
}
|
||||||
if(emulate_protocol) {
|
if(emulate_protocol) {
|
||||||
@ -2902,12 +2934,14 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
|
|||||||
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == WINETEST_TEST) {
|
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == WINETEST_TEST) {
|
||||||
CLEAR_CALLED(QueryInterface_IInternetBindInfo);
|
CLEAR_CALLED(QueryInterface_IInternetBindInfo);
|
||||||
CLEAR_CALLED(QueryService_IInternetBindInfo);
|
CLEAR_CALLED(QueryService_IInternetBindInfo);
|
||||||
|
if(!abort_start)
|
||||||
CHECK_CALLED(QueryInterface_IHttpNegotiate);
|
CHECK_CALLED(QueryInterface_IHttpNegotiate);
|
||||||
CLEAR_CALLED(QueryInterface_IWindowForBindingUI);
|
CLEAR_CALLED(QueryInterface_IWindowForBindingUI);
|
||||||
CLEAR_CALLED(QueryService_IWindowForBindingUI);
|
CLEAR_CALLED(QueryService_IWindowForBindingUI);
|
||||||
CLEAR_CALLED(GetWindow_IWindowForBindingUI);
|
CLEAR_CALLED(GetWindow_IWindowForBindingUI);
|
||||||
|
if(!abort_start)
|
||||||
CHECK_CALLED(BeginningTransaction);
|
CHECK_CALLED(BeginningTransaction);
|
||||||
if (have_IHttpNegotiate2)
|
if (have_IHttpNegotiate2 && !abort_start)
|
||||||
{
|
{
|
||||||
CHECK_CALLED(QueryInterface_IHttpNegotiate2);
|
CHECK_CALLED(QueryInterface_IHttpNegotiate2);
|
||||||
CHECK_CALLED(GetRootSecurityId);
|
CHECK_CALLED(GetRootSecurityId);
|
||||||
@ -2923,11 +2957,13 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
|
|||||||
CLEAR_CALLED(OnProgress_FINDINGRESOURCE);
|
CLEAR_CALLED(OnProgress_FINDINGRESOURCE);
|
||||||
CLEAR_CALLED(OnProgress_CONNECTING);
|
CLEAR_CALLED(OnProgress_CONNECTING);
|
||||||
}
|
}
|
||||||
}else todo_wine {
|
}else if(!abort_start) {
|
||||||
|
todo_wine {
|
||||||
CHECK_NOT_CALLED(OnProgress_FINDINGRESOURCE);
|
CHECK_NOT_CALLED(OnProgress_FINDINGRESOURCE);
|
||||||
/* IE7 does call this */
|
/* IE7 does call this */
|
||||||
CLEAR_CALLED(OnProgress_CONNECTING);
|
CLEAR_CALLED(OnProgress_CONNECTING);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if((flags & BINDTEST_INVALID_CN) && !invalid_cn_accepted) {
|
if((flags & BINDTEST_INVALID_CN) && !invalid_cn_accepted) {
|
||||||
CHECK_CALLED(QueryInterface_IHttpSecurity);
|
CHECK_CALLED(QueryInterface_IHttpSecurity);
|
||||||
CHECK_CALLED(QueryService_IHttpSecurity);
|
CHECK_CALLED(QueryService_IHttpSecurity);
|
||||||
@ -2939,20 +2975,20 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!no_callback) {
|
if(!no_callback) {
|
||||||
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FILE_TEST || test_protocol == WINETEST_TEST)
|
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FILE_TEST || test_protocol == WINETEST_TEST) {
|
||||||
if(flags & BINDTEST_INVALID_CN)
|
if(flags & BINDTEST_INVALID_CN)
|
||||||
CLEAR_CALLED(OnProgress_SENDINGREQUEST);
|
CLEAR_CALLED(OnProgress_SENDINGREQUEST);
|
||||||
else
|
else if(!abort_start)
|
||||||
CHECK_CALLED(OnProgress_SENDINGREQUEST);
|
CHECK_CALLED(OnProgress_SENDINGREQUEST);
|
||||||
else if(test_protocol == FTP_TEST)
|
} else if(test_protocol == FTP_TEST)
|
||||||
todo_wine CHECK_CALLED(OnProgress_SENDINGREQUEST);
|
todo_wine CHECK_CALLED(OnProgress_SENDINGREQUEST);
|
||||||
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == WINETEST_TEST) {
|
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == WINETEST_TEST) {
|
||||||
CLEAR_CALLED(QueryInterface_IHttpNegotiate);
|
CLEAR_CALLED(QueryInterface_IHttpNegotiate);
|
||||||
if(!(flags & BINDTEST_INVALID_CN) || (binding_hres == S_OK)) {
|
if((!(flags & BINDTEST_INVALID_CN) || (binding_hres == S_OK)) && !abort_start) {
|
||||||
CHECK_CALLED(OnResponse);
|
CHECK_CALLED(OnResponse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!(flags & BINDTEST_INVALID_CN) || binding_hres == S_OK) {
|
if((!(flags & BINDTEST_INVALID_CN) || binding_hres == S_OK) && !abort_start) {
|
||||||
CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE);
|
CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE);
|
||||||
CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA);
|
CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA);
|
||||||
CHECK_CALLED(OnProgress_ENDDOWNLOADDATA);
|
CHECK_CALLED(OnProgress_ENDDOWNLOADDATA);
|
||||||
@ -2966,7 +3002,7 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
|
|||||||
CHECK_CALLED(OnDataAvailable);
|
CHECK_CALLED(OnDataAvailable);
|
||||||
else
|
else
|
||||||
CHECK_NOT_CALLED(OnDataAvailable);
|
CHECK_NOT_CALLED(OnDataAvailable);
|
||||||
}else if(tymed != TYMED_FILE || test_protocol != ABOUT_TEST)
|
}else if((tymed != TYMED_FILE || test_protocol != ABOUT_TEST) && !abort_start)
|
||||||
CHECK_CALLED(OnDataAvailable);
|
CHECK_CALLED(OnDataAvailable);
|
||||||
CHECK_CALLED(OnStopBinding);
|
CHECK_CALLED(OnStopBinding);
|
||||||
}
|
}
|
||||||
@ -3606,6 +3642,12 @@ START_TEST(url)
|
|||||||
trace("http test (short response, to object)...\n");
|
trace("http test (short response, to object)...\n");
|
||||||
test_BindToObject(HTTP_TEST, 0);
|
test_BindToObject(HTTP_TEST, 0);
|
||||||
|
|
||||||
|
trace("http test (abort start binding)...\n");
|
||||||
|
test_BindToStorage(HTTP_TEST, BINDTEST_ABORT_START, TYMED_FILE);
|
||||||
|
|
||||||
|
trace("http test (abort progress)...\n");
|
||||||
|
test_BindToStorage(HTTP_TEST, BINDTEST_ABORT_PROGRESS, TYMED_FILE);
|
||||||
|
|
||||||
trace("emulated http test...\n");
|
trace("emulated http test...\n");
|
||||||
test_BindToStorage(HTTP_TEST, BINDTEST_EMULATE, TYMED_ISTREAM);
|
test_BindToStorage(HTTP_TEST, BINDTEST_EMULATE, TYMED_ISTREAM);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user