예제 #1
0
        private CefLoader(ChromelyPlatform platform)
        {
            _platform     = platform;
            _architecture = RuntimeInformation.ProcessArchitecture;
            _build        = ChromelyRuntime.GetExpectedCefBuild();
            Logger.Instance.Log.LogInformation($"CefLoader: Load CEF for {_platform} {_architecture}, version {_build}");

            _lastPercent = 0;
            _numberOfParallelDownloads = Environment.ProcessorCount;

            _tempTarStream = Path.GetTempFileName();
            _tempBz2File   = Path.GetTempFileName();
            _tempTarFile   = Path.GetTempFileName();
            _tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
        }
예제 #2
0
        public DynamicCefLoader(IServiceProvider serviceProvider)
        {
            _logger   = serviceProvider.GetService <ILogger>();
            _platform = serviceProvider.GetService <IChromelyConfiguration>().Platform;

            _architecture = RuntimeInformation.ProcessArchitecture;
            _build        = ChromelyRuntime.GetExpectedCefBuild();
            _logger?.LogInformation($"CefLoader: Load CEF for {_platform} {_architecture}, version {_build}");

            _lastPercent = 0;
            _numberOfParallelDownloads = Environment.ProcessorCount;

            _tempTarStream = Path.GetTempFileName();
            _tempBz2File   = Path.GetTempFileName();
            _tempTarFile   = Path.GetTempFileName();
            _tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
        }
예제 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="platform"></param>
        /// <param name="processArchitecture"></param>
        /// <param name="build"></param>
        /// <returns></returns>
        public string FindCefArchiveName(ChromelyPlatform platform, Architecture processArchitecture, CefBuildNumbers build)
        {
            var arch = processArchitecture.ToString()
                       .Replace("X64", "64")
                       .Replace("X86", "32");
            var platformIdentifier = (platform + arch).ToLower();
            var indexUrl           = CefBuildsDownloadIndex(platformIdentifier);

            // cef_binary_3.3626.1895.g7001d56_windows64_client.tar.bz2
            var binaryNamePattern1 = $@"""(cef_binary_[0-9]+\.{build}\.[0-9]+\.(.*)_{platformIdentifier}_client.tar.bz2)""";

            // cef_binary_73.1.5+g4a68f1d+chromium-73.0.3683.75_windows64_client.tar.bz2
            // cef_binary_77.1.18+g8e8d602+chromium-77.0.3865.120_windows64_client.tar.bz2
            var versionPattern     = build.CefVersion.Replace("+", "%2B");
            var binaryNamePattern2 = $@"""(cef_binary_{versionPattern}_{platformIdentifier}_minimal.tar.bz2)""";

            using (var client = new WebClient())
            {
                Logger.Instance.Log.LogInformation($"CefLoader: Load index page {indexUrl}");
                var cefIndex = client.DownloadString(indexUrl);

                // up to Chromium version 72
                var found = new Regex(binaryNamePattern1, RegexOptions.CultureInvariant | RegexOptions.IgnoreCase).Match(cefIndex);
                if (found.Success)
                {
                    return(found.Groups[1].Value);
                }
                // from Chromium version 73 up
                found = new Regex(binaryNamePattern2, RegexOptions.CultureInvariant | RegexOptions.IgnoreCase).Match(cefIndex);
                if (found.Success)
                {
                    return(found.Groups[1].Value);
                }

                #region https://github.com/chromelyapps/Chromely/issues/257

                // Hack until fixed.
                if (!string.IsNullOrEmpty(binaryNamePattern1))
                {
                    if (binaryNamePattern1.Contains("83.0.4103.106"))
                    {
                        return($"cef_binary_83.5.0%2Bgbf03589%2Bchromium-83.0.4103.106_{platformIdentifier}_minimal.tar.bz2");
                    }
                }

                if (!string.IsNullOrEmpty(binaryNamePattern2))
                {
                    if (binaryNamePattern2.Contains("83.0.4103.106"))
                    {
                        return($"cef_binary_83.5.0%2Bgbf03589%2Bchromium-83.0.4103.106_{platformIdentifier}_minimal.tar.bz2");
                    }
                }

                #endregion Hack until fixed.

                var message = $"CEF for chrome version {CefRuntime.ChromeVersion} platform {platformIdentifier} not found.";
                Logger.Instance.Log.LogError("CefLoader: " + message);
            }

            return("");
        }
예제 #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="platform"></param>
        /// <param name="processArchitecture"></param>
        /// <param name="build"></param>
        /// <returns></returns>
        public string FindCefArchiveName(ChromelyPlatform platform, Architecture processArchitecture, CefBuildNumbers build)
        {
            var arch = processArchitecture.ToString()
                       .Replace("X64", "64")
                       .Replace("X86", "32");
            var platformIdentifier = (platform + arch).ToLower();
            var indexUrl           = CefBuildsDownloadIndex(platformIdentifier);

            // cef_binary_3.3626.1895.g7001d56_windows64_client.tar.bz2
            var binaryNamePattern1 = $@"""(cef_binary_[0-9]+\.{build}\.[0-9]+\.(.*)_{platformIdentifier}_client.tar.bz2)""";

            // cef_binary_73.1.5+g4a68f1d+chromium-73.0.3683.75_windows64_client.tar.bz2
            // cef_binary_77.1.18+g8e8d602+chromium-77.0.3865.120_windows64_client.tar.bz2
            var versionPattern     = build.CefVersion.Replace("+", "%2B");
            var binaryNamePattern2 = $@"""(cef_binary_{versionPattern}_{platformIdentifier}_minimal.tar.bz2)""";

            using (var client = new WebClient())
            {
                Logger.Instance.Log.Info($"CefLoader: Load index page {indexUrl}");
                var cefIndex = client.DownloadString(indexUrl);

                // up to Chromium version 72
                var found = new Regex(binaryNamePattern1, RegexOptions.CultureInvariant | RegexOptions.IgnoreCase).Match(cefIndex);
                if (found.Success)
                {
                    return(found.Groups[1].Value);
                }
                // from Chromium version 73 up
                found = new Regex(binaryNamePattern2, RegexOptions.CultureInvariant | RegexOptions.IgnoreCase).Match(cefIndex);
                if (found.Success)
                {
                    return(found.Groups[1].Value);
                }

                var message = $"CEF for chrome version {CefRuntime.ChromeVersion} platform {platformIdentifier} not found.";
                Logger.Instance.Log.Fatal("CefLoader: " + message);
            }

            return("");
        }