Thomas Mullaly : urlmon: Improve handling of error codes being returned from client OnStartBinding callback .

Alexandre Julliard julliard at winehq.org
Thu May 12 13:57:47 CDT 2011


Module: wine
Branch: master
Commit: e7ea2d3bb5b5b61b9c8bb6cecb3fa474b2a0a6cc
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e7ea2d3bb5b5b61b9c8bb6cecb3fa474b2a0a6cc

Author: Thomas Mullaly <tmullaly at codeweavers.com>
Date:   Sun May  1 23:29:53 2011 -0400

urlmon: Improve handling of error codes being returned from client OnStartBinding callback.

---

 dlls/urlmon/binding.c   |    5 ++++-
 dlls/urlmon/tests/url.c |   14 ++++++++++----
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c
index 0899027..5504f6f 100644
--- a/dlls/urlmon/binding.c
+++ b/dlls/urlmon/binding.c
@@ -1494,7 +1494,10 @@ static HRESULT start_binding(IMoniker *mon, Binding *binding_ctx, IUri *uri, IBi
     hres = IBindStatusCallback_OnStartBinding(binding->callback, 0, &binding->IBinding_iface);
     if(FAILED(hres)) {
         WARN("OnStartBinding failed: %08x\n", hres);
-        stop_binding(binding, hres == E_ABORT ? hres : INET_E_DOWNLOAD_FAILURE, NULL);
+        if(hres != E_ABORT && hres != E_NOTIMPL)
+            hres = INET_E_DOWNLOAD_FAILURE;
+
+        stop_binding(binding, hres, NULL);
         IBinding_Release(&binding->IBinding_iface);
         return hres;
     }
diff --git a/dlls/urlmon/tests/url.c b/dlls/urlmon/tests/url.c
index 7c74865..0b57312 100644
--- a/dlls/urlmon/tests/url.c
+++ b/dlls/urlmon/tests/url.c
@@ -198,6 +198,7 @@ static IBinding *current_binding;
 static HANDLE complete_event, complete_event2;
 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 WCHAR cache_file_name[MAX_PATH];
@@ -1562,8 +1563,8 @@ static HRESULT WINAPI statusclb_OnStartBinding(IBindStatusCallbackEx *iface, DWO
     ok(hres == E_NOINTERFACE, "Could not get IID_IWinInetHttpInfo: %08x\n", hres);
 
     if(abort_start) {
-        binding_hres = E_ABORT;
-        return E_ABORT;
+        binding_hres = abort_hres;
+        return abort_hres;
     }
 
     return S_OK;
@@ -2850,7 +2851,7 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
         ok(hres == E_FAIL, "Got %08x\n", hres);
         CHECK_CALLED(OnStopBinding);
     } else if(abort_start)
-        ok(hres == E_ABORT, "IMoniker_BindToStorage failed: %08x, expected E_ABORT\n", hres);
+        ok(hres == abort_hres, "IMoniker_BindToStorage failed: %08x, expected %08x\n", hres, abort_hres);
     else if(abort_progress)
         ok(hres == MK_S_ASYNCHRONOUS, "IMoniker_BindToStorage failed: %08x\n", hres);
     else if(no_callback) {
@@ -3634,7 +3635,12 @@ START_TEST(url)
         trace("http test (short response, to object)...\n");
         test_BindToObject(HTTP_TEST, 0);
 
-        trace("http test (abort start binding)...\n");
+        trace("http test (abort start binding E_NOTIMPL)...\n");
+        abort_hres = E_NOTIMPL;
+        test_BindToStorage(HTTP_TEST, BINDTEST_ABORT_START, TYMED_FILE);
+
+        trace("http test (abort start binding E_ABORT)...\n");
+        abort_hres = E_ABORT;
         test_BindToStorage(HTTP_TEST, BINDTEST_ABORT_START, TYMED_FILE);
 
         trace("http test (abort progress)...\n");




More information about the wine-cvs mailing list