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
- RestHandlerFactory.cs
- WindowsTokenRoleProvider.cs
- _ListenerRequestStream.cs
- CodeChecksumPragma.cs
- MD5.cs
- HostProtectionPermission.cs
- CfgParser.cs
- SchemaElementDecl.cs
- SQLString.cs
- WriteFileContext.cs
- CodeMemberField.cs
- OdbcConnectionFactory.cs
- CompensationHandlingFilter.cs
- Evaluator.cs
- RootBuilder.cs
- ViewValidator.cs
- DateRangeEvent.cs
- ExtensibleClassFactory.cs
- Substitution.cs
- TreeNodeConverter.cs
- LinearGradientBrush.cs
- HtmlTable.cs
- DataGridSortCommandEventArgs.cs
- AttachedAnnotation.cs
- TreeView.cs
- ControlPager.cs
- CompositeFontFamily.cs
- SortedList.cs
- OptimizedTemplateContentHelper.cs
- TextEncodedRawTextWriter.cs
- InheritedPropertyChangedEventArgs.cs
- COM2PropertyBuilderUITypeEditor.cs
- ConfigurationPropertyAttribute.cs
- ManagedWndProcTracker.cs
- PipelineModuleStepContainer.cs
- StylusPointPropertyInfo.cs
- OutOfProcStateClientManager.cs
- HostExecutionContextManager.cs
- SubstitutionDesigner.cs
- SerializationSectionGroup.cs
- QueuePropertyVariants.cs
- StatusBarPanelClickEvent.cs
- EntityDataSourceStatementEditorForm.cs
- BlurEffect.cs
- DelegatingTypeDescriptionProvider.cs
- SafeLibraryHandle.cs
- controlskin.cs
- HttpRuntimeSection.cs
- EventDrivenDesigner.cs
- RemotingConfigParser.cs
- TrackBarRenderer.cs
- DiagnosticsConfigurationHandler.cs
- RectAnimationUsingKeyFrames.cs
- SmiRequestExecutor.cs
- AnimationException.cs
- COAUTHIDENTITY.cs
- RectangleHotSpot.cs
- ZoneIdentityPermission.cs
- UncommonField.cs
- sqlpipe.cs
- ComponentEditorForm.cs
- SoapParser.cs
- configsystem.cs
- MemoryPressure.cs
- TranslateTransform3D.cs
- NameObjectCollectionBase.cs
- ErrorStyle.cs
- CacheAxisQuery.cs
- BitmapFrame.cs
- SiteMapNodeCollection.cs
- CodeConstructor.cs
- KeyFrames.cs
- UnsafeCollabNativeMethods.cs
- ScriptMethodAttribute.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- RandomNumberGenerator.cs
- DBProviderConfigurationHandler.cs
- XmlComplianceUtil.cs
- TemporaryBitmapFile.cs
- BCLDebug.cs
- PersonalizationState.cs
- ApplicationSettingsBase.cs
- FileLogRecord.cs
- WMIInterop.cs
- ContentHostHelper.cs
- HelpKeywordAttribute.cs
- TypeConverter.cs
- StringPropertyBuilder.cs
- ProfileSection.cs
- SamlConditions.cs
- BitmapEffectState.cs
- FormViewInsertedEventArgs.cs
- ComponentCommands.cs
- WebServiceTypeData.cs
- SelectionItemPattern.cs
- MultiSelectRootGridEntry.cs
- X509PeerCertificateAuthenticationElement.cs
- MonthCalendarDesigner.cs
- LastQueryOperator.cs
- DataGridViewTextBoxCell.cs