MainForm - CreateBrowser/AutoGetFeaturesCefSharpBrowserDesktopPC GitHub Wiki

using CefSharp;

using CefSharp.Enums;

using CefSharp.Event;

using CefSharp.Handler;

using CefSharp.Internals;

using CefSharp.ModelBinding;

using CefSharp.SchemeHandler;

using CefSharp.Structs;

using CefSharp.WinForms;

using CefSharp.WinForms.Internals;

using CefSharp.RenderProcess;

using ChromiumApplication;

using ChromiumApplication.Properties;

using ChromiumApplication.Main;

using ChromiumApplication.Main.Helper;

using ChromiumApplication.Main.Handler.Extension;

using ChromiumApplication.Main.Callback;

using ChromiumApplication.Main.Handlers;

using ChromiumApplication.Main.Handler;

using ChromiumApplication.Main.Proxy;

using ChromiumApplication.Main.Ultimate;

using ChromiumApplication.ExampleMain.Example.Request;

using MaterialSkin;

using MaterialSkin.Controls;

using MetroSet_UI.Forms;

using MetroFramework.Forms;

using Microsoft.VisualBasic;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.Drawing;

using System.Globalization;

using System.IO;

using System.Linq;

using System.Management;

using System.Media;

using System.Net;

using System.Net.Cache;

using System.Resources;

using System.Runtime;

using System.Security;

using System.Security.Policy;

using System.Security.Principal;

using System.Text;

using System.Threading.Tasks;

using System.Web;

using System.Windows.Forms;

using System.Xml;

using Xilium.CefGlue;

using Xilium.CefGlue.Wrapper;

/// using System.Runtime.InteropServices;

/// /// ///

/// العربية /// /// ///

namespace CefSharp {

public partial class Form1 : Form {

    // c#  Cefsharp Winforms cookie | How to cookie  https://github.com/cefsharp/CefSharp/issues/826

    // c#  Cefsharp Winforms StatusBar

    /// <summary>
    ///     public partial class Form1 : MetroSetForm
    /// </summary>
    /// <summary>
    ///     public partial class Form1 : MaterialForm
    /// </summary>
    /// <summary>
    ///     public partial class Form1 : MetroForm
    /// </summary>

    /// <summary>
    ///      public partial class Form1 : Form 
    /// </summary>

    public ChromiumWebBrowser ChromiumWebBrowser;
    public ChromiumWebBrowser ChromiumBrowser;
    public ChromiumWebBrowser ChromeBrowser;
    public ChromiumWebBrowser Chromium;
    public ChromiumWebBrowser browser;
    public WebBrowser webNO;
    public CefValue NewGO;

    private Action<string, int?> openNewTab;
    private const string DefaultUrlForAddedTabs = "https://www.google.com";

    // Default to a small increment:
    private const double ZoomIncrement = 0.10;

    private bool multiThreadedMessageLoopEnabled;


    public const string BaseUrl = "https://www.";
    public const string DefaultUrl = BaseUrl + "google.com.eg/";
    //public const string DefaultUrl = BaseUrl + "/other_tests.html";
   // public const string PluginsTestUrl = BaseUrl + "/plugins.html";
    public const string TestResourceUrl = "http://test/resource/load";

    // Use when debugging the actual SubProcess, to make breakpoints etc. inside that project work.
   /// private static readonly bool DebuggingSubProcess = Debugger.IsAttached;
    private static string PluginInformation = "";
    ///
    ///  
    public const string WcfEnabledArgument = "--wcf-enabled";
    public const string HostProcessIdArgument = "--host-process-id";
    public const string CustomSchemeArgument = "--custom-scheme";
    public const string FocusedNodeChangedEnabledArgument = "--focused-node-enabled";
    public const string SubProcessTypeArgument = "--type";
    public const string ExitIfParentProcessClosed = "--cefsharpexitsub";
    ///
    ///
    private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Cef.Shutdown(); }
    private void Form1_Load(object sender, EventArgs e)
    {
       // AddTab(Form1.DefaultUrl);
        //AddTab(BrowserTabUserControl.("https://github.com/mohamedosama914");
        ///  AddTab(Form1.DefaultUrl);
        ///  AddTab(CefExample.DefaultUrl);
    }
    // (bool multiThreadedMessageLoopEnabled) 

