Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Configuration / BrowserCapabilitiesFactoryBase.cs / 1305376 / 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 { 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) { Hashtable browserElements = Hashtable.Synchronized(new Hashtable(StringComparer.OrdinalIgnoreCase)); PopulateBrowserElements(browserElements); _browserElements = 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) { Hashtable matchedHeaders = Hashtable.Synchronized(new Hashtable(24, StringComparer.OrdinalIgnoreCase)); PopulateMatchedHeaders(matchedHeaders); _matchedHeaders = 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) { } // CodeGenerator will override this function to declare custom browser capabilities public virtual void ConfigureCustomCapabilities(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(HttpCapabilitiesDefaultProvider.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] = HttpCapabilitiesDefaultProvider.GetUserAgent(request); browserCaps.Capabilities = values; ConfigureBrowserCapabilities(headers, browserCaps); ConfigureCustomCapabilities(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; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// 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 { 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) { Hashtable browserElements = Hashtable.Synchronized(new Hashtable(StringComparer.OrdinalIgnoreCase)); PopulateBrowserElements(browserElements); _browserElements = 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) { Hashtable matchedHeaders = Hashtable.Synchronized(new Hashtable(24, StringComparer.OrdinalIgnoreCase)); PopulateMatchedHeaders(matchedHeaders); _matchedHeaders = 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) { } // CodeGenerator will override this function to declare custom browser capabilities public virtual void ConfigureCustomCapabilities(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(HttpCapabilitiesDefaultProvider.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] = HttpCapabilitiesDefaultProvider.GetUserAgent(request); browserCaps.Capabilities = values; ConfigureBrowserCapabilities(headers, browserCaps); ConfigureCustomCapabilities(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; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CompoundFileDeflateTransform.cs
- DirectoryInfo.cs
- Soap11ServerProtocol.cs
- bidPrivateBase.cs
- DataGridViewBand.cs
- SchemaCollectionCompiler.cs
- PathFigureCollectionConverter.cs
- HandlerMappingMemo.cs
- ComplexPropertyEntry.cs
- DbConnectionPool.cs
- WebPartMenu.cs
- DSASignatureFormatter.cs
- CookieParameter.cs
- ConfigErrorGlyph.cs
- ClientProxyGenerator.cs
- XPathNavigatorKeyComparer.cs
- QueryableDataSourceEditData.cs
- SqlNotificationRequest.cs
- Single.cs
- HttpApplicationFactory.cs
- BindUriHelper.cs
- DataControlPagerLinkButton.cs
- CacheHelper.cs
- TextTrailingWordEllipsis.cs
- XmlSchemaElement.cs
- EntitySqlException.cs
- ObjectSpanRewriter.cs
- AmbiguousMatchException.cs
- DefaultBindingPropertyAttribute.cs
- Attributes.cs
- StoreItemCollection.Loader.cs
- StatusBarPanelClickEvent.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- HtmlElementEventArgs.cs
- JsonFaultDetail.cs
- ArrayWithOffset.cs
- DrawingVisualDrawingContext.cs
- TrustDriver.cs
- cache.cs
- ScrollContentPresenter.cs
- InputLanguage.cs
- RangeValuePattern.cs
- CheckBoxPopupAdapter.cs
- HashHelper.cs
- DirectoryObjectSecurity.cs
- WebConfigurationHost.cs
- GridItemCollection.cs
- EntityClientCacheEntry.cs
- DocumentViewerBaseAutomationPeer.cs
- DataSourceXmlClassAttribute.cs
- ConsumerConnectionPointCollection.cs
- WmpBitmapEncoder.cs
- TimeManager.cs
- ContextMenu.cs
- AtomServiceDocumentSerializer.cs
- TextEditorCopyPaste.cs
- Label.cs
- XmlHierarchyData.cs
- ProxySimple.cs
- FrameworkPropertyMetadata.cs
- LogicalTreeHelper.cs
- MaterialGroup.cs
- ActivityTypeDesigner.xaml.cs
- MemoryStream.cs
- controlskin.cs
- SafeCryptoHandles.cs
- TargetInvocationException.cs
- AddressingProperty.cs
- SuppressMergeCheckAttribute.cs
- MetadataItemCollectionFactory.cs
- BindingContext.cs
- URIFormatException.cs
- ColorTransformHelper.cs
- OrderingQueryOperator.cs
- handlecollector.cs
- EntityDataSourceColumn.cs
- DataGridRowHeaderAutomationPeer.cs
- ZipFileInfo.cs
- DefaultHttpHandler.cs
- SapiRecognizer.cs
- TypedTableGenerator.cs
- CollectionViewGroupRoot.cs
- RuntimeResourceSet.cs
- CounterNameConverter.cs
- HMAC.cs
- UriWriter.cs
- DbDataAdapter.cs
- WebPartZone.cs
- DBDataPermissionAttribute.cs
- SqlBuffer.cs
- PkcsUtils.cs
- InvokeMemberBinder.cs
- VerificationException.cs
- ActivationArguments.cs
- XPathEmptyIterator.cs
- SolidBrush.cs
- SourceFileInfo.cs
- SafeNativeMemoryHandle.cs
- Symbol.cs
- WebPartZoneCollection.cs