This commit introduces a few 4.0 rendering changes which break some tests. The...
[mono.git] / mcs / class / System.Web / System.Web.UI / UserControl.cs
index 24666360e75517f9c70fd8de7c85076d08f0a389..d10173417b5cb7811d8325e6892d7b5ec2e99ac4 100644 (file)
@@ -6,7 +6,7 @@
 //   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
 //
 // (C) 2002 Ximian, Inc (http://www.ximian.com)
-// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
@@ -35,8 +35,8 @@ using System.Security.Permissions;
 using System.Web.Caching;
 using System.Web.SessionState;
 
-namespace System.Web.UI {
-
+namespace System.Web.UI
+{
        // CAS
        [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
        [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
@@ -45,21 +45,14 @@ namespace System.Web.UI {
        [DefaultEvent ("Load"), DesignerCategory ("ASPXCodeBehind")]
        [ToolboxItem (false)]
        [Designer ("System.Web.UI.Design.UserControlDesigner, " + Consts.AssemblySystem_Design, typeof (IDesigner))]
-#if NET_2_0
-       [Designer ("Microsoft.VisualStudio.Web.WebForms.WebFormDesigner, " + Consts.AssemblyMicrosoft_VisualStudio_Web, typeof (IRootDesigner))]
-       [ParseChildren (true, "", ChildControlType = typeof (Control))]
-#else
-       [RootDesignerSerializer ("Microsoft.VSDesigner.WebForms.RootCodeDomSerializer, " + Consts.AssemblyMicrosoft_VSDesigner, "System.ComponentModel.Design.Serialization.CodeDomSerializer, " + Consts.AssemblySystem_Design, true)]
        [ParseChildren (true)]
-#endif
-       public class UserControl : TemplateControl, IAttributeAccessor, IUserControlDesignerAccessor
-#if NET_2_0
-       , INamingContainer, IFilterResolutionService
-#endif
+       [Designer ("Microsoft.VisualStudio.Web.WebForms.WebFormDesigner, " + Consts.AssemblyMicrosoft_VisualStudio_Web, typeof (IRootDesigner))]
+       public class UserControl : TemplateControl, IAttributeAccessor, IUserControlDesignerAccessor, INamingContainer, IFilterResolutionService, INonBindingContainer
        {
-               private bool initialized;
-               private AttributeCollection attributes;
-               private StateBag attrBag;
+               ControlCachePolicy cachePolicy;
+               bool initialized;
+               AttributeCollection attributes;
+               StateBag attrBag;
 
                public UserControl ()
                {
@@ -77,7 +70,7 @@ namespace System.Web.UI {
                        }
                }
 
-               private void EnsureAttributes ()
+               void EnsureAttributes ()
                {
                        if (attributes == null) {
                                attrBag = new StateBag (true);
@@ -109,16 +102,21 @@ namespace System.Web.UI {
                        }
                }
 
-#if NET_2_0
                [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
                [Browsable (false)]
                public ControlCachePolicy CachePolicy 
                {
                        get {
-                               throw new NotImplementedException ();
+                               BasePartialCachingControl bpcc = Parent as BasePartialCachingControl;
+
+                               if (bpcc != null)
+                                       return bpcc.CachePolicy;
+                               
+                               if (cachePolicy == null)
+                                       cachePolicy = new ControlCachePolicy ();
+                               return cachePolicy;
                        }
                }
-#endif         
 
                [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
                [Browsable (false)]
@@ -203,19 +201,17 @@ namespace System.Web.UI {
                {
                        if (initialized)
                                return;
-                       initialized = true;
                        this.Page = page;
                        InitializeAsUserControlInternal ();
                }
 
-               [MonoTODO]
                internal void InitializeAsUserControlInternal ()
                {
-                       /* XXX make sure this really works - we need a
-                        * test for InitializeAsUserControl to see if
-                        * it throws ArgumentNullException on a null
-                        * @page. */
-                       InitializeAsUserControl (null);
+                       if (initialized)
+                               return;
+                       initialized = true;
+                       WireupAutomaticEvents ();
+                       FrameworkInitialize ();
                }
 
                public string MapPath (string virtualPath)
@@ -236,12 +232,7 @@ namespace System.Web.UI {
 
                }
 
-#if NET_2_0
-               protected internal
-#else
-               protected
-#endif
-               override void OnInit (EventArgs e)
+               protected internal override void OnInit (EventArgs e)
                {
                        InitializeAsUserControl (Page);
 
@@ -293,18 +284,17 @@ namespace System.Web.UI {
                        }
                        set { ViewState["!DesignTimeTagName"] = value; }
                }
-#if NET_2_0
-               [MonoTODO]
+
+               [MonoTODO ("Not implemented")]
                int IFilterResolutionService.CompareFilters (string filter1, string filter2)
                {
                        throw new NotImplementedException ();
                }
 
-               [MonoTODO]
+               [MonoTODO ("Not implemented")]
                bool IFilterResolutionService.EvaluateFilter (string filterName)
                {
                        throw new NotImplementedException ();
                }
-#endif
        }
 }