2009-08-24 Marek Habersack <mhabersack@novell.com>
[mono.git] / mcs / class / System.Web / System.Web / HttpApplicationState.cs
index 9a8bc2195d6f223b00a03ac07117b317877af4eb..3b0f3e1ad6f9cf8e1c3e7ca6c8ca6f3a2e50a600 100644 (file)
@@ -4,47 +4,72 @@
 // Author:
 //   Patrik Torstensson
 //
-using System;
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
 using System.Threading;
-using System.Web;
 using System.Collections.Specialized;
+using System.Security.Permissions;
 
-namespace System.Web \r
-{
+namespace System.Web {
 
-       public sealed class HttpApplicationState : NameObjectCollectionBase \r
+       // CAS - no InheritanceDemand here as the class is sealed
+       [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       public sealed class HttpApplicationState : NameObjectCollectionBase 
        {
-               private HttpStaticObjectsCollection _AppObjects;
-               private HttpStaticObjectsCollection _SessionObjects;
+               HttpStaticObjectsCollection _AppObjects;
+               HttpStaticObjectsCollection _SessionObjects;
 
-               private ReaderWriterLock _Lock; 
+               ReaderWriterLock _Lock; 
 
                internal HttpApplicationState ()
                {
-                       _AppObjects = new HttpStaticObjectsCollection ();
-                       _SessionObjects = new HttpStaticObjectsCollection ();
+                       // do not use the public (empty) ctor as it required UnmanagedCode permission
+                       _AppObjects = new HttpStaticObjectsCollection (this);
+                       _SessionObjects = new HttpStaticObjectsCollection (this);
                        _Lock = new ReaderWriterLock ();
                }
 
                internal HttpApplicationState (HttpStaticObjectsCollection AppObj,
                        HttpStaticObjectsCollection SessionObj)
                {
-                       if (null != AppObj) \r
+                       if (null != AppObj) 
                        {
                                _AppObjects = AppObj;
-                       } \r
-                       else \r
+                       } 
+                       else 
                        {
-                               _AppObjects = new HttpStaticObjectsCollection ();
+                               // do not use the public (empty) ctor as it required UnmanagedCode permission
+                               _AppObjects = new HttpStaticObjectsCollection (this);
                        }
 
-                       if (null != SessionObj) \r
+                       if (null != SessionObj) 
                        {
                                _SessionObjects = SessionObj;
-                       } \r
-                       else \r
+                       } 
+                       else 
                        {
-                               _SessionObjects = new HttpStaticObjectsCollection ();
+                               // do not use the public (empty) ctor as it required UnmanagedCode permission
+                               _SessionObjects = new HttpStaticObjectsCollection (this);
                        }
                        _Lock = new ReaderWriterLock ();
                }
@@ -52,11 +77,11 @@ namespace System.Web
                public void Add (string name, object value)
                {
                        _Lock.AcquireWriterLock (-1); 
-                       try \r
+                       try 
                        {
                                BaseAdd (name, value);
-                       } \r
-                       finally \r
+                       } 
+                       finally 
                        {
                                _Lock.ReleaseWriterLock ();
                        }
@@ -65,11 +90,11 @@ namespace System.Web
                public void Clear ()
                {
                        _Lock.AcquireWriterLock (-1); 
-                       try \r
+                       try 
                        {
                                BaseClear ();
-                       } \r
-                       finally \r
+                       } 
+                       finally 
                        {
                                _Lock.ReleaseWriterLock ();
                        }
@@ -80,11 +105,11 @@ namespace System.Web
                        object ret = null;
 
                        _Lock.AcquireReaderLock (-1); 
-                       try \r
+                       try 
                        {
                                ret = BaseGet (name);
-                       } \r
-                       finally \r
+                       } 
+                       finally 
                        {
                                _Lock.ReleaseReaderLock ();
                        }
@@ -97,11 +122,11 @@ namespace System.Web
                        object ret = null;
 
                        _Lock.AcquireReaderLock (-1); 
-                       try \r
+                       try 
                        {
                                ret = BaseGet (index);
-                       } \r
-                       finally \r
+                       } 
+                       finally 
                        {
                                _Lock.ReleaseReaderLock ();
                        }
@@ -114,11 +139,11 @@ namespace System.Web
                        string ret = null;
 
                        _Lock.AcquireReaderLock (-1); 
-                       try \r
+                       try 
                        {
                                ret = BaseGetKey (index);
-                       } \r
-                       finally \r
+                       } 
+                       finally 
                        {
                                _Lock.ReleaseReaderLock ();
                        }
@@ -134,11 +159,11 @@ namespace System.Web
                public void Remove (string name)
                {
                        _Lock.AcquireWriterLock (-1); 
-                       try \r
+                       try 
                        {
                                BaseRemove (name);
-                       } \r
-                       finally \r
+                       } 
+                       finally 
                        {
                                _Lock.ReleaseWriterLock ();
                        }      
@@ -152,11 +177,11 @@ namespace System.Web
                public void RemoveAt (int index)
                {
                        _Lock.AcquireWriterLock (-1); 
-                       try \r
+                       try 
                        {
                                BaseRemoveAt (index);
-                       } \r
-                       finally \r
+                       } 
+                       finally 
                        {
                                _Lock.ReleaseWriterLock ();
                        }      
@@ -165,11 +190,11 @@ namespace System.Web
                public void Set (string name, object value)
                {
                        _Lock.AcquireWriterLock (-1); 
-                       try \r
+                       try 
                        {
                                BaseSet (name, value);
-                       } \r
-                       finally \r
+                       } 
+                       finally 
                        {
                                _Lock.ReleaseWriterLock ();
                        }      
@@ -180,18 +205,18 @@ namespace System.Web
                        _Lock.ReleaseWriterLock ();
                }
 
-               public string [] AllKeys \r
+               public string [] AllKeys 
                {
-                       get \r
+                       get 
                        {
                                string [] ret = null;
 
                                _Lock.AcquireReaderLock (-1); 
-                               try \r
+                               try 
                                {
                                        ret = BaseGetAllKeys ();
-                               } \r
-                               finally \r
+                               } 
+                               finally 
                                {
                                        _Lock.ReleaseReaderLock ();
                                }     
@@ -200,23 +225,23 @@ namespace System.Web
                        }
                }
 
-               public HttpApplicationState Contents \r
+               public HttpApplicationState Contents 
                {
                        get { return this; }
                }
 
-               public override int Count \r
+               public override int Count 
                {
-                       get \r
+                       get 
                        {
                                int ret = 0;
 
                                _Lock.AcquireReaderLock (-1); 
-                               try \r
+                               try 
                                {
                                        ret = base.Count;
-                               } \r
-                               finally \r
+                               } 
+                               finally 
                                {
                                        _Lock.ReleaseReaderLock ();
                                }     
@@ -225,25 +250,25 @@ namespace System.Web
                        }
                }   
 
-               public object this [string name] \r
+               public object this [string name] 
                {
                        get { return Get (name); }
                        set { Set (name, value); }
                }
 
-               public object this [int index] \r
+               public object this [int index] 
                {
                        get { return Get (index); }
                }
 
                //  ASP Session based objects
-               internal HttpStaticObjectsCollection SessionObjects \r
+               internal HttpStaticObjectsCollection SessionObjects 
                {
                        get { return _SessionObjects; }
                }
 
                //  ASP App based objects
-               public HttpStaticObjectsCollection StaticObjects \r
+               public HttpStaticObjectsCollection StaticObjects 
                {
                        get { return _AppObjects; }
                }