New tests.
[mono.git] / mcs / class / System.Web / System.Web.UI.HtmlControls / HtmlInputFile.cs
index d6c1fb8ecd5df1a5aab53dd4df2554eca25ae7e4..38fe556e5cd2c2516cf3d35f8ba83f8a15364379 100644 (file)
-/*     System.Web.UI.HtmlControls\r
-*      Authors\r
-*              Leen Toelen (toelen@hotmail.com)\r
-*/\r
-\r
-using System;\r
-using System.ComponentModel;\r
-using System.Web;\r
-using System.Web.UI;\r
-using System.Globalization;\r
-using System.Collections.Specialized;\r
-\r
-namespace System.Web.UI.HtmlControls{\r
-       [ValidationProperty("Value")]\r
-       public class HtmlInputFile : HtmlInputControl, IPostBackDataHandler{\r
-               \r
-               public HtmlInputFile():base("file"){}\r
-               \r
-               bool IPostBackDataHandler.LoadPostData (string postDataKey,\r
-                                                      NameValueCollection postCollection)\r
-               {\r
-                       return false;\r
-               }\r
-               \r
-               void IPostBackDataHandler.RaisePostDataChangedEvent ()\r
-               {\r
-               }\r
-               \r
-               [DefaultValue("")]\r
-               [WebCategory("Behavior")]\r
-               [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\r
-               public string Accept{\r
-                       get{\r
-                               string attr = Attributes["accept"];\r
-                               if (attr != null)\r
-                                       return attr;\r
-                               return String.Empty;\r
-                       }\r
-                       set{\r
-                               Attributes["accept"] = AttributeToString(value);\r
-                       }\r
-               }\r
-               \r
-               [DefaultValue("")]\r
-               [WebCategory("Behavior")]\r
-               [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\r
-               public int MaxLength{\r
-                       get{\r
-                               string attr = Attributes["maxlength"];\r
-                               if (attr != null)\r
-                                       return Int32.Parse(attr, CultureInfo.InvariantCulture);\r
-                               return -1;\r
-                       }\r
-                       set{\r
-                               Attributes["maxlength"] = AttributeToString(value);\r
-                       }\r
-               }\r
-               \r
-               [DefaultValue("")]\r
-               [WebCategory("Appearance")]\r
-               [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\r
-               public int Size{\r
-                       get{\r
-                               string attr = Attributes["size"];\r
-                               if (attr != null)\r
-                                       return Int32.Parse(attr, CultureInfo.InvariantCulture);\r
-                               return -1;\r
-                       }\r
-                       set{\r
-                               Attributes["size"] = AttributeToString(value);\r
-                       }\r
-               }\r
-               \r
-               [DefaultValue("")]\r
-               [WebCategory("Misc")]\r
-               [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\r
-               public HttpPostedFile PostedFile{\r
-                       get{\r
-                               return Context.Request.Files[RenderedName];\r
-                       }\r
-               }\r
-\r
-               protected override void OnPreRender (EventArgs e)\r
-               {\r
-                       base.OnPreRender (e);\r
-                       for (Control ctrl = this.Parent; ctrl != null && !(ctrl is Page); ctrl = ctrl.Parent) {\r
-                               if (!(ctrl is HtmlForm))\r
-                                       continue;\r
-\r
-                               HtmlForm form = (HtmlForm) ctrl;\r
-                               if (form.Enctype == "")\r
-                                       form.Enctype = "multipart/form-data";\r
-                               break;\r
-                       }\r
-               }\r
-#if NET_1_1\r
-               [Browsable (false)]\r
-               public override string Value {\r
-                       get {\r
-                               HttpPostedFile file = PostedFile;\r
-                               if (file == null)\r
-                                       return "";\r
-\r
-                               return file.FileName;\r
-                       }\r
-\r
-                       set {\r
-                               throw new NotSupportedException ();\r
-                       }\r
-               }\r
-#endif\r
-               \r
-       } // class HtmlInputFile\r
-} // namespace System.Web.UI.HtmlControls\r
-\r
+//
+// System.Web.UI.HtmlControls.HtmlInputFile.cs
+//
+// Author:
+//     Dick Porter  <dick@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
+// "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.Collections.Specialized;
+using System.ComponentModel;
+using System.Security.Permissions;
+
+namespace System.Web.UI.HtmlControls 
+{
+       // CAS
+       [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       // attributes
+       [ValidationProperty ("Value")]
+       public class HtmlInputFile : HtmlInputControl , IPostBackDataHandler
+       {
+               HttpPostedFile posted_file;
+
+               public HtmlInputFile () : base ("file")
+               {
+               }
+
+               [DefaultValue ("")]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               [WebSysDescription("")]
+               public string Accept {
+                       get {
+                               string acc = Attributes["accept"];
+
+                               if (acc == null) {
+                                       return (String.Empty);
+                               }
+
+                               return (acc);
+                       }
+                       set {
+                               if (value == null) {
+                                       Attributes.Remove ("accept");
+                               } else {
+                                       Attributes["accept"] = value;
+                               }
+                       }
+               }
+
+               [DefaultValue ("")]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               [WebSysDescription("")]
+               public int MaxLength {
+                       get {
+                               string maxlen = Attributes["maxlength"];
+                               
+                               if (maxlen == null) {
+                                       return (-1);
+                               } else {
+                                       return (Convert.ToInt32 (maxlen));
+                               }
+                       }
+                       set {
+                               if (value == -1) {
+                                       Attributes.Remove ("maxlength");
+                               } else {
+                                       Attributes["maxlength"] = value.ToString ();
+                               }
+                       }
+               }
+               
+               [DefaultValue ("")]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               [WebSysDescription("")]
+               [WebCategory("Misc")]
+               public HttpPostedFile PostedFile {
+                       get {
+                               return (posted_file);
+                       }
+               }
+               
+               [DefaultValue ("-1")]
+               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+               [WebSysDescription("")]
+               [WebCategory("Appearance")]
+               public int Size {
+                       get {
+                               string size = Attributes["size"];
+                               
+                               if (size == null) {
+                                       return (-1);
+                               } else {
+                                       return (Convert.ToInt32 (size));
+                               }
+                       }
+                       set {
+                               if (value == -1) {
+                                       Attributes.Remove ("size");
+                               } else {
+                                       Attributes["size"] = value.ToString ();
+                               }
+                       }
+               }
+               
+               [Browsable (false)]
+               public override string Value {
+                       get {
+                               HttpPostedFile file = PostedFile;
+                               if (file == null)
+                                       return string.Empty;
+
+                               return file.FileName;
+                       }
+                       set {
+                               throw new NotSupportedException ("The value property on HtmlInputFile is not settable.");
+                       }
+               }
+
+               protected internal override void OnPreRender (EventArgs e)
+               {
+                       base.OnPreRender (e);
+
+                       Page page = Page;
+                       if (page != null && !Disabled) {
+                               page.RegisterRequiresPostBack (this);
+                               page.RegisterEnabledControl (this);
+                       }
+                       
+                       HtmlForm form = (HtmlForm) SearchParentByType (typeof (HtmlForm));
+                       if (form != null && form.Enctype == String.Empty)
+                               form.Enctype = "multipart/form-data";
+               }
+
+               Control SearchParentByType (Type type)
+               {
+                       Control ctrl = Parent;
+                       while (ctrl != null) {
+                               if (type.IsAssignableFrom (ctrl.GetType ())) {
+                                       return ctrl;
+                               }
+                               ctrl = ctrl.Parent;
+                       }
+
+                       return null;
+               }
+
+               bool LoadPostDataInternal (string postDataKey, NameValueCollection postCollection)
+               {
+                       Page page = Page;
+                       if (page != null)
+                               posted_file = page.Request.Files [postDataKey];
+                       
+                       return (false);
+               }
+
+               void RaisePostDataChangedEventInternal ()
+               {
+                       /* No events to raise */
+               }
+
+               protected virtual bool LoadPostData (string postDataKey, NameValueCollection postCollection)
+               {
+                       return LoadPostDataInternal (postDataKey, postCollection);
+               }
+
+               protected virtual void RaisePostDataChangedEvent ()
+               {
+                       RaisePostDataChangedEventInternal ();
+               }
+               
+               bool IPostBackDataHandler.LoadPostData (string postDataKey, NameValueCollection postCollection)
+               {
+                       return LoadPostData (postDataKey, postCollection);
+               }
+
+               void IPostBackDataHandler.RaisePostDataChangedEvent ()
+               {
+                       RaisePostDataChangedEvent ();
+               }
+       }
+}
+
+