Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / Configuration / BrowserCapabilitiesFactoryBase.cs / 1 / BrowserCapabilitiesFactoryBase.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Base class for browser capabilities object: just a read-only dictionary * holder that supports Init() * * */ using System.Web.UI; using System.Collections; using System.Collections.Specialized; using System.ComponentModel; using System.Globalization; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Web.Util; namespace System.Web.Configuration { [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class BrowserCapabilitiesFactoryBase { private IDictionary _matchedHeaders; private IDictionary _browserElements; private object _lock = new object(); public BrowserCapabilitiesFactoryBase() { } [EditorBrowsable(EditorBrowsableState.Advanced)] protected IDictionary BrowserElements { get { if (_browserElements == null) lock (_lock) { if (_browserElements == null) { _browserElements = Hashtable.Synchronized(new Hashtable(StringComparer.OrdinalIgnoreCase)); PopulateBrowserElements(_browserElements); } } return _browserElements; } } [EditorBrowsable(EditorBrowsableState.Advanced)] protected virtual void PopulateBrowserElements(IDictionary dictionary) { } internal IDictionary InternalGetMatchedHeaders() { return MatchedHeaders; } internal IDictionary InternalGetBrowserElements() { return BrowserElements; } [EditorBrowsable(EditorBrowsableState.Advanced)] protected IDictionary MatchedHeaders { get { if (_matchedHeaders == null) lock (_lock) { if (_matchedHeaders == null) { _matchedHeaders = Hashtable.Synchronized(new Hashtable(24, StringComparer.OrdinalIgnoreCase)); PopulateMatchedHeaders(_matchedHeaders); } } return _matchedHeaders; } } [EditorBrowsable(EditorBrowsableState.Advanced)] protected virtual void PopulateMatchedHeaders(IDictionary dictionary) { } internal int CompareFilters(string filter1, string filter2) { bool isFilter1DefaultFilter = String.IsNullOrEmpty(filter1); bool isFilter2DefaultFilter = String.IsNullOrEmpty(filter2); IDictionary browsers = BrowserElements; bool filter1Exists = (browsers.Contains(filter1)) || isFilter1DefaultFilter; bool filter2Exists = (browsers.Contains(filter2)) || isFilter2DefaultFilter; if (!filter1Exists) { if (!filter2Exists) { return 0; } else { return -1; } } else { if (!filter2Exists) { return 1; } } if (isFilter1DefaultFilter && !isFilter2DefaultFilter) { return 1; } if (isFilter2DefaultFilter && !isFilter1DefaultFilter) { return -1; } if (isFilter1DefaultFilter && isFilter2DefaultFilter) { return 0; } int filter1Depth = (int)((Triplet)BrowserElements[filter1]).Third; int filter2Depth = (int)((Triplet)BrowserElements[filter2]).Third; return filter2Depth - filter1Depth; } public virtual void ConfigureBrowserCapabilities(NameValueCollection headers, HttpBrowserCapabilities browserCaps) { } internal static string GetBrowserCapKey(IDictionary headers, HttpRequest request) { StringBuilder sb = new StringBuilder(); foreach(String key in headers.Keys) { if (key.Length == 0) { sb.Append(HttpCapabilitiesEvaluator.GetUserAgent(request)); } else { sb.Append(request.Headers[key]); } sb.Append("\n"); } return sb.ToString(); } internal HttpBrowserCapabilities GetHttpBrowserCapabilities(HttpRequest request) { if (request == null) throw new ArgumentNullException("request"); NameValueCollection headers = request.Headers; HttpBrowserCapabilities browserCaps = new HttpBrowserCapabilities(); Hashtable values = new Hashtable(180, StringComparer.OrdinalIgnoreCase); values[String.Empty] = HttpCapabilitiesEvaluator.GetUserAgent(request); browserCaps.Capabilities = values; ConfigureBrowserCapabilities(headers, browserCaps); return browserCaps; } protected bool IsBrowserUnknown(HttpCapabilitiesBase browserCaps) { // We want to ignore the "Default" node, which will also be matched. if(browserCaps.Browsers == null || browserCaps.Browsers.Count <= 1) { return true; } return false; } } }
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ValueHandle.cs
- TextEditorCopyPaste.cs
- ZoneButton.cs
- SessionStateItemCollection.cs
- ComNativeDescriptor.cs
- XmlNamedNodeMap.cs
- DataTableExtensions.cs
- HtmlEmptyTagControlBuilder.cs
- ComponentEditorForm.cs
- Highlights.cs
- XNodeNavigator.cs
- UsernameTokenFactoryCredential.cs
- EventToken.cs
- AbsoluteQuery.cs
- ResourceProperty.cs
- OpenTypeLayoutCache.cs
- CultureTable.cs
- CodeMemberProperty.cs
- BoundField.cs
- ObfuscateAssemblyAttribute.cs
- MaskedTextBoxDesignerActionList.cs
- SqlTransaction.cs
- SafeThemeHandle.cs
- XmlSchemaValidationException.cs
- Timeline.cs
- HttpProfileGroupBase.cs
- SystemInfo.cs
- DependencyPropertyAttribute.cs
- XPathBinder.cs
- Cursor.cs
- ColumnHeaderCollectionEditor.cs
- StylusEventArgs.cs
- WindowsAuthenticationEventArgs.cs
- AuthenticatingEventArgs.cs
- DetailsView.cs
- Geometry.cs
- ListBoxChrome.cs
- TemplateKeyConverter.cs
- XmlAutoDetectWriter.cs
- ToolStripComboBox.cs
- ExceptionValidationRule.cs
- TypeReference.cs
- LoadedOrUnloadedOperation.cs
- TCPListener.cs
- ResourceDescriptionAttribute.cs
- ConsumerConnectionPoint.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- BroadcastEventHelper.cs
- OracleTimeSpan.cs
- MatrixTransform3D.cs
- GeneralTransform3D.cs
- _NegoStream.cs
- AnimationException.cs
- Paragraph.cs
- PKCS1MaskGenerationMethod.cs
- DBConcurrencyException.cs
- IntSumAggregationOperator.cs
- BitmapEffectInputData.cs
- TextHidden.cs
- EntityViewGenerationConstants.cs
- ContentElementAutomationPeer.cs
- ObjectRef.cs
- BooleanAnimationBase.cs
- DocumentSequenceHighlightLayer.cs
- ConfigurationSectionGroup.cs
- EventLogEntry.cs
- CommonEndpointBehaviorElement.cs
- DeferredElementTreeState.cs
- NamespaceEmitter.cs
- TdsParserStaticMethods.cs
- DetailsViewPageEventArgs.cs
- unsafeIndexingFilterStream.cs
- ModelItemImpl.cs
- ToolStripArrowRenderEventArgs.cs
- mactripleDES.cs
- GuidelineCollection.cs
- SystemUnicastIPAddressInformation.cs
- AssociationTypeEmitter.cs
- KeyValueSerializer.cs
- ToolStripDropDownMenu.cs
- SqlConnectionString.cs
- Matrix3D.cs
- Registry.cs
- DistributedTransactionPermission.cs
- KeyValuePair.cs
- DetailsViewPageEventArgs.cs
- WebResourceAttribute.cs
- CheckBoxBaseAdapter.cs
- IArgumentProvider.cs
- Annotation.cs
- ResolveDuplexAsyncResult.cs
- InkCanvasSelectionAdorner.cs
- comcontractssection.cs
- SessionEndedEventArgs.cs
- Authorization.cs
- ProgressBarRenderer.cs
- XmlAggregates.cs
- _AuthenticationState.cs
- DesignTimeXamlWriter.cs
- BinaryFormatter.cs