// (c) 2010-2011 fantasticswallow (@f_swallow) <http://twitter.com/f_swallow>
// (c) 2011 Egtra (@egtra) <http://dev.activebasic.com/egtra/>
// All rights reserved.
-//
+//
// This file is part of OpenTween.
-//
+//
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 3 of the License, or (at your option)
// any later version.
-//
+//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-// for more details.
-//
+// for more details.
+//
// You should have received a copy of the GNU General Public License along
// with this program. If not, see <http://www.gnu.org/licenses/>, or write to
// the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
// Boston, MA 02110-1301, USA.
+#nullable enable
+#pragma warning disable SA1310
+
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Text;
using System.Runtime.InteropServices;
-using System.Threading;
-using System.Text.RegularExpressions;
using System.Runtime.InteropServices.ComTypes;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading;
using System.Windows.Forms;
namespace OpenTween
{
#region "WebBrowserAPI"
- internal class WebBrowserAPI
+ internal static class WebBrowserAPI
{
public static int INET_E_DEFAULT_ACTION = unchecked((int)0x800C0011);
public static int URLACTION_SCRIPT_MAX = 0x15FF;
public static int URLACTION_HTML_MIN = 0x1600;
- public static int URLACTION_HTML_SUBMIT_FORMS = 0x1601; // aggregate next two
- public static int URLACTION_HTML_SUBMIT_FORMS_FROM = 0x1602; //
- public static int URLACTION_HTML_SUBMIT_FORMS_TO = 0x1603; //
+ public static int URLACTION_HTML_SUBMIT_FORMS = 0x1601; // aggregate next two
+ public static int URLACTION_HTML_SUBMIT_FORMS_FROM = 0x1602;
+ public static int URLACTION_HTML_SUBMIT_FORMS_TO = 0x1603;
public static int URLACTION_HTML_FONT_DOWNLOAD = 0x1604;
- public static int URLACTION_HTML_JAVA_RUN = 0x1605; // derive from Java custom policy
+ public static int URLACTION_HTML_JAVA_RUN = 0x1605; // derive from Java custom policy
public static int URLACTION_HTML_USERDATA_SAVE = 0x1606;
public static int URLACTION_HTML_SUBFRAME_NAVIGATE = 0x1607;
public static int URLACTION_HTML_META_REFRESH = 0x1608;
public static Guid SID_SProfferService = new Guid("cb728b20-f786-11ce-92ad-00aa00a74cd0");
public static Guid IID_IInternetSecurityManager = new Guid("79eac9ee-baf9-11ce-8c82-00aa004ba90b");
- [ComImport,
- Guid("6d5140c1-7436-11ce-8034-00aa006009fa"),
- InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
+ [ComImport]
+ [Guid("6d5140c1-7436-11ce-8034-00aa006009fa")]
+ [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IServiceProvider
{
[PreserveSig]
int QueryService([In] ref Guid guidService, [In] ref Guid riid, out IntPtr ppvObject);
}
- [ComImport,
- Guid("cb728b20-f786-11ce-92ad-00aa00a74cd0"),
- InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
+ [ComImport]
+ [Guid("cb728b20-f786-11ce-92ad-00aa00a74cd0")]
+ [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IProfferService
{
[PreserveSig]
int RevokeService([In] int cookie);
}
- [ComImport,
- Guid("79eac9ed-baf9-11ce-8c82-00aa004ba90b"),
- InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
+ [ComImport]
+ [Guid("79eac9ed-baf9-11ce-8c82-00aa004ba90b")]
+ [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IInternetSecurityMgrSite
{
[PreserveSig]
int EnableModeless([In, MarshalAs(UnmanagedType.Bool)] bool fEnable);
}
- [ComImport,
- Guid("79eac9ee-baf9-11ce-8c82-00aa004ba90b"),
- InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
+ [ComImport]
+ [Guid("79eac9ee-baf9-11ce-8c82-00aa004ba90b")]
+ [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IInternetSecurityManager
{
[PreserveSig]
int SetSecuritySite([In] IInternetSecurityMgrSite pSite);
[PreserveSig]
- int GetSecuritySite(out IInternetSecurityMgrSite pSite);
+ int GetSecuritySite(out IInternetSecurityMgrSite? pSite);
[PreserveSig]
int MapUrlToZone([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl, out int pdwZone, int dwFlags);
[PreserveSig]
- int GetSecurityId([MarshalAs(UnmanagedType.LPWStr)] string pwszUrl, [MarshalAs(UnmanagedType.LPArray)] byte[] pbSecurityId, ref UInt32 pcbSecurityId, UInt32 dwReserved);
+ int GetSecurityId([MarshalAs(UnmanagedType.LPWStr)] string pwszUrl, [MarshalAs(UnmanagedType.LPArray)] byte[] pbSecurityId, ref uint pcbSecurityId, uint dwReserved);
[PreserveSig]
int ProcessUrlAction([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl, int dwAction, out byte pPolicy, int cbPolicy, byte pContext, int cbContext, int dwFlags, int dwReserved);
int SetZoneMapping(int dwZone, [In, MarshalAs(UnmanagedType.LPWStr)] string lpszPattern, int dwFlags);
[PreserveSig]
- int GetZoneMappings(int dwZone, ref IEnumString ppenumstring, int dwFlags);
+ int GetZoneMappings(int dwZone, ref IEnumString? ppenumstring, int dwFlags);
}
}
#endregion
public class InternetSecurityManager : WebBrowserAPI.IServiceProvider, WebBrowserAPI.IInternetSecurityManager
{
#region "HRESULT"
- private class HRESULT
+ private enum HRESULT
{
- public static int S_OK = 0x0;
- public static int S_FALSE = 0x1;
- public static int E_NOTIMPL = unchecked((int)0x80004001);
- public static int E_NOINTERFACE = unchecked((int)0x80004002);
+ S_OK = 0x0,
+ S_FALSE = 0x1,
+ E_NOTIMPL = unchecked((int)0x80004001),
+ E_NOINTERFACE = unchecked((int)0x80004002),
}
#endregion
- [Flags] public enum POLICY : int
+ [Flags]
+ public enum POLICY
{
ALLOW_ACTIVEX = 0x1,
ALLOW_SCRIPT = 0x2,
}
- private object ocx = new object();
- private WebBrowserAPI.IServiceProvider ocxServiceProvider;
- private IntPtr profferServicePtr = new IntPtr();
- private WebBrowserAPI.IProfferService profferService;
+ private readonly object ocx = new object();
+ private readonly WebBrowserAPI.IServiceProvider ocxServiceProvider;
+ private readonly IntPtr profferServicePtr = new IntPtr();
+ private readonly WebBrowserAPI.IProfferService profferService = null!;
- private POLICY _Policy = 0; // DefaultですべてDisAllow
+ public POLICY SecurityPolicy { get; set; } = 0;
- public InternetSecurityManager(WebBrowser _WebBrowser)
+ public InternetSecurityManager(WebBrowser webBrowser)
{
// ActiveXコントロール取得
- _WebBrowser.DocumentText = "about:blank"; //ActiveXを初期化する
- int hresult = 0;
+ webBrowser.Url = new Uri("about:blank"); // ActiveXを初期化する
do
{
Thread.Sleep(100);
Application.DoEvents();
- } while (_WebBrowser.ReadyState != WebBrowserReadyState.Complete);
+ }
+ while (webBrowser.ReadyState != WebBrowserReadyState.Complete);
- ocx = _WebBrowser.ActiveXInstance;
+ this.ocx = webBrowser.ActiveXInstance;
// IServiceProvider.QueryService() を使って IProfferService を取得
- ocxServiceProvider = (WebBrowserAPI.IServiceProvider)ocx;
+ this.ocxServiceProvider = (WebBrowserAPI.IServiceProvider)this.ocx;
try
{
- hresult = ocxServiceProvider.QueryService(
- ref WebBrowserAPI.SID_SProfferService,
- ref WebBrowserAPI.IID_IProfferService, out profferServicePtr);
+ this.ocxServiceProvider.QueryService(
+ ref WebBrowserAPI.SID_SProfferService,
+ ref WebBrowserAPI.IID_IProfferService,
+ out this.profferServicePtr);
}
catch (SEHException ex)
{
}
- profferService = (WebBrowserAPI.IProfferService)Marshal.GetObjectForIUnknown(profferServicePtr);
+ this.profferService = (WebBrowserAPI.IProfferService)Marshal.GetObjectForIUnknown(this.profferServicePtr);
// IProfferService.ProfferService() を使って
// 自分を IInternetSecurityManager として提供
try
{
- int cookie = 0;
- hresult = profferService.ProfferService(
- ref WebBrowserAPI.IID_IInternetSecurityManager, this, out cookie);
+ this.profferService.ProfferService(
+ ref WebBrowserAPI.IID_IInternetSecurityManager, this, out var cookie);
}
catch (SEHException ex)
{
}
}
- int WebBrowserAPI.IServiceProvider.QueryService(ref Guid guidService,
- ref Guid riid, out IntPtr ppvObject)
+ int WebBrowserAPI.IServiceProvider.QueryService(
+ ref Guid guidService,
+ ref Guid riid,
+ out IntPtr ppvObject)
{
ppvObject = IntPtr.Zero;
var punk = Marshal.GetIUnknownForObject(this);
return Marshal.QueryInterface(punk, ref riid, out ppvObject);
}
- return HRESULT.E_NOINTERFACE;
+ return (int)HRESULT.E_NOINTERFACE;
}
int WebBrowserAPI.IInternetSecurityManager.GetSecurityId(string pwszUrl, byte[] pbSecurityId, ref uint pcbSecurityId, uint dwReserved)
- {
- return WebBrowserAPI.INET_E_DEFAULT_ACTION;
- }
+ => WebBrowserAPI.INET_E_DEFAULT_ACTION;
- int WebBrowserAPI.IInternetSecurityManager.GetSecuritySite(out WebBrowserAPI.IInternetSecurityMgrSite pSite)
+ int WebBrowserAPI.IInternetSecurityManager.GetSecuritySite(out WebBrowserAPI.IInternetSecurityMgrSite? pSite)
{
pSite = null;
return WebBrowserAPI.INET_E_DEFAULT_ACTION;
}
- int WebBrowserAPI.IInternetSecurityManager.GetZoneMappings(int dwZone, ref IEnumString ppenumstring, int dwFlags)
+ int WebBrowserAPI.IInternetSecurityManager.GetZoneMappings(int dwZone, ref IEnumString? ppenumstring, int dwFlags)
{
ppenumstring = null;
return WebBrowserAPI.INET_E_DEFAULT_ACTION;
try
{
var urlStr = MyCommon.IDNEncode(pwszUrl);
- if (object.ReferenceEquals(urlStr, null)) return WebBrowserAPI.URLPOLICY_DISALLOW;
+ if (urlStr == null) return WebBrowserAPI.URLPOLICY_DISALLOW;
var url = new Uri(urlStr);
if (url.Scheme == "data")
{
return WebBrowserAPI.INET_E_DEFAULT_ACTION;
}
- const byte URLPOLICY_ALLOW = 0;
+ private const byte URLPOLICY_ALLOW = 0;
int WebBrowserAPI.IInternetSecurityManager.ProcessUrlAction(string pwszUrl, int dwAction, out byte pPolicy, int cbPolicy, byte pContext, int cbContext, int dwFlags, int dwReserved)
{
pPolicy = URLPOLICY_ALLOW;
- //スクリプト実行状態かを検査しポリシー設定
+ // スクリプト実行状態かを検査しポリシー設定
if (WebBrowserAPI.URLACTION_SCRIPT_MIN <= dwAction &
dwAction <= WebBrowserAPI.URLACTION_SCRIPT_MAX)
{
// スクリプト実行状態
- if ((_Policy & POLICY.ALLOW_SCRIPT) == POLICY.ALLOW_SCRIPT)
+ if ((this.SecurityPolicy & POLICY.ALLOW_SCRIPT) == POLICY.ALLOW_SCRIPT)
{
pPolicy = WebBrowserAPI.URLPOLICY_ALLOW;
}
pPolicy = WebBrowserAPI.URLPOLICY_DISALLOW;
}
if (Regex.IsMatch(pwszUrl, @"^https?://((api\.)?twitter\.com/|([a-zA-Z0-9]+\.)?twimg\.com/)")) pPolicy = WebBrowserAPI.URLPOLICY_ALLOW;
- return HRESULT.S_OK;
+ return (int)HRESULT.S_OK;
}
// ActiveX実行状態かを検査しポリシー設定
if (WebBrowserAPI.URLACTION_ACTIVEX_MIN <= dwAction &
dwAction <= WebBrowserAPI.URLACTION_ACTIVEX_MAX)
{
// ActiveX実行状態
- if ((_Policy & POLICY.ALLOW_ACTIVEX) == POLICY.ALLOW_ACTIVEX)
+ if ((this.SecurityPolicy & POLICY.ALLOW_ACTIVEX) == POLICY.ALLOW_ACTIVEX)
{
pPolicy = WebBrowserAPI.URLPOLICY_ALLOW;
}
{
pPolicy = WebBrowserAPI.URLPOLICY_DISALLOW;
}
- return HRESULT.S_OK;
+ return (int)HRESULT.S_OK;
}
- //他のものについてはデフォルト処理
+ // 他のものについてはデフォルト処理
return WebBrowserAPI.INET_E_DEFAULT_ACTION;
}
int WebBrowserAPI.IInternetSecurityManager.QueryCustomPolicy(string pwszUrl, ref Guid guidKey, byte ppPolicy, int pcbPolicy, byte pContext, int cbContext, int dwReserved)
- {
- return WebBrowserAPI.INET_E_DEFAULT_ACTION;
- }
+ => WebBrowserAPI.INET_E_DEFAULT_ACTION;
int WebBrowserAPI.IInternetSecurityManager.SetSecuritySite(WebBrowserAPI.IInternetSecurityMgrSite pSite)
- {
- return WebBrowserAPI.INET_E_DEFAULT_ACTION;
- }
+ => WebBrowserAPI.INET_E_DEFAULT_ACTION;
int WebBrowserAPI.IInternetSecurityManager.SetZoneMapping(int dwZone, string lpszPattern, int dwFlags)
- {
- return WebBrowserAPI.INET_E_DEFAULT_ACTION;
- }
-
-
- public POLICY SecurityPolicy
- {
- get
- {
- return _Policy;
- }
- set
- {
- _Policy = value;
- }
- }
+ => WebBrowserAPI.INET_E_DEFAULT_ACTION;
}
}