2009-01-12 Geoff Norton <gnorton@novell.com>
[mono.git] / mcs / class / System.Net / System.Net / WebRequest_2_1.cs
index c9382bcc910195470f05c59d041040325af42495..66024307cde94210fde4dd2e9fd7536a71daea9b 100644 (file)
@@ -32,6 +32,7 @@
 
 using System;
 using System.IO;
+using System.Reflection;
 
 namespace System.Net {
 
@@ -53,12 +54,10 @@ namespace System.Net {
                public abstract IAsyncResult BeginGetResponse (AsyncCallback callback, object state);
                public abstract Stream EndGetRequestStream (IAsyncResult asyncResult);
                public abstract WebResponse EndGetResponse (IAsyncResult asyncResult);
-               internal abstract Stream GetRequestStream ();
-               internal abstract WebResponse GetResponse ();
 
                public static WebRequest Create (Uri uri)
                {
-                       if (!uri.Scheme.StartsWith ("http"))
+                       if (uri.IsAbsoluteUri && !uri.Scheme.StartsWith ("http"))
                                throw new NotSupportedException (string.Format ("Scheme {0} not supported", uri.Scheme));
 
                        return CreateBrowserHttpRequest (uri);
@@ -74,9 +73,13 @@ namespace System.Net {
 
                static Type GetBrowserHttpFromMoonlight ()
                {
-                       var type = System.Reflection.Assembly.Load ("System.Windows.Browser, Version=2.0.5.0, Culture=Neutral, PublicKeyToken=7cec85d7bea7798e").GetType ("System.Windows.Browser.Net.BrowserHttpWebRequest");
+                       var assembly = Assembly.Load ("System.Windows.Browser, Version=2.0.5.0, Culture=Neutral, PublicKeyToken=7cec85d7bea7798e");
+                       if (assembly == null)
+                               throw new InvalidOperationException ("Can not load System.Windows.Browser");
+
+                       var type = assembly.GetType ("System.Windows.Browser.Net.BrowserHttpWebRequest");
                        if (type == null)
-                               throw new NotSupportedException ("Can not get BrowserHttpWebRequest");
+                               throw new InvalidOperationException ("Can not get BrowserHttpWebRequest");
 
                        return type;
                }
@@ -85,6 +88,15 @@ namespace System.Net {
                {
                        throw new NotSupportedException ();
                }
+
+               internal void SetupProgressDelegate (Delegate progress_delegate)
+               {
+                       if (browser_http_request == null)
+                               browser_http_request = GetBrowserHttpFromMoonlight ();
+
+                       this.GetType ().GetField ("progress_delegate", BindingFlags.Instance | BindingFlags.NonPublic).SetValue (this, progress_delegate);
+               }
+               
        }
 }