2010-06-30 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.Web / System.Web.Configuration_2.0 / HttpCapabilitiesBase.cs
index 36489be3baec78d1ce314cb94b264c562beb711c..39d91ee7c507b7a4886dc03986c274e454981d9a 100644 (file)
@@ -26,8 +26,6 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0
-
 using System.Collections;
 using System.Security.Permissions;
 using System.IO;
@@ -37,6 +35,57 @@ namespace System.Web.Configuration
 {
        public partial class HttpCapabilitiesBase: IFilterResolutionService
        {
+               internal IDictionary capabilities;
+
+               public HttpCapabilitiesBase () { }
+
+               public virtual string this [string key]
+               {
+                       get { return capabilities [key] as string; }
+               }
+
+               internal static string GetUserAgentForDetection (HttpRequest request)
+               {
+                       string ua = null;
+                       if (request.Context.CurrentHandler is System.Web.UI.Page)
+                               ua = ((System.Web.UI.Page) request.Context.CurrentHandler).ClientTarget;
+                       
+                       if (String.IsNullOrEmpty (ua)) {
+                               ua = request.ClientTarget;
+
+                               if (String.IsNullOrEmpty (ua))
+                                       ua = request.UserAgent;
+                       }
+
+                       return ua;
+               }
+
+               static HttpBrowserCapabilities GetHttpBrowserCapabilitiesFromBrowscapini(string ua)
+               {
+                       HttpBrowserCapabilities bcap = new HttpBrowserCapabilities();
+                       bcap.capabilities = CapabilitiesLoader.GetCapabilities (ua);
+                       return bcap;
+               }
+               
+               public static HttpCapabilitiesBase GetConfigCapabilities (string configKey, HttpRequest request)
+               {
+                       string ua = GetUserAgentForDetection (request);
+                       HttpBrowserCapabilities bcap = GetHttpBrowserCapabilitiesFromBrowscapini(ua);
+                       GetConfigCapabilities_called = true;
+                       if (HttpApplicationFactory.AppBrowsersFiles.Length > 0)
+                               bcap = HttpApplicationFactory.CapabilitiesProcessor.Process(request, bcap.Capabilities);
+                       bcap.useragent = ua;
+                       bcap.Init ();
+                       return bcap;
+               }
+
+               // Used by unit tests to determine whether GetConfigCapabilities was called.
+               static internal bool GetConfigCapabilities_called;
+
+               protected virtual void Init ()
+               {
+               }
+
                int IFilterResolutionService.CompareFilters (string filter1, string filter2)
                {
                        throw new NotImplementedException ();
@@ -1101,4 +1150,3 @@ namespace System.Web.Configuration
        }
 }
 
-#endif