DeferrableContent.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / DeferrableContent.cs / 1471291 / DeferrableContent.cs

                            using System; 
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Security; 
using System.Xaml;
using System.Xaml.Permissions; 
using System.Windows.Baml2006; 
using System.ComponentModel;
 
namespace System.Windows
{
    [TypeConverter(typeof(DeferrableContentConverter))]
    public class DeferrableContent 
    {
        ///  
        /// Critical to write: We will assert this permission before realizing the deferred content. 
        /// Critical to read: Can be mutated via FromXml method.
        ///  
        internal XamlLoadPermission LoadPermission
        {
            [SecurityCritical]
            get; 
            [SecurityCritical]
            private set; 
        } 

        ///  
        /// Critical to write: This describes the content that is allowed to be loaded with LoadPermission.
        ///                    If LoadPermission is null then this is non-critical.
        /// Safe to read: Carries no privilege in itself.
        ///  
        internal Stream Stream
        { 
            [SecurityCritical, SecurityTreatAsSafe] 
            get;
            [SecurityCritical] 
            private set;
        }

        internal Baml2006SchemaContext SchemaContext { get; private set; } 
        internal IXamlObjectWriterFactory ObjectWriterFactory { get; private set; }
        internal XamlObjectWriterSettings ObjectWriterParentSettings { get; private set; } 
        internal object RootObject { get; private set; } 

        // 

        internal IServiceProvider ServiceProvider { get; private set; }

        ///  
        /// Critical: Sets critical properties LoadPermission and Stream
        /// Safe: Demands LoadPermission before setting it 
        ///  
        [SecurityCritical, SecurityTreatAsSafe]
        internal DeferrableContent(Stream stream, Baml2006SchemaContext schemaContext, 
            IXamlObjectWriterFactory objectWriterFactory, IServiceProvider serviceProvider,
            object rootObject)
        {
            ObjectWriterParentSettings = objectWriterFactory.GetParentSettings(); 
            if (ObjectWriterParentSettings.AccessLevel != null)
            { 
                XamlLoadPermission loadPermission = 
                    new XamlLoadPermission(ObjectWriterParentSettings.AccessLevel);
                loadPermission.Demand(); 
                this.LoadPermission = loadPermission;
            }
            bool assemblyTargetsFramework2 = false;
            // The local assembly can be null if it is not specified in the XamlReaderSettings. 
            if (schemaContext.LocalAssembly != null)
            { 
                assemblyTargetsFramework2 = schemaContext.LocalAssembly.ImageRuntimeVersion.StartsWith("v2", StringComparison.Ordinal); 
            }
            // There is an incompatibility between the framework versions 3 and 4 regarding MarkupExtension resources. 
            // In version 3, MarkupExtension resources did not provide values when looked up.
            // In version 4, they do.
            if (assemblyTargetsFramework2)
            { 
                ObjectWriterParentSettings.SkipProvideValueOnRoot = true;
            } 
            this.Stream = stream; 
            this.SchemaContext = schemaContext;
            this.ObjectWriterFactory = objectWriterFactory; 
            this.ServiceProvider = serviceProvider;
            this.RootObject = rootObject;
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK