From 13fd6bd6e11a6ca5d2d385e4b0ab8b17cc761b2d Mon Sep 17 00:00:00 2001 From: Clint Rutkas Date: Wed, 16 Sep 2020 12:24:07 -0700 Subject: [PATCH] [FxCop] Svg preview handler (#6647) * Adjusting namespace * Getting FxCop working e2e --- installer/PowerToysSetup/Product.wxs | 6 +- .../SvgPreviewHandler/Resource.Designer.cs | 4 +- .../SvgPreviewHandler/SvgPreviewControl.cs | 76 +++++++++---------- .../SvgPreviewHandler/SvgPreviewHandler.cs | 41 ++++++++-- .../SvgPreviewHandler.csproj | 8 +- .../Telemetry/Events/SvgFileHandlerLoaded.cs | 2 +- .../Telemetry/Events/SvgFilePreviewError.cs | 2 +- .../Telemetry/Events/SvgFilePreviewed.cs | 2 +- .../Utilities/SvgPreviewHandlerHelper.cs | 9 ++- .../SvgPreviewControlTests.cs | 3 +- .../SvgPreviewHandlerHelperTests.cs | 2 +- .../common/PreviewHandlerCommon.csproj | 1 - 12 files changed, 95 insertions(+), 61 deletions(-) rename src/modules/previewpane/{common => SvgPreviewHandler}/Utilities/SvgPreviewHandlerHelper.cs (88%) diff --git a/installer/PowerToysSetup/Product.wxs b/installer/PowerToysSetup/Product.wxs index 3187031e1..e581589a7 100644 --- a/installer/PowerToysSetup/Product.wxs +++ b/installer/PowerToysSetup/Product.wxs @@ -421,18 +421,18 @@ - + - + - + diff --git a/src/modules/previewpane/SvgPreviewHandler/Resource.Designer.cs b/src/modules/previewpane/SvgPreviewHandler/Resource.Designer.cs index 7f5e92d3f..186e31e9b 100644 --- a/src/modules/previewpane/SvgPreviewHandler/Resource.Designer.cs +++ b/src/modules/previewpane/SvgPreviewHandler/Resource.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace SvgPreviewHandler { +namespace Microsoft.PowerToys.PreviewHandler.Svg { using System; @@ -39,7 +39,7 @@ namespace SvgPreviewHandler { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SvgPreviewHandler.Resource", typeof(Resource).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.PowerToys.PreviewHandler.Svg.Resource", typeof(Resource).Assembly); resourceMan = temp; } return resourceMan; diff --git a/src/modules/previewpane/SvgPreviewHandler/SvgPreviewControl.cs b/src/modules/previewpane/SvgPreviewHandler/SvgPreviewControl.cs index e71af3561..9a78ae7a9 100644 --- a/src/modules/previewpane/SvgPreviewHandler/SvgPreviewControl.cs +++ b/src/modules/previewpane/SvgPreviewHandler/SvgPreviewControl.cs @@ -3,22 +3,18 @@ // See the LICENSE file in the project root for more information. using System; -using System.Collections.Generic; using System.Drawing; using System.IO; -using System.Linq; using System.Runtime.InteropServices.ComTypes; -using System.Runtime.Versioning; using System.Windows.Forms; -using System.Xml; -using System.Xml.Linq; using Common; using Common.Utilities; +using Microsoft.PowerToys.PreviewHandler.Svg.Telemetry.Events; +using Microsoft.PowerToys.PreviewHandler.Svg.Utilities; using Microsoft.PowerToys.Telemetry; using PreviewHandlerCommon; -using SvgPreviewHandler.Telemetry.Events; -namespace SvgPreviewHandler +namespace Microsoft.PowerToys.PreviewHandler.Svg { /// /// Implementation of Control for Svg Preview Handler. @@ -28,17 +24,17 @@ namespace SvgPreviewHandler /// /// Extended Browser Control to display Svg. /// - private WebBrowserExt browser; + private WebBrowserExt _browser; /// /// Text box to display the information about blocked elements from Svg. /// - private RichTextBox textBox; + private RichTextBox _textBox; /// /// Represent if an text box info bar is added for showing message. /// - private bool infoBarAdded = false; + private bool _infoBarAdded; /// /// Start the preview on the Control. @@ -46,11 +42,11 @@ namespace SvgPreviewHandler /// Stream reference to access source file. public override void DoPreview(T dataSource) { - this.InvokeOnControlThread(() => + InvokeOnControlThread(() => { try { - this.infoBarAdded = false; + _infoBarAdded = false; string svgData = null; using (var stream = new StreamWrapper(dataSource as IStream)) { @@ -63,21 +59,23 @@ namespace SvgPreviewHandler // Add a info bar on top of the Preview if any blocked element is present. if (SvgPreviewHandlerHelper.CheckBlockedElements(svgData)) { - this.infoBarAdded = true; - this.AddTextBoxControl(Resource.BlockedElementInfoText); + _infoBarAdded = true; + AddTextBoxControl(Resource.BlockedElementInfoText); } - this.AddBrowserControl(svgData); - this.Resize += this.FormResized; + AddBrowserControl(svgData); + Resize += FormResized; base.DoPreview(dataSource); PowerToysTelemetry.Log.WriteEvent(new SvgFilePreviewed()); } +#pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) +#pragma warning restore CA1031 // Do not catch general exception types { PowerToysTelemetry.Log.WriteEvent(new SvgFilePreviewError { Message = ex.Message }); - this.Controls.Clear(); - this.infoBarAdded = true; - this.AddTextBoxControl(Resource.SvgNotPreviewedError); + Controls.Clear(); + _infoBarAdded = true; + AddTextBoxControl(Resource.SvgNotPreviewedError); base.DoPreview(dataSource); } }); @@ -101,9 +99,9 @@ namespace SvgPreviewHandler /// Provides data for the resize event. private void FormResized(object sender, EventArgs e) { - if (this.infoBarAdded) + if (_infoBarAdded) { - this.textBox.Width = this.Width; + _textBox.Width = Width; } } @@ -113,14 +111,14 @@ namespace SvgPreviewHandler /// Svg to display on Browser Control. private void AddBrowserControl(string svgData) { - this.browser = new WebBrowserExt(); - this.browser.DocumentText = svgData; - this.browser.Dock = DockStyle.Fill; - this.browser.IsWebBrowserContextMenuEnabled = false; - this.browser.ScriptErrorsSuppressed = true; - this.browser.ScrollBarsEnabled = true; - this.browser.AllowNavigation = false; - this.Controls.Add(this.browser); + _browser = new WebBrowserExt(); + _browser.DocumentText = svgData; + _browser.Dock = DockStyle.Fill; + _browser.IsWebBrowserContextMenuEnabled = false; + _browser.ScriptErrorsSuppressed = true; + _browser.ScrollBarsEnabled = true; + _browser.AllowNavigation = false; + Controls.Add(_browser); } /// @@ -129,16 +127,16 @@ namespace SvgPreviewHandler /// Message to be displayed in textbox. private void AddTextBoxControl(string message) { - this.textBox = new RichTextBox(); - this.textBox.Text = message; - this.textBox.BackColor = Color.LightYellow; - this.textBox.Multiline = true; - this.textBox.Dock = DockStyle.Top; - this.textBox.ReadOnly = true; - this.textBox.ContentsResized += this.RTBContentsResized; - this.textBox.ScrollBars = RichTextBoxScrollBars.None; - this.textBox.BorderStyle = BorderStyle.None; - this.Controls.Add(this.textBox); + _textBox = new RichTextBox(); + _textBox.Text = message; + _textBox.BackColor = Color.LightYellow; + _textBox.Multiline = true; + _textBox.Dock = DockStyle.Top; + _textBox.ReadOnly = true; + _textBox.ContentsResized += RTBContentsResized; + _textBox.ScrollBars = RichTextBoxScrollBars.None; + _textBox.BorderStyle = BorderStyle.None; + Controls.Add(_textBox); } } } diff --git a/src/modules/previewpane/SvgPreviewHandler/SvgPreviewHandler.cs b/src/modules/previewpane/SvgPreviewHandler/SvgPreviewHandler.cs index 8b19b046f..08d6519d7 100644 --- a/src/modules/previewpane/SvgPreviewHandler/SvgPreviewHandler.cs +++ b/src/modules/previewpane/SvgPreviewHandler/SvgPreviewHandler.cs @@ -7,7 +7,7 @@ using System.Runtime.InteropServices; using Common; using Microsoft.PowerToys.Telemetry; -namespace SvgPreviewHandler +namespace Microsoft.PowerToys.PreviewHandler.Svg { /// /// Extends for Svg Preview Handler. @@ -15,22 +15,51 @@ namespace SvgPreviewHandler [Guid("ddee2b8a-6807-48a6-bb20-2338174ff779")] [ClassInterface(ClassInterfaceType.None)] [ComVisible(true)] - public class SvgPreviewHandler : StreamBasedPreviewHandler + public class SvgPreviewHandler : StreamBasedPreviewHandler, IDisposable { - private SvgPreviewControl svgPreviewControl; + private SvgPreviewControl _svgPreviewControl; + private bool disposedValue; /// public override void DoPreview() { - this.svgPreviewControl.DoPreview(this.Stream); + _svgPreviewControl.DoPreview(Stream); } /// protected override IPreviewHandlerControl CreatePreviewHandlerControl() { PowerToysTelemetry.Log.WriteEvent(new Telemetry.Events.SvgFileHandlerLoaded()); - this.svgPreviewControl = new SvgPreviewControl(); - return this.svgPreviewControl; + _svgPreviewControl = new SvgPreviewControl(); + + return _svgPreviewControl; + } + + /// + /// Disposes objects + /// + /// Is Disposing + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + _svgPreviewControl.Dispose(); + } + + // TODO: free unmanaged resources (unmanaged objects) and override finalizer + // TODO: set large fields to null + disposedValue = true; + } + } + + /// + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); } } } diff --git a/src/modules/previewpane/SvgPreviewHandler/SvgPreviewHandler.csproj b/src/modules/previewpane/SvgPreviewHandler/SvgPreviewHandler.csproj index 02f80b13c..4d9863b0d 100644 --- a/src/modules/previewpane/SvgPreviewHandler/SvgPreviewHandler.csproj +++ b/src/modules/previewpane/SvgPreviewHandler/SvgPreviewHandler.csproj @@ -44,7 +44,7 @@ {DA425894-6E13-404F-8DCB-78584EC0557A} Library Properties - SvgPreviewHandler + Microsoft.PowerToys.PreviewHandler.Svg SvgPreviewHandler v4.7.2 512 @@ -115,6 +115,7 @@ + @@ -132,6 +133,11 @@ + + 3.3.0 + runtime; build; native; contentfiles; analyzers; buildtransitive + all + 1.1.118 runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/modules/previewpane/SvgPreviewHandler/Telemetry/Events/SvgFileHandlerLoaded.cs b/src/modules/previewpane/SvgPreviewHandler/Telemetry/Events/SvgFileHandlerLoaded.cs index 6a3801ba5..1a7309502 100644 --- a/src/modules/previewpane/SvgPreviewHandler/Telemetry/Events/SvgFileHandlerLoaded.cs +++ b/src/modules/previewpane/SvgPreviewHandler/Telemetry/Events/SvgFileHandlerLoaded.cs @@ -6,7 +6,7 @@ using System.Diagnostics.Tracing; using Microsoft.PowerToys.Telemetry; using Microsoft.PowerToys.Telemetry.Events; -namespace SvgPreviewHandler.Telemetry.Events +namespace Microsoft.PowerToys.PreviewHandler.Svg.Telemetry.Events { /// /// A telemetry event to be raised when a svg file has been viewed in the preview pane. diff --git a/src/modules/previewpane/SvgPreviewHandler/Telemetry/Events/SvgFilePreviewError.cs b/src/modules/previewpane/SvgPreviewHandler/Telemetry/Events/SvgFilePreviewError.cs index 1cc5822db..906bd4abb 100644 --- a/src/modules/previewpane/SvgPreviewHandler/Telemetry/Events/SvgFilePreviewError.cs +++ b/src/modules/previewpane/SvgPreviewHandler/Telemetry/Events/SvgFilePreviewError.cs @@ -6,7 +6,7 @@ using System.Diagnostics.Tracing; using Microsoft.PowerToys.Telemetry; using Microsoft.PowerToys.Telemetry.Events; -namespace SvgPreviewHandler.Telemetry.Events +namespace Microsoft.PowerToys.PreviewHandler.Svg.Telemetry.Events { /// /// A telemetry event to be raised when an error has occurred in the preview pane. diff --git a/src/modules/previewpane/SvgPreviewHandler/Telemetry/Events/SvgFilePreviewed.cs b/src/modules/previewpane/SvgPreviewHandler/Telemetry/Events/SvgFilePreviewed.cs index ca369f9b1..3ac159b54 100644 --- a/src/modules/previewpane/SvgPreviewHandler/Telemetry/Events/SvgFilePreviewed.cs +++ b/src/modules/previewpane/SvgPreviewHandler/Telemetry/Events/SvgFilePreviewed.cs @@ -6,7 +6,7 @@ using System.Diagnostics.Tracing; using Microsoft.PowerToys.Telemetry; using Microsoft.PowerToys.Telemetry.Events; -namespace SvgPreviewHandler.Telemetry.Events +namespace Microsoft.PowerToys.PreviewHandler.Svg.Telemetry.Events { /// /// A telemetry event to be raised when a svg file has been viewed in the preview pane. diff --git a/src/modules/previewpane/common/Utilities/SvgPreviewHandlerHelper.cs b/src/modules/previewpane/SvgPreviewHandler/Utilities/SvgPreviewHandlerHelper.cs similarity index 88% rename from src/modules/previewpane/common/Utilities/SvgPreviewHandlerHelper.cs rename to src/modules/previewpane/SvgPreviewHandler/Utilities/SvgPreviewHandlerHelper.cs index ea5e75b05..4ac672ebb 100644 --- a/src/modules/previewpane/common/Utilities/SvgPreviewHandlerHelper.cs +++ b/src/modules/previewpane/SvgPreviewHandler/Utilities/SvgPreviewHandlerHelper.cs @@ -4,15 +4,16 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Xml.Linq; -namespace Common.Utilities +namespace Microsoft.PowerToys.PreviewHandler.Svg.Utilities { /// /// Helper utilities for Svg Preview Handler. /// - public class SvgPreviewHandlerHelper + public static class SvgPreviewHandlerHelper { /// /// Dictionary of elements in lower case that are blocked from Svg for preview pane. @@ -46,7 +47,7 @@ namespace Common.Utilities var elements = doc.Descendants().ToList(); foreach (XElement element in elements) { - var elementName = element?.Name?.LocalName?.ToLower(); + var elementName = element?.Name?.LocalName?.ToLower(CultureInfo.CurrentCulture); if (elementName != null && blockedElementsName.ContainsKey(elementName)) { foundBlockedElement = true; @@ -56,7 +57,9 @@ namespace Common.Utilities } } } +#pragma warning disable CA1031 // Do not catch general exception types catch (Exception) +#pragma warning restore CA1031 // Do not catch general exception types { } diff --git a/src/modules/previewpane/UnitTests-SvgPreviewHandler/SvgPreviewControlTests.cs b/src/modules/previewpane/UnitTests-SvgPreviewHandler/SvgPreviewControlTests.cs index 375b7f140..a5d10fce7 100644 --- a/src/modules/previewpane/UnitTests-SvgPreviewHandler/SvgPreviewControlTests.cs +++ b/src/modules/previewpane/UnitTests-SvgPreviewHandler/SvgPreviewControlTests.cs @@ -4,15 +4,14 @@ using System; using System.Drawing; -using System.IO; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; using System.Text; using System.Windows.Forms; +using Microsoft.PowerToys.PreviewHandler.Svg; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using PreviewHandlerCommon; -using SvgPreviewHandler; namespace SvgPreviewHandlerUnitTests { diff --git a/src/modules/previewpane/UnitTests-SvgPreviewHandler/SvgPreviewHandlerHelperTests.cs b/src/modules/previewpane/UnitTests-SvgPreviewHandler/SvgPreviewHandlerHelperTests.cs index b4756fad8..b1d5328a4 100644 --- a/src/modules/previewpane/UnitTests-SvgPreviewHandler/SvgPreviewHandlerHelperTests.cs +++ b/src/modules/previewpane/UnitTests-SvgPreviewHandler/SvgPreviewHandlerHelperTests.cs @@ -3,7 +3,7 @@ // See the LICENSE file in the project root for more information. using System.Text; -using Common.Utilities; +using Microsoft.PowerToys.PreviewHandler.Svg.Utilities; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace SvgPreviewHandlerUnitTests diff --git a/src/modules/previewpane/common/PreviewHandlerCommon.csproj b/src/modules/previewpane/common/PreviewHandlerCommon.csproj index 11a094814..f8adb7a9a 100644 --- a/src/modules/previewpane/common/PreviewHandlerCommon.csproj +++ b/src/modules/previewpane/common/PreviewHandlerCommon.csproj @@ -130,7 +130,6 @@ -