Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / ndp / fx / src / xsp / System / Web / UI / PageParserFilter.cs / 2 / PageParserFilter.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Abstract class implemented by objects that need to control the parsing of pages. * * Copyright (c) 2004 Microsoft Corporation */ namespace System.Web.UI { using System.Globalization; using System.Collections; using System.Web.Configuration; using System.Web.Compilation; using System.Web.Util; using System.Security.Permissions; [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Medium)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Medium)] public abstract class PageParserFilter { private VirtualPath _virtualPath; protected string VirtualPath { get { return _virtualPath.VirtualPathString; } } // The current line number being parsed private TemplateParser _parser; protected int Line { get { return _parser._lineNumber; } } private int _numberOfControlsAllowed; private int _currentControlCount; private int _dependenciesAllowed; private int _currentDependenciesCount; private int _directDependenciesAllowed; private int _currentDirectDependenciesCount; // Create a PageParserFilter and initialize it internal static PageParserFilter Create(PagesSection pagesConfig, VirtualPath virtualPath, TemplateParser parser) { PageParserFilter pageParserFilter = pagesConfig.CreateControlTypeFilter(); if (pageParserFilter != null) pageParserFilter.InitializeInternal(virtualPath, parser); return pageParserFilter; } internal void InitializeInternal(VirtualPath virtualPath, TemplateParser parser) { _parser = parser; Debug.Assert(_virtualPath == null); _virtualPath = virtualPath; Initialize(); // Get the various limits we need to enforce _numberOfControlsAllowed = NumberOfControlsAllowed; // Add 1 to these two, because internally we count the file itself as a // dependency, but we don't want this to be reflected to the PageParserFilter // implementor ( _dependenciesAllowed = TotalNumberOfDependenciesAllowed+1; _directDependenciesAllowed = NumberOfDirectDependenciesAllowed+1; } // initialize the filter to be used for a specific page protected virtual void Initialize() { } // Informs the filter that the parsing of the page is complete public virtual void ParseComplete(ControlBuilder rootBuilder) { Debug.Assert(_virtualPath != null); } // Allows the filter to return the compilation mode for the page. // If it doesn't want to modify it, it can just return current. public virtual CompilationMode GetCompilationMode(CompilationMode current) { return current; } // Indicates whether code is allowed on the page. This method allows // forbidding code even on pages that will be compiled (for perf) public virtual bool AllowCode { get { return false; } } // Is the control Type allowed for this page internal bool AllowControlInternal(Type controlType, ControlBuilder builder) { OnControlAdded(); return AllowControl(controlType, builder); } // Is the control Type allowed for this page public virtual bool AllowControl(Type controlType, ControlBuilder builder) { return false; } // Is this base type allowed for this page public virtual bool AllowBaseType(Type baseType) { return false; } internal bool AllowVirtualReference(CompilationSection compConfig, VirtualPath referenceVirtualPath) { // Get the extension, and from it the type of the BuildProvider string extension = referenceVirtualPath.Extension; Type buildProviderType = CompilationUtil.GetBuildProviderTypeFromExtension( compConfig, extension, BuildProviderAppliesTo.Web, false /*failIfUnknown*/); // If it's an unknown type, block it if (buildProviderType == null) return false; // Figure out the VirtualReferenceType based on the BuildProvider type VirtualReferenceType referenceType; if (buildProviderType == typeof(PageBuildProvider)) referenceType = VirtualReferenceType.Page; else if (buildProviderType == typeof(UserControlBuildProvider)) referenceType = VirtualReferenceType.UserControl; else if (buildProviderType == typeof(MasterPageBuildProvider)) referenceType = VirtualReferenceType.Master; else if (buildProviderType == typeof(SourceFileBuildProvider)) referenceType = VirtualReferenceType.SourceFile; else referenceType = VirtualReferenceType.Other; return AllowVirtualReference(referenceVirtualPath.VirtualPathString, referenceType); } // Is the virtual path reference allowed in this page. The referenceType // indicates the type of references involved. public virtual bool AllowVirtualReference(string referenceVirtualPath, VirtualReferenceType referenceType) { return false; } // Is the passed in server include () allowed public virtual bool AllowServerSideInclude(string includeVirtualPath) { return false; } public virtual void PreprocessDirective(string directiveName, IDictionary attributes) { } public virtual int NumberOfControlsAllowed { get { // By default, don't allow any return 0; } } public virtual int TotalNumberOfDependenciesAllowed { get { // By default, don't allow any return 0; } } public virtual int NumberOfDirectDependenciesAllowed { get { // By default, don't allow any return 0; } } private void OnControlAdded() { // If it's negative, there is no limit if (_numberOfControlsAllowed < 0) return; // Increase the control count _currentControlCount++; // Fail if the limit has been reached if (_currentControlCount > _numberOfControlsAllowed) { throw new HttpException(SR.GetString( SR.Too_many_controls, _numberOfControlsAllowed.ToString(CultureInfo.CurrentCulture))); } } // Called by the parser when a file dependency (direct or indirect) is added internal void OnDependencyAdded() { // If it's negative, there is no limit if (_dependenciesAllowed <= 0) return; // Increase the dependency count _currentDependenciesCount++; // Fail if the limit has been reached if (_currentDependenciesCount > _dependenciesAllowed) { throw new HttpException(SR.GetString( SR.Too_many_dependencies, VirtualPath, _dependenciesAllowed.ToString(CultureInfo.CurrentCulture))); } } // Called by the parser when a direct file dependency is added internal void OnDirectDependencyAdded() { // If it's negative, there is no limit if (_directDependenciesAllowed <= 0) return; // Increase the direct dependency count _currentDirectDependenciesCount++; // Fail if the limit has been reached if (_currentDirectDependenciesCount > _directDependenciesAllowed) { throw new HttpException(SR.GetString( SR.Too_many_direct_dependencies, VirtualPath, _directDependenciesAllowed.ToString(CultureInfo.CurrentCulture))); } } // Give the filter a chance to process a code block. If it returns true, the // code block is not processed further by the parser public virtual bool ProcessCodeConstruct(CodeConstructType codeType, string code) { return false; } // Give the filter a chance to process a databinding attribute (e.g. Text=<%# expr %>) // If it returns true, the databinding attribute is not processed further by the parser public virtual bool ProcessDataBindingAttribute(string controlId, string name, string value) { return false; } // Give the filter a chance to process an event hookup (e.g. onclick="ClickHandler") // If it returns true, the event hookup is not processed further by the parser public virtual bool ProcessEventHookup(string controlId, string eventName, string handlerName) { return false; } // Return the Type that should be used for NoCompile user controls public virtual Type GetNoCompileUserControlType() { return null; } // Add a ControlBuilder in the tree at the current parser position protected void AddControl(Type type, IDictionary attributes) { _parser.AddControl(type, attributes); } // Set a property on the TemplateControl (Page/UserControl/Master) protected void SetPageProperty(string filter, string name, string value) { if (filter == null) filter = String.Empty; _parser.RootBuilder.PreprocessAttribute(filter, name, value, true /*mainDirectiveMode*/); } } // The type of reference passed to PageParserFilter.AllowVirtualReference public enum VirtualReferenceType { Page, UserControl, Master, SourceFile, Other } // Used as parameter to the PageParserFilter.ProcessCodeConstruct API public enum CodeConstructType { CodeSnippet, // <% ... %> ExpressionSnippet, // <%= ... %> DataBindingSnippet, // <%# ... %> ScriptTag // } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Abstract class implemented by objects that need to control the parsing of pages. * * Copyright (c) 2004 Microsoft Corporation */ namespace System.Web.UI { using System.Globalization; using System.Collections; using System.Web.Configuration; using System.Web.Compilation; using System.Web.Util; using System.Security.Permissions; [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Medium)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Medium)] public abstract class PageParserFilter { private VirtualPath _virtualPath; protected string VirtualPath { get { return _virtualPath.VirtualPathString; } } // The current line number being parsed private TemplateParser _parser; protected int Line { get { return _parser._lineNumber; } } private int _numberOfControlsAllowed; private int _currentControlCount; private int _dependenciesAllowed; private int _currentDependenciesCount; private int _directDependenciesAllowed; private int _currentDirectDependenciesCount; // Create a PageParserFilter and initialize it internal static PageParserFilter Create(PagesSection pagesConfig, VirtualPath virtualPath, TemplateParser parser) { PageParserFilter pageParserFilter = pagesConfig.CreateControlTypeFilter(); if (pageParserFilter != null) pageParserFilter.InitializeInternal(virtualPath, parser); return pageParserFilter; } internal void InitializeInternal(VirtualPath virtualPath, TemplateParser parser) { _parser = parser; Debug.Assert(_virtualPath == null); _virtualPath = virtualPath; Initialize(); // Get the various limits we need to enforce _numberOfControlsAllowed = NumberOfControlsAllowed; // Add 1 to these two, because internally we count the file itself as a // dependency, but we don't want this to be reflected to the PageParserFilter // implementor ( _dependenciesAllowed = TotalNumberOfDependenciesAllowed+1; _directDependenciesAllowed = NumberOfDirectDependenciesAllowed+1; } // initialize the filter to be used for a specific page protected virtual void Initialize() { } // Informs the filter that the parsing of the page is complete public virtual void ParseComplete(ControlBuilder rootBuilder) { Debug.Assert(_virtualPath != null); } // Allows the filter to return the compilation mode for the page. // If it doesn't want to modify it, it can just return current. public virtual CompilationMode GetCompilationMode(CompilationMode current) { return current; } // Indicates whether code is allowed on the page. This method allows // forbidding code even on pages that will be compiled (for perf) public virtual bool AllowCode { get { return false; } } // Is the control Type allowed for this page internal bool AllowControlInternal(Type controlType, ControlBuilder builder) { OnControlAdded(); return AllowControl(controlType, builder); } // Is the control Type allowed for this page public virtual bool AllowControl(Type controlType, ControlBuilder builder) { return false; } // Is this base type allowed for this page public virtual bool AllowBaseType(Type baseType) { return false; } internal bool AllowVirtualReference(CompilationSection compConfig, VirtualPath referenceVirtualPath) { // Get the extension, and from it the type of the BuildProvider string extension = referenceVirtualPath.Extension; Type buildProviderType = CompilationUtil.GetBuildProviderTypeFromExtension( compConfig, extension, BuildProviderAppliesTo.Web, false /*failIfUnknown*/); // If it's an unknown type, block it if (buildProviderType == null) return false; // Figure out the VirtualReferenceType based on the BuildProvider type VirtualReferenceType referenceType; if (buildProviderType == typeof(PageBuildProvider)) referenceType = VirtualReferenceType.Page; else if (buildProviderType == typeof(UserControlBuildProvider)) referenceType = VirtualReferenceType.UserControl; else if (buildProviderType == typeof(MasterPageBuildProvider)) referenceType = VirtualReferenceType.Master; else if (buildProviderType == typeof(SourceFileBuildProvider)) referenceType = VirtualReferenceType.SourceFile; else referenceType = VirtualReferenceType.Other; return AllowVirtualReference(referenceVirtualPath.VirtualPathString, referenceType); } // Is the virtual path reference allowed in this page. The referenceType // indicates the type of references involved. public virtual bool AllowVirtualReference(string referenceVirtualPath, VirtualReferenceType referenceType) { return false; } // Is the passed in server include () allowed public virtual bool AllowServerSideInclude(string includeVirtualPath) { return false; } public virtual void PreprocessDirective(string directiveName, IDictionary attributes) { } public virtual int NumberOfControlsAllowed { get { // By default, don't allow any return 0; } } public virtual int TotalNumberOfDependenciesAllowed { get { // By default, don't allow any return 0; } } public virtual int NumberOfDirectDependenciesAllowed { get { // By default, don't allow any return 0; } } private void OnControlAdded() { // If it's negative, there is no limit if (_numberOfControlsAllowed < 0) return; // Increase the control count _currentControlCount++; // Fail if the limit has been reached if (_currentControlCount > _numberOfControlsAllowed) { throw new HttpException(SR.GetString( SR.Too_many_controls, _numberOfControlsAllowed.ToString(CultureInfo.CurrentCulture))); } } // Called by the parser when a file dependency (direct or indirect) is added internal void OnDependencyAdded() { // If it's negative, there is no limit if (_dependenciesAllowed <= 0) return; // Increase the dependency count _currentDependenciesCount++; // Fail if the limit has been reached if (_currentDependenciesCount > _dependenciesAllowed) { throw new HttpException(SR.GetString( SR.Too_many_dependencies, VirtualPath, _dependenciesAllowed.ToString(CultureInfo.CurrentCulture))); } } // Called by the parser when a direct file dependency is added internal void OnDirectDependencyAdded() { // If it's negative, there is no limit if (_directDependenciesAllowed <= 0) return; // Increase the direct dependency count _currentDirectDependenciesCount++; // Fail if the limit has been reached if (_currentDirectDependenciesCount > _directDependenciesAllowed) { throw new HttpException(SR.GetString( SR.Too_many_direct_dependencies, VirtualPath, _directDependenciesAllowed.ToString(CultureInfo.CurrentCulture))); } } // Give the filter a chance to process a code block. If it returns true, the // code block is not processed further by the parser public virtual bool ProcessCodeConstruct(CodeConstructType codeType, string code) { return false; } // Give the filter a chance to process a databinding attribute (e.g. Text=<%# expr %>) // If it returns true, the databinding attribute is not processed further by the parser public virtual bool ProcessDataBindingAttribute(string controlId, string name, string value) { return false; } // Give the filter a chance to process an event hookup (e.g. onclick="ClickHandler") // If it returns true, the event hookup is not processed further by the parser public virtual bool ProcessEventHookup(string controlId, string eventName, string handlerName) { return false; } // Return the Type that should be used for NoCompile user controls public virtual Type GetNoCompileUserControlType() { return null; } // Add a ControlBuilder in the tree at the current parser position protected void AddControl(Type type, IDictionary attributes) { _parser.AddControl(type, attributes); } // Set a property on the TemplateControl (Page/UserControl/Master) protected void SetPageProperty(string filter, string name, string value) { if (filter == null) filter = String.Empty; _parser.RootBuilder.PreprocessAttribute(filter, name, value, true /*mainDirectiveMode*/); } } // The type of reference passed to PageParserFilter.AllowVirtualReference public enum VirtualReferenceType { Page, UserControl, Master, SourceFile, Other } // Used as parameter to the PageParserFilter.ProcessCodeConstruct API public enum CodeConstructType { CodeSnippet, // <% ... %> ExpressionSnippet, // <%= ... %> DataBindingSnippet, // <%# ... %> ScriptTag // } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ReliabilityContractAttribute.cs
- contentDescriptor.cs
- HtmlPhoneCallAdapter.cs
- DataSetFieldSchema.cs
- TextWriterEngine.cs
- TreeView.cs
- PhonemeEventArgs.cs
- Comparer.cs
- EmptyReadOnlyDictionaryInternal.cs
- AsymmetricSignatureFormatter.cs
- BitmapPalette.cs
- EventlogProvider.cs
- DispatcherExceptionEventArgs.cs
- ListItemCollection.cs
- SystemGatewayIPAddressInformation.cs
- ApplicationDirectoryMembershipCondition.cs
- CreateDataSourceDialog.cs
- SQLInt16.cs
- SecurityKeyIdentifierClause.cs
- SetterBaseCollection.cs
- HttpApplicationStateWrapper.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- BitmapEncoder.cs
- PaperSource.cs
- ConcurrentBag.cs
- AddingNewEventArgs.cs
- ObjectTag.cs
- SqlCacheDependencyDatabaseCollection.cs
- AppSettingsReader.cs
- GenericUriParser.cs
- SpotLight.cs
- DetailsViewDeletedEventArgs.cs
- CachingHintValidation.cs
- DetailsViewDeleteEventArgs.cs
- SchemaNotation.cs
- StructuredTypeEmitter.cs
- TextStore.cs
- OSEnvironmentHelper.cs
- LinearGradientBrush.cs
- AuthenticationSection.cs
- BoundPropertyEntry.cs
- SecurityIdentifierConverter.cs
- AssemblyResourceLoader.cs
- ApplicationHost.cs
- WindowsIdentity.cs
- ServiceModelConfigurationSectionCollection.cs
- Directory.cs
- DesignerMetadata.cs
- OnOperation.cs
- SendMailErrorEventArgs.cs
- RoleGroupCollectionEditor.cs
- StringCollectionMarkupSerializer.cs
- CodeTypeOfExpression.cs
- AssemblyAssociatedContentFileAttribute.cs
- CategoriesDocument.cs
- ListControl.cs
- VariantWrapper.cs
- connectionpool.cs
- _ListenerResponseStream.cs
- EdmToObjectNamespaceMap.cs
- DataTransferEventArgs.cs
- KeyTimeConverter.cs
- PolyBezierSegment.cs
- TdsParser.cs
- ReservationCollection.cs
- MessageHeaderInfoTraceRecord.cs
- ManagedIStream.cs
- RawStylusInputCustomDataList.cs
- WorkflowTransactionService.cs
- FilterElement.cs
- OneOf.cs
- WindowsListViewSubItem.cs
- MatrixCamera.cs
- DuplicateWaitObjectException.cs
- FrugalList.cs
- XmlSchemaSimpleTypeList.cs
- _ProxyRegBlob.cs
- ViewCellRelation.cs
- XmlEnumAttribute.cs
- SQLResource.cs
- AutomationElementCollection.cs
- UserControlFileEditor.cs
- DbDeleteCommandTree.cs
- CLSCompliantAttribute.cs
- VirtualPathUtility.cs
- FormClosingEvent.cs
- StylusPlugInCollection.cs
- TextShapeableCharacters.cs
- DataBoundControlAdapter.cs
- ObjectComplexPropertyMapping.cs
- BoolLiteral.cs
- ScaleTransform3D.cs
- Canvas.cs
- SwitchCase.cs
- ProfileSettingsCollection.cs
- FormatVersion.cs
- ControlCachePolicy.cs
- Identity.cs
- _CommandStream.cs
- FormsAuthenticationEventArgs.cs