    public Form1() { InitializeComponent();

        WinForms.CefSettings settings = new WinForms.CefSettings();

        ///
        ///    Start Browser
        /// 

        // Set Google API keys, used for Geolocation requests sans GPS.  See http://www.chromium.org/developers/how-tos/api-keys
        Environment.SetEnvironmentVariable("GOOGLE_API_KEY", "AIzaSyBS-qjz0jmK4jvZy06Rq4DLs0_AITqo7lw");
        Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_ID", "888034971568-kmdju8hjiem3mqqi3kgjmals6p0l0te4.apps.googleusercontent.com");
        Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_SECRET", "6fa_ZYlY8KxDd_KDOz1SdENV");


        CefSharpSettings.LegacyJavascriptBindingEnabled = true; //true
        CefSharpSettings.ConcurrentTaskExecution = true; //true
        CefSharpSettings.FocusedNodeChangedEnabled = true;
        CefSharpSettings.WcfEnabled = true; //true


        // AcceptLanguageList
        settings.AcceptLanguageList = "en-US,ru,ar,zh-CN,zh-TW,ko,ja,en-GB";

        // Locales
       /// settings.LocalesDirPath = "locales";
       /// settings.Locale = @"en-US";

        // Debug log File
       /// settings.LogFile = "@LogFileOutputDebug.log";


       ///
       /// 
       /// 
       /// 
        /// Locales
        /// settings.Locale = @"en-US";
        /// settings.LocalesDirPath = "locales";

        /// Global Auto Example Locale
        /// settings.Locale = System.Globalization.CultureInfo.CurrentCulture.Parent.ToString();  /// Path Locale Example

        /// Debug log File
        /// settings.LogFile = "@LogFileOutputDebug.log";
        /// settings.LogFile = "@Debug.log";



        /// WidevineCdm
        /// chrome://components/
        Cef.RegisterWidevineCdmAsync(@"Resources\WidevineCdm\");
        Cef.RegisterWidevineCdm(@"Resources\WidevineCdm\");

        settings.CefCommandLineArgs.Add("enable-widevine", "1");
        settings.CefCommandLineArgs.Add("enable-widevine-cdm", "1");

        // User Data Cache Path
        settings.CachePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + @"\.AppPathProfileUserDataCefSharp";
        settings.UserDataPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + @"\.AppPathProfileUserDataCefSharp";

        /// 
        /// settings.UserDataPath = "AppPathProfileUserDataCefSharp";
        /// settings.CachePath = "AppPathProfileUserDataCefSharp";
        /// 

        // settings Arguments
        settings.ResourcesDirPath = System.IO.Path.GetDirectoryName(new Uri(System.Reflection.Assembly.GetEntryAssembly().CodeBase).LocalPath);
        settings.RemoteDebuggingPort = 8080;
        settings.LogSeverity = LogSeverity.Verbose;
        settings.JavascriptFlags = JavascriptFlags;
        settings.ResourcesDirPath = ResourcesDirPath;
        settings.PersistSessionCookies = true;       //true and false // settings.PersistSessionCookies = false; 
        settings.PersistUserPreferences = true;       //true and false
        settings.IgnoreCertificateErrors = true;      //true
        settings.MultiThreadedMessageLoop = true;     //true 
        settings.WindowlessRenderingEnabled = true;   //true
        settings.EnableNetSecurityExpiration = true;  //true

        settings.BrowserSubprocessPath = @"CefSharp.BrowserSubprocess.exe";

        // Enable Unknown
        settings.CefCommandLineArgs.Add("load-extension", @"Resources\Extensions\");
        //settings.CefCommandLineArgs.Add("load-extension", @".\Resources\Extensions\");
        // settings.CefCommandLineArgs.Add("load -extension", "1");
        // settings.CefCommandLineArgs.Add("load-extension", @".\Resources\Extensions\set_page_color");
        // settings.CefCommandLineArgs.Add("pack-extension", "1");
        // Disable Unknown

        /* Style layouts Auto New Ux ViewPort */
        ///
        // settings.CefCommandLineArgs.Add("enable-viewport", "1");
        /// 
        /* Style layouts Auto New ux ViewPort */

        /* Command - line options */

        /* Disable Custom Command - line options */
        //  settings.CefCommandLineArgs.Add("disable-extensions", "1");
        settings.CefCommandLineArgs.Add("disable-web-security", "1");
        settings.CefCommandLineArgs.Add("disable-gpu-compositing", "1");
        settings.CefCommandLineArgs.Add("disable-gpu", "1");      // enable-gpu

        /* Disable Custom Command - line options */

        ///
        /// settings.CommandLineArgsDisabled = true;     //false 
        ///

        /* Enable Custom Command - line options */

        settings.CefCommandLineArgs.Add("enable-extensions", "1");        //disable-extensions
        settings.CefCommandLineArgs.Add("enabled-new-style-notification", "1");
        settings.CefCommandLineArgs.Add("enable-push-api-background-mode", "1");
        settings.CefCommandLineArgs.Add("enable-web-notification-custom-layouts", "1");

        settings.CefCommandLineArgs.Add("enable-webgl", "1");
        settings.CefCommandLineArgs.Add("enable-npapi", "1");
        settings.CefCommandLineArgs.Add("enable-system", "1");
        settings.CefCommandLineArgs.Add("enable-media-stream", "1");
        settings.CefCommandLineArgs.Add("enable-pdf-extension", "1");
        settings.CefCommandLineArgs.Add("enable-translate", "1");
        settings.CefCommandLineArgs.Add("enable-translate-new-ux", "1");

        /// Enable Features
        settings.CefCommandLineArgs.Add("flag-switches-begin", "1");
        settings.CefCommandLineArgs.Add("enable-features", "MediaSessionService,NativeNotifications,NewStyleNotifications,NewTabLoadingAnimation,SystemWebApps,TabHoverCards,TranslateUI,google-password-manager,try-chrome-again,system-developer-mode,install-chrome-app,force-overlay-fullscreen-video,enable-extensions,enable-plugins");
        settings.CefCommandLineArgs.Add("flag-switches-end", "1");
        /// Enable Features

        settings.CefCommandLineArgs.Add("high-dpi-support", "1");
        settings.CefCommandLineArgs.Add("enable-site-settings", "1");
        settings.CefCommandLineArgs.Add("enable-profile-shortcut-manager", "1");
        settings.CefCommandLineArgs.Add("enable-main-frame-before-activation", "1");
        settings.CefCommandLineArgs.Add("enable-speech-input", "1");
        settings.CefCommandLineArgs.Add("enable-video-player-chromecast-support", "1");
        settings.CefCommandLineArgs.Add("enable-experimental-web-platform-features", "1");
        settings.CefCommandLineArgs.Add("enable-precise-memory-info", "1");
        settings.CefCommandLineArgs.Add("enable-experimental-fullscreen-exit-ui", "1");
        settings.CefCommandLineArgs.Add("enable-fullscreen-app-list", "1");
        settings.CefCommandLineArgs.Add("enable-fullscreen", "1");
        
        settings.CefCommandLineArgs.Add("enable-trace-app-source", "1");
        settings.CefCommandLineArgs.Add("enable-webrtc-event-logging-from-extension", "1");
        settings.CefCommandLineArgs.Add("enable-wifi-credential-sync", "1");
        settings.CefCommandLineArgs.Add("enable-zip-archiver-on-file-manager", "1");
        settings.CefCommandLineArgs.Add("enable-win7-webrtc-hw-h264-decoding", "1");
        settings.CefCommandLineArgs.Add("enable-usermedia-screen-capture", "1");
        settings.CefCommandLineArgs.Add("enable-webgl-image-chromium", "1");
        settings.CefCommandLineArgs.Add("enable-media-suspend", "1");
        settings.CefCommandLineArgs.Add("enable-drive-search-in-app-launcher", "1");
        settings.CefCommandLineArgs.Add("enable-google-branded-context-menu", "1");
        settings.CefCommandLineArgs.Add("enable-use-zoom-for-dsf", "1");
        settings.CefCommandLineArgs.Add("enable-browser-task-scheduler", "1");
        settings.CefCommandLineArgs.Add("enable-embedded-extension-options", "1");
        settings.CefCommandLineArgs.Add("enable-crx-hash-check", "1");



        /* Enable Custom Command - line options */


        /*  CEF init with custom settings */

        settings.CefCommandLineArgs.Add("material", "1");
        settings.CefCommandLineArgs.Add("force-overlay-fullscreen-video", "1");

        settings.CefCommandLineArgs.Add("crash-server-url", "1");
        settings.CefCommandLineArgs.Add("use-fake-ui-for-media-stream", "1");
        settings.CefCommandLineArgs.Add("allow-running-insecure-content", "1");

        settings.CefCommandLineArgs.Add("apps-keep-chrome-alive-in-tests", "1");
        settings.CefCommandLineArgs.Add("create-browser-on-startup-for-tests", "1");
        settings.CefCommandLineArgs.Add("create-default-gl-context", "1");

        settings.CefCommandLineArgs.Add("fullscreen-enabled", "1");
        settings.CefCommandLineArgs.Add("allow-nacl-crxfs-api", "1");
        settings.CefCommandLineArgs.Add("allow-legacy-extension-manifests", "1");
        settings.CefCommandLineArgs.Add("native-crx-bindings", "1");
        
        settings.CefCommandLineArgs.Add("auto-select-desktop-capture-source", "1");
        settings.CefCommandLineArgs.Add("webview-enable-safebrowsing-support", "1");
        settings.CefCommandLineArgs.Add("embedded-extension-options", "1");
        settings.CefCommandLineArgs.Add("show-component-extension-options", "1");
        settings.CefCommandLineArgs.Add("task-manager-show-extra-renderers", "1");
        settings.CefCommandLineArgs.Add("custom-launcher-page", "1");
        settings.CefCommandLineArgs.Add("app-id", "1");
        settings.CefCommandLineArgs.Add("extensions-install-verification", "1");
        settings.CefCommandLineArgs.Add("extension-content-verification", "1");
        settings.CefCommandLineArgs.Add("extension-process", "1");
        settings.CefCommandLineArgs.Add("extensions-multi-account", "1");
        settings.CefCommandLineArgs.Add("app-auto-launched", "1");
        settings.CefCommandLineArgs.Add("allow-outdated-plugins", "1");
        settings.CefCommandLineArgs.Add("apps-gallery-url", "1");
        settings.CefCommandLineArgs.Add("apps-gallery-update-url", "1");
        settings.CefCommandLineArgs.Add("apps-gallery-download-url", "1");
        settings.CefCommandLineArgs.Add("chrome-home-swipe-logic", "1");
        settings.CefCommandLineArgs.Add("auth-ext-path", "1");
        settings.CefCommandLineArgs.Add("bootstrap", "1");
        settings.CefCommandLineArgs.Add("bwsi", "1");
        settings.CefCommandLineArgs.Add("d3d9", "1");
        settings.CefCommandLineArgs.Add("d3d10", "1");
        settings.CefCommandLineArgs.Add("d3d11", "1");
        settings.CefCommandLineArgs.Add("d3d12", "1");
        settings.CefCommandLineArgs.Add("d3d-support", "1");

        /* Command Line Arguments settings */    //  https://peter.sh/experiments/chromium-command-line-switches/
                                                
         //settings.CefCommandLineArgs.Add("--single-process --load-extension=set_page_color", "1");

        settings.CefCommandLineArgs.Add("--single-process --load-extension=set_page_color", "1");

        settings.CefCommandLineArgs.Add("disable-application-cache", "1");
        settings.CefCommandLineArgs.Add("disable-session-storage", "1");
        settings.CefCommandLineArgs.Add("enable-automatic-password-saving", "enable-automatic-password-saving");
        settings.CefCommandLineArgs.Add("enable-password-save-in-page-navigation", "enable-password-save-in-page-navigation");
        settings.CefCommandLineArgs.Add("enable-begin-frame-scheduling", "1");
        settings.CefCommandLineArgs.Add("renderer-process-limit", "1");
        settings.CefCommandLineArgs.Add("persist_session_cookies", "1");
        settings.CefCommandLineArgs.Add("debug-plugin-loading", "1"); //Dumps extra logging about plugin loading to the log file.
        settings.CefCommandLineArgs.Add("disable-plugins-discovery", "1"); //Disable discovering third-party plugins. Effectively loading only ones shipped with the browser plus third-party ones as specified by --extra-plugin-dir and --load-plugin switches

        /// Enable

        ///
        ///
        /// GET
        ///
        ///
        settings.CefCommandLineArgs.Add("app", "1");
        settings.CefCommandLineArgs.Add("new-window", "1");
        settings.CefCommandLineArgs.Add("playback-mode", "1");
        settings.CefCommandLineArgs.Add("enable-show-modal-dialog", "1");
        settings.CefCommandLineArgs.Add("easy-unlock-app-path", "1");
        settings.CefCommandLineArgs.Add("enable-apps-file-associations", "1");
        settings.CefCommandLineArgs.Add("enable-app-list", "1");
        settings.CefCommandLineArgs.Add("enable-settings-window", "1");
        settings.CefCommandLineArgs.Add("permission-request-api-scope", "1");
        settings.CefCommandLineArgs.Add("permission-request-api-url", "1");
        settings.CefCommandLineArgs.Add("apps-checkout-url", "1");
        settings.CefCommandLineArgs.Add("app-list-start-page-url", "1");
        settings.CefCommandLineArgs.Add("auto-launch-at-startup", "1");
        settings.CefCommandLineArgs.Add("app-mode-auth-code", "1");
        settings.CefCommandLineArgs.Add("app-mode-oauth-token", "1");            
        settings.CefCommandLineArgs.Add("enable-website-settings-manager", "1");
        settings.CefCommandLineArgs.Add("sync-url", "1");
        settings.CefCommandLineArgs.Add("sync-enable-get-update-avoidance", "1");
        settings.CefCommandLineArgs.Add("unlimited-storage", "1");
        settings.CefCommandLineArgs.Add("enable-accessibility-tab-switcher", "1");
        settings.CefCommandLineArgs.Add("enable-app-install-alerts", "1");
        settings.CefCommandLineArgs.Add("enable-spelling-auto-correct", "1");
        settings.CefCommandLineArgs.Add("spelling-service-feedback-interval-seconds", "1");
        settings.CefCommandLineArgs.Add("filemgr-ext-path", "1");
        settings.CefCommandLineArgs.Add("viewer-launch-via-appid", "1");
        settings.CefCommandLineArgs.Add("windows8-search", "1");
        ///
        ///
        /// GET
        ///
        ///  


        Cef.Initialize(settings);

        /// CefState.Default
        /// CefState.Disabled
        /// CefState.Enabled
        /// 
        /// 
        /// URL ( http://seriesmoviesultimate.webege.com/ )
        /// URL ( chrome://version )
        /// CefState.Default


        Text = "CefSharp Chromium Web Browser";
       ///  AddTab(Form1.DefaultUrl);

        toolStripTextBoxAddress.Text = "chrome://version";
        ChromiumWebBrowser ChromiumWebBrowser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text) { BrowserSettings =
        { DefaultEncoding = "UTF-8", Databases = CefState.Disabled, JavascriptDomPaste = CefState.Disabled, Javascript = CefState.Enabled, ApplicationCache = CefState.Disabled, FileAccessFromFileUrls = CefState.Enabled, TabToLinks = CefState.Default, UniversalAccessFromFileUrls = CefState.Default, WebSecurity = CefState.Enabled, LocalStorage = CefState.Disabled, ImageLoading = CefState.Default, TextAreaResize = CefState.Default, JavascriptAccessClipboard = CefState.Enabled, ImageShrinkStandaloneToFit = CefState.Default, Plugins = CefState.Enabled, WebGl = CefState.Disabled } };

        ChromiumWebBrowser.Dock = DockStyle.Fill;
       /// ChromiumWebBrowser.IsBrowserInitializedChanged += OnIsBrowserInitializedChanged;
       /// ChromiumWebBrowser.LoadingStateChanged += OnLoadingStateChanged;

        ChromiumWebBrowser.TitleChanged += OnBrowserTitleChanged;
        ChromiumWebBrowser.AddressChanged += OnBrowserAddressChanged;
        ChromiumWebBrowser.LoadError += BrowserLoadError;
        ChromiumWebBrowser.StatusMessage += OnStatusMessageChanged;

        // ChromiumWebBrowser.StatusMessage += OnBrowserStatusMessage;
        // ChromiumWebBrowser.LoadingStateChanged += BrowserLoadingStateChanged;


        TabPage tpage = new TabPage(); tpage.Text = " Ultimate Browser Version "; tpage.Show(); browserTabControl.Controls.Add(tpage); ChromiumWebBrowser.Parent = tpage;
        ChromiumWebBrowser.FocusHandler = null;

        /* Customize Handler */
        ChromiumWebBrowser.DownloadHandler = new ChromiumApplication.Main.Handler.DownloadHandler();
        ChromiumWebBrowser.DisplayHandler = new ChromiumApplication.Main.Handler.DisplayHandler();
        ChromiumWebBrowser.MenuHandler = new ChromiumApplication.Main.Handler.Example.MenuHandler();
        ChromiumWebBrowser.RequestHandler = new RequestHandler();
        ChromiumWebBrowser.RequestHandler = new WinFormsRequestHandler(openNewTab);
      
        /* Customize Handler */
        ChromiumWebBrowser.LifeSpanHandler = new ChromiumApplication.Main.Handler.LifeSpanHandler();
          ChromiumWebBrowser.RenderProcessMessageHandler = new RenderProcessMessageHandler();
        /// ChromiumWebBrowser.KeyboardHandler = new KeyboardHandler();
        ///  ChromiumWebBrowser.MenuHandler = new CustomMenuHandler();
        /// ChromiumWebBrowser.JsDialogHandler = new ChromiumApplication.Main.Handlers.JsDialogHandler();

        RequestContextSettings requestContextSettings = new RequestContextSettings();
        requestContextSettings.AcceptLanguageList = "en-US,ru,ar,zh-CN,zh-TW,ko,ja,en-GB";
        requestContextSettings.CachePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + @"\.AppPathProfileUserDataCefSharp";
        requestContextSettings.PersistSessionCookies = true;
        requestContextSettings.PersistUserPreferences = true;
        requestContextSettings.IgnoreCertificateErrors = true;
        requestContextSettings.EnableNetSecurityExpiration = true;
        ChromiumWebBrowser.RequestContext = new  RequestContext(requestContextSettings);



        ChromiumWebBrowser.JavascriptObjectRepository.Register("bound", new BoundObject(), isAsync: false, options: BindingOptions.DefaultBinder);
        ChromiumWebBrowser.JavascriptObjectRepository.Register("boundAsync", new BoundObject.AsyncBoundObject(), isAsync: true, options: BindingOptions.DefaultBinder);

        //If you call CefSharp.BindObjectAsync in javascript and pass in the name of an object which is not yet
        //bound, then ResolveObject will be called, you can then register it
        ChromiumWebBrowser.JavascriptObjectRepository.ResolveObject += (sender, e) =>
        {
            var repo = e.ObjectRepository;
            if (e.ObjectName == "boundAsync2")
            {
                repo.Register("boundAsync2", new BoundObject.AsyncBoundObject(), isAsync: true, options: BindingOptions.DefaultBinder);
            }
        };
        /// ChromiumWebBrowser.CreateControl();
        settings.RegisterExtension(new V8Extension("showModalDialog", Resources.showModalDialog)); ///CefExtension


        //   settings.RegisterExtension(new CefExtension("showModalDialog", Resources.showModalDialog)); ///CefExtension

        GETExample.RegisterTestResources(ChromiumWebBrowser);
       // ChromiumWebBrowser.RegisterJsObject("bound", new BoundObject());
       // BindingOptions options = null;
       // ChromiumWebBrowser.JavascriptObjectRepository.Register("boundAsync", new BoundObject(), true, options);

        // ChromiumWebBrowser.JsDialogHandler = new ChromiumApplication.Main.Handlers.JsDialogHandler();
        // ChromiumWebBrowser.KeyboardHandler = new KeyboardHandler();


        // ChromiumWebBrowser.DisplayHandler = new ChromiumApplication.Main.Handler.DisplayHandler();
        // Load += Form1_Load;

        //Only perform layout when control has completly finished resizing
        /// ResizeBegin += (s, e) => SuspendLayout();
        ///  ResizeEnd += (s, e) => ResumeLayout(true);

        this.multiThreadedMessageLoopEnabled = multiThreadedMessageLoopEnabled;

        //    ChromiumWebBrowser.NewTabClicked += control_NewTabClicked;
        //  uiBrowserTabControl.SelectedIndexChange += uiBrowserTabControl_SelectedIndexChange;
        // uiBrowserTabControl.Closed += UiBrowserTabControl_Closed;
      //// CefExample.RegisterTestResources(ChromiumWebBrowser);


        var bitness = Environment.Is64BitProcess ? "x64" : "x86";
        var version = String.Format("Chromium: {0}, CEF: {1}, CefSharp: {2}, Environment: {3}", Cef.ChromiumVersion, Cef.CefVersion, Cef.CefSharpVersion, bitness);
    }
   
      private void Chrome_Web_Store_Extensions(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://chrome.google.com/webstore?hl=en");

    }
    private void Notify_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        this.ShowInTaskbar = !this.ShowInTaskbar;

    }
    private void ActivateTool(object sender, EventArgs e)
    {
       /// AddTab(DefaultUrl);
        AddTab(Form1.DefaultUrl);
        /// AddTabGet(DefaultUrl);
    }
    private void GetGoodBar(object sender, EventArgs e)
    {
      ///  AddTab(DefaultCustom);
    }
    public void NewTabBar(object sender, EventArgs e)
    {
        TabPage tpage = new TabPage();
        tpage.Text = "New Tab Default Custom";
        browserTabControl.Controls.Add(tpage);
        toolStripTextBoxAddress.Text = "chrome://version";
        ChromiumWebBrowser ChromiumWebBrowser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text);
        ChromiumWebBrowser.Parent = tpage;
        ChromiumWebBrowser.Dock = DockStyle.Fill;

        ChromiumWebBrowser.AddressChanged += OnBrowserAddressChanged;
        ChromiumWebBrowser.TitleChanged += OnBrowserTitleChanged;
        ChromiumWebBrowser.StatusMessage += OnStatusMessageChanged;

        /* Customize Handler */
        ChromiumWebBrowser.DownloadHandler = new ChromiumApplication.Main.Handler.DownloadHandler();
        ChromiumWebBrowser.MenuHandler = new ChromiumApplication.Main.Handler.Example.MenuHandler();
        ChromiumWebBrowser.LifeSpanHandler = new ChromiumApplication.Main.Handler.LifeSpanHandler();
        ChromiumWebBrowser.RequestHandler = new RequestHandler();
        ChromiumWebBrowser.DisplayHandler = new DisplayHandler();
        ChromiumWebBrowser.RequestHandler = new WinFormsRequestHandler(openNewTab);
        ChromiumWebBrowser.KeyboardHandler = new KeyboardHandler();
        RequestContextSettings requestContextSettings = new RequestContextSettings();
        requestContextSettings.AcceptLanguageList = "en-US,ru,ar,zh-CN,zh-TW,ko,ja,en-GB";
        requestContextSettings.CachePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + @"\.AppPathProfileUserDataCefSharp";
        requestContextSettings.PersistSessionCookies = true;
        requestContextSettings.PersistUserPreferences = true;
        requestContextSettings.IgnoreCertificateErrors = true;
        requestContextSettings.EnableNetSecurityExpiration = true;
        ChromiumWebBrowser.RequestContext = new RequestContext(requestContextSettings);

    }
    private void newTabAction(object sender, EventArgs e)
    {
        NewTab("https://www.google.com");
    }      

