2 // System.Web.Configuration.HttpCapabilitiesBase
5 // Chris Toshok (toshok@ximian.com)
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using System.Collections;
30 using System.Security.Permissions;
34 namespace System.Web.Configuration
36 public partial class HttpCapabilitiesBase: IFilterResolutionService
38 internal IDictionary capabilities;
40 public HttpCapabilitiesBase () { }
42 public virtual string this [string key]
44 get { return capabilities [key] as string; }
47 internal static string GetUserAgentForDetection (HttpRequest request)
50 if (request.Context.CurrentHandler is System.Web.UI.Page)
51 ua = ((System.Web.UI.Page) request.Context.CurrentHandler).ClientTarget;
53 if (String.IsNullOrEmpty (ua)) {
54 ua = request.ClientTarget;
56 if (String.IsNullOrEmpty (ua))
57 ua = request.UserAgent;
63 static HttpBrowserCapabilities GetHttpBrowserCapabilitiesFromBrowscapini(string ua)
65 HttpBrowserCapabilities bcap = new HttpBrowserCapabilities();
66 bcap.capabilities = CapabilitiesLoader.GetCapabilities (ua);
70 public static HttpCapabilitiesBase GetConfigCapabilities (string configKey, HttpRequest request)
72 string ua = GetUserAgentForDetection (request);
73 HttpBrowserCapabilities bcap = GetHttpBrowserCapabilitiesFromBrowscapini(ua);
74 GetConfigCapabilities_called = true;
75 if (HttpApplicationFactory.AppBrowsersFiles.Length > 0)
76 bcap = HttpApplicationFactory.CapabilitiesProcessor.Process(request, bcap.Capabilities);
82 // Used by unit tests to determine whether GetConfigCapabilities was called.
83 static internal bool GetConfigCapabilities_called;
85 protected virtual void Init ()
89 int IFilterResolutionService.CompareFilters (string filter1, string filter2)
91 throw new NotImplementedException ();
94 bool IFilterResolutionService.EvaluateFilter (string filterName)
96 throw new NotImplementedException ();
99 public void AddBrowser (string browserName)
103 public HtmlTextWriter CreateHtmlTextWriter (TextWriter w)
105 return (HtmlTextWriter) Activator.CreateInstance (TagWriter, new object[] {w});
108 public void DisableOptimizedCacheKey ()
110 throw new NotImplementedException ();
113 IDictionary adapters = null;
114 public IDictionary Adapters {
116 if (!Get (HaveAdapters)) {
117 adapters = GetAdapters();
125 internal virtual IDictionary GetAdapters ()
127 return new Hashtable();
130 bool canCombineFormsInDeck;
131 public virtual bool CanCombineFormsInDeck {
133 if (!Get (HaveCanCombineFormsInDeck)) {
134 canCombineFormsInDeck = ReadBoolean ("cancombineformsindeck");
135 Set (HaveCanCombineFormsInDeck);
138 return canCombineFormsInDeck;
142 bool canInitiateVoiceCall;
143 public virtual bool CanInitiateVoiceCall {
145 if (!Get (HaveCanInitiateVoiceCall)) {
146 canInitiateVoiceCall = ReadBoolean ("caninitiatevoicecall");
147 Set (HaveCanInitiateVoiceCall);
150 return canInitiateVoiceCall;
154 bool canRenderAfterInputOrSelectElement;
155 public virtual bool CanRenderAfterInputOrSelectElement {
157 if (!Get (HaveCanRenderAfterInputOrSelectElement)) {
158 canRenderAfterInputOrSelectElement = ReadBoolean ("canrenderafterinputorselectelement");
159 Set (HaveCanRenderAfterInputOrSelectElement);
162 return canRenderAfterInputOrSelectElement;
166 bool canRenderEmptySelects;
167 public virtual bool CanRenderEmptySelects {
169 if (!Get (HaveCanRenderEmptySelects)) {
170 canRenderEmptySelects = ReadBoolean ("canrenderemptyselects");
171 Set (HaveCanRenderEmptySelects);
174 return canRenderEmptySelects;
178 bool canRenderInputAndSelectElementsTogether;
179 public virtual bool CanRenderInputAndSelectElementsTogether {
181 if (!Get (HaveCanRenderInputAndSelectElementsTogether)) {
182 canRenderInputAndSelectElementsTogether = ReadBoolean ("canrenderinputandselectelementstogether");
183 Set (HaveCanRenderInputAndSelectElementsTogether);
186 return canRenderInputAndSelectElementsTogether;
190 bool canRenderMixedSelects;
191 public virtual bool CanRenderMixedSelects {
193 if (!Get (HaveCanRenderMixedSelects)) {
194 canRenderMixedSelects = ReadBoolean ("canrendermixedselects");
195 Set (HaveCanRenderMixedSelects);
198 return canRenderMixedSelects;
202 bool canRenderOneventAndPrevElementsTogether;
203 public virtual bool CanRenderOneventAndPrevElementsTogether {
205 if (!Get (HaveCanRenderOneventAndPrevElementsTogether)) {
206 canRenderOneventAndPrevElementsTogether = ReadBoolean ("canrenderoneventandprevelementstogether");
207 Set (HaveCanRenderOneventAndPrevElementsTogether);
210 return canRenderOneventAndPrevElementsTogether;
214 bool canRenderPostBackCards;
215 public virtual bool CanRenderPostBackCards {
217 if (!Get (HaveCanRenderPostBackCards)) {
218 canRenderPostBackCards = ReadBoolean ("canrenderpostbackcards");
219 Set (HaveCanRenderPostBackCards);
222 return canRenderPostBackCards;
226 bool canRenderSetvarZeroWithMultiSelectionList;
227 public virtual bool CanRenderSetvarZeroWithMultiSelectionList {
229 if (!Get (HaveCanRenderSetvarZeroWithMultiSelectionList)) {
230 canRenderSetvarZeroWithMultiSelectionList = ReadBoolean ("canrendersetvarzerowithmultiselectionlist");
231 Set (HaveCanRenderSetvarZeroWithMultiSelectionList);
234 return canRenderSetvarZeroWithMultiSelectionList;
239 public virtual bool CanSendMail {
241 if (!Get (HaveCanSendMail)) {
242 canSendMail = ReadBoolean ("cansendmail");
243 Set (HaveCanSendMail);
250 public IDictionary Capabilities
252 get { return capabilities; }
254 //value comes with duplicated keys, so we filter them out
255 capabilities = new Hashtable (value.Keys.Count, StringComparer.OrdinalIgnoreCase);
256 foreach (object key in value.Keys) {
257 if (!capabilities.Contains (key))
258 capabilities.Add (key, value [key]);
263 int defaultSubmitButtonLimit;
264 public virtual int DefaultSubmitButtonLimit {
266 if (!Get (HaveDefaultSubmitButtonLimit)) {
267 defaultSubmitButtonLimit = ReadInt32 ("defaultsubmitbuttonlimit");
268 Set (HaveDefaultSubmitButtonLimit);
271 return defaultSubmitButtonLimit;
275 int gatewayMajorVersion;
276 public virtual int GatewayMajorVersion {
278 if (!Get (HaveGatewayMajorVersion)) {
279 gatewayMajorVersion = ReadInt32 ("gatewaymajorversion");
280 Set (HaveGatewayMajorVersion);
283 return gatewayMajorVersion;
287 Double gatewayMinorVersion;
288 public virtual Double GatewayMinorVersion {
290 if (!Get (HaveGatewayMinorVersion)) {
291 gatewayMinorVersion = ReadDouble ("gatewayminorversion");
292 Set (HaveGatewayMinorVersion);
295 return gatewayMinorVersion;
299 string gatewayVersion;
300 public virtual string GatewayVersion {
302 if (!Get (HaveGatewayVersion)) {
303 gatewayVersion = ReadString ("gatewayversion");
304 Set (HaveGatewayVersion);
307 return gatewayVersion;
312 public virtual bool HasBackButton {
314 if (!Get (HaveHasBackButton)) {
315 hasBackButton = ReadBoolean ("hasbackbutton");
316 Set (HaveHasBackButton);
319 return hasBackButton;
323 bool hidesRightAlignedMultiselectScrollbars;
324 public virtual bool HidesRightAlignedMultiselectScrollbars {
326 if (!Get (HaveHidesRightAlignedMultiselectScrollbars)) {
327 hidesRightAlignedMultiselectScrollbars = ReadBoolean ("hidesrightalignedmultiselectscrollbars");
328 Set (HaveHidesRightAlignedMultiselectScrollbars);
331 return hidesRightAlignedMultiselectScrollbars;
335 string htmlTextWriter;
336 public string HtmlTextWriter {
338 if (!Get (HaveHtmlTextWriter)) {
339 htmlTextWriter = ReadString ("htmlTextWriter");
340 Set (HaveHtmlTextWriter);
343 return htmlTextWriter;
346 Set (HaveHtmlTextWriter);
347 htmlTextWriter = value;
352 get { return this.Browser; }
356 public virtual string InputType {
358 if (!Get (HaveInputType)) {
359 inputType = ReadString ("inputtype");
368 public virtual bool IsColor {
370 if (!Get (HaveIsColor)) {
371 isColor = ReadBoolean ("iscolor");
380 public virtual bool IsMobileDevice {
382 if (!Get (HaveIsMobileDevice)) {
383 isMobileDevice = ReadBoolean ("ismobiledevice");
384 Set (HaveIsMobileDevice);
387 return isMobileDevice;
391 Version jscriptVersion;
392 public Version JScriptVersion {
394 if (!Get (HaveJScriptVersion)) {
395 jscriptVersion = ReadVersion ("jscriptversion");
396 Set (HaveJScriptVersion);
399 return jscriptVersion;
403 int maximumHrefLength;
404 public virtual int MaximumHrefLength {
406 if (!Get (HaveMaximumHrefLength)) {
407 maximumHrefLength = ReadInt32 ("maximumhreflength");
408 Set (HaveMaximumHrefLength);
411 return maximumHrefLength;
415 int maximumRenderedPageSize;
416 public virtual int MaximumRenderedPageSize {
418 if (!Get (HaveMaximumRenderedPageSize)) {
419 maximumRenderedPageSize = ReadInt32 ("maximumrenderedpagesize");
420 Set (HaveMaximumRenderedPageSize);
423 return maximumRenderedPageSize;
427 int maximumSoftkeyLabelLength;
428 public virtual int MaximumSoftkeyLabelLength {
430 if (!Get (HaveMaximumSoftkeyLabelLength)) {
431 maximumSoftkeyLabelLength = ReadInt32 ("maximumsoftkeylabellength");
432 Set (HaveMaximumSoftkeyLabelLength);
435 return maximumSoftkeyLabelLength;
439 string minorVersionString;
440 public string MinorVersionString {
442 if (!Get (HaveMinorVersionString)) {
443 minorVersionString = ReadString ("minorversionstring");
444 Set (HaveMinorVersionString);
447 return minorVersionString;
451 string mobileDeviceManufacturer;
452 public virtual string MobileDeviceManufacturer {
454 if (!Get (HaveMobileDeviceManufacturer)) {
455 mobileDeviceManufacturer = ReadString ("mobiledevicemanufacturer");
456 Set (HaveMobileDeviceManufacturer);
459 return mobileDeviceManufacturer;
463 string mobileDeviceModel;
464 public virtual string MobileDeviceModel {
466 if (!Get (HaveMobileDeviceModel)) {
467 mobileDeviceModel = ReadString ("mobiledevicemodel");
468 Set (HaveMobileDeviceModel);
471 return mobileDeviceModel;
475 int numberOfSoftkeys;
476 public virtual int NumberOfSoftkeys {
478 if (!Get (HaveNumberOfSoftkeys)) {
479 numberOfSoftkeys = ReadInt32 ("numberofsoftkeys");
480 Set (HaveNumberOfSoftkeys);
483 return numberOfSoftkeys;
487 string preferredImageMime;
488 public virtual string PreferredImageMime {
490 if (!Get (HavePreferredImageMime)) {
491 preferredImageMime = ReadString ("preferredimagemime");
492 Set (HavePreferredImageMime);
495 return preferredImageMime;
499 string preferredRenderingMime;
500 public virtual string PreferredRenderingMime {
502 if (!Get (HavePreferredRenderingMime)) {
503 preferredRenderingMime = ReadString ("preferredrenderingmime");
504 Set (HavePreferredRenderingMime);
507 return preferredRenderingMime;
511 string preferredRenderingType;
512 public virtual string PreferredRenderingType {
514 if (!Get (HavePreferredRenderingType)) {
515 preferredRenderingType = ReadString ("preferredrenderingtype");
516 Set (HavePreferredRenderingType);
519 return preferredRenderingType;
523 string preferredRequestEncoding;
524 public virtual string PreferredRequestEncoding {
526 if (!Get (HavePreferredRequestEncoding)) {
527 preferredRequestEncoding = ReadString ("preferredrequestencoding");
528 Set (HavePreferredRequestEncoding);
531 return preferredRequestEncoding;
535 string preferredResponseEncoding;
536 public virtual string PreferredResponseEncoding {
538 if (!Get (HavePreferredResponseEncoding)) {
539 preferredResponseEncoding = ReadString ("preferredresponseencoding");
540 Set (HavePreferredResponseEncoding);
543 return preferredResponseEncoding;
547 bool rendersBreakBeforeWmlSelectAndInput;
548 public virtual bool RendersBreakBeforeWmlSelectAndInput {
550 if (!Get (HaveRendersBreakBeforeWmlSelectAndInput)) {
551 rendersBreakBeforeWmlSelectAndInput = ReadBoolean ("rendersbreakbeforewmlselectandinput");
552 Set (HaveRendersBreakBeforeWmlSelectAndInput);
555 return rendersBreakBeforeWmlSelectAndInput;
559 bool rendersBreaksAfterHtmlLists;
560 public virtual bool RendersBreaksAfterHtmlLists {
562 if (!Get (HaveRendersBreaksAfterHtmlLists)) {
563 rendersBreaksAfterHtmlLists = ReadBoolean ("rendersbreaksafterhtmllists");
564 Set (HaveRendersBreaksAfterHtmlLists);
567 return rendersBreaksAfterHtmlLists;
571 bool rendersBreaksAfterWmlAnchor;
572 public virtual bool RendersBreaksAfterWmlAnchor {
574 if (!Get (HaveRendersBreaksAfterWmlAnchor)) {
575 rendersBreaksAfterWmlAnchor = ReadBoolean ("rendersbreaksafterwmlanchor");
576 Set (HaveRendersBreaksAfterWmlAnchor);
579 return rendersBreaksAfterWmlAnchor;
583 bool rendersBreaksAfterWmlInput;
584 public virtual bool RendersBreaksAfterWmlInput {
586 if (!Get (HaveRendersBreaksAfterWmlInput)) {
587 rendersBreaksAfterWmlInput = ReadBoolean ("rendersbreaksafterwmlinput");
588 Set (HaveRendersBreaksAfterWmlInput);
591 return rendersBreaksAfterWmlInput;
595 bool rendersWmlDoAcceptsInline;
596 public virtual bool RendersWmlDoAcceptsInline {
598 if (!Get (HaveRendersWmlDoAcceptsInline)) {
599 rendersWmlDoAcceptsInline = ReadBoolean ("renderswmldoacceptsinline");
600 Set (HaveRendersWmlDoAcceptsInline);
603 return rendersWmlDoAcceptsInline;
607 bool rendersWmlSelectsAsMenuCards;
608 public virtual bool RendersWmlSelectsAsMenuCards {
610 if (!Get (HaveRendersWmlSelectsAsMenuCards)) {
611 rendersWmlSelectsAsMenuCards = ReadBoolean ("renderswmlselectsasmenucards");
612 Set (HaveRendersWmlSelectsAsMenuCards);
615 return rendersWmlSelectsAsMenuCards;
619 string requiredMetaTagNameValue;
620 public virtual string RequiredMetaTagNameValue {
622 if (!Get (HaveRequiredMetaTagNameValue)) {
623 requiredMetaTagNameValue = ReadString ("requiredmetatagnamevalue");
624 Set (HaveRequiredMetaTagNameValue);
627 return requiredMetaTagNameValue;
631 bool requiresAttributeColonSubstitution;
632 public virtual bool RequiresAttributeColonSubstitution {
634 if (!Get (HaveRequiresAttributeColonSubstitution)) {
635 requiresAttributeColonSubstitution = ReadBoolean ("requiresattributecolonsubstitution");
636 Set (HaveRequiresAttributeColonSubstitution);
639 return requiresAttributeColonSubstitution;
643 bool requiresContentTypeMetaTag;
644 public virtual bool RequiresContentTypeMetaTag {
646 if (!Get (HaveRequiresContentTypeMetaTag)) {
647 requiresContentTypeMetaTag = ReadBoolean ("requiresContentTypeMetaTag");
648 Set (HaveRequiresContentTypeMetaTag);
651 return requiresContentTypeMetaTag;
655 bool requiresControlStateInSession;
656 public bool RequiresControlStateInSession {
658 if (!Get (HaveRequiresControlStateInSession)) {
659 requiresControlStateInSession = ReadBoolean ("requiresControlStateInSession");
660 Set (HaveRequiresControlStateInSession);
663 return requiresControlStateInSession;
667 bool requiresDBCSCharacter;
668 public virtual bool RequiresDBCSCharacter {
670 if (!Get (HaveRequiresDBCSCharacter)) {
671 requiresDBCSCharacter = ReadBoolean ("requiresdbcscharacter");
672 Set (HaveRequiresDBCSCharacter);
675 return requiresDBCSCharacter;
679 bool requiresHtmlAdaptiveErrorReporting;
680 public virtual bool RequiresHtmlAdaptiveErrorReporting {
682 if (!Get (HaveRequiresHtmlAdaptiveErrorReporting)) {
683 requiresHtmlAdaptiveErrorReporting = ReadBoolean ("requireshtmladaptiveerrorreporting");
684 Set (HaveRequiresHtmlAdaptiveErrorReporting);
687 return requiresHtmlAdaptiveErrorReporting;
691 bool requiresLeadingPageBreak;
692 public virtual bool RequiresLeadingPageBreak {
694 if (!Get (HaveRequiresLeadingPageBreak)) {
695 requiresLeadingPageBreak = ReadBoolean ("requiresleadingpagebreak");
696 Set (HaveRequiresLeadingPageBreak);
699 return requiresLeadingPageBreak;
703 bool requiresNoBreakInFormatting;
704 public virtual bool RequiresNoBreakInFormatting {
706 if (!Get (HaveRequiresNoBreakInFormatting)) {
707 requiresNoBreakInFormatting = ReadBoolean ("requiresnobreakinformatting");
708 Set (HaveRequiresNoBreakInFormatting);
711 return requiresNoBreakInFormatting;
715 bool requiresOutputOptimization;
716 public virtual bool RequiresOutputOptimization {
718 if (!Get (HaveRequiresOutputOptimization)) {
719 requiresOutputOptimization = ReadBoolean ("requiresoutputoptimization");
720 Set (HaveRequiresOutputOptimization);
723 return requiresOutputOptimization;
727 bool requiresPhoneNumbersAsPlainText;
728 public virtual bool RequiresPhoneNumbersAsPlainText {
730 if (!Get (HaveRequiresPhoneNumbersAsPlainText)) {
731 requiresPhoneNumbersAsPlainText = ReadBoolean ("requiresphonenumbersasplaintext");
732 Set (HaveRequiresPhoneNumbersAsPlainText);
735 return requiresPhoneNumbersAsPlainText;
739 bool requiresSpecialViewStateEncoding;
740 public virtual bool RequiresSpecialViewStateEncoding {
742 if (!Get (HaveRequiresSpecialViewStateEncoding)) {
743 requiresSpecialViewStateEncoding = ReadBoolean ("requiresspecialviewstateencoding");
744 Set (HaveRequiresSpecialViewStateEncoding);
747 return requiresSpecialViewStateEncoding;
751 bool requiresUniqueFilePathSuffix;
752 public virtual bool RequiresUniqueFilePathSuffix {
754 if (!Get (HaveRequiresUniqueFilePathSuffix)) {
755 requiresUniqueFilePathSuffix = ReadBoolean ("requiresuniquefilepathsuffix");
756 Set (HaveRequiresUniqueFilePathSuffix);
759 return requiresUniqueFilePathSuffix;
763 bool requiresUniqueHtmlCheckboxNames;
764 public virtual bool RequiresUniqueHtmlCheckboxNames {
766 if (!Get (HaveRequiresUniqueHtmlCheckboxNames)) {
767 requiresUniqueHtmlCheckboxNames = ReadBoolean ("requiresuniquehtmlcheckboxnames");
768 Set (HaveRequiresUniqueHtmlCheckboxNames);
771 return requiresUniqueHtmlCheckboxNames;
775 bool requiresUniqueHtmlInputNames;
776 public virtual bool RequiresUniqueHtmlInputNames {
778 if (!Get (HaveRequiresUniqueHtmlInputNames)) {
779 requiresUniqueHtmlInputNames = ReadBoolean ("requiresuniquehtmlinputnames");
780 Set (HaveRequiresUniqueHtmlInputNames);
783 return requiresUniqueHtmlInputNames;
787 bool requiresUrlEncodedPostfieldValues;
788 public virtual bool RequiresUrlEncodedPostfieldValues {
790 if (!Get (HaveRequiresUrlEncodedPostfieldValues)) {
791 requiresUrlEncodedPostfieldValues = ReadBoolean ("requiresurlencodedpostfieldvalues");
792 Set (HaveRequiresUrlEncodedPostfieldValues);
795 return requiresUrlEncodedPostfieldValues;
800 public virtual int ScreenBitDepth {
802 if (!Get (HaveScreenBitDepth)) {
803 screenBitDepth = ReadInt32 ("screenbitdepth");
804 Set (HaveScreenBitDepth);
807 return screenBitDepth;
811 int screenCharactersHeight;
812 public virtual int ScreenCharactersHeight {
814 if (!Get (HaveScreenCharactersHeight)) {
815 screenCharactersHeight = ReadInt32 ("screencharactersheight");
816 Set (HaveScreenCharactersHeight);
819 return screenCharactersHeight;
823 int screenCharactersWidth;
824 public virtual int ScreenCharactersWidth {
826 if (!Get (HaveScreenCharactersWidth)) {
827 screenCharactersWidth = ReadInt32 ("screencharacterswidth");
828 Set (HaveScreenCharactersWidth);
831 return screenCharactersWidth;
835 int screenPixelsHeight;
836 public virtual int ScreenPixelsHeight {
838 if (!Get (HaveScreenPixelsHeight)) {
839 screenPixelsHeight = ReadInt32 ("screenpixelsheight");
840 Set (HaveScreenPixelsHeight);
843 return screenPixelsHeight;
847 int screenPixelsWidth;
848 public virtual int ScreenPixelsWidth {
850 if (!Get (HaveScreenPixelsWidth)) {
851 screenPixelsWidth = ReadInt32 ("screenpixelswidth");
852 Set (HaveScreenPixelsWidth);
855 return screenPixelsWidth;
859 bool supportsAccesskeyAttribute;
860 public virtual bool SupportsAccesskeyAttribute {
862 if (!Get (HaveSupportsAccesskeyAttribute)) {
863 supportsAccesskeyAttribute = ReadBoolean ("supportsaccesskeyattribute");
864 Set (HaveSupportsAccesskeyAttribute);
867 return supportsAccesskeyAttribute;
871 bool supportsBodyColor;
872 public virtual bool SupportsBodyColor {
874 if (!Get (HaveSupportsBodyColor)) {
875 supportsBodyColor = ReadBoolean ("supportsbodycolor");
876 Set (HaveSupportsBodyColor);
879 return supportsBodyColor;
884 public virtual bool SupportsBold {
886 if (!Get (HaveSupportsBold)) {
887 supportsBold = ReadBoolean ("supportsbold");
888 Set (HaveSupportsBold);
895 bool supportsCacheControlMetaTag;
896 public virtual bool SupportsCacheControlMetaTag {
898 if (!Get (HaveSupportsCacheControlMetaTag)) {
899 supportsCacheControlMetaTag = ReadBoolean ("supportscachecontrolmetatag");
900 Set (HaveSupportsCacheControlMetaTag);
903 return supportsCacheControlMetaTag;
907 bool supportsCallback;
908 public virtual bool SupportsCallback {
910 if (!Get (HaveSupportsCallback)) {
911 supportsCallback = ReadBoolean ("supportscallback");
912 Set (HaveSupportsCallback);
915 return supportsCallback;
920 public virtual bool SupportsCss {
922 if (!Get (HaveSupportsCss)) {
923 supportsCss = ReadBoolean ("supportscss");
924 Set (HaveSupportsCss);
931 bool supportsDivAlign;
932 public virtual bool SupportsDivAlign {
934 if (!Get (HaveSupportsDivAlign)) {
935 supportsDivAlign = ReadBoolean ("supportsdivalign");
936 Set (HaveSupportsDivAlign);
939 return supportsDivAlign;
943 bool supportsDivNoWrap;
944 public virtual bool SupportsDivNoWrap {
946 if (!Get (HaveSupportsDivNoWrap)) {
947 supportsDivNoWrap = ReadBoolean ("supportsdivnowrap");
948 Set (HaveRequiresDBCSCharacter);
951 return supportsDivNoWrap;
955 bool supportsEmptyStringInCookieValue;
956 public virtual bool SupportsEmptyStringInCookieValue {
958 if (!Get (HaveSupportsEmptyStringInCookieValue)) {
959 supportsEmptyStringInCookieValue = ReadBoolean ("supportsemptystringincookievalue");
960 Set (HaveSupportsEmptyStringInCookieValue);
963 return supportsEmptyStringInCookieValue;
967 bool supportsFontColor;
968 public virtual bool SupportsFontColor {
970 if (!Get (HaveSupportsFontColor)) {
971 supportsFontColor = ReadBoolean ("supportsfontcolor");
972 Set (HaveSupportsFontColor);
975 return supportsFontColor;
979 bool supportsFontName;
980 public virtual bool SupportsFontName {
982 if (!Get (HaveSupportsFontName)) {
983 supportsFontName = ReadBoolean ("supportsfontname");
984 Set (HaveSupportsFontName);
987 return supportsFontName;
991 bool supportsFontSize;
992 public virtual bool SupportsFontSize {
994 if (!Get (HaveSupportsFontSize)) {
995 supportsFontSize = ReadBoolean ("supportsfontsize");
996 Set (HaveSupportsFontSize);
999 return supportsFontSize;
1003 bool supportsImageSubmit;
1004 public virtual bool SupportsImageSubmit {
1006 if (!Get (HaveSupportsImageSubmit)) {
1007 supportsImageSubmit = ReadBoolean ("supportsimagesubmit");
1008 Set (HaveSupportsImageSubmit);
1011 return supportsImageSubmit;
1015 bool supportsIModeSymbols;
1016 public virtual bool SupportsIModeSymbols {
1018 if (!Get (HaveSupportsIModeSymbols)) {
1019 supportsIModeSymbols = ReadBoolean ("supportsimodesymbols");
1020 Set (HaveSupportsIModeSymbols);
1023 return supportsIModeSymbols;
1027 bool supportsInputIStyle;
1028 public virtual bool SupportsInputIStyle {
1030 if (!Get (HaveSupportsInputIStyle)) {
1031 supportsInputIStyle = ReadBoolean ("supportsinputistyle");
1032 Set (HaveSupportsInputIStyle);
1035 return supportsInputIStyle;
1039 bool supportsInputMode;
1040 public virtual bool SupportsInputMode {
1042 if (!Get (HaveSupportsInputMode)) {
1043 supportsInputMode = ReadBoolean ("supportsinputmode");
1044 Set (HaveSupportsInputMode);
1047 return supportsInputMode;
1051 bool supportsItalic;
1052 public virtual bool SupportsItalic {
1054 if (!Get (HaveSupportsItalic)) {
1055 supportsItalic = ReadBoolean ("supportsitalic");
1056 Set (HaveSupportsItalic);
1059 return supportsItalic;
1063 bool supportsJPhoneMultiMediaAttributes;
1064 public virtual bool SupportsJPhoneMultiMediaAttributes {
1066 if (!Get (HaveSupportsJPhoneMultiMediaAttributes)) {
1067 supportsJPhoneMultiMediaAttributes = ReadBoolean ("supportsjphonemultimediaattributes");
1068 Set (HaveSupportsJPhoneMultiMediaAttributes);
1071 return supportsJPhoneMultiMediaAttributes;
1075 bool supportsJPhoneSymbols;
1076 public virtual bool SupportsJPhoneSymbols {
1078 if (!Get (HaveSupportsJPhoneSymbols)) {
1079 supportsJPhoneSymbols = ReadBoolean ("supportsjphonesymbols");
1080 Set (HaveSupportsJPhoneSymbols);
1083 return supportsJPhoneSymbols;
1087 bool supportsQueryStringInFormAction;
1088 public virtual bool SupportsQueryStringInFormAction {
1090 if (!Get (HaveSupportsQueryStringInFormAction)) {
1091 supportsQueryStringInFormAction = ReadBoolean ("supportsquerystringinformaction");
1092 Set (HaveSupportsQueryStringInFormAction);
1095 return supportsQueryStringInFormAction;
1099 bool supportsRedirectWithCookie;
1100 public virtual bool SupportsRedirectWithCookie {
1102 if (!Get (HaveSupportsRedirectWithCookie)) {
1103 supportsRedirectWithCookie = ReadBoolean ("supportsredirectwithcookie");
1104 Set (HaveSupportsRedirectWithCookie);
1107 return supportsRedirectWithCookie;
1111 bool supportsSelectMultiple;
1112 public virtual bool SupportsSelectMultiple {
1114 if (!Get (HaveSupportsSelectMultiple)) {
1115 supportsSelectMultiple = ReadBoolean ("supportsselectmultiple");
1116 Set (HaveSupportsSelectMultiple);
1119 return supportsSelectMultiple;
1123 bool supportsUncheck;
1124 public virtual bool SupportsUncheck {
1126 if (!Get (HaveSupportsUncheck)) {
1127 supportsUncheck = ReadBoolean ("supportsuncheck");
1128 Set (HaveSupportsUncheck);
1131 return supportsUncheck;
1135 bool supportsXmlHttp;
1136 public virtual bool SupportsXmlHttp {
1138 if (!Get (HaveSupportsXmlHttp)) {
1139 supportsXmlHttp = ReadBoolean ("supportsxmlhttp");
1140 Set (HaveSupportsXmlHttp);
1143 return supportsXmlHttp;
1147 bool useOptimizedCacheKey;
1148 public bool UseOptimizedCacheKey {
1150 if (!Get (HaveUseOptimizedCacheKey)) {
1151 useOptimizedCacheKey = ReadBoolean ("useoptimizedcachekey");
1152 Set (HaveUseOptimizedCacheKey);
1155 return useOptimizedCacheKey;
1160 static HttpCapabilitiesProvider _provider = new HttpCapabilitiesDefaultProvider();
1161 public static HttpCapabilitiesProvider BrowserCapabilitiesProvider {
1162 get { return _provider; }
1163 set { _provider = value; }