diff options
author | monojenkins <jo.shields+jenkins@xamarin.com> | 2020-02-18 15:55:00 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-18 15:55:00 +0300 |
commit | 0761b0ee55469e643a8a7d252364136948af79c6 (patch) | |
tree | 5bd0a63a7d644e912e7fb018cc6bc43f7fec966b | |
parent | 0c45a74a967cdc6a84cc8950f1303ad9fe1743b2 (diff) |
[2019-12] Make MonoWebRequestHandler linker friendly (#18833)mono-6.10.0.76
* Make MonoWebRequestHandler linker friendly
* Make MonoWebRequestHandler's ctor public (to be able to use in Activator.CreateInstance without binding flags)
* Remove Console.WriteLine from system.net.http
Co-authored-by: Egor Bogatov <egorbo@gmail.com>
3 files changed, 20 insertions, 15 deletions
diff --git a/mcs/class/System.Net.Http/HttpClientHandler.SocketsHandler.Android.cs b/mcs/class/System.Net.Http/HttpClientHandler.SocketsHandler.Android.cs index c483c28f03b..9b4fadc19f1 100644 --- a/mcs/class/System.Net.Http/HttpClientHandler.SocketsHandler.Android.cs +++ b/mcs/class/System.Net.Http/HttpClientHandler.SocketsHandler.Android.cs @@ -1,3 +1,5 @@ +using System.Reflection; + namespace System.Net.Http { partial class HttpClientHandler : HttpMessageHandler @@ -6,7 +8,12 @@ namespace System.Net.Http { string envvar = Environment.GetEnvironmentVariable ("XA_HTTP_CLIENT_HANDLER_TYPE")?.Trim (); if (envvar?.StartsWith("System.Net.Http.MonoWebRequestHandler", StringComparison.InvariantCulture) == true) - return new MonoWebRequestHandler (); + { + Type monoWrhType = Type.GetType (envvar, false); + if (monoWrhType != null) + return (IMonoHttpClientHandler) Activator.CreateInstance (monoWrhType); + } + // Ignore other types of handlers here (e.g. AndroidHttpHandler) to keep the old behavior // and always create SocketsHttpHandler for code like this if MonoWebRequestHandler was not specified: // diff --git a/mcs/class/System.Net.Http/MonoWebRequestHandler.cs b/mcs/class/System.Net.Http/MonoWebRequestHandler.cs index 023343f01f4..27c904adfdf 100644 --- a/mcs/class/System.Net.Http/MonoWebRequestHandler.cs +++ b/mcs/class/System.Net.Http/MonoWebRequestHandler.cs @@ -70,7 +70,7 @@ namespace System.Net.Http TimeSpan? timeout; bool disposed; - internal MonoWebRequestHandler () + public MonoWebRequestHandler () { allowAutoRedirect = true; maxAutomaticRedirections = 50; diff --git a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.android.cs b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.android.cs index 9b899bcffd8..8ea04ac4880 100644 --- a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.android.cs +++ b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.android.cs @@ -11,10 +11,16 @@ namespace System.Net.Http { string envvar = Environment.GetEnvironmentVariable ("XA_HTTP_CLIENT_HANDLER_TYPE")?.Trim (); if (string.IsNullOrEmpty (envvar)) - return GetFallback ($"XA_HTTP_CLIENT_HANDLER_TYPE is empty"); + return new HttpClientHandler (); - if (envvar?.StartsWith("System.Net.Http.MonoWebRequestHandler", StringComparison.InvariantCulture) == true) - return new HttpClientHandler (new MonoWebRequestHandler ()); + if (envvar?.StartsWith ("System.Net.Http.MonoWebRequestHandler", StringComparison.InvariantCulture) == true) + { + Type monoWrhType = Type.GetType (envvar, false); + if (monoWrhType != null) + return new HttpClientHandler ((IMonoHttpClientHandler) Activator.CreateInstance (monoWrhType)); + + return new HttpClientHandler (); + } Type handlerType = Type.GetType (envvar, false); if (handlerType == null && !envvar.Contains (", ")) @@ -25,19 +31,11 @@ namespace System.Net.Http { } if (handlerType == null) - return GetFallback ($"'{envvar}' type was not found"); - - object handlerObj = Activator.CreateInstance (handlerType); + return new HttpClientHandler (); - if (handlerObj is HttpMessageHandler msgHandler) + if (Activator.CreateInstance (handlerType) is HttpMessageHandler msgHandler) return msgHandler; - return GetFallback ($"{handlerObj?.GetType ()} is not a valid HttpMessageHandler or MonoWebRequestHandler"); - } - - static HttpMessageHandler GetFallback (string message) - { - Console.WriteLine (message + ". Defaulting to System.Net.Http.HttpClientHandler"); return new HttpClientHandler (); } } |