Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Shared / MS / Utility / bindurihelper.cs / 3 / bindurihelper.cs
using System;
using System.IO;
using System.Net; // HttpWebRequest
using System.Net.Cache; // HttpRequestCachePolicy
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Text;
using System.Windows.Navigation; // BaseUriHelper
#if !PBTCOMPILER
using MS.Win32;
#endif
using System.Security;
using System.Security.Permissions;
// The functionality in this class is shared across framework and core. The functionality in core
// is a subset of the functionality in framework, so rather than create a dependency from core to
// framework we have choses to duplicate this chunk of code.
#if PRESENTATION_CORE
namespace MS.Internal.PresentationCore
#elif PRESENTATIONFRAMEWORK
using MS.Internal.PresentationFramework; // SecurityHelper
namespace MS.Internal.Utility
#elif PBTCOMPILER
using MS.Internal.PresentationBuildTasks // SecurityHelper
namespace MS.Internal.Utility
#elif REACHFRAMEWORK
using MS.Internal.ReachFramework; // SecurityHelper
namespace MS.Internal.Utility
#else
#error Class is being used from an unknown assembly.
#endif
{
//
// Methods in this partial class are shared by PresentationFramework and PresentationBuildTasks.
// See also WpfWebRequestHelper.
//
internal static partial class BindUriHelper
{
private const int MAX_PATH_LENGTH = 2048 ;
private const int MAX_SCHEME_LENGTH = 32;
public const int MAX_URL_LENGTH = MAX_PATH_LENGTH + MAX_SCHEME_LENGTH + 3; /*=sizeof("://")*/
//
// Uri-toString does 3 things over the standard .toString()
//
// 1) We don't unescape special control characters. The default Uri.ToString()
// will unescape a character like ctrl-g, or ctrl-h so the actual char is emitted.
// However it's considered safer to emit the escaped version.
//
// 2) We truncate urls so that they are always <= MAX_URL_LENGTH
//
// This method should be called whenever you are taking a Uri
// and performing a p-invoke on it.
//
internal static string UriToString(Uri uri)
{
if (uri == null)
{
throw new ArgumentNullException("uri");
}
return new StringBuilder(
uri.GetComponents(
uri.IsAbsoluteUri ? UriComponents.AbsoluteUri : UriComponents.SerializationInfoString,
UriFormat.SafeUnescaped),
MAX_URL_LENGTH).ToString();
}
#if PRESENTATION_CORE || PRESENTATIONFRAMEWORK
// Base Uri.
///
/// Critical: as it sets the baseUri
///
static internal Uri BaseUri
{
get
{
return BaseUriHelper.BaseUri;
}
[SecurityCritical]
set
{
BaseUriHelper.BaseUri = BaseUriHelper.FixFileUri(value);
}
}
static internal bool DoSchemeAndHostMatch(Uri first, Uri second)
{
// Check that both the scheme and the host match.
return (SecurityHelper.AreStringTypesEqual(first.Scheme, second.Scheme) && first.Host.Equals(second.Host) == true);
}
static internal Uri GetResolvedUri(Uri baseUri, Uri orgUri)
{
Uri newUri;
if (orgUri == null)
{
newUri = null;
}
else if (orgUri.IsAbsoluteUri == false)
{
// if the orgUri is an absolute Uri, don't need to resolve it again.
Uri baseuri = (baseUri == null) ? BindUriHelper.BaseUri : baseUri;
#if CF_Envelope_Activation_Enabled
bool isContainer = false ;
//
// if the BaseUri starts with pack://application we know that we're not in a container.
//
// By deferring the registration of the container scheme - we avoid registering the ssres protocol.
// and enable less code that requires elevation.
//
// Note that when container moves to pack: ( PS 25616) - we won't need this check anyway.
//
if ( // Check that the baseuri starts with pack://application:,,,/
! DoSchemeAndHostMatch(baseuri, BaseUriHelper.PackAppBaseUri))
{
isContainer = String.Compare(baseuri.Scheme, CompoundFileUri.UriSchemeContainer, StringComparison.OrdinalIgnoreCase) == 0;
}
Debug.Assert(baseuri.OriginalString == BaseUriHelper.FixFileUri(baseuri).OriginalString, "Base Uri is legacy file Uri and may not resolve relative uris correctly. This method should be updated");
// ToDo ([....]): PS# 25616 Once we move to PackUri, we don't need a special way
// of resolving Uri. We can use the regurlar one.
if (isContainer)
{
newUri = ResolveContainerUri(baseuri, orgUri);
}
else
{
#endif
newUri = new Uri(baseuri, orgUri);
#if CF_Envelope_Activation_Enabled
}
#endif
}
else
{
newUri = BaseUriHelper.FixFileUri(orgUri);
}
return newUri;
}
///
/// Gets the referer to set as a header on the HTTP request.
/// We do not set the referer if we are navigating to a
/// differnet security zone or to a different Uri scheme.
///
internal static string GetReferer(Uri destinationUri)
{
string referer = null;
Uri sourceUri = MS.Internal.AppModel.SiteOfOriginContainer.BrowserSource;
if (sourceUri != null)
{
SecurityZone sourceZone = MS.Internal.AppModel.CustomCredentialPolicy.MapUrlToZone(sourceUri);
SecurityZone targetZone = MS.Internal.AppModel.CustomCredentialPolicy.MapUrlToZone(destinationUri);
// We don't send any referer when crossing zone
if (sourceZone == targetZone)
{
// We don't send any referer when going cross-scheme
if (SecurityHelper.AreStringTypesEqual(sourceUri.Scheme, destinationUri.Scheme))
{
// HTTPHeader requires the referer uri to be escaped.
referer = sourceUri.GetComponents(UriComponents.AbsoluteUri, UriFormat.UriEscaped);
}
}
}
return referer;
}
#endif // PRESENTATION_CORE || PRESENTATIONFRAMEWORK
}
}
// 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
- DynamicPropertyReader.cs
- SqlFileStream.cs
- TailPinnedEventArgs.cs
- SqlBulkCopy.cs
- TextElementCollection.cs
- WebResourceAttribute.cs
- SynchronizationHandlesCodeDomSerializer.cs
- ConnectionsZone.cs
- RestHandler.cs
- Oid.cs
- XmlSchemaComplexContentRestriction.cs
- SyndicationElementExtensionCollection.cs
- HttpRequestBase.cs
- sqlnorm.cs
- ToolStripControlHost.cs
- GroupAggregateExpr.cs
- Avt.cs
- ImageMetadata.cs
- DbConnectionInternal.cs
- SessionIDManager.cs
- RenderData.cs
- ListViewEditEventArgs.cs
- WrapPanel.cs
- ToolStripComboBox.cs
- HttpCookiesSection.cs
- NumberFunctions.cs
- Common.cs
- Input.cs
- ADMembershipUser.cs
- GeometryHitTestParameters.cs
- WebBrowserEvent.cs
- DocumentApplication.cs
- Opcode.cs
- ConfigXmlAttribute.cs
- AsymmetricKeyExchangeFormatter.cs
- EntityViewGenerationAttribute.cs
- DeclaredTypeValidatorAttribute.cs
- TrustManagerPromptUI.cs
- WeakReferenceList.cs
- KeyMatchBuilder.cs
- FloaterParaClient.cs
- ChannelServices.cs
- Subordinate.cs
- AppearanceEditorPart.cs
- FileIOPermission.cs
- _SslStream.cs
- WebPartEditorApplyVerb.cs
- ReadOnlyAttribute.cs
- PasswordDeriveBytes.cs
- QueryableDataSourceHelper.cs
- MonthChangedEventArgs.cs
- WebPartManagerInternals.cs
- Style.cs
- DbProviderConfigurationHandler.cs
- DBSchemaRow.cs
- FunctionQuery.cs
- SystemMulticastIPAddressInformation.cs
- ValueQuery.cs
- SynchronizedInputAdaptor.cs
- _LocalDataStore.cs
- StrokeNodeData.cs
- SHA1.cs
- SelectionManager.cs
- HttpHandlerActionCollection.cs
- SystemUnicastIPAddressInformation.cs
- Merger.cs
- IncrementalReadDecoders.cs
- ChildTable.cs
- MenuItemStyle.cs
- StorageFunctionMapping.cs
- FloatSumAggregationOperator.cs
- UnsupportedPolicyOptionsException.cs
- Filter.cs
- EntityDataSourceStatementEditorForm.cs
- DomainUpDown.cs
- HttpGetClientProtocol.cs
- CursorInteropHelper.cs
- BindUriHelper.cs
- GeneralTransform.cs
- XmlILCommand.cs
- MSHTMLHost.cs
- HttpMethodConstraint.cs
- XslTransform.cs
- DataGridCellInfo.cs
- SingleTagSectionHandler.cs
- ConstraintConverter.cs
- LabelAutomationPeer.cs
- EncryptedPackageFilter.cs
- WebPartCollection.cs
- SQLString.cs
- UpdateRecord.cs
- DSACryptoServiceProvider.cs
- MissingMethodException.cs
- PageCodeDomTreeGenerator.cs
- SiteMapNode.cs
- AdCreatedEventArgs.cs
- SqlColumnizer.cs
- SqlComparer.cs
- PiiTraceSource.cs
- TemplateControlBuildProvider.cs