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
- KeyConverter.cs
- BuildProvider.cs
- WebPartUserCapability.cs
- DateTimeOffsetStorage.cs
- NavigateEvent.cs
- DocumentSequenceHighlightLayer.cs
- SqlFacetAttribute.cs
- OleServicesContext.cs
- MailHeaderInfo.cs
- SystemUnicastIPAddressInformation.cs
- DataColumnPropertyDescriptor.cs
- PageOutputQuality.cs
- RtfToken.cs
- Triangle.cs
- TypeConverterHelper.cs
- GlyphsSerializer.cs
- Assembly.cs
- OleDbPropertySetGuid.cs
- ProcessModule.cs
- Byte.cs
- DataBinder.cs
- UnlockInstanceCommand.cs
- TreeView.cs
- XmlTextAttribute.cs
- FileDialog.cs
- TypefaceMetricsCache.cs
- ConfigurationSchemaErrors.cs
- ConvertersCollection.cs
- ComponentResourceKey.cs
- ScriptControlDescriptor.cs
- CharAnimationUsingKeyFrames.cs
- PatternMatcher.cs
- SimpleWebHandlerParser.cs
- RelationshipNavigation.cs
- relpropertyhelper.cs
- TextTreeNode.cs
- SignalGate.cs
- NonSerializedAttribute.cs
- ActivityExecutorDelegateInfo.cs
- ListViewGroup.cs
- SourceLineInfo.cs
- TextParagraphCache.cs
- DataTable.cs
- StringDictionaryWithComparer.cs
- PathSegment.cs
- CellPartitioner.cs
- Freezable.cs
- CLRBindingWorker.cs
- ExtensionQuery.cs
- ExpressionBinding.cs
- TargetInvocationException.cs
- TerminatingOperationBehavior.cs
- XPathNodeInfoAtom.cs
- ExecutedRoutedEventArgs.cs
- ZipIOModeEnforcingStream.cs
- WindowsGrip.cs
- InternalBase.cs
- WmpBitmapEncoder.cs
- FileLogRecordEnumerator.cs
- ButtonPopupAdapter.cs
- DataGridViewLinkColumn.cs
- MiniConstructorInfo.cs
- _ProxyChain.cs
- ScrollBar.cs
- InvalidFilterCriteriaException.cs
- MailSettingsSection.cs
- RightsManagementInformation.cs
- PatternMatcher.cs
- WebServiceMethodData.cs
- DataGridViewColumnCollection.cs
- ReadOnlyDataSourceView.cs
- ImageFormat.cs
- QuinticEase.cs
- ItemsControlAutomationPeer.cs
- DefaultSection.cs
- OutputCacheSection.cs
- PropertyNames.cs
- Operators.cs
- HotCommands.cs
- DataGridPagerStyle.cs
- ThreadAttributes.cs
- WebProxyScriptElement.cs
- WindowsScroll.cs
- DataBinding.cs
- ErrorRuntimeConfig.cs
- BasicCellRelation.cs
- PageThemeCodeDomTreeGenerator.cs
- SelectionPatternIdentifiers.cs
- WebControlsSection.cs
- BindingsCollection.cs
- FixedHyperLink.cs
- TextInfo.cs
- EasingKeyFrames.cs
- HashJoinQueryOperatorEnumerator.cs
- DbParameterHelper.cs
- PrintController.cs
- SmtpException.cs
- MediaSystem.cs
- WebPartsSection.cs
- AddInProcess.cs