OSDN Git Service

ブロックの括弧を独立した行に書く (SA1500, SA1501, SA1502)
[opentween/open-tween.git] / OpenTween / WebBrowserController.cs
index 6b2d523..2e25b73 100644 (file)
@@ -6,38 +6,41 @@
 //           (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);
 
@@ -81,11 +84,11 @@ namespace OpenTween
         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;
@@ -197,18 +200,18 @@ namespace OpenTween
         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]
@@ -218,9 +221,9 @@ namespace OpenTween
             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]
@@ -230,22 +233,22 @@ namespace OpenTween
             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);
@@ -257,7 +260,7 @@ namespace OpenTween
             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
@@ -265,50 +268,52 @@ namespace OpenTween
     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)
             {
@@ -322,15 +327,14 @@ namespace OpenTween
             }
 
 
-            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)
             {
@@ -344,8 +348,10 @@ namespace OpenTween
             }
         }
 
-        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;
@@ -357,21 +363,19 @@ namespace OpenTween
                 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;
@@ -384,7 +388,7 @@ namespace OpenTween
             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")
                 {
@@ -398,17 +402,17 @@ namespace OpenTween
             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;
                 }
@@ -417,14 +421,14 @@ namespace OpenTween
                     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;
                 }
@@ -432,38 +436,19 @@ namespace OpenTween
                 {
                     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;
     }
 }