I needed the ability to do a few extra things with a `WebBrowser` control on a .NET Windows Forms Form, and I found it needed some updates.

So, I made a few. I added some JavaScript manipulation, and a configuration class so that it can be tweaked a lot. I wanted to be able to add and execute arbitrary JavaScript, as well as change how it acts. (By default, it works in Internet Explorer 7 mode, which is dumb. So I figured I would implement all the Feature Control items as well as this change.)

Without further ado:

    /// <summary>
    /// Extends the <code>System.Windows.Forms.WebBrowser</code> and adds the IsClosing event, as well as some JavaScript manipulation. It also adds some configuration that can be used to customize the operation of the control.
    /// </summary>
    public class ExtendedWebBrowser : WebBrowser
    {
        private const int WM_PARENTNOTIFY = 528;
        private const int WM_DESTROY = 2;

        /// <summary>
        /// This event is called anytime the WebBrowser is set to destroy itself, including Javascript window.close() calls.
        /// </summary>
        public event EventHandler<EventArgs> IsClosing;

        /// <summary>
        /// Overrides the default <see cref="ExtendedWebBrowser.WndProc(Message)"/> method.
        /// </summary>
        /// <param name="m">The <code>System.Windows.Forms.Message</code> being sent to the control.</param>
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_PARENTNOTIFY)
            {
                if (!DesignMode && m.WParam.ToInt32() == WM_DESTROY)
                {
                    IsClosing(this, new EventArgs());
                }

                DefWndProc(ref m);
            }
            else
            {
                base.WndProc(ref m);
            }
        }

        /// <summary>
        /// Injects some JavaScript to the <see cref="ExtendedWebBrowser"/>.
        /// </summary>
        /// <param name="javaScript">The code to inject.</param>
        /// <param name="name">The name of the script.</param>
        public HtmlElement InjectScript(string javaScript, string name)
        {
            var head = Document.GetElementsByTagName("head")[0];
            var scriptElement = Document.CreateElement("script");

            scriptElement.Name = name;
            scriptElement.SetAttribute("text", javaScript);

            head.AppendChild(scriptElement);

            return scriptElement;
        }

        /// <summary>
        /// Executes a JavaScript method in the <see cref="ExtendedWebBrowser"/>.
        /// </summary>
        /// <param name="scriptName">The name of the method to invoke.</param>
        /// <param name="args">The arguments to pass to the method.</param>
        public void ExecuteScript(string scriptName, params object[] args)
        {
            Document.InvokeScript(scriptName, args);
        }

        /// <summary>
        /// Executes arbitrary JavaScript code.
        /// </summary>
        /// <param name="script">The code to invoke.</param>
        /// <remarks>
        /// This creates an element with the name <code>arbitrary-script</code> with a javascript method called <code>arbitraryScript</code>. If a method with this name is present in the document, this method may not have the desired effect. If an element with the aforementioned name is present, it will be altered.
        /// </remarks>
        public void ExecuteArbitraryJavaScript(string script)
        {
            var arbitraryScript = Document.GetElementById("arbitrary-script");

            if (arbitraryScript == null)
            {
                arbitraryScript = InjectScript("function arbitraryScript() { " + script + " }", "arbitrary-script");
            }
            else
            {
                arbitraryScript.SetAttribute("text", "function arbitraryScript() { " + script + " }");
            }

            ExecuteScript("arbitraryScript");

            arbitraryScript.SetAttribute("text", "");
        }
        
        private void SetDWordKey(string baseKey, string name, uint value)
        {
            using (var key = Registry.CurrentUser.CreateSubKey(baseKey, RegistryKeyPermissionCheck.ReadWriteSubTree))
            {
                key.SetValue(name, value, RegistryValueKind.DWord);
            }
        }

        /// <summary>
        /// Initializes the <see cref="ExtendedWebBrowser"/> with the provided configuration.
        /// </summary>
        /// <param name="config">The <see cref="ExtendedWebBrowserConfiguration"/> to update the registry with.</param>
        /// <remarks>
        /// This method will update the registry values of all properties with the <see cref="FeatureControlAttribute"/> on them, of the specified key to the provided value in the configuration object.
        /// 
        /// See: http://msdn.microsoft.com/en-us/library/ee330720(v=vs.85).aspx for more information on Feature Controls.
        /// </remarks>
        public void Initialize(ExtendedWebBrowserConfiguration config)
        {
            var name = System.IO.Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);
            
            if (name.ToLower() == "devenv.exe" || name.ToLower() == "xdesproc.exe")
            {
                return;
            }
            
            foreach (var prop in config.GetType().GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(FeatureControlAttribute))))
            {
                var attribute = (FeatureControlAttribute)prop.GetCustomAttributes(typeof(FeatureControlAttribute), true)[0];
                var rawValue = prop.GetValue(config);
                var cleanValue = 0u;

                if (rawValue is bool)
                {
                    cleanValue = (bool)rawValue ? 1u : 0u;
                }
                else
                {
                    cleanValue = (uint)rawValue;
                }

                SetDWordKey(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\" + attribute.Key, name, cleanValue);
            }
        }
    }

