New tests.
[mono.git] / mcs / class / System.Web / System.Web.UI.HtmlControls / HtmlHead.cs
index b5e89415311f1fb27a63fd38603fec848832c7d3..6f80e8a23aa8cccfeed0796d0963ee797fb845e0 100644 (file)
@@ -4,7 +4,7 @@
 // Authors:
 //     Lluis Sanchez Gual (lluis@novell.com)
 //
-// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2004-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
@@ -26,8 +26,6 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0
-
 using System.ComponentModel;
 using System.Collections;
 using System.Security.Permissions;
@@ -39,12 +37,17 @@ namespace System.Web.UI.HtmlControls
        [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
        // attributes
        [ControlBuilder (typeof(HtmlHeadBuilder))]
-       public sealed class HtmlHead: HtmlGenericControl, IParserAccessor {
-
+       public sealed class HtmlHead: HtmlGenericControl, IParserAccessor
+       {
+#if NET_4_0
+               string descriptionText;
+               string keywordsText;
+               HtmlMeta descriptionMeta;
+               HtmlMeta keywordsMeta;
+#endif
                string titleText;
                HtmlTitle title;
-               Hashtable metadata;
-               ArrayList styleSheets;
+               //Hashtable metadata;
                StyleSheetBag styleSheet;
                
                public HtmlHead(): base("head") {}
@@ -55,10 +58,16 @@ namespace System.Web.UI.HtmlControls
                
                protected internal override void OnInit (EventArgs e)
                {
+                       base.OnInit (e);
+                       Page page = Page;
+                       
+                       if (page == null)
+                               throw new HttpException ("The <head runat=\"server\"> control requires a page.");
+                       
                        //You can only have one <head runat="server"> control on a page.
-                       if(Page.Header!=null)
+                       if(page.Header != null)
                                throw new HttpException ("You can only have one <head runat=\"server\"> control on a page.");
-                       Page.SetHeader (this);
+                       page.SetHeader (this);
                }
                
                protected internal override void RenderChildren (HtmlTextWriter writer)
@@ -66,14 +75,14 @@ namespace System.Web.UI.HtmlControls
                        EnsureTitleControl ();
 
                        base.RenderChildren (writer);
-                       if (metadata != null) {
-                               foreach (DictionaryEntry entry in metadata) {
-                                       writer.AddAttribute ("name", entry.Key.ToString ());
-                                       writer.AddAttribute ("content", entry.Value.ToString ());
-                                       writer.RenderBeginTag (HtmlTextWriterTag.Meta);
-                                       writer.RenderEndTag ();
-                               }
-                       }
+//                     if (metadata != null) {
+//                             foreach (DictionaryEntry entry in metadata) {
+//                                     writer.AddAttribute ("name", entry.Key.ToString ());
+//                                     writer.AddAttribute ("content", entry.Value.ToString ());
+//                                     writer.RenderBeginTag (HtmlTextWriterTag.Meta);
+//                                     writer.RenderEndTag ();
+//                             }
+//                     }
                        
                        if (styleSheet != null)
                                styleSheet.Render (writer);
@@ -89,6 +98,15 @@ namespace System.Web.UI.HtmlControls
                                title = t;
                        }
 
+#if NET_4_0
+                       HtmlMeta meta = control as HtmlMeta;
+                       if (meta != null) {
+                               if (String.Compare ("keywords", meta.Name, StringComparison.OrdinalIgnoreCase) == 0)
+                                       keywordsMeta = meta;
+                               else if (String.Compare ("description", meta.Name, StringComparison.OrdinalIgnoreCase) == 0)
+                                       descriptionMeta = meta;
+                       }
+#endif
                        base.AddedControl (control, index);
                }
 
@@ -97,6 +115,12 @@ namespace System.Web.UI.HtmlControls
                        if (title == control)
                                title = null;
 
+#if NET_4_0
+                       if (keywordsMeta == control)
+                               keywordsMeta = null;
+                       else if (descriptionMeta == control)
+                               descriptionMeta = null;
+#endif
                        base.RemovedControl (control);
                }
                
@@ -109,19 +133,51 @@ namespace System.Web.UI.HtmlControls
                        Controls.Add (t);
                }
 
-               IList LinkedStyleSheets {
+//             IList LinkedStyleSheets {
+//                     get {
+//                             if (styleSheets == null) styleSheets = new ArrayList ();
+//                             return styleSheets;
+//                     }
+//             } 
+//             
+//             IDictionary Metadata {
+//                     get {
+//                             if (metadata == null) metadata = new Hashtable ();
+//                             return metadata;
+//                     }
+//             }
+               
+#if NET_4_0
+               public string Description {
                        get {
-                               if (styleSheets == null) styleSheets = new ArrayList ();
-                               return styleSheets;
+                               if (descriptionMeta != null)
+                                       return descriptionMeta.Content;
+                               return descriptionText;
                        }
-               } 
-               
-               IDictionary Metadata {
+                       
+                       set {
+                               if (descriptionMeta != null)
+                                       descriptionMeta.Content = value;
+                               else
+                                       descriptionText = value;
+                       }
+               }
+
+               public string Keywords {
                        get {
-                               if (metadata == null) metadata = new Hashtable ();
-                               return metadata;
+                               if (keywordsMeta != null)
+                                       return keywordsMeta.Content;
+                               return keywordsText;
+                       }
+                       
+                       set {
+                               if (keywordsMeta != null)
+                                       keywordsMeta.Content = value;
+                               else
+                                       keywordsText = value;
                        }
                }
+#endif
                
                public IStyleSheet StyleSheet {
                        get {
@@ -184,7 +240,7 @@ namespace System.Web.UI.HtmlControls
                
                public void Render (HtmlTextWriter writer)
                {
-                       writer.AddAttribute ("type", "text/css");
+                       writer.AddAttribute ("type", "text/css", false);
                        writer.RenderBeginTag (HtmlTextWriterTag.Style);
 
                        foreach (StyleEntry entry in entries) {
@@ -197,4 +253,3 @@ namespace System.Web.UI.HtmlControls
        }
 }
 
-#endif