    private void NewTab(string startUrl)
    {
        var page = new TabPage("New Tab Customize");
        page.Padding = new Padding(0, 0, 0, 0);
        /// page.Text = "New Tab Customize";
        /// 
        toolStripTextBoxAddress.Text = "chrome://version";
        ChromiumWebBrowser ChromiumWebBrowser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text);
        ChromiumWebBrowser.Dock = DockStyle.Fill;

        page.Controls.Add(ChromiumWebBrowser);
        browserTabControl.TabPages.Add(page);
        browserTabControl.SelectedTab = page;

        ChromiumWebBrowser.AddressChanged += OnBrowserAddressChanged;
        ChromiumWebBrowser.TitleChanged += OnBrowserTitleChanged;
        ChromiumWebBrowser.StatusMessage += OnStatusMessageChanged;

        /* Customize Handler */
        ChromiumWebBrowser.DownloadHandler = new ChromiumApplication.Main.Handler.DownloadHandler();
        ChromiumWebBrowser.DisplayHandler = new DisplayHandler();

        ChromiumWebBrowser.MenuHandler = new ChromiumApplication.Main.Handler.CustomMenuHandler();
        ChromiumWebBrowser.LifeSpanHandler = new ChromiumApplication.Main.Handler.LifeSpanHandler();
       /// ChromiumWebBrowser.KeyboardHandler = new KeyboardHandler();
        /* Customize Handler */
        ChromiumWebBrowser.RequestHandler = new RequestHandler();
        ChromiumWebBrowser.RequestHandler = new WinFormsRequestHandler(openNewTab);

    }
    public void addNewTab()
    {
        //   ChromiumWebBrowser ChromiumWebBrowser = tabControl1.SelectedTab.Controls[0] as ChromiumWebBrowser;
        // ChromiumWebBrowser.TabIndex = 2;
        //    browserTabControl.SelectTab(browserTabControl.TabCount - 1);
        //    string title = "New Tab " + (browserTabControl.TabCount + 1).ToString();


        TabPage tpage = new TabPage();
        tpage.Text = "New Tab";
        browserTabControl.Controls.Add(tpage);
        toolStripTextBoxAddress.Text = "about:blank";
        ChromiumWebBrowser ChromiumWebBrowser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text);
        ChromiumWebBrowser.Parent = tpage;
        ChromiumWebBrowser.Dock = DockStyle.Fill;

        ChromiumWebBrowser.AddressChanged += OnBrowserAddressChanged;
        ChromiumWebBrowser.TitleChanged += OnBrowserTitleChanged;
        ChromiumWebBrowser.StatusMessage += OnStatusMessageChanged;

        /* Customize Handler */

        ChromiumWebBrowser.DownloadHandler = new ChromiumApplication.Main.Handler.DownloadHandler();
        ChromiumWebBrowser.DisplayHandler = new DisplayHandler();

        ChromiumWebBrowser.MenuHandler = new ChromiumApplication.Main.Share.CustomMenuHandler();
        ChromiumWebBrowser.LifeSpanHandler = new ChromiumApplication.Main.Handler.LifeSpanHandler();
        ChromiumWebBrowser.RequestHandler = new RequestHandler();
        ChromiumWebBrowser.RequestHandler = new WinFormsRequestHandler(openNewTab);
        ChromiumWebBrowser.KeyboardHandler = new KeyboardHandler();

    }

    private void NewTabPage(object sender, EventArgs e)
    {// New TabPage The Tabs:

        ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        TabPage tpage = new TabPage(); tpage.Text = " Ultimate Browser "; tpage.Show();
        browserTabControl.Controls.Add(tpage); ChromiumWebBrowser.Parent = tpage;

       // browserTabControl.TabIndex = 0;


        //  ChromiumWebBrowser.AddressChanged += Chrome_AddressChanged;
        //  ChromiumWebBrowser.TitleChanged += Chrome_TitleChanged;
		
		
        /* 
          toolStripTextBoxAddress.Text = "about:blank";
          ChromiumWebBrowser ChromiumWebBrowser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text);
          
         * ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
          string title = "New Tab " + (browserTabControl.TabCount - 0).ToString(); 
          TabPage myTabPage = new TabPage(title); browserTabControl.TabPages.Add(myTabPage);
          */
    }

    private void OnIsBrowserInitializedChanged(object sender, IsBrowserInitializedChangedEventArgs e)
    {
        if (e.IsBrowserInitialized)
        {
            var b = ((ChromiumWebBrowser)sender);

            this.InvokeOnUiThreadIfRequired(() => b.Focus());
        }
    }

    private void OnBrowserTitleChanged(object sender, TitleChangedEventArgs args)
    {
        this.InvokeOnUiThreadIfRequired(() => browserTabControl.SelectedTab.Text = args.Title);
        //             this.InvokeOnUiThreadIfRequired(() => Text = args.Title);
    }
    private void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs args)
    {
    }
    private void OnBrowserAddressChanged(object sender, AddressChangedEventArgs args)
    {
        this.InvokeOnUiThreadIfRequired(() => toolStripTextBoxAddress.Text = args.Address);
        //            this.InvokeOnUiThreadIfRequired(() => urlTextBox.Text = args.Address);
    }
    private void OnStatusMessageChanged(object sender, StatusMessageEventArgs args) 
    { 
    this.InvokeOnUiThreadIfRequired(() => statusLabel.Text = args.Value); 
    }


    /*

    /// private void OnBrowserStatusMessage(object sender, StatusMessageEventArgs args) { this.InvokeOnUiThreadIfRequired(() => statusLabel.Text = args.Value); }


    
        SetCanGoBack(args.CanGoBack);
        SetCanGoForward(args.CanGoForward);

        this.InvokeOnUiThreadIfRequired(() => SetIsLoading(!args.CanReload));

    private void SetCanGoBack(bool canGoBack)
    {
        //this.InvokeOnUiThreadIfRequired(() => CEFNowBack.Enabled = canGoBack);
    }

    private void SetCanGoForward(bool canGoForward)
    {
     //   this.InvokeOnUiThreadIfRequired(() => CEFNowForward.Enabled = canGoForward);
    }

    private void SetIsLoading(bool isLoading)
    {
     

    }
  */

    private static void BrowserLoadError(object sender, LoadErrorEventArgs e)
    {
        Console.WriteLine("This is not called");
    }

    /*
    private static void BrowserLoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
    {

      //  this.InvokeOnUiThreadIfRequired(() => SetIsLoading(args.IsLoading));

        if (!e.IsLoading)
        {
            Console.WriteLine("This is called 3 times, why?");
        }
    }
    */
    // private void Chrome_AddressChanged(object sender, AddressChangedEventArgs e) { this.Invoke(new MethodInvoker(() => { toolStripTextBoxAddress.Text = e.Address; })); }
    //  private void Chrome_TitleChanged(object sender, TitleChangedEventArgs e) { this.Invoke(new MethodInvoker(() => { browserTabControl.SelectedTab.Text = e.Title; })); }


    /// <summary>
    /// Ultimate
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>

    

    private void LoadExtensionsToolStripMenuItemClick(object sender, EventArgs e)
    {
        var control = GetCurrentTabControl();
        if (control != null)
        {
            //The sample extension only works for http(s) schemes
            if (control.Browser.Address.StartsWith("http"))
            {
                var requestContext = control.Browser.GetBrowserHost().RequestContext;

              //  var dir = System.IO.Path.Combine(AppContext.BaseDirectory, @"..\..\..\..\CefSharp.Example\Extensions");


                var dir = System.IO.Path.Combine(AppContext.BaseDirectory, @"Resources\Extensions");
                dir = System.IO.Path.GetFullPath(dir);
                if (!Directory.Exists(dir))
                {
                    throw new DirectoryNotFoundException("Unable to locate example extensions folder - " + dir);
                }

                var extensionHandler = new ExtensionHandler
                {
                    LoadExtensionPopup = (url) =>
                    {
                        BeginInvoke(new Action(() =>
                        {
                            var extensionForm = new Form(); //Form

                            var extensionBrowser = new ChromiumWebBrowser(url);
                            extensionBrowser.IsBrowserInitializedChanged += (s, args) =>
                            {
                                //extensionBrowser.ShowDevTools();
                            };

                            extensionForm.Controls.Add(extensionBrowser);

                            extensionForm.Show(this);
                        }));
                    },
                    GetActiveBrowser = (extension, isIncognito) =>
                    {
                        //Return the active browser for which the extension will act upon
                        return control.Browser.GetBrowser();
                    }
                };

                requestContext.LoadExtensionsFromDirectory(dir, extensionHandler);
            }
            else
            {
                MessageBox.Show("The sample extension only works with http(s) schemes, please load a different website and try again", "Unable to load Extension");
            }
        }
    }
    private void Find(object sender, EventArgs e)
    {
       // ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        //Find a = new Find(); a.Show();
    }

   

    private void githubgo(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://github.com/mohamedosama914");
    }
    private void facebook(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://www.facebook.com/MohamedOsama914");
    }
    private void twitter(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://twitter.com/mohamedosama914?lang=en-US");
    }
    private void instagram(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://www.instagram.com/mohamed.osama914/");
    }
    private void WebSite(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://cylindersmyprograms.wordpress.com/");
    }

    

 
    private void BrowserAddressViewSource(object sender, EventArgs e)
    {                        // browserTabControl.TabIndex = 0;
    }
    private void NotifyRT(object sender, EventArgs e)
    {
        Cef.Shutdown();
        Close();
    }
    //settings.CachePath
    /// <summary>
  //  private string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + @"\";
    /// </summary>
    //settings.CachePath

    public static Form1 Instance;
    public static string Branding = "Auto";
    /*
    public static string DownloadsURL = "sharpbrowser://Main/Example/AppExample/storage/downloads.html";
    public static string FileNotFoundURL = "sharpbrowser://Main/Example/AppExample/storage/errors/notFound.html";
    public static string CannotConnectURL = "sharpbrowser://Main/Example/AppExample/storage/errors/cannotConnect.html";
    */

    private static string GetAppDir(string name)
    {


        string winXPDir = @"C:\Documents and Settings\All Users\Application Data\";
        if (Directory.Exists(winXPDir))
        {
            return winXPDir + Branding + @"\" + name + @"\";
        }
        return @"C:\ProgramData\" + Branding + @"\" + name + @"\";

    }


    // { var iconURL = "http://" + BaseUrl.Host + "/favicon.ico"; WebRequest request = System.Net.HttpWebRequest.Create(iconURL); System.Net.WebResponse response = request.GetResponse(); System.IO.Stream stream = response.GetResponseStream(); dynamic favicon = Image.FromStream(stream); this.browserTabControl.SelectedTab.ImageIndex = favicon; // this.browserTabControl.SelectedTab.ImageIndex = null; // Image | ImageIndex }


    private void GetAbout(object sender, EventArgs e)
    {

        About a = new About();
        a.Show();
    }
    private void ExtAppScreensnapshot(object sender, EventArgs e)
    {
        System.Diagnostics.Process.Start(@"ExtApp\SnapImg\screensnapshot.exe");
        //modify the start path for wherever your copy is located at
    }
    private void ApplicationExit(object sender, EventArgs e)
    {
        Application.Exit();
    }

    private void ApplicationRestart(object sender, EventArgs e)
    {
        Application.Restart();
    }

    private void CEFNowBack(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Back();
    }

    private void CEFNowForward(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Forward();
    }

    private void CEFNowExit(object sender, EventArgs e)
    {
        Cef.Shutdown();
        Close();
    }

    private void CEFNewUndo(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Undo();
    }

    private void CEFOldRedo(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Redo();
    }

    private void CEFNowCut(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Cut();
    }

    private void CEFNowCopy(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Copy();
    }

    private void CEFNowPaste(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Paste();
    }

    private void CEFNowDelete(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Delete();
    }

    private void CEFNowSelect(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Select();
    }
    private void CEFNowSelectAll(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.SelectAll();
    }


    private void CEFNowStop(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Stop();
    }

    private void CEFNowReload(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Reload();
    }

    private void CEFNowRefresh(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Refresh();
    }

    private void CEFNowShowDevTools(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.ShowDevTools();
    }

    private void CEFNowCloseDevTools(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.CloseDevTools();
    }

    private void TMDb(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://www.themoviedb.org");
    }
    private void CEFNowGithub(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://github.com");
    }
    private void CEFNowGoogle(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://www.google.com");
    }

    private void CEFNowYouTube(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://www.youtube.com");
    }

    private void CEFNowYahooMail(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://mail.yahoo.com/neo/b/launch?.src=neo&reason=ymv_mismatch");
    }
    private void YahooMailNew(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://mail.yahoo.com");
    }
    private void CEFNowFacebookPC(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://www.facebook.com");
    }

    private void CEFNowFacebookMobile(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://m.facebook.com");
    }

    private void CEFNowCefSharpVersion(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("chrome://chrome-urls/");
    }
    private void CefGPU(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("chrome://gpu/");
    }
    private void CEFNowGoogleTranslate(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://translate.google.com");
    }

    private void CEFNowGoogleTranslateToolkit(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://translate.google.com/toolkit");
    }
    private void vikiNew(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("https://www.viki.com/sign_in");
    }

    private void SupportedChromeExtensions(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("chrome://extensions-support/");
        // https://bitbucket.org/chromiumembedded/cef/issues/1947/add-support-for-chrome-extensions
    }

    private void BrowserUndo(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        if (toolStripTextBoxAddress.CanUndo) ChromiumWebBrowser.Undo();
    }

    private void BrowserRedo(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Redo();
    }

    private void BrowserCut(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Cut();
    }

    private void BrowserCopy(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Copy();
    }

    private void BrowserPaste(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;

        ChromiumWebBrowser.Paste();
    }

    private void BrowserDelete(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Delete();
    }

    private void BrowserSelect(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        if (ChromiumWebBrowser.CanSelect)
            ChromiumWebBrowser.Select();
    }
    private void BrowserSelectAll(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.SelectAll();
    }

    //  public static class GetExtensions   {        }

    private void DefaultCustomHome(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;

        ChromiumWebBrowser.Load("http://seriesmoviesultimate.webege.com/");

        /*
        //   chromeBrowser.Load("file:///Resources/Home.html");
        //   chromeBrowser.Load("http://test");
        //   ChromiumWebBrowser.Load("file:///Resources/other_tests.html");
        //   ChromiumWebBrowser.Load("file:///Resources/other_tests.html");
        //   ChromiumWebBrowser.Load("localfolder://cefsharp/");
        //   ChromiumWebBrowser.Load("localfolder://cefsharp/Resources/other_tests.html");
        //   ChromiumWebBrowser.Load("custom://cefsharp");
        //   ChromiumWebBrowser.Load("http://localhost//test//");
        //   ChromiumWebBrowser.Load("custom://cefsharp/home.html");
        //   ChromiumWebBrowser.Load("custom://cefsharp/Resources/home.html");
        //   chromeBrowser.Load("file:///Resources/Home.html");
        //   ChromiumWebBrowser.Load("http://test/Resources/Home.html");
        //   chromeBrowser.Load("http://test/resource/");
        //   chromeBrowser.LoadHtml(File.ReadAllText(@"file:///Resources/Home.html"), @"file:///Resources/Home.html"); */
    }

    private void LocalDiskC(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("C:/");
    }

    private void LocalDiskD(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("D:/");
    }

    private void LocalDiskE(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("E:/");
    }

    private void LocalDiskF(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("F:/");
    }

    private void CEFNowDownloads(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("file:///Main/Example/AppExample/storage/downloads.html");
    }

    private void WindowsMediaPlayer(object sender, EventArgs e)
    {
        WindowsMediaPlayer a = new WindowsMediaPlayer();
        a.Show();
    }

    private void Favicon(object sender, EventArgs e)
    {

    }
    private void GetBookmarks(object sender, EventArgs e)
    {


        ABookmarksForm a = new ABookmarksForm(); a.Show();
    }

    private void localhost(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        //  ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[2] as ChromiumWebBrowser;
        ChromiumWebBrowser.Load("http://localhost/");
        //  ChromiumWebBrowser.Load("http://127.0.0.1");
    }
    private void btnBack_Click(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        if (ChromiumWebBrowser.CanGoBack)
            ChromiumWebBrowser.Back();
    }

    private void btnForward_Click(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        if (ChromiumWebBrowser.CanGoForward)
            ChromiumWebBrowser.Forward();
    }

    private void btnGo_Click(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        if (ChromiumWebBrowser != null)
            ChromiumWebBrowser.Load(toolStripTextBoxAddress.Text);
    }
    private void CefApplication(object sender, EventArgs e)
    {

        addNewTab();
        ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;

    }
   

    /*
    private void NewTabPage(object sender, EventArgs e)
    {// New TabPage The Tabs:
        ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        // string title = "New Tab " + (tabControl1.TabCount + 1).ToString(); TabPage myTabPage = new TabPage(title); tabControl1.TabPages.Add(myTabPage);
    }
      

    private void TabPage(object sender, EventArgs e)
    {
        ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;

        // ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[3] as ChromiumWebBrowser;          
        TabPage tpage = new TabPage();
        tpage.Text = "New Tab Page";
        browserTabControl.Controls.Add(tpage);
        ChromiumWebBrowser.Dock = DockStyle.Fill;
        ChromiumWebBrowser.AddressChanged += Chrome_AddressChanged;
        ChromiumWebBrowser.TitleChanged += Chrome_TitleChanged;

    }
    */

    private void RemovesAllTabPages(object sender, EventArgs e)
    {// Removes all the tabs: //  ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;

        ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        browserTabControl.TabPages.Clear();
    }

    private void RemoveTabPage(object sender, EventArgs e)
    {// Removes the selected tab:  
        ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
        browserTabControl.TabPages.Remove(browserTabControl.SelectedTab);
    }


    // cefsharp Bookmarks tab


    // https://stackoverflow.com/questions/45731714/how-to-implement-new-tab-in-cefsharp-with-correct-address-and-title-change

    // new tab function

    /*
    private void toolStripTextBoxAddress_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)13)
        {
            ChromiumWebBrowser ChromiumWebBrowser = browserTabControl.SelectedTab.Controls[0] as ChromiumWebBrowser;
            if (ChromiumWebBrowser != null)
            {
                this.ChromiumWebBrowser.Load(toolStripTextBoxAddress.Text);
            }
        }
    }
    */
    /*
        const string html = "<html><head><title>Test</title></head>   <body><h1> New </h1></body></html>";
        var base64EncodedHtml = Convert.ToBase64String(Encoding.UTF8.GetBytes(html));
        ChromiumWebBrowser.Load("data:text/html;base64," + base64EncodedHtml);
    */


    private void toolStripTextBoxAddress_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            if (!string.IsNullOrEmpty(toolStripTextBoxAddress.Text))
            {
                if (!toolStripTextBoxAddress.Text.Contains("."))
                {
                    //   ChromiumWebBrowser.Load("https://www.google.com.hk/search?q=" + toolStripTextBoxAddress.Text);

                    getCurrentBrowser().Load("https://www.google.com.hk/search?q=" + toolStripTextBoxAddress.Text);
                }
                else
                {
                    // ChromiumWebBrowser.Load(toolStripTextBoxAddress.Text);

                    getCurrentBrowser().Load(toolStripTextBoxAddress.Text);
                }     }  }   }

    // get current browser
    private ChromiumWebBrowser getCurrentBrowser() { return (ChromiumWebBrowser)browserTabControl.SelectedTab.Controls[0]; }

    private void FaviconTab(object sender, EventArgs e)
    {
        //  ChromiumWebBrowser = tabControl1.SelectedTab.Controls[ - 0] as ChromiumWebBrowser;
        ChromiumWebBrowser currentBrowser = getCurrentBrowser(); toolStripTextBoxAddress.Text = currentBrowser.Address;
    }
    private void Customize(object sender, EventArgs e) {   /*  ChromiumApplication.Main.Customize  a = new ChromiumApplication.Main.Customize();   a.Show();*/  }





    //   public static void SetAsPopup(this IWebBrowser browser) { } 


    //   IDownloadHandler DownloadHandler { get; set; }
    //  public static class WebBrowserExtensions 

    public string SetPreference { get; private set; }
    public string cachePath { get; private set; }
    public object context { get; private set; }
    public static bool IsInitialized { get; }
    public static bool CrashReportingEnabled { get; }
    public static string ChromiumVersion { get; }
    public static string CefCommitHash { get; }
    public static BindingOptions DefaultBinder { get; }
    public IBinder Binder { get; set; }
    public IBrowser Browser { get; }
    public static TaskFactory FileThreadTaskFactory { get; set; }
    public static TaskFactory IOThreadTaskFactory { get; set; }
    public static TaskFactory UIThreadTaskFactory { get; set; }
    public virtual CefState Plugins { get; set; }
    public virtual CefState WebGl { get; set; }
    public virtual CefState Databases { get; set; }
    public virtual string AcceptLanguageList { get; set; }
    public virtual CefState ApplicationCache { get; set; }
    public bool CamelCaseJavascriptNames { get; set; }
    public string FilePath { get; }
    public string MimeType { get; set; }
    public string Address { get; }
    public virtual IDictionary<string, string> CefCommandLineArgs { get; }
    public IEnumerable<CefCustomScheme> CefCustomSchemes { get; }
    public virtual IEnumerable<CefExtension> Extensions { get; }
    public string Locale { get; set; }
    public string LocalesDirPath { get; set; }
    public string ResourcesDirPath { get; set; }
    public string JavascriptFlags { get; set; }
    public string AcceptLanguage { get; private set; }
    public object CommandLine { get; private set; }
    public object cefSettings { get; private set; }
 //   public string BaseUrl { get; private set; }
   // public CefSharpSchemeHandlerFactory SchemeHandlerFactory { get; private set; }
    public EventHandler<FrameLoadStartEventArgs> chromeBrowser_FrameLoadStart { get; private set; }
  //  public bool DebuggingSubProcess { get; private set; }
    public IBrowserProcessHandler browserProcessHandler { get; private set; }
    public object AddressChanged { get; private set; }
    public object LoadingStateChanged { get; private set; }
    public object StatusMessage { get; private set; }
    public object BrowserInitialized { get; private set; }
    public object ConsoleMessage { get; private set; }
    public object FrameLoadEnd { get; private set; }
    public object FrameLoadStart { get; private set; }
    public object LoadError { get; private set; }
    public object CachePath { get; private set; }
    public object Tools { get; private set; }
    public object newtab { get; private set; }

    ///  public EventHandler<TitleChangedEventArgs> OnBrowserTitleChanged { get; private set; }

   /// void OnFullscreenModeChange(IWebBrowser browserTabControl, IBrowser ChromiumWebBrowser, bool fullscreen) { }
  //  void OnFaviconUrlChange(IWebBrowser browserTabControl, IBrowser ChromiumWebBrowser, IList<string> urls) { }
    public object response { get; private set; }
    public object Account { get; private set; }
    public RequestContextSettings requestContextSettings { get; private set; }
    public BrowserSettings browserSettings { get; private set; }
    public DrawItemEventHandler DisableTab_DrawItem { get; private set; }
    public ChromiumWebBrowser currentBrowser { get; private set; }
    public int UncaughtExceptionStackSize { get; private set; }
    public int OnFullscreenChanged { get; private set; }
    public int Chrome_FullscreenChanged { get; private set; }




    /*
    /// <summary>
    /// 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="args"></param>
    public class RenderProcessMessageHandler : IRenderProcessMessageHandler
    {
        public void OnContextReleased(IWebBrowser browserControl, IBrowser browser, IFrame frame)
        {
            throw new NotImplementedException();

        }

        public void OnFocusedNodeChanged(IWebBrowser browserControl, IBrowser browser, IFrame frame, IDomNode node)
        {
            throw new NotImplementedException();
        }

        public void OnUncaughtException(IWebBrowser browserControl, IBrowser browser, IFrame frame, JavascriptException exception)
        {
            throw new NotImplementedException();
        }

        // Wait for the underlying `Javascript Context` to be created, this is only called for the main frame.
        // If the page has no javascript, no context will be created.
        void IRenderProcessMessageHandler.OnContextCreated(IWebBrowser browserControl, IBrowser browser, IFrame frame)
        {
            const string script = "document.addEventListener('DOMContentLoaded', function(){ alert('DomLoaded'); });";

            frame.ExecuteJavaScriptAsync(script);
        }
    }
    */


    /*
    private ToolStripComboBox addressBar;
    private ToolStripMenuItem menuItem;
    public event EventHandler UpdateNavigation;

    private ExtendedBrowser CurrentBrowser => CurrentTab?.Browser;
    private bool firstLoad = true;
    public DotNetChromeTabs.ChromeTabControl.TabPage.TabPageCollection TabPages { get { return browserTabControl?.TabPages; } }

    public BrowserTab CurrentTab
    {
        get
        {
            int selectedIndex = (int)browserTabControl?.TabPages?.SelectedIndex;
            return browserTabControl?.TabPages?[selectedIndex] as BrowserTab;
        }
    }
    public void SetAddressBar(ToolStripComboBox addressBar)
    {
     //   this.addressBar = addressBar;

    }
    private void uiBrowserTabControl_SelectedIndexChange(object sender, EventArgs e)
    {
        //TODO: had a play in ChromeTabControl.
        //Not had time to fully inspect ramifications of this event.
        //It's not quite 100%, so needs work.
        //Problems arise when drag-moving tab.
        addressBar.Text = CurrentTab?.Browser.Address;

        //UpdateForwardAndBackButtons?.Invoke(this, EventArgs.Empty);
        UpdateNavigation?.Invoke(this, new NavigationalEventArgs(CurrentTab.CanGoForward, CurrentTab.CanGoBack));
    }

    private void uiBrowserPanel_TabIndexChanged(object sender, EventArgs e)
    {
        if (CurrentTab.Browser != null)
            addressBar.Text = CurrentTab.CurrentUrl;
    }
    void control_NewTabClicked(object sender, EventArgs e)
    {
        CreateTab();
    }
    public void CreateTab(string url)
    {

        //if ((RuntimeSettings.EnableWebDownloadMode && firstLoad) || !RuntimeSettings.EnableWebDownloadMode)
        //{
        BrowserTab tab = new BrowserTab(url, addressBar);
        browserTabControl.TabPages.Add(tab);
        AddBrowserEvents();
        tab.OpenInNewtab += Tab_OpenInNewtab;
        //}
        //else
        //{
        //    CurrentTab.Browser.Load(url);
        //}



    }

    private void Tab_OpenInNewtab(object sender, EventArgs e)
    {
        this.InvokeIfRequired(() => CreateTab(((NewTabEventArgs)e).Url));
    }

    private void CreateTab()
    {
        string url = "";
        //duckduckgo
        url = RuntimeSettings.IsUsingTor ? "http://3g2upl4pq6kufc4m.onion" : UserSettings.Load().Homepage;
        CreateTab(url);
    }

    private void AddBrowserEvents()
    {
        CurrentBrowser.ScreenshotCompleted += Screenshot_Completed;
        CurrentBrowser.DownloadingProgress += currentBrowser_DownloadingProgress;
        CurrentBrowser.DownloadComplete += CurrentBrowser_DownloadComplete;
        CurrentBrowser.YouTubeDownloadProgress += CurrentBrowser_YouTubeDownloadProgress;
        CurrentBrowser.YouTubeDownloadComplete += CurrentBrowser_YouTubeDownloadComplete;
        CurrentBrowser.StatusMessage += CurrentBrowser_StatusMessage;
        CurrentBrowser.OpenNewTabContextMenu += CurrentBrowser_OpenNewTabContextMenu;
        CurrentBrowser.LoadingStateChanged += CurrentBrowser_LoadingStateChanged;
        CurrentBrowser.OpenTinEye += CurrentBrowser_OpenTinEye;
        CurrentBrowser.DownloadStatusChanged += CurrentBrowser_DownloadStatusChanged;
        CurrentBrowser.DownloadCompleted += CurrentBrowser_DownloadCompleted;
        CurrentBrowser.SearchText += CurrentBrowser_SearchText;
        CurrentBrowser.AddBookmark += CurrentBrowser_AddBookmark;
    }
    private void CurrentBrowser_SearchText(object sender, EventArgs e)
    {
        string text = ((TextEventArgs)e).Result;
        this.InvokeIfRequired(() => CreateTab("https://www.google.co.uk/search?q=" + text));
    }
    private void CurrentBrowser_OpenNewTabContextMenu(object sender, EventArgs e)
    {

        this.InvokeIfRequired(() => CreateTab(((NewTabEventArgs)e).Url));
    }
    private void ShowImagePreviewer(Actions action, string imagePath)
    {
        Invoke((MethodInvoker)delegate
        {
            ScreenshotDetails details = new ScreenshotDetails(CurrentBrowser.URL);
            DialogResult dialogRes;
            string fileName;
            string dateAndtime;

            using (Previewer previewForm = new ImagePreviewer(action, CurrentBrowser.URL, imagePath))
            {
                dialogRes = previewForm.ShowDialog();
                fileName = previewForm.FileName + previewForm.FileExtension;
                dateAndtime = previewForm.DateAndTime;
            }
            ImageDiskCache.RemoveItemsInCache();
            if (dialogRes != DialogResult.OK)
                return;

            DisplaySavedLabel(fileName, dateAndtime);
        });

    }
    public void FullPageScreenshot()
    {
        CurrentBrowser.GenerateFullpageScreenshot();
    }

    public void CurrentViewScreenshot()
    {
        CurrentBrowser.GetCurrentViewportScreenshot();
    }
    public void TimedScreenshot(int seconds)
    {
        var future = DateTime.Now.AddSeconds(seconds);
        do
        {
            uiActionLoggedToolStripStatusLabel.Text = string.Format("Screenshotting in: {0}", (future - DateTime.Now).ToString("ss"));
            Application.DoEvents();
        } while (future > DateTime.Now);
        uiActionLoggedToolStripStatusLabel.Text = "";
        CurrentBrowser.GetCurrentViewportScreenshot();
    }

    */


    /// <summary>
    /// Used to add a Popup browser as a Tab
    /// </summary>
    /// <param name="browserHostControl"></param>
    public void AddTab(Control browserHostControl, string url)
    {
        browserTabControl.SuspendLayout();

        var tabPage = new TabPage(url)
        {
            Dock = DockStyle.Fill
        };

        tabPage.Controls.Add(browserHostControl);

        browserTabControl.TabPages.Add(tabPage);

        //Make newly created tab active
        browserTabControl.SelectedTab = tabPage;

        browserTabControl.ResumeLayout(true);
    }

    private void AddTab(string url, int? insertIndex = null)
    {
        browserTabControl.SuspendLayout();

        var browser = new BrowserTabUserControl(AddTab, url, multiThreadedMessageLoopEnabled)
        {
            Dock = DockStyle.Fill,
        };

        var tabPage = new TabPage(url)
        {
            Dock = DockStyle.Fill
        };

        //This call isn't required for the sample to work. 
        //It's sole purpose is to demonstrate that #553 has been resolved.
        browser.CreateControl();

        tabPage.Controls.Add(browser);

        if (insertIndex == null)
        {
            browserTabControl.TabPages.Add(tabPage);
        }
        else
        {
            browserTabControl.TabPages.Insert(insertIndex.Value, tabPage);
        }

        //Make newly created tab active
        browserTabControl.SelectedTab = tabPage;

        browserTabControl.ResumeLayout(true);
    }
    private BrowserTabUserControl GetCurrentTabControl()
    {
        if (browserTabControl.SelectedIndex == -1)
        {
            return null;
        }

        var tabPage = browserTabControl.Controls[browserTabControl.SelectedIndex];
        var control = tabPage.Controls[0] as BrowserTabUserControl;

        return control;
    }

    private void NewTabToolStripMenuItemClick(object sender, EventArgs e)
    {
        AddTab(DefaultUrlForAddedTabs);
    }       

   

    /*
    private void LoadExtensionsToolStripMenuItemClick(object sender, EventArgs e)
    {
        var control = GetCurrentTabControl();
        if (control != null)
        {
            //The sample extension only works for http(s) schemes
            if (control.Browser.Address.StartsWith("http"))
            {
                var requestContext = control.Browser.GetBrowserHost().RequestContext;

                var dir = System.IO.Path.Combine(AppContext.BaseDirectory, @"..\Main\Extensions");
                dir = System.IO.Path.GetFullPath(dir);
                if (!Directory.Exists(dir))
                {
                    throw new DirectoryNotFoundException("Unable to locate example extensions folder - " + dir);
                }

                Cef.UIThreadTaskFactory.StartNew(() =>
                {
                    var extensionHandler = new ExtensionHandler
                    {
                        LoadExtensionPopup = (url) =>
                        {
                            BeginInvoke(new Action(() =>
                            {
                                var extensionForm = new Form();

                                var extensionBrowser = new ChromiumWebBrowser(url);
                                //extensionBrowser.IsBrowserInitializedChanged += (s, args) =>
                                //{
                                //    extensionBrowser.ShowDevTools();
                                //};

                                extensionForm.Controls.Add(extensionBrowser);

                                extensionForm.Show(this);
                            }));
                        },
                        GetActiveBrowser = (extension, isIncognito) =>
                        {
                            //Return the active browser for which the extension will act upon
                            return control.Browser.GetBrowser();
                        }
                    };

                    //requestContext.LoadExtensionFromDirectory(Path.Combine(dir, "set_page_color"), new ExtensionHandler());

                    requestContext.LoadExtensionsFromDirectory(dir, extensionHandler);
                });
            }
            else
            {
                MessageBox.Show("The sample extension only works with http(s) schemes, please load a different website and try again", "Unable to load Extension");
            }
        }
    }
    */
}

}