The configuration class:

    public class ExtendedWebBrowserConfiguration
    {
        private int _emulationVersion;

        public int EmulationVersion
        {
            get { return _emulationVersion; }
            set
            {
                if (value >= 7 && value <= 11)
                {
                    _emulationVersion = value;
                    return;
                }

                throw new ArgumentException("The provided value is invalid. Valid versions are values from 7 through 11.");
            }
        }

        /// <summary>
        /// FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7
        /// </summary>
        [FeatureControl("FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7")]
        public bool AboutProtocolRestriction { get; set; }

        /// <summary>
        /// FEATURE_SAFE_BINDTOOBJECT
        /// </summary>
        [FeatureControl("FEATURE_SAFE_BINDTOOBJECT")]
        public bool ActiveXBindingSafetyChecks { get; set; }

        /// <summary>
        /// FEATURE_OBJECT_CACHING
        /// </summary>
        [FeatureControl("FEATURE_OBJECT_CACHING")]
        public bool ActiveXObjectCaching { get; set; }

        /// <summary>
        /// FEATURE_RESTRICT_ACTIVEXINSTALL
        /// </summary>
        [FeatureControl("FEATURE_RESTRICT_ACTIVEXINSTALL")]
        public bool ActiveXUpdateRestriction { get; set; }

        /// <summary>
        /// FEATURE_FORCE_ADDR_AND_STATUS
        /// </summary>
        [FeatureControl("FEATURE_FORCE_ADDR_AND_STATUS")]
        public bool AddressAndStatusBarDisplay { get; set; }

        /// <summary>
        /// FEATURE_AJAX_CONNECTIONEVENTS
        /// </summary>
        [FeatureControl("FEATURE_AJAX_CONNECTIONEVENTS")]
        public bool AjaxConnectionEvents { get; set; }

        /// <summary>
        /// FEATURE_SHOW_APP_PROTOCOL_WARN_DIALOG
        /// </summary>
        [FeatureControl("FEATURE_SHOW_APP_PROTOCOL_WARN_DIALOG")]
        public bool ApplicationProtocolConfirmation { get; set; }

        /// <summary>
        /// FEATURE_BEHAVIORS
        /// </summary>
        [FeatureControl("FEATURE_BEHAVIORS")]
        public bool BinaryBehaviorSecurity { get; set; }

        /// <summary>
        /// FEATURE_BROWSER_EMULATION
        /// </summary>
        [FeatureControl("FEATURE_BROWSER_EMULATION")]
        public uint BrowserEmulation
        {
            get { return (uint)EmulationVersion * 1000; }
            set { EmulationVersion = (int)value / 1000; }
        }

        /// <summary>
        /// FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION
        /// </summary>
        [FeatureControl("FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION")]
        public bool ChildWindowClipping { get; set; }

        /// <summary>
        /// FEATURE_MANAGE_SCRIPT_CIRCULAR_REFS
        /// </summary>
        [FeatureControl("FEATURE_MANAGE_SCRIPT_CIRCULAR_REFS")]
        public bool CircularReferencesInScriptManagement { get; set; }

        /// <summary>
        /// FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT
        /// </summary>
        [FeatureControl("FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT")]
        public bool ClipboardScriptControl { get; set; }

        /// <summary>
        /// FEATURE_BLOCK_SETCAPTURE_XDOMAIN
        /// </summary>
        [FeatureControl("FEATURE_BLOCK_SETCAPTURE_XDOMAIN")]
        public bool CrossDomainCaptureEvent { get; set; }

        /// <summary>
        /// FEATURE_CROSS_DOMAIN_REDIRECT_MITIGATION
        /// </summary>
        [FeatureControl("FEATURE_CROSS_DOMAIN_REDIRECT_MITIGATION")]
        public bool CrossDomainRedirection { get; set; }

        /// <summary>
        /// FEATURE_DOWNLOAD_INITIATOR_HTTP_HEADER
        /// </summary>
        [FeatureControl("FEATURE_DOWNLOAD_INITIATOR_HTTP_HEADER")]
        public bool DebuggingNetworkTrafficRequests { get; set; }

        /// <summary>
        /// FEATURE_DOMSTORAGE
        /// </summary>
        [FeatureControl("FEATURE_DOMSTORAGE")]
        public bool DomWebStorageApiSupport { get; set; }

        /// <summary>
        /// FEATURE_CFSTR_INETURLW_DRAGDROP_FORMAT
        /// </summary>
        [FeatureControl("FEATURE_CFSTR_INETURLW_DRAGDROP_FORMAT")]
        public bool DragAndDropUrlFormat { get; set; }

        /// <summary>
        /// FEATURE_FEEDS
        /// </summary>
        [FeatureControl("FEATURE_FEEDS")]
        public bool Feeds { get; set; }

        /// <summary>
        /// FEATURE_RESTRICT_FILEDOWNLOAD
        /// </summary>
        [FeatureControl("FEATURE_RESTRICT_FILEDOWNLOAD")]
        public bool FileDownloadRestrictions { get; set; }

        /// <summary>
        /// FEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATION
        /// </summary>
        [FeatureControl("FEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATION")]
        public bool FileProtocolNavigation { get; set; }

        /// <summary>
        /// FEATURE_IE6_DEFAULT_FRAME_NAVIGATION_BEHAVIOR
        /// </summary>
        [FeatureControl("FEATURE_IE6_DEFAULT_FRAME_NAVIGATION_BEHAVIOR")]
        public bool FrameContentModification { get; set; }

        /// <summary>
        /// FEATURE_VIEWLINKEDWEBOC_IS_UNSAFE
        /// </summary>
        [FeatureControl("FEATURE_VIEWLINKEDWEBOC_IS_UNSAFE")]
        public bool FrameContentSecurity { get; set; }

        /// <summary>
        /// FEATURE_GPU_RENDERING
        /// </summary>
        [FeatureControl("FEATURE_GPU_RENDERING")]
        public bool GpuRendering { get; set; }

        /// <summary>
        /// FEATURE_MAXCONNECTIONSPER1_0SERVER
        /// </summary>
        [FeatureControl("FEATURE_MAXCONNECTIONSPER1_0SERVER")]
        public uint Http10ConnectionMaximum { get; set; }

        /// <summary>
        /// MAXCONNECTIONSPERSERVER
        /// </summary>
        [FeatureControl("MAXCONNECTIONSPERSERVER")]
        public uint Http11ConnectionMaximum { get; set; }

        /// <summary>
        /// FEATURE_IFRAME_MAILTO_THRESHOLD
        /// </summary>
        [FeatureControl("FEATURE_IFRAME_MAILTO_THRESHOLD")]
        public bool IFrameMailToThreshold { get; set; }

        /// <summary>
        /// FEATURE_MIME_TREAT_IMAGE_AS_AUTHORITATIVE
        /// </summary>
        [FeatureControl("FEATURE_MIME_TREAT_IMAGE_AS_AUTHORITATIVE")]
        public bool ImageMimeTypeDetermination { get; set; }

        /// <summary>
        /// FEATURE_SECURITYBAND
        /// </summary>
        [FeatureControl("FEATURE_SECURITYBAND")]
        public bool InformationBarHandling { get; set; }

        /// <summary>
        /// FEATURE_BLOCK_INPUT_PROMPTS
        /// </summary>
        [FeatureControl("FEATURE_BLOCK_INPUT_PROMPTS")]
        public bool InputPromptBlocking { get; set; }

        /// <summary>
        /// FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI
        /// </summary>
        [FeatureControl("FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI")]
        public bool IViewObjectLegacyDrawing { get; set; }

        /// <summary>
        /// FEATURE_NINPUT_LEGACYMODE
        /// </summary>
        [FeatureControl("FEATURE_NINPUT_LEGACYMODE")]
        public bool LegacyInputModel { get; set; }

        /// <summary>
        /// FEATURE_DISABLE_LEGACY_COMPRESSION
        /// </summary>
        [FeatureControl("FEATURE_DISABLE_LEGACY_COMPRESSION")]
        public bool LegacyCompressionSupport { get; set; }

        /// <summary>
        /// FEATURE_LOCALMACHINE_LOCKDOWN
        /// </summary>
        [FeatureControl("FEATURE_LOCALMACHINE_LOCKDOWN")]
        public bool LocalMachineLockdown { get; set; }

        /// <summary>
        /// FEATURE_BLOCK_LMZ_IMG
        /// </summary>
        [FeatureControl("FEATURE_BLOCK_LMZ_IMG")]
        public bool LocalImageBlocking { get; set; }

        /// <summary>
        /// FEATURE_BLOCK_LMZ_OBJECT
        /// </summary>
        [FeatureControl("FEATURE_BLOCK_LMZ_OBJECT")]
        public bool LocalObjectBlocking { get; set; }

        /// <summary>
        /// FEATURE_BLOCK_LMZ_SCRIPT
        /// </summary>
        [FeatureControl("FEATURE_BLOCK_LMZ_SCRIPT")]
        public bool LocalScriptBlocking { get; set; }

        /// <summary>
        /// FEATURE_MIME_SNIFFING
        /// </summary>
        [FeatureControl("FEATURE_MIME_SNIFFING")]
        public bool MimeTypeDetermination { get; set; }

        /// <summary>
        /// FEATURE_MIME_HANDLING
        /// </summary>
        [FeatureControl("FEATURE_MIME_HANDLING")]
        public bool MimeTypeHandling { get; set; }

        /// <summary>
        /// FEATURE_DISABLE_MK_PROTOCOL
        /// </summary>
        [FeatureControl("FEATURE_DISABLE_MK_PROTOCOL")]
        public bool MKProtocolSupport { get; set; }

        /// <summary>
        /// FEATURE_ISOLATE_NAMED_WINDOWS
        /// </summary>
        [FeatureControl("FEATURE_ISOLATE_NAMED_WINDOWS")]
        public bool NamedWindowIsolation { get; set; }

        /// <summary>
        /// FEATURE_DISABLE_NAVIGATION_SOUNDS
        /// </summary>
        [FeatureControl("FEATURE_DISABLE_NAVIGATION_SOUNDS")]
        public bool NavigationSoundSupport { get; set; }

        /// <summary>
        /// FEATURE_PROTOCOL_LOCKDOWN
        /// </summary>
        [FeatureControl("FEATURE_PROTOCOL_LOCKDOWN")]
        public bool ProtocolLockdown { get; set; }

        /// <summary>
        /// FEATURE_RESTRICT_ACTIVEXINSTALL
        /// </summary>
        [FeatureControl("FEATURE_RESTRICT_ACTIVEXINSTALL")]
        public bool ResourceProtocolRestriction { get; set; }

        /// <summary>
        /// FEATURE_DOWNLOAD_PROMPT_META_CONTROL
        /// </summary>
        [FeatureControl("FEATURE_DOWNLOAD_PROMPT_META_CONTROL")]
        public bool SaveDialogButtonHiding { get; set; }

        /// <summary>
        /// FEATURE_SCRIPTURL_MITIGATION
        /// </summary>
        [FeatureControl("FEATURE_SCRIPTURL_MITIGATION")]
        public bool ScriptUrlMitigation { get; set; }

        /// <summary>
        /// FEATURE_WARN_ON_SEC_CERT_REV_FAILED
        /// </summary>
        [FeatureControl("FEATURE_WARN_ON_SEC_CERT_REV_FAILED")]
        public bool SecurityCertificateRevocationFailure { get; set; }

        /// <summary>
        /// FEATURE_LOAD_SHDOCLC_RESOURCES
        /// </summary>
        [FeatureControl("FEATURE_LOAD_SHDOCLC_RESOURCES")]
        public bool ShdoclcDllResourceLoading { get; set; }

        /// <summary>
        /// FEATURE_SPELLCHECKING
        /// </summary>
        [FeatureControl("FEATURE_SPELLCHECKING")]
        public bool SpellcheckAndAutoCorrectSupport { get; set; }

        /// <summary>
        /// FEATURE_SSLUX
        /// </summary>
        [FeatureControl("FEATURE_SSLUX")]
        public bool SslSecurityAlertDisplay { get; set; }

        /// <summary>
        /// FEATURE_STATUS_BAR_THROTTLING
        /// </summary>
        [FeatureControl("FEATURE_STATUS_BAR_THROTTLING")]
        public bool StatusBarUpdateFrequency { get; set; }

        /// <summary>
        /// FEATURE_RESTRICT_CDL_CLSIDSNIFF
        /// </summary>
        [FeatureControl("FEATURE_RESTRICT_CDL_CLSIDSNIFF")]
        public bool StructuredStorageDetection { get; set; }

        /// <summary>
        /// FEATURE_TABBED_BROWSING
        /// </summary>
        [FeatureControl("FEATURE_TABBED_BROWSING")]
        public bool TabbedBrowsingShortcutsAndNotifications { get; set; }

        /// <summary>
        /// FEATURE_DISABLE_TELNET_PROTOCOL
        /// </summary>
        [FeatureControl("FEATURE_DISABLE_TELNET_PROTOCOL")]
        public bool TelnetProtocolSupport { get; set; }

        /// <summary>
        /// FEATURE_UNC_SAVEDFILECHECK
        /// </summary>
        [FeatureControl("FEATURE_UNC_SAVEDFILECHECK")]
        public bool UncFileSupportForMotW { get; set; }

        /// <summary>
        /// FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
        /// </summary>
        [FeatureControl("FEATURE_HTTP_USERNAME_PASSWORD_DISABLE")]
        public bool UsernamesAndPasswordsInUrls { get; set; }

        /// <summary>
        /// FEATURE_VALIDATE_NAVIGATE_URL
        /// </summary>
        [FeatureControl("FEATURE_VALIDATE_NAVIGATE_URL")]
        public bool ValidateUrlNavigation { get; set; }

        /// <summary>
        /// FEATURE_SHIM_MSHELP_COMBINE
        /// </summary>
        [FeatureControl("FEATURE_SHIM_MSHELP_COMBINE")]
        public bool VisualStudioLegacyHelpSupport { get; set; }

        /// <summary>
        /// FEATURE_WEBOC_DOCUMENT_ZOOM
        /// </summary>
        [FeatureControl("FEATURE_WEBOC_DOCUMENT_ZOOM")]
        public bool WebBrowserControlDocumentZoom { get; set; }

        /// <summary>
        /// FEATURE_WEBOC_POPUPMANAGEMENT
        /// </summary>
        [FeatureControl("FEATURE_WEBOC_POPUPMANAGEMENT")]
        public bool WebBrowserControlPopupManagement { get; set; }

        /// <summary>
        /// FEATURE_WEBOC_MOVESIZECHILD
        /// </summary>
        [FeatureControl("FEATURE_WEBOC_MOVESIZECHILD")]
        public bool WebBrowserControlWindowControl { get; set; }

        /// <summary>
        /// FEATURE_ENABLE_WEB_CONTROL_VISUALS
        /// </summary>
        [FeatureControl("FEATURE_ENABLE_WEB_CONTROL_VISUALS")]
        public bool WebControlVisuals { get; set; }

        /// <summary>
        /// FEATURE_ADDON_MANAGEMENT
        /// </summary>
        [FeatureControl("FEATURE_ADDON_MANAGEMENT")]
        public bool WebOcAddonManagement { get; set; }

        /// <summary>
        /// FEATURE_WEBSOCKET
        /// </summary>
        [FeatureControl("FEATURE_WEBSOCKET")]
        public bool WebSocket { get; set; }

        /// <summary>
        /// FEATURE_WEBSOCKET_AUTHPROMPT
        /// </summary>
        [FeatureControl("FEATURE_WEBSOCKET_AUTHPROMPT")]
        public bool WebSocketAuthenticationPrompt { get; set; }

        /// <summary>
        /// FEATURE_WEBSOCKET_CLOSETIMEOUT
        /// </summary>
        [FeatureControl("FEATURE_WEBSOCKET_CLOSETIMEOUT")]
        public uint WebSocketCloseTimeout { get; set; }

        /// <summary>
        /// FEATURE_WEBSOCKET_MAXCONNECTIONSPERSERVER
        /// </summary>
        [FeatureControl("FEATURE_WEBSOCKET_MAXCONNECTIONSPERSERVER")]
        public uint WebSocketMaximumServerConnections { get; set; }

        /// <summary>
        /// FEATURE_WEBSOCKET_FOLLOWHTTPREDIRECT
        /// </summary>
        [FeatureControl("FEATURE_WEBSOCKET_FOLLOWHTTPREDIRECT")]
        public bool WebSocketFollowRedirects { get; set; }

        /// <summary>
        /// FEATURE_WINDOW_RESTRICTIONS
        /// </summary>
        [FeatureControl("FEATURE_WINDOW_RESTRICTIONS")]
        public bool WindowRestrictions { get; set; }

        /// <summary>
        /// FEATURE_XDOMAINREQUEST
        /// </summary>
        [FeatureControl("FEATURE_XDOMAINREQUEST")]
        public bool XDomainRequestObjectSupport { get; set; }

        /// <summary>
        /// FEATURE_XMLHTTP
        /// </summary>
        [FeatureControl("FEATURE_XMLHTTP")]
        public bool XmlHttpRequestObjectSupport { get; set; }

        /// <summary>
        /// FEATURE_ZONE_ELEVATION
        /// </summary>
        [FeatureControl("FEATURE_ZONE_ELEVATION")]
        public bool ZoneElevation { get; set; }

        /// <summary>
        /// FEATURE_RESTRICTED_ZONE_WHEN_FILE_NOT_FOUND
        /// </summary>
        [FeatureControl("FEATURE_RESTRICTED_ZONE_WHEN_FILE_NOT_FOUND")]
        public bool ZoneHandlingForMissingFiles { get; set; }

        /// <summary>
        /// FEATURE_READ_ZONE_STRINGS_FROM_REGISTRY
        /// </summary>
        [FeatureControl("FEATURE_READ_ZONE_STRINGS_FROM_REGISTRY")]
        public bool ZoneStringLoading { get; set; }

        public static readonly ExtendedWebBrowserConfiguration WebBrowserControlDefault = new ExtendedWebBrowserConfiguration
        {
            AboutProtocolRestriction = false,
            ActiveXBindingSafetyChecks = true,
            ActiveXObjectCaching = true,
            ActiveXUpdateRestriction = false,
            AddressAndStatusBarDisplay = false,
            AjaxConnectionEvents = false,
            ApplicationProtocolConfirmation = false,
            BinaryBehaviorSecurity = true,
            BrowserEmulation = 7000u,
            ChildWindowClipping = true,
            CircularReferencesInScriptManagement = true,
            ClipboardScriptControl = true,
            CrossDomainCaptureEvent = true,
            CrossDomainRedirection = true,
            DebuggingNetworkTrafficRequests = false,
            DomWebStorageApiSupport = true,
            DragAndDropUrlFormat = true,
            Feeds = false,
            FileDownloadRestrictions = false,
            FileProtocolNavigation = false,
            FrameContentModification = false,
            FrameContentSecurity = false,
            GpuRendering = false,
            Http10ConnectionMaximum = 6,
            Http11ConnectionMaximum = 6,
            IFrameMailToThreshold = false,
            ImageMimeTypeDetermination = true,
            InformationBarHandling = false,
            InputPromptBlocking = false,
            IViewObjectLegacyDrawing = true,
            LegacyInputModel = true,
            LegacyCompressionSupport = true,
            LocalMachineLockdown = false,
            LocalImageBlocking = false,
            LocalObjectBlocking = false,
            LocalScriptBlocking = false,
            MimeTypeDetermination = true,
            MimeTypeHandling = false,
            MKProtocolSupport = true,
            NamedWindowIsolation = true,
            NavigationSoundSupport = false,
            ProtocolLockdown = false,
            ResourceProtocolRestriction = false,
            SaveDialogButtonHiding = true,
            ScriptUrlMitigation = false,
            SecurityCertificateRevocationFailure = false,
            ShdoclcDllResourceLoading = false,
            SpellcheckAndAutoCorrectSupport = false,
            SslSecurityAlertDisplay = false,
            StatusBarUpdateFrequency = false,
            StructuredStorageDetection = false,
            TabbedBrowsingShortcutsAndNotifications = false,
            TelnetProtocolSupport = false,
            UncFileSupportForMotW = false,
            UsernamesAndPasswordsInUrls = false,
            ValidateUrlNavigation = false,
            VisualStudioLegacyHelpSupport = true,
            WebBrowserControlDocumentZoom = false,
            WebBrowserControlPopupManagement = true,
            WebBrowserControlWindowControl = false,
            WebControlVisuals = false,
            WebOcAddonManagement = false,
            WebSocket = true,
            WebSocketAuthenticationPrompt = false,
            WebSocketCloseTimeout = 15000,
            WebSocketMaximumServerConnections = 6,
            WebSocketFollowRedirects = false,
            WindowRestrictions = true,
            XDomainRequestObjectSupport = true,
            XmlHttpRequestObjectSupport = true,
            ZoneElevation = true,
            ZoneHandlingForMissingFiles = false,
            ZoneStringLoading = false,
        };

        public static readonly ExtendedWebBrowserConfiguration InternetExplorerDefault = new ExtendedWebBrowserConfiguration
        {
            AboutProtocolRestriction = true,
            ActiveXBindingSafetyChecks = true,
            ActiveXObjectCaching = true,
            ActiveXUpdateRestriction = false,
            AddressAndStatusBarDisplay = true,
            AjaxConnectionEvents = true,
            ApplicationProtocolConfirmation = true,
            BinaryBehaviorSecurity = true,
            BrowserEmulation = 11000u,
            ChildWindowClipping = true,
            CircularReferencesInScriptManagement = true,
            ClipboardScriptControl = false,
            CrossDomainCaptureEvent = true,
            CrossDomainRedirection = true,
            DebuggingNetworkTrafficRequests = false,
            DomWebStorageApiSupport = true,
            DragAndDropUrlFormat = true,
            Feeds = true,
            FileDownloadRestrictions = false,
            FileProtocolNavigation = true,
            FrameContentModification = false,
            FrameContentSecurity = true,
            GpuRendering = true,
            Http10ConnectionMaximum = 6,
            Http11ConnectionMaximum = 6,
            IFrameMailToThreshold = true,
            ImageMimeTypeDetermination = true,
            InformationBarHandling = true,
            InputPromptBlocking = true,
            IViewObjectLegacyDrawing = true,
            LegacyInputModel = false,
            LegacyCompressionSupport = true,
            LocalMachineLockdown = true,
            LocalImageBlocking = true,
            LocalObjectBlocking = true,
            LocalScriptBlocking = true,
            MimeTypeDetermination = true,
            MimeTypeHandling = true,
            MKProtocolSupport = true,
            NamedWindowIsolation = true,
            NavigationSoundSupport = false,
            ProtocolLockdown = false,
            ResourceProtocolRestriction = true,
            SaveDialogButtonHiding = true,
            ScriptUrlMitigation = true,
            SecurityCertificateRevocationFailure = false,
            ShdoclcDllResourceLoading = false,
            SpellcheckAndAutoCorrectSupport = false,
            SslSecurityAlertDisplay = false,
            StatusBarUpdateFrequency = true,
            StructuredStorageDetection = false,
            TabbedBrowsingShortcutsAndNotifications = true,
            TelnetProtocolSupport = true,
            UncFileSupportForMotW = true,
            UsernamesAndPasswordsInUrls = true,
            ValidateUrlNavigation = true,
            VisualStudioLegacyHelpSupport = false,
            WebBrowserControlDocumentZoom = true,
            WebBrowserControlPopupManagement = true,
            WebBrowserControlWindowControl = false,
            WebControlVisuals = false,
            WebOcAddonManagement = false,
            WebSocket = true,
            WebSocketAuthenticationPrompt = false,
            WebSocketCloseTimeout = 15000,
            WebSocketMaximumServerConnections = 6,
            WebSocketFollowRedirects = false,
            WindowRestrictions = true,
            XDomainRequestObjectSupport = true,
            XmlHttpRequestObjectSupport = true,
            ZoneElevation = true,
            ZoneHandlingForMissingFiles = false,
            ZoneStringLoading = false,
        };
    }

And the attribute:

    [AttributeUsage(AttributeTargets.Property)]
    public class FeatureControlAttribute : Attribute
    {
        public string Key { get; set; }

        public FeatureControlAttribute(string key)
        {
            Key = key;
        }
    }