public override IPermission Union(IPermission target) {
// Pattern suggested by Security engine
if (target==null) {
return this.Copy();
}
WebPermission other = target as WebPermission;
if(other == null) {
throw new ArgumentException(SR.GetString(SR.net_perm_target), "target");
}
if (m_noRestriction || other.m_noRestriction)
{
return new WebPermission(true);
}
WebPermission result = new WebPermission();
if (m_UnrestrictedConnect || other.m_UnrestrictedConnect)
{
result.m_UnrestrictedConnect = true;
}
else
{
result.m_connectList = (ArrayList) other.m_connectList.Clone();
for (int i = 0; i < m_connectList.Count; i++) {
DelayedRegex uriPattern = m_connectList[i] as DelayedRegex;
if(uriPattern == null)
if (m_connectList[i] is string)
result.AddPermission(NetworkAccess.Connect, (string)m_connectList[i]);
else
result.AddPermission(NetworkAccess.Connect, (Uri)m_connectList[i]);
else
result.AddAsPattern(NetworkAccess.Connect, uriPattern);
}
}
if (m_UnrestrictedAccept || other.m_UnrestrictedAccept)
{
result.m_UnrestrictedAccept = true;
}
else
{
result.m_acceptList = (ArrayList) other.m_acceptList.Clone();
for (int i = 0; i < m_acceptList.Count; i++) {
DelayedRegex uriPattern = m_acceptList[i] as DelayedRegex;
if(uriPattern == null)
if (m_acceptList[i] is string)
result.AddPermission(NetworkAccess.Accept, (string)m_acceptList[i]);
else
result.AddPermission(NetworkAccess.Accept, (Uri)m_acceptList[i]);
else
result.AddAsPattern(NetworkAccess.Accept, uriPattern);
}
}
return result;
}