/*
Handler // ChromiumWebBrowser.DownloadHandler = new DownloadHandler(); // ChromiumWebBrowser.DownloadHandler = new ChromiumApplication.Main.DownloadHandler(); // ChromiumWebBrowser.MenuHandler = new ChromiumApplication.Main.Handler.CustomMenuHandler();
Handler */

/* SaveAsDownloadimage

how to Add c# Cefsharp winforms TabControl & Save As Downloading image https://stackoverflow.com/questions/49817310/how-to-add-c-sharp-cefsharp-winforms-tabcontrol-save-as-downloading-image

Please Now

c# Cefsharp Winforms TabControl - how to get popup - Popup Windows New c# Cefsharp Winforms TabControl - how to get favicon of visited site - favicon.ico c# Cefsharp winforms TabControl - how to get Add New Tab Button (+) &|& Add Cancel Tab Button (X) c# Cefsharp winforms TabControl - how to get Loading of visited site c# Cefsharp winforms TabControl - how to get BookmarksForm + Add link Bookmark c# Cefsharp winforms - how to get Cookie + CachePath Custom System Menu | MyCustomChromeDevToolsSystemMenu c# Cefsharp winforms - how to get SystemMenu + ChromeDevToolsSystemMenu

Custom Menu Handler | MyCustomMenuHandler c# Cefsharp Winforms TabControl - how to get Save Download image + Save As Downloading image */

