Merge pull request #2530 from lambdageek/monoerror-mono_string_new
[mono.git] / mcs / class / System.Web / System.Web / HttpCachePolicy.cs
index 526106d399d87a2f4a038f818f027248f482d3c3..4f9ddcda64181589b222cc9bad99f45628431763 100644 (file)
@@ -28,6 +28,7 @@
 //
 
 using System.Collections;
+using System.Collections.Specialized;
 using System.ComponentModel;
 using System.Globalization;
 using System.IO;
@@ -36,34 +37,17 @@ using System.Text;
 using System.Web.UI;
 using System.Web.Util;
 
-namespace System.Web {
-
-       class CacheabilityUpdatedEventArgs : EventArgs {
-
-               public readonly HttpCacheability Cacheability;
-
-               public CacheabilityUpdatedEventArgs (HttpCacheability cacheability)
-               {
-                       Cacheability = cacheability;
-               }
-       }
-       
-       internal delegate void CacheabilityUpdatedCallback (object sender, CacheabilityUpdatedEventArgs args);
-       
+namespace System.Web
+{
        // CAS - no InheritanceDemand here as the class is sealed
        [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
-       public sealed class HttpCachePolicy {
-               static readonly object cacheabilityUpdatedEvent = new object ();
-               
+       public sealed class HttpCachePolicy
+       {
                internal HttpCachePolicy ()
                {
                }
 
-#region Fields
-               
-#if NET_2_0
                HttpCacheVaryByContentEncodings vary_by_content_encodings = new HttpCacheVaryByContentEncodings ();
-#endif
                HttpCacheVaryByHeaders vary_by_headers = new HttpCacheVaryByHeaders ();
                HttpCacheVaryByParams vary_by_params = new HttpCacheVaryByParams ();
                ArrayList validation_callbacks;
@@ -72,7 +56,7 @@ namespace System.Web {
                string etag;
                bool etag_from_file_dependencies;
                bool last_modified_from_file_dependencies;
-               
+
                //
                // Used externally
                //
@@ -80,7 +64,7 @@ namespace System.Web {
                internal DateTime expire_date;
                internal bool have_last_modified;
                internal DateTime last_modified;
-               
+
                //bool LastModifiedFromFileDependencies;
                HttpCacheRevalidation revalidation;
                string vary_by_custom;
@@ -92,31 +76,16 @@ namespace System.Web {
                bool sliding_expiration;
                int duration;
                bool allow_response_in_browser_history;
-                bool allow_server_caching = true;
-               bool set_no_store = false;
-               bool set_no_transform = false;
-               bool valid_until_expires = false;
-               
-               // always false in 1.x
-               bool omit_vary_star = false;
-
-               EventHandlerList events = new EventHandlerList ();
-#endregion
-
-                internal event CacheabilityUpdatedCallback CacheabilityUpdated {
-                       add { events.AddHandler (cacheabilityUpdatedEvent, value); }
-                       remove { events.RemoveHandler (cacheabilityUpdatedEvent, value); }
-               }
+               bool allow_server_caching = true;
+               bool set_no_store;
+               bool set_no_transform;
+               bool valid_until_expires;
+               bool omit_vary_star;
                
-                
-#region Properties
-
-#if NET_2_0
                public HttpCacheVaryByContentEncodings VaryByContentEncodings {
                        get { return vary_by_content_encodings; }
                }
-#endif
-               
+
                public HttpCacheVaryByHeaders VaryByHeaders {
                        get { return vary_by_headers; }
                }
@@ -128,7 +97,7 @@ namespace System.Web {
                internal bool AllowServerCaching {
                        get { return allow_server_caching; }
                }
-               
+
                internal int Duration {
                        get { return duration; }
                        set { duration = value; }
@@ -137,16 +106,15 @@ namespace System.Web {
                internal bool Sliding {
                        get { return sliding_expiration; }
                }
-               
-                internal DateTime Expires {
-                        get { return expire_date; }
-                }
+
+               internal DateTime Expires {
+                       get { return expire_date; }
+               }
 
                internal ArrayList ValidationCallbacks {
                        get { return validation_callbacks; }
                }
 
-               // always false in 1.x
                internal bool OmitVaryStar {
                        get { return omit_vary_star; }
                }
@@ -154,19 +122,15 @@ namespace System.Web {
                internal bool ValidUntilExpires {
                        get { return valid_until_expires; }
                }
-               
-#endregion // Properties
-
-#region Methods
 
                internal int ExpireMinutes ()
                {
                        if (!have_expire_date)
                                return 0;
-                       
+
                        return (expire_date - DateTime.Now).Minutes;
                }
-               
+
                public void AddValidationCallback (HttpCacheValidateHandler handler, object data)
                {
                        if (handler == null)
@@ -199,11 +163,8 @@ namespace System.Web {
 
                        if (Cacheability > 0 && cacheability > Cacheability)
                                return;
-                       
+
                        Cacheability = cacheability;
-                       CacheabilityUpdatedCallback eh = events [cacheabilityUpdatedEvent] as CacheabilityUpdatedCallback;
-                       if (eh != null)
-                               eh (this, new CacheabilityUpdatedEventArgs (cacheability));
                }
 
                public void SetCacheability (HttpCacheability cacheability, string field)
@@ -272,7 +233,7 @@ namespace System.Web {
                {
                        if (date < TimeSpan.Zero)
                                throw new ArgumentOutOfRangeException ("date");
-                       
+
                        if (HaveMaxAge && MaxAge < date)
                                return;
 
@@ -304,6 +265,7 @@ namespace System.Web {
                                return;
 
                        ProxyMaxAge = delta;
+                       HaveProxyMaxAge = true;
                }
 
                public void SetRevalidation (HttpCacheRevalidation revalidation)
@@ -348,7 +310,7 @@ namespace System.Web {
                                allow_response_in_browser_history = allow;
                }
 
-               internal void SetHeaders (HttpResponse response, ArrayList headers)
+               internal void SetHeaders (HttpResponse response, NameValueCollection headers)
                {
                        bool noCache = false;
                        string cc = null;
@@ -374,16 +336,16 @@ namespace System.Web {
                        if (noCache) {
                                response.CacheControl = cc;
                                if (!allow_response_in_browser_history) {
-                                       headers.Add (new UnknownResponseHeader ("Expires", "-1"));
-                                       headers.Add (new UnknownResponseHeader ("Pragma", "no-cache"));
+                                       headers.Add ("Expires", "-1");
+                                       headers.Add ("Pragma", "no-cache");
                                }
                        } else {
-                               if (MaxAge.TotalSeconds != 0)
+                               if (HaveMaxAge)
                                        cc = String.Concat (cc, ", max-age=", ((long) MaxAge.TotalSeconds).ToString ());
 
                                if (have_expire_date) {
                                        string expires = TimeUtil.ToUtcTimeString (expire_date);
-                                       headers.Add (new UnknownResponseHeader ("Expires", expires));
+                                       headers.Add ("Expires", expires);
                                }
                        }
 
@@ -391,31 +353,34 @@ namespace System.Web {
                                cc = String.Concat (cc, ", no-store");
                        if (set_no_transform)
                                cc = String.Concat (cc, ", no-transform");
+                       if (cache_extension != null && cache_extension.Length > 0) {
+                               if (!String.IsNullOrEmpty (cc))
+                                       cc = String.Concat (cc, ", ");
+                               cc = String.Concat (cc, cache_extension.ToString ());
+                       }
                        
-                       headers.Add (new UnknownResponseHeader ("Cache-Control", cc));
+                       headers.Add ("Cache-Control", cc);
 
                        if (last_modified_from_file_dependencies || etag_from_file_dependencies)
                                HeadersFromFileDependencies (response);
-                       
+
                        if (etag != null)
-                               headers.Add (new UnknownResponseHeader ("ETag", etag));
+                               headers.Add ("ETag", etag);
 
                        if (have_last_modified)
-                               headers.Add (new UnknownResponseHeader ("Last-Modified",
-                                                            TimeUtil.ToUtcTimeString (last_modified)));
+                               headers.Add ("Last-Modified", TimeUtil.ToUtcTimeString (last_modified));
 
                        if (!vary_by_params.IgnoreParams) {
-                               BaseResponseHeader vb = vary_by_params.GetResponseHeader ();
+                               string vb = vary_by_params.GetResponseHeaderValue ();
                                if (vb != null)
-                                       headers.Add (vb);
+                                       headers.Add ("Vary", vb);
                        }
-
                }
 
                void HeadersFromFileDependencies (HttpResponse response)
                {
                        string [] fileDeps = response.FileDependencies;
-                       
+
                        if (fileDeps == null || fileDeps.Length == 0)
                                return;
 
@@ -450,15 +415,10 @@ namespace System.Web {
                        if (doEtag && etagsb.Length > 0)
                                etag = etagsb.ToString ();
                }
-               
-#if NET_2_0
+
                public void SetOmitVaryStar (bool omit)
                {
                        omit_vary_star = omit;
                }
-#endif
-               
-#endregion // Methods
        }
 }
-