Imported Upstream version 5.0.0.42

Former-commit-id: fd56571888259555122d8a0f58c68838229cea2b
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2017-04-10 11:41:01 +00:00
parent 1190d13a04
commit 6bdd276d05
19939 changed files with 3099680 additions and 93811 deletions

View File

@@ -233,7 +233,7 @@ NUNIT_APP_CODE_FILES = $(TEST_APP_CODE_FILES)
NUNIT_APP_GLOBALRESOURCES_FILES = $(TEST_APP_GLOBALRESOURCES_FILES)
OTHER_RES += $(RESOURCE_FILES_2)
OTHER_LIB_MCS_FLAGS = -d:INSIDE_SYSTEM_WEB -nowarn:618
OTHER_LIB_MCS_FLAGS = -d:INSIDE_SYSTEM_WEB -nowarn:436,618
ifeq (4, $(FRAMEWORK_VERSION_MAJOR))
OTHER_RES += $(RESOURCE_FILES_4)

View File

@@ -47,8 +47,6 @@ namespace System.Web.Compilation
{
class AppResourcesAssemblyBuilder
{
static string framework_version = "4.5";
static string profile_path = "net_4_x";
CompilationSection config;
CompilerInfo ci;
CodeDomProvider _provider;
@@ -233,36 +231,14 @@ namespace System.Web.Compilation
string SetAlPath (ProcessStartInfo info)
{
if (RuntimeHelpers.RunningOnWindows) {
string alPath;
string monoPath;
PropertyInfo gac = typeof (Environment).GetProperty ("GacPath", BindingFlags.Static|BindingFlags.NonPublic);
MethodInfo get_gac = gac.GetGetMethod (true);
string p = Path.GetDirectoryName ((string) get_gac.Invoke (null, null));
monoPath = Path.Combine (Path.GetDirectoryName (Path.GetDirectoryName (p)), "bin\\mono.bat");
if (!File.Exists (monoPath)) {
monoPath = Path.Combine (Path.GetDirectoryName (Path.GetDirectoryName (p)), "bin\\mono.exe");
if (!File.Exists (monoPath)) {
monoPath = Path.Combine (Path.GetDirectoryName (Path.GetDirectoryName (Path.GetDirectoryName (p))), "mono\\mono\\mini\\mono.exe");
if (!File.Exists (monoPath))
throw new FileNotFoundException ("Windows mono path not found: " + monoPath);
}
}
alPath = Path.Combine (p, framework_version + "\\al.exe");
if (!File.Exists (alPath)) {
alPath = Path.Combine (Path.GetDirectoryName (p), "lib\\" + profile_path + "\\al.exe");
if (!File.Exists (alPath))
throw new FileNotFoundException ("Windows al path not found: " + alPath);
}
info.FileName = monoPath;
return alPath + " ";
info.FileName = MonoToolsLocator.Mono;
return MonoToolsLocator.AssemblyLinker + " ";
} else {
info.FileName = "al";
info.FileName = MonoToolsLocator.AssemblyLinker;
return String.Empty;
}
}
string BuildAssemblyPath (string cultureName)
{
string baseDir = Path.Combine (baseAssemblyDirectory, cultureName);

View File

@@ -40,7 +40,6 @@ namespace System.Web.Configuration {
bool eviction_warning_shown;
int evictions;
bool size_overriden;
internal string EvictionWarning { set; private get; }

View File

@@ -31,9 +31,12 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Security.Permissions;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Configuration;
using System.Web.Caching;
using System.Web.Util;
@@ -53,6 +56,8 @@ namespace System.Web.Hosting {
static VirtualPathProvider vpath_provider = (HttpRuntime.AppDomainAppVirtualPath == null) ? null :
new DefaultVirtualPathProvider ();
static int busy_count;
static BackgroundWorkScheduler _backgroundWorkScheduler = null; // created on demand
static readonly Task<object> _completedTask = Task.FromResult<object>(null);
internal static bool HaveCustomVPP {
get;
@@ -212,6 +217,73 @@ namespace System.Web.Hosting {
if (Host != null)
Host.UnregisterObject (obj);
}
// Schedules a task which can run in the background, independent of any request.
// This differs from a normal ThreadPool work item in that ASP.NET can keep track
// of how many work items registered through this API are currently running, and
// the ASP.NET runtime will try not to delay AppDomain shutdown until these work
// items have finished executing.
//
// Usage notes:
// - This API cannot be called outside of an ASP.NET-managed AppDomain.
// - The caller's ExecutionContext is not flowed to the work item.
// - Scheduled work items are not guaranteed to ever execute, e.g., when AppDomain
// shutdown has already started by the time this API was called.
// - The provided CancellationToken will be signaled when the application is
// shutting down. The work item should make every effort to honor this token.
// If a work item does not honor this token and continues executing it will
// eventually be considered rogue, and the ASP.NET runtime will rudely unload
// the AppDomain without waiting for the work item to finish.
//
// This overload of QueueBackgroundWorkItem takes a void-returning callback; the
// work item will be considered finished when the callback returns.
[SecurityPermission(SecurityAction.LinkDemand, Unrestricted = true)]
public static void QueueBackgroundWorkItem(Action<CancellationToken> workItem) {
if (workItem == null) {
throw new ArgumentNullException("workItem");
}
QueueBackgroundWorkItem(ct => { workItem(ct); return _completedTask; });
}
// See documentation on the other overload for a general API overview.
//
// This overload of QueueBackgroundWorkItem takes a Task-returning callback; the
// work item will be considered finished when the returned Task transitions to a
// terminal state.
[SecurityPermission(SecurityAction.LinkDemand, Unrestricted = true)]
public static void QueueBackgroundWorkItem(Func<CancellationToken, Task> workItem) {
if (workItem == null) {
throw new ArgumentNullException("workItem");
}
if (Host == null) {
throw new InvalidOperationException(); // can only be called within an ASP.NET AppDomain
}
QueueBackgroundWorkItemInternal(workItem);
}
static void QueueBackgroundWorkItemInternal(Func<CancellationToken, Task> workItem) {
Debug.Assert(workItem != null);
BackgroundWorkScheduler scheduler = Volatile.Read(ref _backgroundWorkScheduler);
// If the scheduler doesn't exist, lazily create it, but only allow one instance to ever be published to the backing field
if (scheduler == null) {
BackgroundWorkScheduler newlyCreatedScheduler = new BackgroundWorkScheduler(UnregisterObject, WriteUnhandledException);
scheduler = Interlocked.CompareExchange(ref _backgroundWorkScheduler, newlyCreatedScheduler, null) ?? newlyCreatedScheduler;
if (scheduler == newlyCreatedScheduler) {
RegisterObject(scheduler); // Only call RegisterObject if we just created the "winning" one
}
}
scheduler.ScheduleWorkItem(workItem);
}
static void WriteUnhandledException (AppDomain appDomain, Exception exception)
{
Console.Error.WriteLine ("Error in background work item: " + exception);
}
}
}

View File

@@ -2,6 +2,7 @@ Assembly/AssemblyInfo.cs
../../build/common/Consts.cs
../../build/common/Locale.cs
../../build/common/MonoTODOAttribute.cs
../System/System/MonoToolsLocator.cs
../System.Windows.Forms/System.Resources/AssemblyNamesTypeResolutionService.cs
../System.Windows.Forms/System.Resources/ByteArrayFromResXHandler.cs
../System.Windows.Forms/System.Resources/ResXNullRef.cs
@@ -289,6 +290,7 @@ System.Web.Hosting/AppManagerAppDomainFactory.cs
System.Web.Hosting/ApplicationInfo.cs
System.Web.Hosting/ApplicationHost.cs
System.Web.Hosting/ApplicationManager.cs
../referencesource/System.Web/Hosting/BackgroundWorkScheduler.cs
System.Web.Hosting/BareApplicationHost.cs
System.Web.Hosting/DefaultVirtualDirectory.cs
System.Web.Hosting/DefaultVirtualFile.cs
@@ -1198,6 +1200,7 @@ System.Web.UI/XhtmlMobileDocType.cs
System.Web.UI/XhtmlTextWriter.cs
System.Web.UI/XPathBinder.cs
System.Web.Util/AltSerialization.cs
../referencesource/System.Web/Util/CancellationTokenHelper.cs
System.Web.Util/DataSourceHelper.cs
System.Web.Util/DataSourceResolver.cs
System.Web.Util/FileUtils.cs

View File

@@ -212,7 +212,7 @@ namespace System.Web
get { return w.ServerVariables; }
}
public virtual CancellationToken TimedOutToken {
public override CancellationToken TimedOutToken {
get { return w.TimedOutToken; }
}
@@ -252,7 +252,7 @@ namespace System.Web
get { return w.UserLanguages; }
}
public void Abort ()
public override void Abort ()
{
w.WorkerRequest.CloseConnection();
}

View File

@@ -1207,7 +1207,7 @@ namespace System.Web
internal void TransmitFile (string filename, bool final_flush)
{
FileInfo fi = new FileInfo (filename);
using (Stream s = fi.OpenRead ()); // Just check if we can read.
using (Stream s = fi.OpenRead ()) { } // Just check if we can read.
output_stream.WriteFile (filename, 0, fi.Length);
output_stream.ApplyFilter (final_flush);
Flush (final_flush);

View File

@@ -1,3 +1,4 @@
../../test-helpers/NunitHelpers.cs
Test/standalone-tests/Consts.cs
Test/standalone-tests/Locations.cs
Test/standalone-tests/OutputCacheProvider.cs

View File

@@ -1,3 +1,4 @@
../../test-helpers/NunitHelpers.cs
../../System.Web.DynamicData/Test/Common/AssertExtensions.cs
mainsoft/MainsoftWebTest/HtmlAgilityPack/AssemblyInfo.cs
mainsoft/MainsoftWebTest/HtmlAgilityPack/crc32.cs
@@ -271,7 +272,6 @@ System.Web.UI.WebControls/RadioButtonTest.cs
System.Web.UI.WebControls/RangeValidatorTest.cs
System.Web.UI.WebControls/RectangleHotSpotTest.cs
System.Web.UI.WebControls/RegularExpressionValidatorTest.cs
System.Web.UI.WebControls/RepeatInfoTest.auto.cs
System.Web.UI.WebControls/RepeatInfoTest.auto.4.0.cs
System.Web.UI.WebControls/RepeatInfoTest.cs
System.Web.UI.WebControls/RepeatInfoUser.cs

View File

@@ -230,7 +230,7 @@ namespace MonoTests.System.Web.Compilation {
string originalHtml = @"<!--[if IE 6]>
<link rel=""styleheet"" type=""text/css"" href=""~/compat-ie6.css""></link>
<![endif]-->";
HtmlDiff.AssertAreEqual (originalHtml, renderedHtml, "#A1");
HtmlDiff.AssertAreEqual (originalHtml.Replace ("\r\n","\n"), renderedHtml, "#A1");
}
[Test (Description="Bug #400807")]
@@ -286,7 +286,7 @@ namespace MonoTests.System.Web.Compilation {
string originalHtml = @"<!-- comment start
<input id=""testBox"" type=""checkbox"" name=""testBox"" />
comment end -->";
HtmlDiff.AssertAreEqual (originalHtml, renderedHtml, "#A1");
HtmlDiff.AssertAreEqual (originalHtml.Replace ("\r\n","\n"), renderedHtml, "#A1");
}
[Test]

View File

@@ -77,13 +77,13 @@ namespace MonoTests.System.Web.Hosting {
Assert.IsNull (HostingEnvironment.InitializationException, "During:InitializationException");
Assert.IsTrue (HostingEnvironment.IsHosted, "During:IsHosted");
Assert.IsNotNull (HostingEnvironment.ApplicationID, "During:ApplicationID:Null");
Assert.IsNotEmpty (HostingEnvironment.ApplicationID, "During:ApplicationID:Empty");
AssertHelper.IsNotEmpty (HostingEnvironment.ApplicationID, "During:ApplicationID:Empty");
Assert.IsNotNull (HostingEnvironment.ApplicationPhysicalPath, "During:ApplicationPhysicalPath:Null");
Assert.IsNotEmpty (HostingEnvironment.ApplicationPhysicalPath, "During:ApplicationPhysicalPath:Empty");
AssertHelper.IsNotEmpty (HostingEnvironment.ApplicationPhysicalPath, "During:ApplicationPhysicalPath:Empty");
Assert.IsNotNull (HostingEnvironment.ApplicationVirtualPath, "During:ApplicationVirtualPath:Null");
Assert.IsNotEmpty (HostingEnvironment.ApplicationVirtualPath, "During:ApplicationVirtualPath:Empty");
AssertHelper.IsNotEmpty (HostingEnvironment.ApplicationVirtualPath, "During:ApplicationVirtualPath:Empty");
Assert.IsNotNull (HostingEnvironment.SiteName, "During:SiteName:Null");
Assert.IsNotEmpty (HostingEnvironment.SiteName, "During:SiteName:Empty");
AssertHelper.IsNotEmpty (HostingEnvironment.SiteName, "During:SiteName:Empty");
Assert.IsNotNull (HostingEnvironment.Cache, "During:Cache");
Assert.AreEqual (ApplicationShutdownReason.None, HostingEnvironment.ShutdownReason, "During:ShutdownReason");
Assert.IsNotNull (HostingEnvironment.VirtualPathProvider, "During:VirtualPathProvider");

View File

@@ -57,7 +57,7 @@ namespace MonoTests.System.Web.UI.WebControls.Adapters
sw = new StringWriter();
w = new HtmlTextWriter(sw);
a.Render (w);
Assert.AreEqual ("RenderBeginTag\nRenderContents\nRenderEndTag\n", sw.ToString(), "Render #1");
Assert.AreEqual ("RenderBeginTag\nRenderContents\nRenderEndTag\n", sw.ToString().Replace ("\r", ""), "Render #1");
sw = new StringWriter();

View File

@@ -91,21 +91,21 @@ namespace MonoTests.System.Web.UI.WebControls.Adapters
public void RenderBeginTag ()
{
a.RenderBeginTag (w);
Assert.AreEqual ("RenderBeginTag\n", sw.ToString (), "RenderBeginTag #1");
Assert.AreEqual ("RenderBeginTag\n", sw.ToString ().Replace ("\r", ""), "RenderBeginTag #1");
}
[Test]
public void RenderContentsTag ()
{
a.RenderContents (w);
Assert.AreEqual ("RenderContents\n", sw.ToString (), "RenderContents #1");
Assert.AreEqual ("RenderContents\n", sw.ToString ().Replace ("\r", ""), "RenderContents #1");
}
[Test]
public void RenderEndTag ()
{
a.RenderEndTag (w);
Assert.AreEqual ("RenderEndTag\n", sw.ToString (), "RenderEndTag #1");
Assert.AreEqual ("RenderEndTag\n", sw.ToString ().Replace ("\r", ""), "RenderEndTag #1");
}
[Test]

View File

@@ -63,28 +63,28 @@ namespace MonoTests.System.Web.UI.WebControls.Adapters
public void RenderBeginTag ()
{
a.RenderBeginTag (w);
Assert.AreEqual ("RenderBeginTag\n", sw.ToString (), "RenderBeginTag #1");
Assert.AreEqual ("RenderBeginTag\n", sw.ToString ().Replace ("\r", ""), "RenderBeginTag #1");
}
[Test]
public void RenderContentsTag ()
{
a.RenderContents (w);
Assert.AreEqual ("RenderContents\n", sw.ToString (), "RenderContents #1");
Assert.AreEqual ("RenderContents\n", sw.ToString ().Replace ("\r", ""), "RenderContents #1");
}
[Test]
public void RenderEndTag ()
{
a.RenderEndTag (w);
Assert.AreEqual ("RenderEndTag\n", sw.ToString (), "RenderEndTag #1");
Assert.AreEqual ("RenderEndTag\n", sw.ToString ().Replace ("\r", ""), "RenderEndTag #1");
}
[Test]
public void Render ()
{
a.Render (w);
Assert.AreEqual ("RenderBeginTag\nRenderContents\nRenderEndTag\n", sw.ToString (), "Render #1");
Assert.AreEqual ("RenderBeginTag\nRenderContents\nRenderEndTag\n", sw.ToString ().Replace ("\r", ""), "Render #1");
}
[Test]

View File

@@ -1 +1 @@
a3772412270d2034fc106168a237dd41420adfa9
64aa7ad1b5a33e952dcb1afafb94208f77a1a2e8

View File

@@ -1538,7 +1538,7 @@ namespace MonoTests.System.Web.UI.WebControls
Console.WriteLine ("----------------------------");
Console.WriteLine (renderedHtml);
Assert.AreEqual (origHtml, renderedHtml, "#A1");
Assert.AreEqual (origHtml.Replace ("\r", ""), renderedHtml.Replace ("\r", ""), "#A1");
}
[Test]
@@ -1566,13 +1566,13 @@ namespace MonoTests.System.Web.UI.WebControls
string origHtml = "Header<table cellspacing=\"5\" cellpadding=\"5\">\r\n\t<tr>\r\n\t\t<td align=\"right\"><input type=\"submit\" name=\"MyWizard$StepNavigationTemplateContainerID$StepPreviousButton\" value=\"Previous\" id=\"MyWizard_StepNavigationTemplateContainerID_StepPreviousButton\" /></td><td align=\"right\"><input type=\"submit\" name=\"MyWizard$StepNavigationTemplateContainerID$StepNextButton\" value=\"Next\" id=\"MyWizard_StepNavigationTemplateContainerID_StepNextButton\" /></td>\n\t</tr>\n</table>Step";
string renderedHtml = HtmlDiff.GetControlFromPageHtml (result);
Assert.AreEqual (origHtml, renderedHtml, "#A1");
Assert.AreEqual (origHtml.Replace ("\r", ""), renderedHtml.Replace ("\r", ""), "#A1");
t.UserData = "RenderHeader_InSpan";
result = t.Run ();
origHtml = "Header<table cellspacing=\"5\" cellpadding=\"5\">\r\n\t<tr>\r\n\t\t<td align=\"right\"><input type=\"submit\" name=\"MyWizard$StepNavigationTemplateContainerID$StepPreviousButton\" value=\"Previous\" id=\"MyWizard_StepNavigationTemplateContainerID_StepPreviousButton\" /></td><td align=\"right\"><input type=\"submit\" name=\"MyWizard$StepNavigationTemplateContainerID$StepNextButton\" value=\"Next\" id=\"MyWizard_StepNavigationTemplateContainerID_StepNextButton\" /></td>\n\t</tr>\n</table>Step";
renderedHtml = HtmlDiff.GetControlFromPageHtml (result);
Assert.AreEqual (origHtml, renderedHtml, "#A2");
Assert.AreEqual (origHtml.Replace ("\r", ""), renderedHtml.Replace ("\r", ""), "#A2");
}
[Test]

View File

@@ -547,7 +547,7 @@ namespace MonoTests.System.Web {
KnownResponseHeader known;
Assert.LessOrEqual (1, f.KnownResponseHeaders.Count, "#B1");
AssertHelper.LessOrEqual (1, f.KnownResponseHeaders.Count, "#B1");
known = (KnownResponseHeader)f.KnownResponseHeaders ["Content-Type"];
Assert.AreEqual (HttpWorkerRequest.HeaderContentType, known.Index, "#B2");
@@ -571,7 +571,7 @@ namespace MonoTests.System.Web {
KnownResponseHeader known;
Assert.LessOrEqual (1, f.KnownResponseHeaders.Count, "#B1");
AssertHelper.LessOrEqual (1, f.KnownResponseHeaders.Count, "#B1");
known = (KnownResponseHeader)f.KnownResponseHeaders ["Content-Type"];
Assert.AreEqual (HttpWorkerRequest.HeaderContentType, known.Index, "#B2");

View File

@@ -55,7 +55,6 @@ namespace MonoTests.System.Web
[Test]
[Category ("NunitWeb")]
[Ignore ("Pending fix for bug 351878")]
[Explicit]
public void UnloadAppDomain100Times ()
{
for (int i = 0; i < 100; i++)

View File

@@ -148,7 +148,7 @@ namespace MonoTests.System.Web
provider.DoAddNode (node, rootNode);
Assert.IsNotNull (provider.CallTrace, "#A1");
Assert.Greater (provider.CallTrace.Length, 1, "#A1-1");
AssertHelper.Greater (provider.CallTrace.Length, 1, "#A1-1");
Assert.AreEqual (provider.CallTrace[0].Name, "BuildSiteMap", "#A1-2");
}
@@ -247,7 +247,7 @@ namespace MonoTests.System.Web
Assert.IsNotNull (provider.RootNode, "#A1");
Assert.AreEqual (provider.RootNode.Provider, provider, "#A2");
Assert.IsNotNull (provider.CallTrace, "#A3");
Assert.Greater (provider.CallTrace.Length, 1, "#A3-1");
AssertHelper.Greater (provider.CallTrace.Length, 1, "#A3-1");
Assert.AreEqual ("BuildSiteMap", provider.CallTrace[0].Name, "#A3-2");
Assert.AreEqual ("get_RootNode", provider.CallTrace[1].Name, "#A3-3");
}