/*

  • System.Diagnostics.Process.Start(@"ExtApp\SnapImg\screensnapshot.exe"); // modify the start path for wherever your copy is located at

////

 public bool WebSecurity = true;
 public bool CrossDomainSecurity = true;
 public bool WebGL = true;

*/

/*

public void InitializeChromium() { CefSettings settings = new CefSettings(); Cef.Initialize(settings); toolStripTextBoxAddress.Text = "Chrome://Chrome"; // http://seriesmoviesultimate.webege.com/ ChromiumWebBrowser ChromiumWebBrowser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text)

{ BrowserSettings = { DefaultEncoding = "UTF-8", Databases = CefState.Disabled, JavascriptDomPaste = CefState.Disabled, Javascript = CefState.Disabled, ApplicationCache = CefState.Disabled, FileAccessFromFileUrls = CefState.Enabled, TabToLinks = CefState.Default, UniversalAccessFromFileUrls = CefState.Default, WebSecurity = CefState.Enabled, LocalStorage = CefState.Disabled, ImageLoading = CefState.Default, Plugins = CefState.Default, WebGl = CefState.Disabled } };


 var root = System.IO.Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.Windows));
string downloadPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string downloadFileName = downloadPath + "\\XMLFILE.XML".ToString();
System.Data.SqlClient.SqlConnection con = null;
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("sp_RetrieveHardwareXML", con); DataSet ds = new DataSet();


ApplicationCache = CefState.Enabled,
FileAccessFromFileUrls = CefState.Default
 Javascript = CefState.Default,

// { BrowserSettings = { DefaultEncoding = "UTF-8", FileAccessFromFileUrls = CefState.Default, TabToLinks = CefState.Default, UniversalAccessFromFileUrls = CefState.Default, Javascript = CefState.Default, Databases = CefState.Default, WebSecurity = CefState.Enabled, LocalStorage = CefState.Default, ImageLoading = CefState.Default, ApplicationCache = CefSharp.CefState.Enabled, Plugins = CefState.Default, WebGl = CefState.Disabled } };

ChromiumWebBrowser.Dock = DockStyle.Fill; ChromiumWebBrowser.AddressChanged += Chrome_AddressChanged; ChromiumWebBrowser.TitleChanged += Chrome_TitleChanged;

 // Download Handler 
 ChromiumWebBrowser.DownloadHandler = new DownloadHandler();

 // Context Menu Handler 
 //  ChromiumWebBrowser.ContextMenuHandler = new ContextMenuHandler();

 // Register your Custom Menu Handler as default
 //  ChromiumWebBrowser.MenuHandler = new ChromiumApplication.AMyCustomMenuHandler();
 ChromiumWebBrowser.MenuHandler = new ChromiumApplication.ExampleMain.Example.Request.AMyCustomMenuHandler();

 // CefSharp ChromeDevToolsSystemMenu does not exist in the current context
 // ChromiumWebBrowser.ASystemMenu = new CreateSysMenu();
 ChromiumApplication.ExampleMain.Example.Request.ASystemMenu.CreateSysMenu(this);

 TabPage tpage = new TabPage(); tpage.Text = " Ultimate Browser "; tpage.Show();
 browserTabControl.Controls.Add(tpage); ChromiumWebBrowser.Parent = tpage;


 settings.CachePath = "GPUCache";
 settings.UserDataPath = "UserData";
 settings.AcceptLanguageList = "en-us,ar"; settings.LocalesDirPath = Application.StartupPath + "locales"; settings.Locale = "en-us";
 settings.PersistSessionCookies = false;       //true and false // settings.PersistSessionCookies = false; 
 settings.PersistUserPreferences = false;       //true and false
 settings.IgnoreCertificateErrors = true;      //true
 settings.MultiThreadedMessageLoop = true;     //true 
 settings.FocusedNodeChangedEnabled = true;    //true
 settings.WindowlessRenderingEnabled = true;   //true
 settings.CommandLineArgsDisabled = false;     //false // settings.CommandLineArgsDisabled = false;
 settings.LogSeverity = LogSeverity.Verbose;
 settings = new CefSettings { RemoteDebuggingPort = 8088 };
 settings.ResourcesDirPath = System.IO.Path.GetDirectoryName(new Uri(System.Reflection.Assembly.GetEntryAssembly().CodeBase).LocalPath);

 CefSharpSettings.LegacyJavascriptBindingEnabled = true; //true
 CefSharpSettings.ConcurrentTaskExecution = true; //true
 CefSharpSettings.WcfEnabled = true; //true

 settings.RegisterScheme(new CefCustomScheme { SchemeName = "sharpbrowser", SchemeHandlerFactory = new SchemeHandlerFactory() });
 settings.CachePath = GetAppDir("GPUCache");
 //   ChromiumApplication.ExampleMain.Example.Request.LifeSpanHandler life = new ChromiumApplication.ExampleMain.Example.Request.LifeSpanHandler();
 // Command Line Arguments
 settings.CefCommandLineArgs.Add("enable-begin-frame-scheduling", "1");
 settings.CefCommandLineArgs.Add("renderer-process-limit", "1");
 settings.CefCommandLineArgs.Add("persist_session_cookies", "1");
 // Enable
 settings.CefCommandLineArgs.Add("enable-npapi", "1");
 settings.CefCommandLineArgs.Add("enable-system", "1");
 settings.CefCommandLineArgs.Add("enable-extensions", "1");
 // Enable WebRTC
 settings.CefCommandLineArgs.Add("enable-media-stream", "1");
 //Extension support can be disabled
 //The PDF extension specifically can be disabled
 settings.CefCommandLineArgs.Add("disable-pdf-extension", "1");
 // Disables the DirectWrite font rendering system on windows.
 // Possibly useful when experiencing blury fonts.
 //   settings.CefCommandLineArgs.Add("disable-web-security", "disable-web-security");
 settings.CefCommandLineArgs.Add("disable-web-security", "1");
 //Disable GPU Acceleration
 settings.CefCommandLineArgs.Add("disable-gpu-vsync", "1");
 settings.CefCommandLineArgs.Add("disable-gpu", "1");

 // Proxy Stuff More Refinement is needed for reaching local IP's
 // Don't use a proxy server, always make direct connections. Overrides any other proxy server flags that are passed.
 // Slightly improves Cef initialize time as it won't attempt to resolve a proxy
 settings.CefCommandLineArgs.Add("no-proxy-server", "1");
 settings.CefCommandLineArgs.Add("proxy-auto-detect", "1");
 settings.CefCommandLineArgs.Add("winhttp-proxy-resolver", "1");



 //  settings.CefCommandLineArgs.Add("enable-browser-side-navigation", "1");
 // settings.CefCommandLineArgs.Add("enable-system-media", "1");
 // settings.CefCommandLineArgs.Add("enable-system-plugin", "1");
 // settings.CefCommandLineArgs.Add("enable-system-flash", "1");
 // settings.CefCommandLineArgs.Add("disable-browser-side-navigation", "1");

   ChromiumWebBrowser.# = new #();
     ChromiumWebBrowser.GetChanged += Chrome_GetChanged;
     ChromiumWebBrowser.OnFaviconUrlChanged += Chrome_OnFaviconUrlChanged;
     ChromiumWebBrowser.OnFullscreenModeChanged += Chrome_OnFullscreenModeChanged;
     ChromiumWebBrowser.FrameLoadStart += OnFrameLoadStart;
     ChromiumWebBrowser.FrameLoadEnd += OnFrameLoadEnd; 
     ChromiumWebBrowser.LoadingStateChanged += OnLoadingStateChanged;
     ChromiumWebBrowser.ConsoleMessage += OnBrowserConsoleMessage; 




 // https://ourcodeworld.com/search?q=Cefsharp+Winforms+Mp4
 // https://ourcodeworld.com/search?q=Cefsharp+Winforms+popup

 //One set this cannot be changed at runtime. If you need to change the proxy at runtime (dynamically) then
 //see https://github.com/cefsharp/CefSharp/wiki/General-Usage#proxy-resolution
 //  Proxy 
 //Legacy Binding Behaviour doesn't work for cross-site navigation (navigating to a different domain)
 //See issue https://github.com/cefsharp/CefSharp/issues/1203 for details

 //    toolStripTextBoxAddress.Text = "file:///Resources/other_tests.html";
 //      String page = string.Format(@"{0}\Resources\window.html", Application.StartupPath);  if (!File.Exists(page)) { MessageBox.Show("Error The html file doesn't exists : " + page); }
 //   ChromiumWebBrowser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text)
 //    ChromiumWebBrowser.RegisterJsObject("bound", new BoundObject());
 //   ChromiumWebBrowser.RequestHandler = new MyRequestHandler("actual_userName", "actual_password");
 //   Cef.Initialize(new CefSettings() // { CachePath = "Cache" + account.id });
 //    settings = new CefSettings() { PackLoadingDisabled = true }; Cef.Initialize(settings);

///

 var contextSettings = new RequestContextSettings();
 browserSettings = new BrowserSettings();

 requestContextSettings = new RequestContextSettings { CachePath = @"GPUCache" + ChromiumApplication.account.id };
 ChromiumWebBrowser.RequestContext = new RequestContext(new RequestContextSettings()
 {
     CachePath = System.IO.Directory.GetCurrentDirectory() + @"GPUCache" + DateTime.Now.ToLongTimeString()
 });

 contextSettings.CachePath = "GPUCache"; settings.CachePath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\GPUCache"; settings.CachePath = "GPUCache" + ChromiumApplication.account.id;


 ///

 // CefSharpSchemeHandlerFactory
 //  settings.RegisterScheme(new CefCustomScheme { SchemeName = "custom", SchemeHandlerFactory = new CefSharpSchemeHandlerFactory() });
 //  settings.RegisterScheme(new CefCustomScheme { SchemeName = CefSharpSchemeHandlerFactory.SchemeNameTest, SchemeHandlerFactory = new CefSharpSchemeHandlerFactory(), IsSecure = true });
 // settings.RegisterScheme(new CefCustomScheme { SchemeName = "https", SchemeHandlerFactory = new CefSharpSchemeHandlerFactory(), DomainName = "cefsharp.com", IsSecure = true });
 // ChromiumWebBrowser.RequestContext = new RequestContext(); requestContextSettings = new RequestContextSettings { CachePath = cachePath }; ChromiumWebBrowser.RequestContext = new RequestContext(new CustomRequestContextHandler());

 //   settings.LogFile = "GO.log";
 // var
 // settings.BrowserSubprocessPath = "CefSharp.BrowserSubprocess.exe";
 // settings.MultiThreadedMessageLoop = CefRuntime.Platform == CefRuntimePlatform.Windows;
 // settings.ReleaseDCheckEnabled = true;
 //NOTE: Set this before any calls to Cef.Initialize to specify a proxy with username and password

 // CefSharpSettings.Proxy = new ProxyOptions(ip: "localhost", port: "80", username: "CefSharp", password: "CefSharp");            
 // Cef.AddCrossOriginWhitelistEntry(BaseUrl, "https", "cefsharp.com", true); //false
 // CefSharp.BrowserSettings browser_setting = new CefSharp.BrowserSettings();
 // browser_setting.FileAccessFromFileUrlsAllowed = true; browser_setting.UniversalAccessFromFileUrlsAllowed = true;browser_setting.WebSecurityDisabled = true;
 // ChromiumWebBrowser.BrowserSettings = browser_setting;

 // Allow the use of local resources in the browser
 // BrowserSettings browserSettings = new BrowserSettings(); browserSettings.FileAccessFromFileUrls = CefState.Enabled; browserSettings.UniversalAccessFromFileUrls = CefState.Enabled;
 // ChromiumWebBrowser.BrowserSettings = browserSettings;
 // ChromiumWebBrowser.Parent = tabControl1.SelectedTab;
 // this.metroSetTabControl1.Controls.Add(chromeBrowser);
 // this.materialTabSelector1.Controls.Add(chromeBrowser);
 // this.materialTabSelector1.Controls.Add(chromeBrowser);
 // ChromiumWebBrowser.SetAsPopup();
 // Get Settings 
 // settings.LocalesDirPath = "locales";  settings.Locale = "ar";
 // settings.LocalesDirPath = Application.StartupPath + "\\locales"; 
 // settings.LocalesDirPath = Application.StartupPath + "locales";  settings.Locale = "jp"; 



 // Initialize cef with the provided settings
 // Create a browser component
 // CefSettings settingsBrowser = new CefSettings(); settingsBrowser.Locale = "ar";  Cef.Initialize(settingsBrowser);
 // chromeBrowser.ExecuteScriptAsync("Local Settings/User Data/CefSharpBrowserGPU/Cache");
 // By default CEF uses an in memory cache, to save cached data e.g. passwords you need to specify a cache path
 // NOTE: The executing user must have sufficent privileges to write to this folder.
 // settings.CachePath = "cache";
 // settings.CachePath = "Local/Settings/UserData/CefSharpBrowserGPU/Cache";


 // txtUrl.Text = "file:///Resources/Home.html"; chromeBrowser = new ChromiumWebBrowser(txtUrl.Text);
 // chromeBrowser = new ChromiumWebBrowser("chrome://version");
 // chromeBrowser = new ChromiumWebBrowser("chrome://version"){ BrowserSettings = { DefaultEncoding = "UTF-8", WebGl = CefState.Disabled }};

 // Add it to the form and fill it to the form window.
 // this.Controls.Add(chromeBrowser);
 //   this.materialTabControl1.Controls.Add(chromeBrowser); 
 //this.#.Controls.Add(Browser);
 //  materialTabControl1.Controls.Add(chromeBrowser);
 // toolStripContainer1.ContentPanel.Controls.Add(chromeBrowser); 
 // materialTabControl1
 //  this.pContainer.Controls.Add();
 //  chromeBrowser.Dock = DockStyle.Fill;
 //  chrome.AddressChanged += Chrome_AddressChanged;
 //  Set Google API keys, used for Geolocation requests sans GPS.  See http://www.chromium.org/developers/how-tos/api-keys
 //  Environment.SetEnvironmentVariable("GOOGLE_API_KEY", "AIzaSyBS-qjz0jmK4jvZy06Rq4DLs0_AITqo7lw");
 // Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_ID", "888034971568-kmdju8hjiem3mqqi3kgjmals6p0l0te4.apps.googleusercontent.com");
 // Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_SECRET", "6fa_ZYlY8KxDd_KDOz1SdENV");



 // Disable Flash | settings.CefCommandLineArgs.Add("disable-system-flash", "1"); settings.CefCommandLineArgs.Add("ppapi-flash-version", "20.0.0.306"); settings.CefCommandLineArgs.Add("ppapi-flash-path", "/Resources/PepperFlash/pepflashplayer.dll");

 ////  Perform <Unhandled Exception>


 //  Perform <Unhandled Exception>
 //    CefRuntime.AddWebPluginPath(@"C:\Program Files (x86)\VideoLAN\VLC\npvlc.dll");
 //    CefRuntime.AddWebPluginDirectory(@"C:\Program Files (x86)\VideoLAN\VLC");
 //    CefRuntime.AddWebPluginPath(@"E:\Program Files\Player\VideoLAN\32-bit\4.0.0\npvlc.dll");
 //    CefRuntime.AddWebPluginDirectory(@"E:\Program Files\Player\VideoLAN\32-bit\4.0.0");
 //     CefRuntime.AddWebPluginDirectory(@"C:\Program Files\Microsoft Silverlight\5.1.20513.0\");
 //     CefRuntime.AddWebPluginDirectory(@"C:\Program Files\Adobe\Reader 9.0\Reader\Browser");
 //     CefRuntime.AddWebPluginDirectory(@"C:\Windows\system32\Macromed\Flash"); CefRuntime.RefreshWebPlugins();
 //  Perform <Unhandled Exception>

}

internal IWebBrowser addNewTab(string targetUrl) { // LifeSpanHandler.cs throw new NotImplementedException();

}

 internal ChromiumWebBrowser AddNewBrowserTab(string linkUrl, bool v, string url)  { throw new NotImplementedException(); }

*/

