Exemple #1
0
    /// <summary>
    /// Asynchronously wait for the Chromium widget window to be created for the given ChromiumWebBrowser,
    /// and when created hook into its Windows message loop.
    /// </summary>
    /// <param name="nativeHost">The native window.</param>
    /// <param name="browserHandle">The browser window to intercept Windows messages for.</param>
    public virtual void Setup(IChromelyNativeHost nativeHost, IntPtr browserHandle)
    {
        _nativeHost      = nativeHost;
        _framelessOption = _config.WindowOptions?.FramelessOption ?? new FramelessOption();

        _browserHandle = browserHandle;

        try
        {
            bool foundWidget = false;
            while (!foundWidget)
            {
                var childHandles = GetAllChildHandles(_browserHandle);
                if (childHandles is not null && childHandles.Any())
                {
                    foundWidget         = true;
                    _dragWindowHandlers = childHandles
                                          .Concat(new[] { browserHandle })
                                          .Select(h => new DragWindowHandler(h, _nativeHost, _framelessOption))
                                          .ToArray();
                }
                else
                {
                    // Chrome hasn't yet set up its message-loop window.
                    Thread.Sleep(10);
                }
            }
        public DemoWindow(IChromelyNativeHost nativeHost,
                          IChromelyConfiguration config,
                          ChromelyHandlersResolver handlersResolver)
            : base(nativeHost, config, handlersResolver)
        {
            #region Events
            FrameLoadStart            += DemoWindow_FrameLoadStart;
            FrameLoadEnd              += DemoWindow_FrameLoadEnd;
            LoadingStateChanged       += DemoWindow_LoadingStateChanged;
            JavascriptMessageReceived += DemoWindow_JavascriptMessageReceived;
            ConsoleMessage            += DemoWindow_ConsoleMessage;
            AddressChanged            += DemoWindow_AddressChanged;
            #endregion Events

            #region Handlers
            // Optionally set custom handlers here or register them in DI
            // If they have dependencies it is better to use the DI.

            // LifeSpanHandler = new CustomLifeSpanHandler();
            // LoadHandler = new CustomLoadHandler();
            // RequestHandler = new CustomRequestHandler();
            // DisplayHandler = new CustomDisplayHandler();
            // MenuHandler = new CustomMenuHandler();
            // KeyboardHandler = new CustomKeyboardHandler();
            // JsDialogHandler = new JsDialogHandler();
            // DialogHandler = new CustomDialogHandler();
            // DragHandler = new CustomDragHandler();
            // DownloadHandler = new CustomDownloadHandler();
            // FindHandler = new CustomFindHandler();
            // ResourceRequestHandlerFactory = new CustomResourceRequestHandlerFactory();
            // RenderProcessMessageHandler = new CustomRenderProcessMessageHandler();

            #endregion
        }
Exemple #3
0
 public ChromiumBrowser(IChromelyNativeHost nativeHost, IChromelyConfiguration config, ChromelyHandlersResolver handlersResolver)
 {
     Browser           = null;
     NativeHost        = nativeHost;
     _config           = config;
     _handlersResolver = handlersResolver;
 }
Exemple #4
0
 public Window(IChromelyNativeHost nativeHost,
               IChromelyConfiguration config,
               ChromelyHandlersResolver handlersResolver)
     : base(nativeHost, config, handlersResolver)
 {
     Created += OnBrowserCreated;
 }
    /// <inheritdoc/>
    public WindowController(IChromelyWindow window,
                            IChromelyNativeHost nativeHost,
                            IChromelyConfiguration config,
                            IChromelyRouteProvider routeProvider,
                            IChromelyRequestHandler requestHandler,
                            IChromelyRequestSchemeProvider requestSchemeProvider,
                            ChromelyHandlersResolver handlersResolver)
        : base(window, nativeHost, config, routeProvider, requestHandler, handlersResolver)
    {
        // WindowController.NativeWindow
        _nativeHost.HostCreated     += OnWindowCreated;
        _nativeHost.HostMoving      += OnWindowMoving;
        _nativeHost.HostSizeChanged += OnWindowSizeChanged;
        _nativeHost.HostClose       += OnWindowClose;

        _requestSchemeProvider = requestSchemeProvider;

        // Set CefBinariesDownloader
        var objList    = _handlersResolver?.Invoke(typeof(ICefBinariesDownloader));
        var tempLoader = objList?.FirstOrDefault() as ICefBinariesDownloader;

        if (tempLoader is not null)
        {
            _binariesDownloader = tempLoader;
        }
    }
Exemple #6
0
 protected HostBase(IChromelyNativeHost nativeHost, IChromelyContainer container, IChromelyConfiguration config, IChromelyRequestTaskRunner requestTaskRunner, IChromelyCommandTaskRunner commandTaskRunner)
 {
     _nativeHost        = nativeHost;
     _container         = container;
     _config            = config;
     _requestTaskRunner = requestTaskRunner;
     _commandTaskRunner = commandTaskRunner;
 }
Exemple #7
0
        public Window(IChromelyNativeHost nativeHost,
                      IChromelyConfiguration config,
                      ChromelyHandlersResolver handlersResolver)
            : base(nativeHost, config)
        {
            _handlersResolver = handlersResolver;

            IsBrowserInitializedChanged += BrowserInitializedChanged;
        }
 public DragWindowHandler(IntPtr handle, IChromelyNativeHost nativeHost, FramelessOption framelessOption)
 {
     _handle          = handle;
     _nativeHost      = nativeHost;
     _framelessOption = framelessOption ?? new FramelessOption();
     _originalWndProc = GetWindowLongPtr(_handle, (int)GWL.WNDPROC);
     _wndProc         = WndProc;
     _wndProcPtr      = Marshal.GetFunctionPointerForDelegate(_wndProc);
     SetWindowLongPtr(_handle, (int)GWL.WNDPROC, _wndProcPtr);
 }
Exemple #9
0
            public ForwardMesssageHandler(IntPtr handle, IChromelyNativeHost nativeHost, FramelessOption framelessOption, bool isHost)
            {
                _handle          = handle;
                _nativeHost      = nativeHost;
                _framelessOption = framelessOption ?? new FramelessOption();
                _isHost          = isHost;
                _originalWndProc = GetWindowLongPtr(_handle, (int)WindowLongFlags.GWL_WNDPROC);
                _wndProc         = WndProc;
                var wndProcPtr = Marshal.GetFunctionPointerForDelegate(_wndProc);

                SetWindowLongPtr(_handle, (int)WindowLongFlags.GWL_WNDPROC, wndProcPtr);
            }
Exemple #10
0
 public WindowSample(IChromelyNativeHost nativeHost,
                     IChromelyConfiguration config,
                     ChromelyHandlersResolver handlersResolver)
     : base(nativeHost, config, handlersResolver)
 {
     #region Events
     FrameLoadStart      += DemoWindow_FrameLoadStart;
     FrameLoadEnd        += DemoWindow_FrameLoadEnd;
     LoadingStateChanged += DemoWindow_LoadingStateChanged;
     ConsoleMessage      += DemoWindow_ConsoleMessage;
     AddressChanged      += DemoWindow_AddressChanged;
     #endregion Events
 }
 public ChromelyWindowController(IChromelyWindow window,
                                 IChromelyNativeHost nativeHost,
                                 IChromelyConfiguration config,
                                 IChromelyRouteProvider routeProvider,
                                 IChromelyRequestHandler requestHandler,
                                 ChromelyHandlersResolver handlersResolver)
 {
     _window           = window;
     _nativeHost       = nativeHost;
     _config           = config;
     _routeProvider    = routeProvider;
     _requestHandler   = requestHandler;
     _handlersResolver = handlersResolver;
 }
        /// <summary> Doubleclick callback function. </summary>
        /// <param name="nativeHost"> The Chromely native host interface. </param>
        public void DblClickCallbackFunc(IChromelyNativeHost nativeHost)
        {
            // Toggle between normal (restore) and maximized
            var state = nativeHost.GetWindowState();

            if (state == WindowState.Maximize)
            {
                nativeHost.SetWindowState(WindowState.Normal);
            }
            else
            {
                nativeHost.SetWindowState(WindowState.Maximize);
            }
        }
Exemple #13
0
        public Window(IChromelyNativeHost nativeHost, IChromelyContainer container, IChromelyConfiguration config, IChromelyCommandTaskRunner commandTaskRunner, CefMessageRouterBrowserSide browserMessageRouter)
            : base(nativeHost, config)
        {
            _container            = container;
            _config               = config;
            _commandTaskRunner    = commandTaskRunner;
            _browserMessageRouter = browserMessageRouter;
            Browser               = new CefGlueBrowser(this, _container, config, _commandTaskRunner, _browserMessageRouter, new CefBrowserSettings());
            Browser.Created      += OnBrowserCreated;

            // Set event handler
            Browser.SetEventHandlers(_container);

            ShowWindow();
        }
        /// <summary>
        ///     Default callback function to determine if we're located within the drag region.
        /// </summary>
        /// <param name="nativeHost"> The Chromely native host interface. </param>
        /// <param name="point">      The click point. </param>
        /// <returns> True if in the drag region, false if not. </returns>
        public bool IsDraggableCallbackFunc(IChromelyNativeHost nativeHost, Point point)
        {
            var size  = nativeHost.GetWindowClientSize();
            var scale = nativeHost.GetWindowDpiScale();

            var in_zone = false;

            foreach (var zone in DragZones)
            {
                if (zone.InZone(size, point, scale))
                {
                    in_zone = true;
                }
            }
            return(in_zone);
        }
Exemple #15
0
        public NativeWindow(IChromelyNativeHost nativeHost, IChromelyConfiguration config)
        {
            _config     = config;
            _nativeHost = nativeHost;
            if (_nativeHost == null)
            {
                _nativeHost = NativeHostFactory.GetNativeHost(_config);
            }

            Handle = IntPtr.Zero;

            _nativeHost.Created     += OnCreated;
            _nativeHost.Moving      += OnMoving;
            _nativeHost.SizeChanged += OnSizeChanged;
            _nativeHost.Close       += OnClose;
        }
Exemple #16
0
        public WindowController(IChromelyWindow window,
                                IChromelyNativeHost nativeHost,
                                IChromelyConfiguration config,
                                IChromelyRouteProvider routeProvider,
                                IChromelyRequestTaskRunner requestTaskRunner,
                                IChromelyCommandTaskRunner commandTaskRunner,
                                IChromelyRequestSchemeHandlerProvider requestSchemeHandlerProvider,
                                ChromelyHandlersResolver handlersResolver)
            : base(window, nativeHost, config, routeProvider, requestTaskRunner, commandTaskRunner, handlersResolver)
        {
            // WindowController.NativeWindow
            _nativeHost.HostCreated     += OnWindowCreated;
            _nativeHost.HostMoving      += OnWindowMoving;
            _nativeHost.HostSizeChanged += OnWindowSizeChanged;
            _nativeHost.HostClose       += OnWindowClose;

            _requestSchemeHandlerProvider = requestSchemeHandlerProvider;
        }
Exemple #17
0
    /// <inheritdoc/>
    public WindowController(IChromelyWindow window,
                            IChromelyNativeHost nativeHost,
                            IChromelyConfiguration config,
                            IChromelyRouteProvider routeProvider,
                            IChromelyRequestHandler requestHandler,
                            IChromelyRequestSchemeProvider requestSchemeProvider,
                            ICefDownloader binariesDownloader,
                            ChromelyHandlersResolver handlersResolver)
        : base(window, nativeHost, config, routeProvider, requestHandler, handlersResolver)
    {
        // WindowController.NativeWindow
        _nativeHost.HostCreated     += OnWindowCreated;
        _nativeHost.HostMoving      += OnWindowMoving;
        _nativeHost.HostSizeChanged += OnWindowSizeChanged;
        _nativeHost.HostClose       += OnWindowClose;

        _requestSchemeProvider = requestSchemeProvider;
        _binariesDownloader    = binariesDownloader;
    }
Exemple #18
0
        protected virtual void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            // If there are managed resources
            if (disposing)
            {
            }

            _nativeHost?.Dispose();
            _window?.Dispose();

            _nativeHost = null;
            _window     = null;

            _disposed = true;
        }
Exemple #19
0
        public Window(IChromelyNativeHost nativeHost, IChromelyContainer container, IChromelyConfiguration config, IChromelyCommandTaskRunner commandTaskRunner, CefMessageRouterBrowserSide browserMessageRouter)
            : base(nativeHost, config)
        {
            _container            = container;
            _config               = config;
            _commandTaskRunner    = commandTaskRunner;
            _browserMessageRouter = browserMessageRouter;
            Browser               = CreateBrowser(new CefBrowserSettings());

            // Set event handler
            Browser.SetEventHandlers(_container);

            Browser.Created += OnBrowserCreated;

            // 'Created' event sometimes tries to attach interceptors too early, while all windows is not created yet,
            // so it's better to use 'FrameLoadStart'.
            Browser.FrameLoadStart += OnFrameLoadStart;

            ShowWindow();
        }
        public WindowMessageInterceptor(IChromelyConfiguration config, IntPtr browserHandle, IChromelyNativeHost nativeHost)
        {
            _config = config;
            var framelessOption = _config?.WindowOptions?.FramelessOption ?? new FramelessOption();

            var childHandles = GetAllChildHandles(browserHandle);

            _dragWindowHandlers = childHandles
                                  .Concat(new[] { browserHandle })
                                  .Select(h => new DragWindowHandler(h, nativeHost, framelessOption, h == browserHandle))
                                  .ToArray();
        }
 public RekoBrowserHostController(IChromelyWindow window, IChromelyNativeHost nativeHost, IChromelyConfiguration config, IChromelyRouteProvider routeProvider, IChromelyRequestTaskRunner requestTaskRunner, IChromelyCommandTaskRunner commandTaskRunner, IChromelyRequestSchemeProvider requestSchemeProvider, ChromelyHandlersResolver handlersResolver) : base(window, nativeHost, config, routeProvider, requestTaskRunner, commandTaskRunner, requestSchemeProvider, handlersResolver)
 {
 }
Exemple #22
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ChromiumBrowser"/> class.
 /// </summary>
 public ChromiumBrowser(IChromelyNativeHost nativeHost, IChromelyConfiguration config)
 {
     NativeHost = nativeHost;
     _config    = config;
 }
Exemple #23
0
 public void SetNativeHost(IChromelyNativeHost nativeHost)
 {
     _nativeHost = nativeHost;
 }
Exemple #24
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ChromiumBrowser"/> class.
 /// </summary>
 public ChromiumBrowser(IChromelyNativeHost nativeHost, IChromelyConfiguration config)
 {
     NativeHost = nativeHost;
     _config    = config;
     CefSharpSettings.LegacyJavascriptBindingEnabled = false;
 }
 public ChromelyWindow(IChromelyNativeHost nativeHost, IChromelyContainer container, IChromelyConfiguration config, IChromelyRequestTaskRunner requestTaskRunner, IChromelyCommandTaskRunner commandTaskRunner)
     : base(nativeHost, container, config, requestTaskRunner, commandTaskRunner)
 {
 }
Exemple #26
0
 public RekoBrowserHost(IChromelyNativeHost nativeHost, IChromelyConfiguration config, ChromelyHandlersResolver handlersResolver)
     : base(nativeHost, config, handlersResolver)
 {
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ChromiumBrowser"/> class.
 /// </summary>
 public ChromiumBrowser(IChromelyNativeHost nativeHost, IChromelyConfiguration config)
 {
     NativeHost = nativeHost;
     _config    = config;
     JavascriptObjectRepository.Settings.LegacyBindingEnabled = false;
 }
Exemple #28
0
 public DefaulKeyboadHookHandler(IChromelyNativeHost nativeHost, IWindowOptions options)
 {
     _nativeHost = nativeHost;
     _options    = options;
 }