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 695f5241bfcf329a69735875947d2781cc1e1641..d10173417b5cb7811d8325e6892d7b5ec2e99ac4 100644 (file)
@@ -6,8 +6,7 @@
 //   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
 //
 // (C) 2002 Ximian, Inc (http://www.ximian.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
 // 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;
+
 using System.ComponentModel;
 using System.ComponentModel.Design;
 using System.ComponentModel.Design.Serialization;
+using System.Security.Permissions;
 using System.Web.Caching;
 using System.Web.SessionState;
 
 namespace System.Web.UI
 {
+       // CAS
+       [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       // attributes
        [ControlBuilder (typeof (UserControlControlBuilder))]
        [DefaultEvent ("Load"), DesignerCategory ("ASPXCodeBehind")]
        [ToolboxItem (false)]
        [Designer ("System.Web.UI.Design.UserControlDesigner, " + Consts.AssemblySystem_Design, typeof (IDesigner))]
-       [RootDesignerSerializer ("Microsoft.VSDesigner.WebForms.RootCodeDomSerializer, " + Consts.AssemblyMicrosoft_VSDesigner, "System.ComponentModel.Design.Serialization.CodeDomSerializer, " + Consts.AssemblySystem_Design, true)]
-#if NET_2_0
-       [Designer ("Microsoft.VisualStudio.Web.WebForms.WebFormDesigner, " + Consts.AssemblyMicrosoft_VisualStudio_Web, typeof (IRootDesigner))]
-       [ParseChildren (true, "", ChildControlType = typeof (Control))]
-#else
        [ParseChildren (true)]
-#endif
-       public class UserControl : TemplateControl, IAttributeAccessor, IUserControlDesignerAccessor
-#if NET_2_0
-       , INamingContainer
-#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 ()
                {
-                       //??
                }
 
                [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
@@ -74,7 +70,7 @@ namespace System.Web.UI
                        }
                }
 
-               private void EnsureAttributes ()
+               void EnsureAttributes ()
                {
                        if (attributes == null) {
                                attrBag = new StateBag (true);
@@ -89,6 +85,7 @@ namespace System.Web.UI
                public AttributeCollection Attributes
                {
                        get {
+                               EnsureAttributes ();
                                return attributes;
                        }
                }
@@ -105,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)]
@@ -199,8 +201,15 @@ namespace System.Web.UI
                {
                        if (initialized)
                                return;
-                       initialized = true;
                        this.Page = page;
+                       InitializeAsUserControlInternal ();
+               }
+
+               internal void InitializeAsUserControlInternal ()
+               {
+                       if (initialized)
+                               return;
+                       initialized = true;
                        WireupAutomaticEvents ();
                        FrameworkInitialize ();
                }
@@ -223,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);
 
@@ -280,6 +284,17 @@ namespace System.Web.UI
                        }
                        set { ViewState["!DesignTimeTagName"] = value; }
                }
+
+               [MonoTODO ("Not implemented")]
+               int IFilterResolutionService.CompareFilters (string filter1, string filter2)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               [MonoTODO ("Not implemented")]
+               bool IFilterResolutionService.EvaluateFilter (string filterName)
+               {
+                       throw new NotImplementedException ();
+               }
        }
 }
-