/* private void browserTabControl_MouseDown(object sender, MouseEventArgs e) { // var lastIndex = this.browserTabControl.TabCount - 1; if (this.browserTabControl.GetTabRect(lastIndex).Contains(e.Location)) { this.browserTabControl.TabPages.Insert(lastIndex, "tab"); this.browserTabControl.SelectedIndex = lastIndex;}

}

// [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); private const int TCM_SETMINTABWIDTH = 0x1300 + 49; private void browserTabControl_HandleCreated(object sender, EventArgs e){ SendMessage(this.browserTabControl.Handle, TCM_SETMINTABWIDTH, IntPtr.Zero, (IntPtr)16);}

private void browserTabControl_Selecting(object sender, TabControlCancelEventArgs e) { // if (e.TabPageIndex == browserTabControl.TabPages.Count - 1) browserTabControl.TabPages.Insert(browserTabControl.TabPages.Count - 1, "tab" + e.TabPageIndex); // if (e.TabPageIndex == this.browserTabControl.TabCount - 1) e.Cancel = true; } */

/* public class DownloadHandler : IDownloadHandler { public event EventHandler OnBeforeDownloadFired;

        public event EventHandler<DownloadItem> OnDownloadUpdatedFired;

        public void OnBeforeDownload(IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback)
        {
            var handler = OnBeforeDownloadFired;

            if (handler != null)
            {
                handler(this, downloadItem);
            }

            if (!callback.IsDisposed)
            {
                using (callback)
                {
                    callback.Continue(downloadItem.SuggestedFileName, showDialog: true);

                }
            }
        }

        public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)
        {

            //        if (downloadItem.IsComplete || downloadItem.IsCancelled)   {   do stuff   }


            var handler = OnDownloadUpdatedFired;
            if (handler != null)
            {
                handler(this, downloadItem);
            }
        }
    }
    */

