Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/urlmon/tests/url.c | 49 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-)
diff --git a/dlls/urlmon/tests/url.c b/dlls/urlmon/tests/url.c index 1aef981b83..84dedc07f4 100644 --- a/dlls/urlmon/tests/url.c +++ b/dlls/urlmon/tests/url.c @@ -140,6 +140,9 @@ DEFINE_EXPECT(UnlockRequest); DEFINE_EXPECT(Continue); DEFINE_EXPECT(Abort); DEFINE_EXPECT(CreateInstance); +DEFINE_EXPECT(Protocol_CreateInstance); +DEFINE_EXPECT(Protocol_CreateInstance_aggregation); +DEFINE_EXPECT(Protocol_CreateInstance_no_aggregation); DEFINE_EXPECT(Load); DEFINE_EXPECT(PutProperty_MIMETYPEPROP); DEFINE_EXPECT(PutProperty_CLASSIDPROP); @@ -181,7 +184,7 @@ static HRESULT binding_hres; static HRESULT onsecurityproblem_hres; static HRESULT abort_hres; static BOOL have_IHttpNegotiate2, use_bscex, is_async_prot; -static BOOL test_redirect, use_cache_file, callback_read, no_callback, test_abort; +static BOOL test_redirect, use_cache_file, callback_read, no_callback, no_aggregation, test_abort; static WCHAR cache_file_name[MAX_PATH]; static WCHAR http_cache_file[MAX_PATH]; static BOOL only_check_prot_args = FALSE; @@ -2414,8 +2417,22 @@ static HRESULT WINAPI ProtocolCF_CreateInstance(IClassFactory *iface, IUnknown * if(IsEqualGUID(&IID_IInternetProtocolInfo, riid)) return E_NOINTERFACE;
- ok(outer != NULL, "outer == NULL\n"); + if (!outer) + { + CHECK_EXPECT(Protocol_CreateInstance); + ok(IsEqualGUID(&IID_IInternetProtocol, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid)); + *ppv = &Protocol; + return S_OK; + } + ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid)); + if (no_aggregation) + { + CHECK_EXPECT(Protocol_CreateInstance_no_aggregation); + return CLASS_E_NOAGGREGATION; + } + + CHECK_EXPECT(Protocol_CreateInstance_aggregation); *ppv = &Protocol; return S_OK; } @@ -2864,6 +2881,7 @@ static BOOL test_RegisterBindStatusCallback(void) #define BINDTEST_ABORT_PROGRESS 0x0800 #define BINDTEST_ASYNC_SWITCH 0x1000 #define BINDTEST_ALLOW_FINDINGRESOURCE 0x2000 +#define BINDTEST_NO_AGGREGATION 0x4000
static void init_bind_test(int protocol, DWORD flags, DWORD t) { @@ -2919,6 +2937,7 @@ static void init_bind_test(int protocol, DWORD flags, DWORD t) use_cache_file = (flags & BINDTEST_USE_CACHE) != 0; callback_read = !(flags & BINDTEST_NO_CALLBACK_READ); no_callback = (flags & BINDTEST_NO_CALLBACK) != 0; + no_aggregation = (flags & BINDTEST_NO_AGGREGATION) != 0; test_abort = (flags & BINDTEST_ABORT) != 0; abort_start = (flags & BINDTEST_ABORT_START) != 0; abort_progress = (flags & BINDTEST_ABORT_PROGRESS) != 0; @@ -3013,6 +3032,13 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t) if(is_urlmon_protocol(test_protocol)) SET_EXPECT(SetPriority); SET_EXPECT(Start); + if(no_aggregation) { + SET_EXPECT(Protocol_CreateInstance_no_aggregation); + SET_EXPECT(Protocol_CreateInstance); + } + else + SET_EXPECT(Protocol_CreateInstance_aggregation); + if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == WINETEST_TEST || test_protocol == WINETEST_SYNC_TEST) SET_EXPECT(Terminate); @@ -3083,8 +3109,11 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t) ok(hres == MK_S_ASYNCHRONOUS, "IMoniker_BindToStorage failed: %08x\n", hres); else if(no_callback) { if(emulate_protocol) - ok( WaitForSingleObject(complete_event2, 90000) == WAIT_OBJECT_0, "wait timed out\n" ); + todo_wine_if(no_aggregation) + ok( WaitForSingleObject(complete_event2, 3000) == WAIT_OBJECT_0, "wait timed out\n" ); + todo_wine_if(no_aggregation) ok(hres == S_OK, "IMoniker_BindToStorage failed: %08x\n", hres); + todo_wine_if(no_aggregation) ok(unk != NULL, "unk == NULL\n"); }else if(!(bindf & BINDF_ASYNCHRONOUS) && tymed == TYMED_FILE) { ok(hres == S_OK, "IMoniker_BindToStorage failed: %08x\n", hres); @@ -3149,6 +3178,17 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t) if(is_urlmon_protocol(test_protocol)) CLEAR_CALLED(SetPriority); /* Not called by IE11 */ CHECK_CALLED(Start); + if(no_callback) { + if(no_aggregation) { + CHECK_NOT_CALLED(Protocol_CreateInstance_aggregation); + CHECK_CALLED(Protocol_CreateInstance_no_aggregation); + CHECK_CALLED(Protocol_CreateInstance); + } else { + CHECK_CALLED(Protocol_CreateInstance_aggregation); + CHECK_NOT_CALLED(Protocol_CreateInstance_no_aggregation); + CHECK_NOT_CALLED(Protocol_CreateInstance); + } + } if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == WINETEST_TEST || test_protocol == WINETEST_SYNC_TEST) { if(tymed == TYMED_FILE) @@ -4081,6 +4121,9 @@ START_TEST(url) trace("winetest test (no callback)...\n"); test_BindToStorage(WINETEST_TEST, BINDTEST_EMULATE|BINDTEST_NO_CALLBACK|BINDTEST_USE_CACHE, TYMED_ISTREAM);
+ trace("winetest test (no callback + no aggregation)...\n"); + test_BindToStorage(WINETEST_TEST, BINDTEST_EMULATE|BINDTEST_NO_CALLBACK|BINDTEST_USE_CACHE|BINDTEST_NO_AGGREGATION, TYMED_ISTREAM); + trace("emulated https test...\n"); test_BindToStorage(HTTPS_TEST, BINDTEST_EMULATE, TYMED_ISTREAM);