diff options
author | Kenneth Pouncey <kjpou@pt.lu> | 2018-11-12 06:00:18 +0300 |
---|---|---|
committer | Ludovic Henry <luhenry@microsoft.com> | 2018-11-12 06:00:18 +0300 |
commit | 521b8a0b3c49a2741035d0076b81fa9cea13e0ed (patch) | |
tree | aaf2760628fd6453286c4b6a083d61cad5317a8d | |
parent | 5d2525527ef827f9ad669a8a32c36c05bce1d843 (diff) |
[wasm] Make WasmHttpMessageHandler the default handler for WebAssembly (#11631)
* Clean up leaks in the WasmHttpMessageHandler.
- Most of the leaks present themselves during a Cancel of a streaming request.
* Make WasmHttpMessageHandler the default handler for WebAssembly
- Required libraries WebAssembly.Net.Http.dll and WebAssembly.Bindings.dll.
* Clean up spacing
-rw-r--r-- | mcs/class/System.Net.Http/System.Net.Http/HttpClient.wasm.cs | 35 | ||||
-rw-r--r-- | sdks/wasm/WasmHttpMessageHandler.cs | 5 |
2 files changed, 33 insertions, 7 deletions
diff --git a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.wasm.cs b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.wasm.cs index 304d9de30c3..86a6edd4027 100644 --- a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.wasm.cs +++ b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.wasm.cs @@ -18,13 +18,34 @@ namespace System.Net.Http { if (GetHttpMessageHandler == null) - return GetFallback("No custom HttpClientHandler registered"); - - var handler = GetHttpMessageHandler(); - if (handler == null) - return GetFallback($"Custom HttpMessageHandler is not valid"); - - return handler; + { + Type type = Type.GetType("WebAssembly.Net.Http.HttpClient.WasmHttpMessageHandler, WebAssembly.Net.Http"); + if (type == null) + return GetFallback ("Invalid WebAssembly Module? Cannot find WebAssembly.Net.Http.HttpClient.WasmHttpMessageHandler"); + + MethodInfo method = type.GetMethod("GetHttpMessageHandler", BindingFlags.Static | BindingFlags.NonPublic); + if (method == null) + return GetFallback ("Your WebAssembly version does not support obtaining of the custom HttpClientHandler"); + + object ret = method.Invoke(null, null); + if (ret == null) + return GetFallback ("WebAssembly returned no custom HttpClientHandler"); + + var handler = ret as HttpMessageHandler; + if (handler == null) + return GetFallback ($"{ret?.GetType()} is not a valid HttpMessageHandler"); + + return handler; + + } + else + { + var handler = GetHttpMessageHandler(); + if (handler == null) + return GetFallback($"Custom HttpMessageHandler is not valid"); + + return handler; + } } static HttpMessageHandler GetFallback(string message) diff --git a/sdks/wasm/WasmHttpMessageHandler.cs b/sdks/wasm/WasmHttpMessageHandler.cs index 89e0bff577f..dacbeeb18f0 100644 --- a/sdks/wasm/WasmHttpMessageHandler.cs +++ b/sdks/wasm/WasmHttpMessageHandler.cs @@ -50,6 +50,11 @@ namespace WebAssembly.Net.Http.HttpClient handlerInit(); } + private static WasmHttpMessageHandler GetHttpMessageHandler() + { + return new WasmHttpMessageHandler(); + } + private void handlerInit() { window = (JSObject)WebAssembly.Runtime.GetGlobalObject("window"); |