/* public static void Init(bool osr, bool multiThreadedMessageLoop, IBrowserProcessHandler browserProcessHandler) { // Set Google API keys, used for Geolocation requests sans GPS. See http://www.chromium.org/developers/how-tos/api-keys // Environment.SetEnvironmentVariable("GOOGLE_API_KEY", ""); // Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_ID", ""); // Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_SECRET", "");

        // Widevine CDM registration - pass in directory where Widevine CDM binaries and manifest.json are located.
        // For more information on support for DRM content with Widevine see: https://github.com/cefsharp/CefSharp/issues/1934
        //Cef.RegisterWidevineCdm(@".\WidevineCdm");
        //Chromium Command Line args
        //http://peter.sh/experiments/chromium-command-line-switches/
        //NOTE: Not all relevant in relation to `CefSharp`, use for reference purposes only.
        //The location where cache data will be stored on disk. If empty an in-memory cache will be used for some features and a temporary disk cache for others.
        //HTML5 databases such as localStorage will only persist across sessions if a cache path is specified. 

        // var settings = new CefSettings();
        // settings.CachePath = "cache";
        //settings.UserAgent = "CefSharp Browser" + Cef.CefSharpVersion; // Example User Agent
        //  settings.CefCommandLineArgs.Add("renderer-process-limit", "1");
        //settings.CefCommandLineArgs.Add("renderer-startup-dialog", "1");
        //   settings.CefCommandLineArgs.Add("enable-media-stream", "1"); //Enable WebRTC
        //settings.CefCommandLineArgs.Add("no-proxy-server", "1"); //Don't use a proxy server, always make direct connections. Overrides any other proxy server flags that are passed.
        //settings.CefCommandLineArgs.Add("debug-plugin-loading", "1"); //Dumps extra logging about plugin loading to the log file.
        //settings.CefCommandLineArgs.Add("disable-plugins-discovery", "1"); //Disable discovering third-party plugins. Effectively loading only ones shipped with the browser plus third-party ones as specified by --extra-plugin-dir and --load-plugin switches
        //settings.CefCommandLineArgs.Add("enable-system-flash", "1"); //Automatically discovered and load a system-wide installation of Pepper Flash.
        //settings.CefCommandLineArgs.Add("allow-running-insecure-content", "1"); //By default, an https page cannot run JavaScript, CSS or plugins from http URLs. This provides an override to get the old insecure behavior. Only available in 47 and above.

        // settings.CefCommandLineArgs.Add("enable-logging", "1"); //Enable Logging for the Renderer process (will open with a cmd prompt and output debug messages - use in conjunction with setting LogSeverity = LogSeverity.Verbose;)
        //settings.LogSeverity = LogSeverity.Verbose; // Needed for enable-logging to output messages

        //settings.CefCommandLineArgs.Add("disable-extensions", "1"); //Extension support can be disabled
        //settings.CefCommandLineArgs.Add("disable-pdf-extension", "1"); //The PDF extension specifically can be disabled

        //Load the pepper flash player that comes with Google Chrome - may be possible to load these values from the registry and query the dll for it's version info (Step 2 not strictly required it seems)
        //settings.CefCommandLineArgs.Add("ppapi-flash-path", @"C:\Program Files (x86)\Google\Chrome\Application\47.0.2526.106\PepperFlash\pepflashplayer.dll"); //Load a specific pepper flash version (Step 1 of 2)
        //settings.CefCommandLineArgs.Add("ppapi-flash-version", "20.0.0.228"); //Load a specific pepper flash version (Step 2 of 2)

        //NOTE: For OSR best performance you should run with GPU disabled:
        // `--disable-gpu --disable-gpu-compositing --enable-begin-frame-scheduling`
        // (you'll loose WebGL support but gain increased FPS and reduced CPU usage).
        // http://magpcss.org/ceforum/viewtopic.php?f=6&t=13271#p27075
        // https://bitbucket.org/chromiumembedded/cef/commits/e3c1d8632eb43c1c2793d71639f3f5695696a5e8

        //NOTE: The following function will set all three params
        // settings.SetOffScreenRenderingBestPerformanceArgs();
        // settings.CefCommandLineArgs.Add("disable-gpu", "1");
        // settings.CefCommandLineArgs.Add("disable-gpu-compositing", "1");
        //       settings.CefCommandLineArgs.Add("enable-begin-frame-scheduling", "1");

        // settings.CefCommandLineArgs.Add("disable-gpu-vsync", "1"); //Disable Vsync

        // Disables the DirectWrite font rendering system on windows.
        // Possibly useful when experiencing blury fonts.
        // settings.CefCommandLineArgs.Add("disable-direct-write", "1");

    }

    */

///// // TabPage tpage = new TabPage(); // tpage.Text = "New Tab"; // tabControl1.Controls.Add(tpage); // toolStripTextBoxAddress.Text = "about:blank"; // ChromiumWebBrowser ChromiumWebBrowser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text); // ChromiumWebBrowser.Parent = tpage; // ChromiumWebBrowser.Dock = DockStyle.Fill; // ChromiumWebBrowser.AddressChanged += Chrome_AddressChanged; // ChromiumWebBrowser.TitleChanged += Chrome_TitleChanged; //// ChromiumWebBrowser.PopupRequestChanged += life_PopupRequestChanged; // private void life_PopupChanged(object sender, PopupChangedEventArgs e) { this.Invoke(new MethodInvoker(() => { tabControl1.SelectedTab.Text = e.Title; })); } //

/////

// usage:

⚠️ **GitHub.com Fallback** ⚠️