Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Documents / XpsS0ValidatingLoader.cs / 1305600 / XpsS0ValidatingLoader.cs
#region Using directives
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Windows.Markup;
using System.Xml;
using System.IO;
using System.IO.Packaging;
using System.Xml.Schema;
using System.Net;
using System.Resources;
using System.Reflection;
using System.Security;
using MS.Internal;
using MS.Internal.IO.Packaging;
#endregion
namespace System.Windows.Documents
{
internal class XpsValidatingLoader
{
internal XpsValidatingLoader()
{
}
internal object Load(Stream stream, Uri parentUri, ParserContext pc, ContentType mimeType)
{
return Load(stream, parentUri, pc, mimeType, null);
}
internal void Validate(Stream stream, Uri parentUri, ParserContext pc, ContentType mimeType, string rootElement)
{
Load(stream, parentUri, pc, mimeType, rootElement);
}
///
/// rootElement == null: Load elements, validation of root element will occur in caller by checking object type or casting
/// rootElement != null: Only perform validation, and expect rootElement at root of markup
///
///
///
///
///
///
///
///
/// Critical: Accesses a package from PreloadedPackages
/// SecurityTreatAsSafe: No package instance or package related objects are handed out from this
/// method except as SecurityCriticalData (to XpsSchema.ValidateRelationships)
///
[SecurityCritical, SecurityTreatAsSafe]
private object Load(Stream stream, Uri parentUri, ParserContext pc, ContentType mimeType, string rootElement)
{
object obj = null;
if (!DocumentMode)
{ // Loose XAML, just check against schema, don't check content type
if (rootElement==null)
{
obj = XamlReader.Load(stream, pc);
}
}
else
{ // inside an XPS Document. Perform maximum validation
XpsSchema schema = XpsSchema.GetSchema(mimeType);
Uri uri = pc.BaseUri;
// Using PackUriHelper.ValidateAndGetPackUriComponents internal method
// to get Package and Part Uri in one step
Uri packageUri;
Uri partUri;
PackUriHelper.ValidateAndGetPackUriComponents(uri, out packageUri, out partUri);
Package package = PreloadedPackages.GetPackage(packageUri);
Uri parentPackageUri = null;
if (parentUri != null)
{
parentPackageUri = PackUriHelper.GetPackageUri(parentUri);
if (!parentPackageUri.Equals(packageUri))
{
throw new FileFormatException(SR.Get(SRID.XpsValidatingLoaderUriNotInSamePackage));
}
}
schema.ValidateRelationships(new SecurityCriticalData(package), packageUri, partUri, mimeType);
if (schema.AllowsMultipleReferencesToSameUri(mimeType))
{
_uniqueUriRef = null;
}
else
{
_uniqueUriRef = new Hashtable(11);
}
Hashtable validResources = (_validResources.Count > 0 ? _validResources.Peek() : null);
if (schema.HasRequiredResources(mimeType))
{
validResources = new Hashtable(11);
PackagePart part = package.GetPart(partUri);
PackageRelationshipCollection requiredResources = part.GetRelationshipsByType(_requiredResourceRel);
foreach (PackageRelationship relationShip in requiredResources)
{
Uri targetUri = PackUriHelper.ResolvePartUri(partUri, relationShip.TargetUri);
Uri absTargetUri = PackUriHelper.Create(packageUri, targetUri);
PackagePart targetPart = package.GetPart(targetUri);
if (schema.IsValidRequiredResourceMimeType(targetPart.ValidatedContentType))
{
if (!validResources.ContainsKey(absTargetUri))
{
validResources.Add(absTargetUri, true);
}
}
else
{
if (!validResources.ContainsKey(absTargetUri))
{
validResources.Add(absTargetUri, false);
}
}
}
}
XpsSchemaValidator xpsSchemaValidator = new XpsSchemaValidator(this, schema, mimeType,
stream, packageUri, partUri);
_validResources.Push(validResources);
if (rootElement != null)
{
xpsSchemaValidator.XmlReader.MoveToContent();
if (!rootElement.Equals(xpsSchemaValidator.XmlReader.Name))
{
throw new FileFormatException(SR.Get(SRID.XpsValidatingLoaderUnsupportedMimeType));
}
while (xpsSchemaValidator.XmlReader.Read())
;
}
else
{
obj = XamlReader.Load(xpsSchemaValidator.XmlReader,
pc,
XamlParseMode.Synchronous);
}
_validResources.Pop();
}
return obj;
}
static internal bool DocumentMode
{
get
{
return _documentMode;
}
}
static internal void AssertDocumentMode()
{ // Once switched to document mode, we stay there
_documentMode = true;
}
internal void UriHitHandler(int node,Uri uri)
{
if (_uniqueUriRef != null)
{
if (_uniqueUriRef.Contains(uri))
{
if ((int)_uniqueUriRef[uri] != node)
{
throw new FileFormatException(SR.Get(SRID.XpsValidatingLoaderDuplicateReference));
}
}
else
{
_uniqueUriRef.Add(uri, node);
}
}
Hashtable validResources = _validResources.Peek();
if (validResources!=null)
{
if (!validResources.ContainsKey(uri))
{
// The hashtable is case sensitive, packuris are not, so if we do not find in hashtable,
// do true comparison and add when found for next time...
bool found = false;
foreach (Uri resUri in validResources.Keys)
{
if (PackUriHelper.ComparePackUri(resUri,uri) == 0)
{
validResources.Add(uri, validResources[resUri]);
found = true;
break;
}
}
if (!found)
{
throw new FileFormatException(SR.Get(SRID.XpsValidatingLoaderUnlistedResource));
}
}
if (!(bool)validResources[uri])
{
throw new FileFormatException(SR.Get(SRID.XpsValidatingLoaderUnsupportedMimeType));
}
}
}
static private Stack _validResources = new Stack();
private Hashtable _uniqueUriRef;
static
private
bool _documentMode = false;
static
private
string _requiredResourceRel = "http://schemas.microsoft.com/xps/2005/06/required-resource";
static private XpsS0FixedPageSchema xpsS0FixedPageSchema = new XpsS0FixedPageSchema();
static private XpsS0ResourceDictionarySchema xpsS0ResourceDictionarySchema = new XpsS0ResourceDictionarySchema();
static private XpsDocStructSchema xpsDocStructSchema = new XpsDocStructSchema();
}
}
// 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
- MapPathBasedVirtualPathProvider.cs
- CompilationUtil.cs
- CapacityStreamGeometryContext.cs
- PageHandlerFactory.cs
- DataGridViewCellCollection.cs
- SchemaCollectionCompiler.cs
- Filter.cs
- StylusLogic.cs
- ICspAsymmetricAlgorithm.cs
- GeometryHitTestResult.cs
- PropertyPanel.cs
- DataGridViewCellConverter.cs
- ActivityStateRecord.cs
- BindingManagerDataErrorEventArgs.cs
- FileLogRecordHeader.cs
- AutomationElementCollection.cs
- EntitySqlQueryCacheEntry.cs
- complextypematerializer.cs
- TemplateBamlTreeBuilder.cs
- ContentType.cs
- RuntimeConfigurationRecord.cs
- StyleSelector.cs
- EmptyCollection.cs
- AmbientProperties.cs
- NativeMethodsCLR.cs
- APCustomTypeDescriptor.cs
- SQLRoleProvider.cs
- FigureParaClient.cs
- AsyncInvokeOperation.cs
- HtmlTable.cs
- DataBoundControlAdapter.cs
- DecimalSumAggregationOperator.cs
- MyContact.cs
- SymLanguageVendor.cs
- InternalTransaction.cs
- KeyFrames.cs
- MultiDataTrigger.cs
- WebPartDescription.cs
- DocumentReference.cs
- SQLBytesStorage.cs
- PassportAuthenticationEventArgs.cs
- LazyTextWriterCreator.cs
- NullExtension.cs
- IdentityValidationException.cs
- SemanticValue.cs
- MetabaseSettings.cs
- BehaviorEditorPart.cs
- TextEditorSpelling.cs
- WebPartDescription.cs
- ConnectionStringsExpressionBuilder.cs
- PointLight.cs
- UnsafeNativeMethodsCLR.cs
- TreeChangeInfo.cs
- ObjectAnimationBase.cs
- CdpEqualityComparer.cs
- PropertyCondition.cs
- AuthenticationSection.cs
- RuntimeResourceSet.cs
- TagNameToTypeMapper.cs
- Metadata.cs
- DictionaryBase.cs
- MaskedTextProvider.cs
- SynchronizationContext.cs
- XsltSettings.cs
- EndpointAddressProcessor.cs
- sqlcontext.cs
- _TransmitFileOverlappedAsyncResult.cs
- User.cs
- DrawingDrawingContext.cs
- DefaultPropertiesToSend.cs
- ZipIOExtraFieldElement.cs
- ChineseLunisolarCalendar.cs
- RelationshipType.cs
- ListViewTableRow.cs
- IOThreadTimer.cs
- SoapTypeAttribute.cs
- Tile.cs
- PenThreadWorker.cs
- ProxyWebPart.cs
- RadioButton.cs
- CDSsyncETWBCLProvider.cs
- TemplateBuilder.cs
- TileBrush.cs
- SystemResourceHost.cs
- _ConnectOverlappedAsyncResult.cs
- DrawListViewColumnHeaderEventArgs.cs
- DataAdapter.cs
- EncoderParameters.cs
- CodeDOMUtility.cs
- MediaTimeline.cs
- HostSecurityManager.cs
- RolePrincipal.cs
- InstancePersistenceException.cs
- MappingException.cs
- AnimationException.cs
- SmtpNegotiateAuthenticationModule.cs
- DataBinding.cs
- DiscardableAttribute.cs
- SafeNativeMethodsOther.cs
- validation.cs