// Jackson Harper (jackson@ximian.com)
//
// (C) 2002 2003, Patrik Torstensson
-// Copyright (C) 2003,2005 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2003-2009 Novell, Inc (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
+using System.ComponentModel;
using System.Collections;
using System.Security.Permissions;
using System.Web.UI;
-namespace System.Web {
-
+namespace System.Web
+{
// CAS - no InheritanceDemand here as the class is sealed
[AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
- public sealed class TraceContext {
+ public sealed class TraceContext
+ {
+ static readonly object traceFinishedEvent = new object ();
+
HttpContext _Context;
+ TraceManager _traceManager;
bool _Enabled;
- TraceMode _Mode;
+ TraceMode _Mode = TraceMode.Default;
TraceData data;
bool data_saved;
bool _haveTrace;
Hashtable view_states;
- Hashtable sizes;
+ Hashtable control_states;
+ Hashtable sizes;
+ EventHandlerList events = new EventHandlerList ();
+
+ public event TraceContextEventHandler TraceFinished {
+ add { events.AddHandler (traceFinishedEvent, value); }
+ remove { events.AddHandler (traceFinishedEvent, value); }
+ }
public TraceContext (HttpContext Context)
{
_Context = Context;
- _Mode = TraceMode.SortByTime;
}
internal bool HaveTrace {
public bool IsEnabled {
get {
if (!_haveTrace)
- return HttpRuntime.TraceManager.Enabled;
+ return TraceManager.Enabled;
return _Enabled;
}
}
}
+ TraceManager TraceManager
+ {
+ get
+ {
+ if (_traceManager == null)
+ _traceManager = HttpRuntime.TraceManager;
+
+ return _traceManager;
+ }
+ }
+
public TraceMode TraceMode {
get {
- return _Mode;
+ return (_Mode == TraceMode.Default) ? TraceManager.TraceMode : _Mode;
}
set {
_Mode = value;
data = new TraceData ();
data.Write (category, msg, error, Warning);
}
-#if NET_2_0
- [MonoTODO]
- public event TraceContextEventHandler TraceFinished;
-#endif
+
internal void SaveData ()
{
if (data == null)
data = new TraceData ();
+
+ data.TraceMode = _Context.Trace.TraceMode;
+
SetRequestDetails ();
if (_Context.Handler is Page)
- data.AddControlTree ((Page) _Context.Handler, view_states, sizes);
+ data.AddControlTree ((Page) _Context.Handler, view_states, control_states, sizes);
AddCookies ();
AddHeaders ();
AddServerVars ();
- HttpRuntime.TraceManager.AddTraceData (data);
+ TraceManager.AddTraceData (data);
data_saved = true;
}
view_states [ctrl] = vs;
}
+ internal void SaveControlState (Control ctrl, object vs) {
+ if (control_states == null)
+ control_states = new Hashtable ();
+
+ control_states [ctrl] = vs;
+ }
+
internal void SaveSize (Control ctrl, int size)
{
if (sizes == null)