From 0373901a111690d83d806526cd6beac9dd062670 Mon Sep 17 00:00:00 2001 From: tigro Date: Sun, 2 Jul 2023 23:29:34 +0300 Subject: [PATCH] import chromium-114.0.5735.133-1.el9.inferit --- .chromium.metadata | 1 + .gitignore | 1 + ...0001-Yandex-as-default-search-engine.patch | 131 + SOURCES/README.fedora | 9 + SOURCES/Yandex_logo_2021_Russian.svg | 1 + SOURCES/chrome-remote-desktop@.service | 14 + ...mium-101.0.4951.41-fedora-user-agent.patch | 12 + ...103.0.5060.53-update-rjsmin-to-1.2.0.patch | 1700 +++++++++ ...mium-105.0.5195.52-python-six-1.16.0.patch | 134 + SOURCES/chromium-107-ffmpeg-duration.patch | 16 + SOURCES/chromium-107-proprietary-codecs.patch | 16 + .../chromium-107.0.5304.110-gn-system.patch | 39 + ...chromium-108-el7-include-fcntl-memfd.patch | 36 + ...romium-108-el7-wayland-strndup-error.patch | 11 + ...ffmpeg-revert-new-channel-layout-api.patch | 294 ++ SOURCES/chromium-108-system-brotli.patch | 36 + SOURCES/chromium-108-system-opus.patch | 12 + ...hromium-108-widevine-other-locations.patch | 32 + ...romium-109-system-minizip-header-fix.patch | 64 + ...um-110-epel7-old-headers-workarounds.patch | 141 + SOURCES/chromium-110-limits.patch | 11 + SOURCES/chromium-112-ffmpeg-first_dts.patch | 120 + ...ble-GlobalMediaControlsCastStartStop.patch | 12 + ...hel8-force-disable-use_gnome_keyring.patch | 12 + ...chromium-114-add_qt6_linuxui_backend.patch | 545 +++ SOURCES/chromium-114-buildflag-el7.patch | 21 + SOURCES/chromium-114-constexpr-el7.patch | 62 + SOURCES/chromium-114-gcc13.patch | 389 ++ SOURCES/chromium-114-norar.patch | 105 + ...omium-114-qt-fix_font_double_scaling.patch | 21 + ...m-114-qt-handle_scale_factor_changes.patch | 574 +++ SOURCES/chromium-114-qt_deps.patch | 46 + ...m-114-qt_enable_AllowQt_feature_flag.patch | 12 + ...chromium-114-qt_logical_scale_factor.patch | 59 + SOURCES/chromium-114-revert-av1enc-el9.patch | 87 + SOURCES/chromium-114-typename.patch | 62 + SOURCES/chromium-114-wireless-el7.patch | 22 + ...karound_clang_bug-structured_binding.patch | 81 + .../chromium-70.0.3538.67-sandbox-pie.patch | 20 + ...chromium-77.0.3865.75-no-zlib-mangle.patch | 22 + .../chromium-81.0.4044.92-unbundle-zlib.patch | 12 + ...chromium-85.0.4183.83-el7-old-libdrm.patch | 15 + ...-91.0.4472.77-initial_prefs-etc-path.patch | 15 + ...-java-only-allowed-in-android-builds.patch | 13 + .../chromium-93.0.4577.63-py3-bootstrap.patch | 12 + ...-96.0.4664.45-missing-cstdint-header.patch | 35 + ...hromium-96.0.4664.45-missing-cstring.patch | 24 + ...mium-98.0.4758.102-remoting-no-tests.patch | 20 + ...hromium-98.0.4758.80-epel7-erase-fix.patch | 20 + ...um-99.0.4844.51-el7-extra-operator==.patch | 26 + ...chromium-99.0.4844.51-epel7-old-cups.patch | 142 + SOURCES/chromium-browser.desktop | 356 ++ SOURCES/chromium-browser.sh | 61 + SOURCES/chromium-browser.xml | 18 + SOURCES/chromium-disable-font-tests.patch | 26 + SOURCES/chromium-latest.py | 344 ++ SOURCES/chromium.conf | 4 + SOURCES/clean_ffmpeg.sh | 376 ++ SOURCES/get_free_ffmpeg_source_files.py | 82 + SOURCES/get_linux_tests_names.py | 121 + SOURCES/master_preferences | 17 + SPECS/chromium.spec | 3123 +++++++++++++++++ 62 files changed, 9845 insertions(+) create mode 100644 .chromium.metadata create mode 100644 .gitignore create mode 100644 SOURCES/0001-Yandex-as-default-search-engine.patch create mode 100644 SOURCES/README.fedora create mode 100644 SOURCES/Yandex_logo_2021_Russian.svg create mode 100644 SOURCES/chrome-remote-desktop@.service create mode 100644 SOURCES/chromium-101.0.4951.41-fedora-user-agent.patch create mode 100644 SOURCES/chromium-103.0.5060.53-update-rjsmin-to-1.2.0.patch create mode 100644 SOURCES/chromium-105.0.5195.52-python-six-1.16.0.patch create mode 100644 SOURCES/chromium-107-ffmpeg-duration.patch create mode 100644 SOURCES/chromium-107-proprietary-codecs.patch create mode 100644 SOURCES/chromium-107.0.5304.110-gn-system.patch create mode 100644 SOURCES/chromium-108-el7-include-fcntl-memfd.patch create mode 100644 SOURCES/chromium-108-el7-wayland-strndup-error.patch create mode 100644 SOURCES/chromium-108-ffmpeg-revert-new-channel-layout-api.patch create mode 100644 SOURCES/chromium-108-system-brotli.patch create mode 100644 SOURCES/chromium-108-system-opus.patch create mode 100644 SOURCES/chromium-108-widevine-other-locations.patch create mode 100644 SOURCES/chromium-109-system-minizip-header-fix.patch create mode 100644 SOURCES/chromium-110-epel7-old-headers-workarounds.patch create mode 100644 SOURCES/chromium-110-limits.patch create mode 100644 SOURCES/chromium-112-ffmpeg-first_dts.patch create mode 100644 SOURCES/chromium-113-disable-GlobalMediaControlsCastStartStop.patch create mode 100644 SOURCES/chromium-113-rhel8-force-disable-use_gnome_keyring.patch create mode 100644 SOURCES/chromium-114-add_qt6_linuxui_backend.patch create mode 100644 SOURCES/chromium-114-buildflag-el7.patch create mode 100644 SOURCES/chromium-114-constexpr-el7.patch create mode 100644 SOURCES/chromium-114-gcc13.patch create mode 100644 SOURCES/chromium-114-norar.patch create mode 100644 SOURCES/chromium-114-qt-fix_font_double_scaling.patch create mode 100644 SOURCES/chromium-114-qt-handle_scale_factor_changes.patch create mode 100644 SOURCES/chromium-114-qt_deps.patch create mode 100644 SOURCES/chromium-114-qt_enable_AllowQt_feature_flag.patch create mode 100644 SOURCES/chromium-114-qt_logical_scale_factor.patch create mode 100644 SOURCES/chromium-114-revert-av1enc-el9.patch create mode 100644 SOURCES/chromium-114-typename.patch create mode 100644 SOURCES/chromium-114-wireless-el7.patch create mode 100644 SOURCES/chromium-114-workaround_clang_bug-structured_binding.patch create mode 100644 SOURCES/chromium-70.0.3538.67-sandbox-pie.patch create mode 100644 SOURCES/chromium-77.0.3865.75-no-zlib-mangle.patch create mode 100644 SOURCES/chromium-81.0.4044.92-unbundle-zlib.patch create mode 100644 SOURCES/chromium-85.0.4183.83-el7-old-libdrm.patch create mode 100644 SOURCES/chromium-91.0.4472.77-initial_prefs-etc-path.patch create mode 100644 SOURCES/chromium-91.0.4472.77-java-only-allowed-in-android-builds.patch create mode 100644 SOURCES/chromium-93.0.4577.63-py3-bootstrap.patch create mode 100644 SOURCES/chromium-96.0.4664.45-missing-cstdint-header.patch create mode 100644 SOURCES/chromium-96.0.4664.45-missing-cstring.patch create mode 100644 SOURCES/chromium-98.0.4758.102-remoting-no-tests.patch create mode 100644 SOURCES/chromium-98.0.4758.80-epel7-erase-fix.patch create mode 100644 SOURCES/chromium-99.0.4844.51-el7-extra-operator==.patch create mode 100644 SOURCES/chromium-99.0.4844.51-epel7-old-cups.patch create mode 100644 SOURCES/chromium-browser.desktop create mode 100755 SOURCES/chromium-browser.sh create mode 100644 SOURCES/chromium-browser.xml create mode 100644 SOURCES/chromium-disable-font-tests.patch create mode 100755 SOURCES/chromium-latest.py create mode 100644 SOURCES/chromium.conf create mode 100755 SOURCES/clean_ffmpeg.sh create mode 100755 SOURCES/get_free_ffmpeg_source_files.py create mode 100755 SOURCES/get_linux_tests_names.py create mode 100644 SOURCES/master_preferences create mode 100644 SPECS/chromium.spec diff --git a/.chromium.metadata b/.chromium.metadata new file mode 100644 index 00000000..b72156d5 --- /dev/null +++ b/.chromium.metadata @@ -0,0 +1 @@ +e96e84c0380e47a928d7e62b3e64360fad9c8183 SOURCES/chromium-114.0.5735.133-clean.tar.xz diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..db1db473 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/chromium-114.0.5735.133-clean.tar.xz diff --git a/SOURCES/0001-Yandex-as-default-search-engine.patch b/SOURCES/0001-Yandex-as-default-search-engine.patch new file mode 100644 index 00000000..c34cf717 --- /dev/null +++ b/SOURCES/0001-Yandex-as-default-search-engine.patch @@ -0,0 +1,131 @@ +diff -urN chromium-114.0.5735.133.orig/components/search_engines/prepopulated_engines.json chromium-114.0.5735.133/components/search_engines/prepopulated_engines.json +--- chromium-114.0.5735.133.orig/components/search_engines/prepopulated_engines.json 2023-06-30 16:00:39.781216875 +0300 ++++ chromium-114.0.5735.133/components/search_engines/prepopulated_engines.json 2023-06-30 16:10:06.030718785 +0300 +@@ -560,7 +560,7 @@ + "suggest_url": "https://suggest.yandex.by/suggest-ff.cgi?part={searchTerms}&{google:cursorPosition}", + "image_url": "https://yandex.by/images/search/?rpt=imageview", + "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", +- "new_tab_url": "https://www.yandex.by/chrome/newtab", ++ "new_tab_url": "chrome://new-tab-page", + "type": "SEARCH_ENGINE_YANDEX", + "id": 15 + }, +@@ -573,6 +573,7 @@ + "suggest_url": "https://suggest.yandex.com/suggest-ff.cgi?part={searchTerms}&{google:cursorPosition}&uil=en&v=3&sn=5", + "image_url": "https://yandex.com/images/search?rpt=imageview", + "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", ++ "new_tab_url": "chrome://new-tab-page", + "type": "SEARCH_ENGINE_YANDEX", + "id": 15 + }, +@@ -586,7 +587,7 @@ + "suggest_url": "https://suggest.yandex.kz/suggest-ff.cgi?part={searchTerms}&{google:cursorPosition}", + "image_url": "https://yandex.kz/images/search/?rpt=imageview", + "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", +- "new_tab_url": "https://www.yandex.kz/chrome/newtab", ++ "new_tab_url": "chrome://new-tab-page", + "type": "SEARCH_ENGINE_YANDEX", + "id": 15 + }, +@@ -600,7 +601,7 @@ + "suggest_url": "https://suggest.yandex.ru/suggest-ff.cgi?part={searchTerms}&{google:cursorPosition}", + "image_url": "https://yandex.ru/images/search/?rpt=imageview", + "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", +- "new_tab_url": "https://www.yandex.ru/chrome/newtab", ++ "new_tab_url": "chrome://new-tab-page", + "type": "SEARCH_ENGINE_YANDEX", + "id": 15 + }, +@@ -613,7 +614,7 @@ + "suggest_url": "https://suggest.yandex.com.tr/suggest-ff.cgi?part={searchTerms}&{google:cursorPosition}", + "image_url": "https://yandex.com.tr/gorsel/search?rpt=imageview", + "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", +- "new_tab_url": "https://www.yandex.com.tr/chrome/newtab", ++ "new_tab_url": "chrome://new-tab-page", + "type": "SEARCH_ENGINE_YANDEX", + "id": 15 + }, +@@ -627,7 +628,7 @@ + "suggest_url": "https://suggest.yandex.ua/suggest-ff.cgi?part={searchTerms}&{google:cursorPosition}", + "image_url": "https://yandex.ua/images/search/?rpt=imageview", + "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", +- "new_tab_url": "https://www.yandex.ua/chrome/newtab", ++ "new_tab_url": "chrome://new-tab-page", + "type": "SEARCH_ENGINE_YANDEX", + "id": 15 + }, +diff -urN chromium-114.0.5735.133.orig/components/search_engines/template_url_prepopulate_data.cc chromium-114.0.5735.133/components/search_engines/template_url_prepopulate_data.cc +--- chromium-114.0.5735.133.orig/components/search_engines/template_url_prepopulate_data.cc 2023-06-30 16:00:39.780216890 +0300 ++++ chromium-114.0.5735.133/components/search_engines/template_url_prepopulate_data.cc 2023-06-30 16:12:58.769100093 +0300 +@@ -29,6 +29,7 @@ + + // Default (for countries with no better engine set) + const PrepopulatedEngine* const engines_default[] = { ++ &yandex_com, + &google, + &bing, + &yahoo, +@@ -156,8 +157,8 @@ + + // Belarus + const PrepopulatedEngine* const engines_BY[] = { +- &google, + &yandex_by, ++ &google, + &mail_ru, + &bing, + &duckduckgo, +@@ -435,10 +436,10 @@ + + // Iraq + const PrepopulatedEngine* const engines_IQ[] = { ++ &yandex_tr, + &google, + &bing, + &yahoo, +- &yandex_tr, + &petal_search, + }; + +@@ -525,8 +526,8 @@ + + // Kazakhstan + const PrepopulatedEngine* const engines_KZ[] = { +- &google, + &yandex_kz, ++ &google, + &mail_ru, + &bing, + &duckduckgo, +@@ -894,8 +895,8 @@ + + // Turkey + const PrepopulatedEngine* const engines_TR[] = { +- &google, + &yandex_tr, ++ &google, + &yahoo_tr, + &bing, + &duckduckgo, +@@ -1382,12 +1383,15 @@ + t_urls = GetPrepopulationSetFromCountryID( + country_codes::GetCountryIDFromPrefs(prefs)); + } +- if (default_search_provider_index) { +- const auto itr = +- base::ranges::find(t_urls, google.id, &TemplateURLData::prepopulate_id); +- *default_search_provider_index = +- itr == t_urls.end() ? 0 : std::distance(t_urls.begin(), itr); +- } ++ /* Making yandex_ru be the first in "const PrepopulatedEngine* const engines_RU[]" ++ * makes it be the first item in chrome://settings/search, ++ * but Google is still chosen by default. ++ * Removed code calculated the distance between 0 and Google's position ++ * and assign that position to default_search_provider_index, ++ * so that Google still was the default search engine. ++ * Instead, just use the first search engine as the default one. ++ */ ++ if (default_search_provider_index) *default_search_provider_index = 0; + return t_urls; + } + diff --git a/SOURCES/README.fedora b/SOURCES/README.fedora new file mode 100644 index 00000000..bf22ca72 --- /dev/null +++ b/SOURCES/README.fedora @@ -0,0 +1,9 @@ +- Widevine is not a free library and cannot be shipped in fedora. + You have to get it from Google first and install it under + /usr/lib64/chromium-browser or /opt/google/chrome if you want + Chromium to use widevine. + +- Chromium uses the system ffmpeg-free library which is included in + fedora >= 36 and centos-stream 9. This library contains free video + codecs. If you want Chromium to use non-free video codecs, you need + to install libavcodec-freeworld from rpmfusion-free. diff --git a/SOURCES/Yandex_logo_2021_Russian.svg b/SOURCES/Yandex_logo_2021_Russian.svg new file mode 100644 index 00000000..a4b31171 --- /dev/null +++ b/SOURCES/Yandex_logo_2021_Russian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/SOURCES/chrome-remote-desktop@.service b/SOURCES/chrome-remote-desktop@.service new file mode 100644 index 00000000..4b5b1fcb --- /dev/null +++ b/SOURCES/chrome-remote-desktop@.service @@ -0,0 +1,14 @@ +[Unit] +Description="Chrome Remote Desktop host daemon" + +[Service] +User=%i +Environment=HOME=%h +ExecStart=@@CRD_PATH@@/chrome-remote-desktop --start --foreground +ExecStop=@@CRD_PATH@@/chrome-remote-desktop --stop +ExecReload=@@CRD_PATH@@/chrome-remote-desktop --reload +Restart=always +TimeoutStopSec=10 + +[Install] +WantedBy=multi-user.target diff --git a/SOURCES/chromium-101.0.4951.41-fedora-user-agent.patch b/SOURCES/chromium-101.0.4951.41-fedora-user-agent.patch new file mode 100644 index 00000000..a328425c --- /dev/null +++ b/SOURCES/chromium-101.0.4951.41-fedora-user-agent.patch @@ -0,0 +1,12 @@ +diff -up chromium-101.0.4951.41/content/common/user_agent.cc.fedora-user-agent chromium-101.0.4951.41/content/common/user_agent.cc +--- chromium-101.0.4951.41/content/common/user_agent.cc.fedora-user-agent 2022-04-27 20:03:36.913767022 +0000 ++++ chromium-101.0.4951.41/content/common/user_agent.cc 2022-04-27 20:04:30.591942420 +0000 +@@ -34,7 +34,7 @@ std::string GetUserAgentPlatform() { + #elif BUILDFLAG(IS_MAC) + return "Macintosh; "; + #elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) +- return "X11; "; // strange, but that's what Firefox uses ++ return "X11; Fedora; "; // strange, but that's what Firefox uses + #elif BUILDFLAG(IS_ANDROID) + return "Linux; "; + #elif BUILDFLAG(IS_FUCHSIA) diff --git a/SOURCES/chromium-103.0.5060.53-update-rjsmin-to-1.2.0.patch b/SOURCES/chromium-103.0.5060.53-update-rjsmin-to-1.2.0.patch new file mode 100644 index 00000000..29a5d9cc --- /dev/null +++ b/SOURCES/chromium-103.0.5060.53-update-rjsmin-to-1.2.0.patch @@ -0,0 +1,1700 @@ +diff -up chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.c.12 chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.c +--- chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.c.12 2022-06-28 12:50:10.167324583 +0000 ++++ chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.c 2021-11-14 19:50:55.000000000 +0000 +@@ -1,5 +1,5 @@ + /* +- * Copyright 2011 - 2015 ++ * Copyright 2011 - 2021 + * Andr\xe9 Malo or his licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); +@@ -18,21 +18,21 @@ + #include "cext.h" + EXT_INIT_FUNC; + +-#define RJSMIN_DULL_BIT (1 << 0) +-#define RJSMIN_PRE_REGEX_BIT (1 << 1) +-#define RJSMIN_REGEX_DULL_BIT (1 << 2) +-#define RJSMIN_REGEX_CC_DULL_BIT (1 << 3) +-#define RJSMIN_ID_LIT_BIT (1 << 4) +-#define RJSMIN_ID_LIT_O_BIT (1 << 5) +-#define RJSMIN_ID_LIT_C_BIT (1 << 6) +-#define RJSMIN_STRING_DULL_BIT (1 << 7) +-#define RJSMIN_SPACE_BIT (1 << 8) +-#define RJSMIN_POST_REGEX_OFF_BIT (1 << 9) ++#define RJSMIN_DULL_BIT (1 << 0) ++#define RJSMIN_PRE_REGEX_BIT (1 << 1) ++#define RJSMIN_REGEX_DULL_BIT (1 << 2) ++#define RJSMIN_REGEX_CC_DULL_BIT (1 << 3) ++#define RJSMIN_ID_LIT_BIT (1 << 4) ++#define RJSMIN_ID_LIT_O_BIT (1 << 5) ++#define RJSMIN_ID_LIT_C_BIT (1 << 6) ++#define RJSMIN_STRING_DULL_BIT (1 << 7) ++#define RJSMIN_SPACE_BIT (1 << 8) ++#define RJSMIN_POST_REGEX_OFF_BIT (1 << 9) ++#define RJSMIN_A_Z_BIT (1 << 10) + +-#ifdef EXT3 +-typedef Py_UNICODE rchar; +-#else + typedef unsigned char rchar; ++#ifdef U ++#undef U + #endif + #define U(c) ((rchar)(c)) + +@@ -66,66 +66,120 @@ typedef unsigned char rchar; + #define RJSMIN_IS_PRE_REGEX_1(c) ((U(c) <= 127) && \ + (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_PRE_REGEX_BIT)) + ++#define RJSMIN_IS_A_Z(c) ((U(c) <= 127) && \ ++ (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_A_Z_BIT)) ++ + + static const unsigned short rjsmin_charmask[128] = { +- 396, 396, 396, 396, 396, 396, 396, 396, +- 396, 396, 2, 396, 396, 2, 396, 396, +- 396, 396, 396, 396, 396, 396, 396, 396, +- 396, 396, 396, 396, 396, 396, 396, 396, +- 396, 687, 588, 653, 765, 653, 143, 588, +- 687, 205, 653, 237, 143, 237, 141, 648, +- 765, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 143, 143, 653, 143, 653, 143, +- 653, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 765, 683, 513, 197, 653, 765, +- 653, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 765, 687, 143, 207, 653, 765 ++ 396, 396, 396, 396, 396, 396, 396, 396, ++ 396, 396, 2, 396, 396, 2, 396, 396, ++ 396, 396, 396, 396, 396, 396, 396, 396, ++ 396, 396, 396, 396, 396, 396, 396, 396, ++ 396, 687, 588, 653, 765, 653, 143, 588, ++ 687, 205, 655, 239, 143, 239, 141, 648, ++ 765, 765, 765, 765, 765, 765, 765, 765, ++ 765, 765, 143, 143, 653, 143, 653, 143, ++ 653, 765, 765, 765, 765, 765, 765, 765, ++ 765, 765, 765, 765, 765, 765, 765, 765, ++ 765, 765, 765, 765, 765, 765, 765, 765, ++ 765, 765, 765, 683, 513, 197, 653, 765, ++ 588, 1789, 1789, 1789, 1789, 1789, 1789, 1789, ++ 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, ++ 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, ++ 1789, 1789, 1789, 687, 143, 207, 653, 765 + }; + ++ + static Py_ssize_t + rjsmin(const rchar *source, rchar *target, Py_ssize_t length, + int keep_bang_comments) + { +- const rchar *reset, *pcreset = NULL, *pctoken = NULL, *xtarget, +- *sentinel = source + length; +- rchar *tstart = target; +- int post_regex = 0; +- rchar c, quote, spaced = U(' '); ++ const rchar ++ *sentinel = source + length, /* never hit this pointer (source buf) */ ++ *reset, /* reset pointer (source buf) */ ++ *pcreset = NULL, /* pre-comment reset pointer (source buf) */ ++ *pctoken = NULL, /* pre-comment token pointer (target buf) ++ * Pointing to before the last kept comment, if any */ ++ *rsreset = NULL, /* regex-with-method reset pointer (source buf) */ ++ *xtarget; /* pre-regex-2 target pointer */ ++ ++ rchar *tstart = target, /* Target start pointer for reference */ ++ *rtreset = NULL; /* regex-with-method reset pointer (target buf) */ ++ ++ int rsdot, /* seen dot after regex-with-method pattern? */ ++ post_regex = 0; ++ rchar c, quote, ++ spaced = U(' '); /* the last seen kind of space (nl taking prio), ++ * init with ' ' */ + ++ /* main loop */ + while (source < sentinel) { + c = *source++; ++ + if (RJSMIN_IS_DULL(c)) { + if (post_regex) post_regex = 0; + if (pctoken) pctoken = NULL; + if (spaced == U('\n')) spaced = U(' '); ++ if (rsreset) { ++ /* both a-z and . are covered by "dull" */ ++ if (!rsdot) { ++ if (c != U('.')) { ++ /* reset regex-with-method to the starting slash */ ++ source = rsreset; ++ target = rtreset; ++ rsreset = NULL; ++ continue; /* main loop */ ++ } ++ /* Found a dot after possible regex, looking for a-z now */ ++ rsdot = 1; ++ } ++ else if (!RJSMIN_IS_A_Z(c)) { ++ /* reset regex-with-method to the starting slash */ ++ source = rsreset; ++ target = rtreset; ++ rsreset = NULL; ++ continue; /* main loop */ ++ } ++ else { ++ /* Successfull finish the regex-with-method match */ ++ rsreset = NULL; ++ } ++ } + + *target++ = c; +- continue; ++ continue; /* main loop */ + } ++ + switch (c) { + + /* String */ +- case U('\''): case U('"'): ++ case U('\''): case U('"'): case U('`'): + if (post_regex) post_regex = 0; + if (pctoken) pctoken = NULL; + if (spaced == U('\n')) spaced = U(' '); ++ if (rsreset) { ++ /* reset regex-with-method to the starting slash */ ++ source = rsreset; ++ target = rtreset; ++ rsreset = NULL; ++ continue; /* main loop */ ++ } + + reset = source; + *target++ = quote = c; ++ ++ /* string loop */ + while (source < sentinel) { + c = *source++; + *target++ = c; + if (RJSMIN_IS_STRING_DULL(c)) +- continue; ++ continue; /* string loop */ ++ + switch (c) { +- case U('\''): case U('"'): ++ case U('\''): case U('"'): case U('`'): + if (c == quote) +- goto cont; +- continue; ++ goto cont; /* main loop */ ++ continue; /* string loop */ + case U('\\'): + if (source < sentinel) { + c = *source++; +@@ -134,13 +188,18 @@ rjsmin(const rchar *source, rchar *targe + && *source == U('\n')) + *target++ = *source++; + } +- continue; ++ continue; /* string loop */ ++ case U('\r'): case U('\n'): ++ if (quote != U('`')) ++ break; /* string reset */ ++ continue; /* string loop */ + } +- break; ++ break; /* string reset */ + } ++ /* string reset */ + target -= source - reset; + source = reset; +- continue; ++ continue; /* main loop */ + + /* Comment or Regex or something else entirely */ + case U('/'): +@@ -148,6 +207,13 @@ rjsmin(const rchar *source, rchar *targe + if (post_regex) post_regex = 0; + if (pctoken) pctoken = NULL; + if (spaced == U('\n')) spaced = U(' '); ++ if (rsreset) { ++ /* reset regex-with-method to the starting slash */ ++ source = rsreset; ++ target = rtreset; ++ rsreset = NULL; ++ continue; /* main loop */ ++ } + + *target++ = c; + } +@@ -157,7 +223,19 @@ rjsmin(const rchar *source, rchar *targe + case U('*'): case U('/'): + goto skip_or_copy_ws; + ++ /* Regex or slash */ + default: ++ if (rsreset) { ++ /* reset regex-with-method to the starting slash */ ++ if (post_regex) post_regex = 0; ++ if (pctoken) pctoken = NULL; ++ if (spaced == U('\n')) spaced = U(' '); ++ source = rsreset; ++ target = rtreset; ++ rsreset = NULL; ++ continue; /* main loop */ ++ } ++ + xtarget = NULL; + if ( target == tstart + || RJSMIN_IS_PRE_REGEX_1(*((pctoken ? pctoken : target) +@@ -176,99 +254,148 @@ rjsmin(const rchar *source, rchar *targe + || !RJSMIN_IS_ID_LITERAL(*(xtarget - 7)) + ) + )) { +- +- /* Regex */ ++ /* nothing to do here, continuing down below ++ * We could unset rsreset here, but we know it already ++ * is. */ ++ ; ++ } ++ else if (*((pctoken ? pctoken : target) - 1) == U(')')) { ++ xtarget = NULL; ++ rsreset = source; ++ rtreset = target + 1; ++ rsdot = 0; ++ } ++ else { ++ /* Just a slash */ + if (post_regex) post_regex = 0; + if (pctoken) pctoken = NULL; ++ if (spaced == U('\n')) spaced = U(' '); + +- reset = source; +- if (spaced == U('\n')) { +- spaced = U(' '); +- if (xtarget) +- *target++ = U('\n'); +- } ++ *target++ = c; ++ continue; /* main loop */ ++ } + +- *target++ = U('/'); +- while (source < sentinel) { +- c = *source++; +- *target++ = c; +- if (RJSMIN_IS_REGEX_DULL(c)) +- continue; +- switch (c) { +- case U('/'): +- post_regex = 1; +- goto cont; +- case U('\\'): +- if (source < sentinel) { +- c = *source++; +- *target++ = c; +- if (c == U('\r') || c == U('\n')) +- break; +- } +- continue; +- case U('['): +- while (source < sentinel) { +- c = *source++; +- *target++ = c; +- if (RJSMIN_IS_REGEX_CC_DULL(c)) +- continue; +- switch (c) { +- case U('\\'): +- if (source < sentinel) { +- c = *source++; +- *target++ = c; +- if (c == U('\r') || c == U('\n')) +- break; +- } +- continue; +- case U(']'): +- goto cont_regex; ++ if (post_regex) post_regex = 0; ++ if (pctoken) pctoken = NULL; ++ ++ reset = source; ++ if (spaced == U('\n')) { ++ spaced = U(' '); ++ if (xtarget) ++ *target++ = U('\n'); ++ } ++ ++ *target++ = U('/'); ++ ++ /* regex loop */ ++ while (source < sentinel) { ++ c = *source++; ++ *target++ = c; ++ ++ if (RJSMIN_IS_REGEX_DULL(c)) ++ continue; /* regex loop */ ++ ++ switch (c) { ++ case U('/'): ++ while (source < sentinel ++ && RJSMIN_IS_A_Z(*source)) ++ *target++ = *source++; ++ post_regex = !rsreset; ++ /* This check is supposed to make it faster. ++ * It doesn't. It slows it down. I wonder why... ++ */ ++ /* ++ * if (!post_regex ++ * && source < sentinel - 1 ++ * && *source == U('.') ++ * && RJSMIN_IS_A_Z(*(source + 1))) ++ * rsreset = NULL; ++ */ ++ ++ goto cont; /* main loop */ ++ ++ case U('\\'): ++ if (source < sentinel) { ++ c = *source++; ++ *target++ = c; ++ if (c == U('\r') || c == U('\n')) ++ break; /* regex reset */ ++ } ++ continue; /* regex loop */ ++ ++ case U('['): ++ /* regex CC loop */ ++ while (source < sentinel) { ++ c = *source++; ++ *target++ = c; ++ ++ if (RJSMIN_IS_REGEX_CC_DULL(c)) ++ continue; /* regex CC loop */ ++ ++ switch (c) { ++ case U('\\'): ++ if (source < sentinel) { ++ c = *source++; ++ *target++ = c; ++ if (c == U('\r') || c == U('\n')) ++ break; /* regex reset */ + } ++ continue; /* regex CC loop */ ++ ++ case U(']'): ++ goto cont_regex; /* regex loop */ + } +- break; + } +- break; +- cont_regex: +- continue; ++ break; /* regex reset */ ++ + } +- target -= source - reset; +- source = reset; +- } +- else { +- /* Just a slash */ +- if (post_regex) post_regex = 0; +- if (pctoken) pctoken = NULL; +- if (spaced == U('\n')) spaced = U(' '); ++ break; /* regex reset */ + +- *target++ = c; ++ cont_regex: ++ continue; /* regex loop */ + } +- continue; ++ ++ /* regex reset */ ++ target -= source - reset; ++ source = reset; ++ rsreset = NULL; ++ continue; /* main loop */ + } + } +- continue; ++ continue; /* main loop */ /* LCOV_EXCL_LINE */ + + /* Whitespace */ + default: + skip_or_copy_ws: ++ /* remember if we've seen a newline, start with: no */ + quote = U(' '); + --source; ++ ++ /* space loop */ + while (source < sentinel) { + c = *source++; + if (RJSMIN_IS_SPACE(c)) +- continue; ++ continue; /* space loop */ ++ + switch (c) { + case U('\r'): case U('\n'): + quote = U('\n'); +- continue; ++ continue; /* space loop */ ++ ++ /* Can only be a comment at this point ++ * (or ending prematurely) */ + case U('/'): + if (source < sentinel) { + switch (*source) { ++ ++ /* multiline comment */ + case U('*'): + reset = source++; + /* copy bang comment, if requested */ + if ( keep_bang_comments && source < sentinel + && *source == U('!')) { + if (!pctoken) { ++ /* Backtracking if ending prematurely */ + pctoken = target; + pcreset = reset; + } +@@ -276,6 +403,8 @@ rjsmin(const rchar *source, rchar *targe + *target++ = U('/'); + *target++ = U('*'); + *target++ = *source++; ++ ++ /* comment loop */ + while (source < sentinel) { + c = *source++; + *target++ = c; +@@ -283,20 +412,21 @@ rjsmin(const rchar *source, rchar *targe + && *source == U('/')) { + *target++ = *source++; + reset = NULL; +- break; ++ break; /* continue space loop */ + } + } + if (!reset) +- continue; ++ continue; /* space loop */ + ++ /* comment reset */ + target -= source - reset; + source = reset; + if (pcreset == reset) { + pctoken = NULL; + pcreset = NULL; + } +- + } ++ + /* strip regular comment */ + else { + while (source < sentinel) { +@@ -305,41 +435,52 @@ rjsmin(const rchar *source, rchar *targe + && *source == U('/')) { + ++source; + reset = NULL; +- break; ++ break; /* continue space loop */ + } + } + if (!reset) +- continue; ++ continue; /* space loop */ ++ ++ /* comment reset: fallback to slash */ + source = reset; + *target++ = U('/'); + } +- goto cont; ++ goto cont; /* main loop */ ++ ++ /* single line comment */ + case U('/'): + ++source; ++ ++ /* single line comment loop */ + while (source < sentinel) { + c = *source++; + switch (c) { + case U('\n'): +- break; ++ break; /* continue space loop */ ++ + case U('\r'): + if (source < sentinel + && *source == U('\n')) + ++source; +- break; ++ break; /* continue space loop */ ++ + default: +- continue; ++ continue; /* single line comment loop */ + } +- break; ++ break; /* continue space loop */ + } + quote = U('\n'); +- continue; ++ continue; /* space loop */ + } + } + } ++ ++ /* No more spacy character found */ + --source; +- break; ++ break; /* end space loop */ + } + ++ /* Copy a space if needed */ + if ((tstart < (pctoken ? pctoken : target) && source < sentinel) + && ((quote == U('\n') + && ((RJSMIN_IS_ID_LITERAL_CLOSE(*((pctoken ? +@@ -363,8 +504,9 @@ rjsmin(const rchar *source, rchar *targe + pcreset = NULL; + spaced = quote; + } ++ + cont: +- continue; ++ continue; /* main loop */ + } + return (Py_ssize_t)(target - tstart); + } +@@ -385,15 +527,15 @@ substitution regex.\n\ + :Note: This is a hand crafted C implementation built on the regex\n\ + semantics.\n\ + \n\ +-:Parameters:\n\ +- `script` : ``str``\n\ ++Parameters:\n\ ++ script (str):\n\ + Script to minify\n\ + \n\ +- `keep_bang_comments` : ``bool``\n\ ++ keep_bang_comments (bool):\n\ + Keep comments starting with an exclamation mark? (``/*!...*/``)\n\ + \n\ +-:Return: Minified script\n\ +-:Rtype: ``str``"); ++Returns:\n\ ++ str: Minified script"); + + static PyObject * + rjsmin_jsmin(PyObject *self, PyObject *args, PyObject *kwds) +@@ -404,15 +546,15 @@ rjsmin_jsmin(PyObject *self, PyObject *a + int keep_bang_comments; + #ifdef EXT2 + int uni; +-#define UOBJ "O" + #endif + #ifdef EXT3 +-#define UOBJ "U" ++ int bytes; ++ rchar *bytescript; + #endif + +- if (!PyArg_ParseTupleAndKeywords(args, kwds, UOBJ "|O", kwlist, ++ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O", kwlist, + &script, &keep_bang_comments_)) +- return NULL; ++ LCOV_EXCL_LINE_RETURN(NULL); + + if (!keep_bang_comments_) + keep_bang_comments = 0; +@@ -425,28 +567,27 @@ rjsmin_jsmin(PyObject *self, PyObject *a + #ifdef EXT2 + if (PyUnicode_Check(script)) { + if (!(script = PyUnicode_AsUTF8String(script))) +- return NULL; ++ LCOV_EXCL_LINE_RETURN(NULL); + uni = 1; + } ++ else if (!PyString_Check(script)) { ++ PyErr_SetString(PyExc_TypeError, "Unexpected type"); ++ return NULL; ++ } + else { + if (!(script = PyObject_Str(script))) +- return NULL; ++ LCOV_EXCL_LINE_RETURN(NULL); + uni = 0; + } +-#endif +- +-#ifdef EXT3 +- Py_INCREF(script); +-#define PyString_GET_SIZE PyUnicode_GET_SIZE +-#define PyString_AS_STRING PyUnicode_AS_UNICODE +-#define _PyString_Resize PyUnicode_Resize +-#define PyString_FromStringAndSize PyUnicode_FromUnicode +-#endif +- + slength = PyString_GET_SIZE(script); ++ + if (!(result = PyString_FromStringAndSize(NULL, slength))) { ++ LCOV_EXCL_START ++ + Py_DECREF(script); + return NULL; ++ ++ LCOV_EXCL_STOP + } + Py_BEGIN_ALLOW_THREADS + length = rjsmin((rchar *)PyString_AS_STRING(script), +@@ -456,30 +597,97 @@ rjsmin_jsmin(PyObject *self, PyObject *a + + Py_DECREF(script); + if (length < 0) { ++ LCOV_EXCL_START ++ + Py_DECREF(result); + return NULL; ++ ++ LCOV_EXCL_STOP + } + if (length != slength && _PyString_Resize(&result, length) == -1) +- return NULL; ++ LCOV_EXCL_LINE_RETURN(NULL); + +-#ifdef EXT2 + if (uni) { + script = PyUnicode_DecodeUTF8(PyString_AS_STRING(result), + PyString_GET_SIZE(result), "strict"); + Py_DECREF(result); +- if (!script) +- return NULL; +- result = script; ++ return script; + } +-#endif ++ + return result; ++ ++#else /* EXT3 */ ++ ++ if (PyUnicode_Check(script)) { ++ bytes = 0; ++ script = PyUnicode_AsUTF8String(script); ++ bytescript = (rchar *)PyBytes_AS_STRING(script); ++ slength = PyBytes_GET_SIZE(script); ++ } ++ else if (PyBytes_Check(script)) { ++ bytes = 1; ++ Py_INCREF(script); ++ bytescript = (rchar *)PyBytes_AS_STRING(script); ++ slength = PyBytes_GET_SIZE(script); ++ } ++ else if (PyByteArray_Check(script)) { ++ bytes = 2; ++ Py_INCREF(script); ++ bytescript = (rchar *)PyByteArray_AS_STRING(script); ++ slength = PyByteArray_GET_SIZE(script); ++ } ++ else { ++ PyErr_SetString(PyExc_TypeError, "Unexpected type"); ++ return NULL; ++ } ++ ++ if (!(result = PyBytes_FromStringAndSize(NULL, slength))) { ++ LCOV_EXCL_START ++ ++ Py_DECREF(script); ++ return NULL; ++ ++ LCOV_EXCL_STOP ++ } ++ Py_BEGIN_ALLOW_THREADS ++ length = rjsmin(bytescript, (rchar *)PyBytes_AS_STRING(result), ++ slength, keep_bang_comments); ++ Py_END_ALLOW_THREADS ++ ++ Py_DECREF(script); ++ if (length < 0) { ++ LCOV_EXCL_START ++ ++ Py_DECREF(result); ++ return NULL; ++ ++ LCOV_EXCL_STOP ++ } ++ ++ if (!bytes) { ++ script = PyUnicode_DecodeUTF8(PyBytes_AS_STRING(result), length, ++ "strict"); ++ Py_DECREF(result); ++ return script; ++ } ++ if (bytes == 1) { ++ if (length != slength) { ++ _PyBytes_Resize(&result, length); ++ } ++ return result; ++ } ++ /* bytes == 2: bytearray */ ++ script = PyByteArray_FromStringAndSize(PyBytes_AS_STRING(result), length); ++ Py_DECREF(result); ++ return script; ++#endif + } + + /* ------------------------ BEGIN MODULE DEFINITION ------------------------ */ + + EXT_METHODS = { + {"jsmin", +- (PyCFunction)rjsmin_jsmin, METH_VARARGS | METH_KEYWORDS, ++ EXT_CFUNC(rjsmin_jsmin), METH_VARARGS | METH_KEYWORDS, + rjsmin_jsmin__doc__}, + + {NULL} /* Sentinel */ +@@ -499,10 +707,10 @@ EXT_INIT_FUNC { + + /* Create the module and populate stuff */ + if (!(m = EXT_CREATE(&EXT_DEFINE_VAR))) +- EXT_INIT_ERROR(NULL); ++ EXT_INIT_ERROR(LCOV_EXCL_LINE(NULL)); + + EXT_ADD_UNICODE(m, "__author__", "Andr\xe9 Malo", "latin-1"); +- EXT_ADD_STRING(m, "__docformat__", "restructuredtext en"); ++ EXT_ADD_STRING(m, "__version__", STRINGIFY(EXT_VERSION)); + + EXT_INIT_RETURN(m); + } +diff -up chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.py.12 chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.py +--- chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.py.12 2022-07-01 20:33:39.317727375 +0000 ++++ chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.py 2021-11-14 20:24:16.000000000 +0000 +@@ -1,6 +1,6 @@ + #!/usr/bin/env python + # -*- coding: ascii -*- +-r""" ++u""" + ===================== + Javascript Minifier + ===================== +@@ -11,7 +11,7 @@ The minifier is based on the semantics o + + :Copyright: + +- Copyright 2011 - 2015 ++ Copyright 2011 - 2021 + Andr\xe9 Malo or his licensors, as applicable + + :License: +@@ -39,9 +39,11 @@ same results as the original ``jsmin.c`` + - Newline characters are not allowed inside string and regex literals, except + for line continuations in string literals (ECMA-5). + - "return /regex/" is recognized correctly. ++- More characters are allowed before regexes. + - Line terminators after regex literals are handled more sensibly + - "+ +" and "- -" sequences are not collapsed to '++' or '--' + - Newlines before ! operators are removed more sensibly ++- (Unnested) template literals are supported (ECMA-6) + - Comments starting with an exclamation mark (``!``) can be kept optionally + - rJSmin does not handle streams, but only complete strings. (However, the + module provides a "streamy" interface). +@@ -56,20 +58,17 @@ file for details. + + rjsmin.c is a reimplementation of rjsmin.py in C and speeds it up even more. + +-Both python 2 and python 3 are supported. ++Supported python versions are 2.7 and 3.6+. + + .. _jsmin.c by Douglas Crockford: + http://www.crockford.com/javascript/jsmin.c + """ +-if __doc__: +- # pylint: disable = redefined-builtin +- __doc__ = __doc__.encode('ascii').decode('unicode_escape') +-__author__ = r"Andr\xe9 Malo".encode('ascii').decode('unicode_escape') +-__docformat__ = "restructuredtext en" ++__author__ = u"Andr\xe9 Malo" + __license__ = "Apache License, Version 2.0" +-__version__ = '1.0.12' ++__version__ = '1.2.0' + __all__ = ['jsmin'] + ++import functools as _ft + import re as _re + + +@@ -80,13 +79,13 @@ def _make_jsmin(python_only=False): + .. _jsmin.c by Douglas Crockford: + http://www.crockford.com/javascript/jsmin.c + +- :Parameters: +- `python_only` : ``bool`` ++ Parameters: ++ python_only (bool): + Use only the python variant. If true, the c extension is not even + tried to be loaded. + +- :Return: Minifier +- :Rtype: ``callable`` ++ Returns: ++ callable: Minifier + """ + # pylint: disable = unused-variable + # pylint: disable = too-many-locals +@@ -97,7 +96,10 @@ def _make_jsmin(python_only=False): + except ImportError: + pass + else: +- return _rjsmin.jsmin ++ # Ensure that the C version is in sync ++ # https://github.com/ndparker/rjsmin/issues/11 ++ if getattr(_rjsmin, '__version__', None) == __version__: ++ return _rjsmin.jsmin + try: + xrange + except NameError: +@@ -110,15 +112,16 @@ def _make_jsmin(python_only=False): + space_comment_nobang = r'(?:/\*(?!!)[^*]*\*+(?:[^/*][^*]*\*+)*/)' + bang_comment = r'(?:/\*![^*]*\*+(?:[^/*][^*]*\*+)*/)' + +- string1 = \ +- r'(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|\r)[^\047\\\r\n]*)*\047)' ++ string1 = r"(?:'[^'\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|\r)[^'\\\r\n]*)*')" ++ string1 = string1.replace("'", r'\047') # portability + string2 = r'(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|\r)[^"\\\r\n]*)*")' +- string3 = r'(?:`(?:[^`\\]|\\.)*`)' ++ string3 = r'(?:`[^`\\]*(?:\\(?:[^\r\n]|\r?\n|\r)[^`\\]*)*`)' ++ string3 = string3.replace('`', r'\140') # portability + strings = r'(?:%s|%s|%s)' % (string1, string2, string3) + + charclass = r'(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\])' + nospecial = r'[^/\\\[\r\n]' +- regex = r'(?:/(?![\r\n/*])%s*(?:(?:\\[^\r\n]|%s)%s*)*/)' % ( ++ regex = r'(?:/(?![\r\n/*])%s*(?:(?:\\[^\r\n]|%s)%s*)*/[a-z]*)' % ( + nospecial, charclass, nospecial + ) + space = r'(?:%s|%s)' % (space_chars, space_comment) +@@ -154,7 +157,7 @@ def _make_jsmin(python_only=False): + ) for first, last in result]) # noqa + + return _re.sub( +- r'([\000-\040\047])', # \047 for better portability ++ r"([\000-\040'`])", # ' and ` for better portability + lambda m: '\\%03o' % ord(m.group(1)), ( + sequentize(result) + .replace('\\', '\\\\') +@@ -180,42 +183,48 @@ def _make_jsmin(python_only=False): + return r'[%s]' % fix_charclass(result) + + not_id_literal = not_id_literal_(r'[a-zA-Z0-9_$]') +- preregex1 = r'[(,=:\[!&|?{};\r\n]' ++ preregex1 = r'[(,=:\[!&|?{};\r\n+*-]' + preregex2 = r'%(not_id_literal)sreturn' % locals() + + id_literal = id_literal_(r'[a-zA-Z0-9_$]') + id_literal_open = id_literal_(r'[a-zA-Z0-9_${\[(!+-]') +- id_literal_close = id_literal_(r'[a-zA-Z0-9_$}\])"\047+-]') ++ id_literal_close = id_literal_(r'[a-zA-Z0-9_$}\])"\047\140+-]') + post_regex_off = id_literal_(r'[^\000-\040}\])?:|,;.&=+-]') + +- dull = r'[^\047"`/\000-\040]' ++ dull = r'[^\047"\140/\000-\040]' + + space_sub_simple = _re.compile(( +- # noqa pylint: disable = bad-continuation ++ # noqa pylint: disable = bad-option-value, bad-continuation + + r'(%(dull)s+)' # 0 + r'|(%(strings)s%(dull)s*)' # 1 +- r'|(?<=%(preregex1)s)' ++ r'|(?<=[)])' + r'%(space)s*(?:%(newline)s%(space)s*)*' + r'(%(regex)s)' # 2 +- r'(%(space)s*(?:%(newline)s%(space)s*)+' # 3 ++ r'(?=%(space)s*(?:%(newline)s%(space)s*)*' ++ r'\.' ++ r'%(space)s*(?:%(newline)s%(space)s*)*[a-z])' ++ r'|(?<=%(preregex1)s)' ++ r'%(space)s*(?:%(newline)s%(space)s*)*' ++ r'(%(regex)s)' # 3 ++ r'(%(space)s*(?:%(newline)s%(space)s*)+' # 4 + r'(?=%(post_regex_off)s))?' + r'|(?<=%(preregex2)s)' +- r'%(space)s*(?:(%(newline)s)%(space)s*)*' # 4 +- r'(%(regex)s)' # 5 +- r'(%(space)s*(?:%(newline)s%(space)s*)+' # 6 ++ r'%(space)s*(?:(%(newline)s)%(space)s*)*' # 5 ++ r'(%(regex)s)' # 6 ++ r'(%(space)s*(?:%(newline)s%(space)s*)+' # 7 + r'(?=%(post_regex_off)s))?' + r'|(?<=%(id_literal_close)s)' +- r'%(space)s*(?:(%(newline)s)%(space)s*)+' # 7 ++ r'%(space)s*(?:(%(newline)s)%(space)s*)+' # 8 + r'(?=%(id_literal_open)s)' +- r'|(?<=%(id_literal)s)(%(space)s)+(?=%(id_literal)s)' # 8 +- r'|(?<=\+)(%(space)s)+(?=\+)' # 9 +- r'|(?<=-)(%(space)s)+(?=-)' # 10 ++ r'|(?<=%(id_literal)s)(%(space)s)+(?=%(id_literal)s)' # 9 ++ r'|(?<=\+)(%(space)s)+(?=\+)' # 10 ++ r'|(?<=-)(%(space)s)+(?=-)' # 11 + r'|%(space)s+' + r'|(?:%(newline)s%(space)s*)+' + ) % locals()).sub + +- # print space_sub_simple.__self__.pattern ++ # print(space_sub_simple.__self__.pattern) + + def space_subber_simple(match): + """ Substitution callback """ +@@ -227,48 +236,56 @@ def _make_jsmin(python_only=False): + elif groups[1]: + return groups[1] + elif groups[2]: +- if groups[3]: +- return groups[2] + '\n' + return groups[2] +- elif groups[5]: ++ elif groups[3]: ++ if groups[4]: ++ return groups[3] + '\n' ++ return groups[3] ++ elif groups[6]: + return "%s%s%s" % ( +- groups[4] and '\n' or '', +- groups[5], +- groups[6] and '\n' or '', ++ groups[5] and '\n' or '', ++ groups[6], ++ groups[7] and '\n' or '', + ) +- elif groups[7]: ++ elif groups[8]: + return '\n' +- elif groups[8] or groups[9] or groups[10]: ++ elif groups[9] or groups[10] or groups[11]: + return ' ' + else: + return '' + + space_sub_banged = _re.compile(( +- # noqa pylint: disable = bad-continuation ++ # noqa pylint: disable = bad-option-value, bad-continuation + + r'(%(dull)s+)' # 0 + r'|(%(strings)s%(dull)s*)' # 1 +- r'|(?<=%(preregex1)s)' ++ r'|(?<=[)])' + r'(%(space)s*(?:%(newline)s%(space)s*)*)' # 2 + r'(%(regex)s)' # 3 +- r'(%(space)s*(?:%(newline)s%(space)s*)+' # 4 ++ r'(?=%(space)s*(?:%(newline)s%(space)s*)*' ++ r'\.' ++ r'%(space)s*(?:%(newline)s%(space)s*)*[a-z])' ++ r'|(?<=%(preregex1)s)' ++ r'(%(space)s*(?:%(newline)s%(space)s*)*)' # 4 ++ r'(%(regex)s)' # 5 ++ r'(%(space)s*(?:%(newline)s%(space)s*)+' # 6 + r'(?=%(post_regex_off)s))?' + r'|(?<=%(preregex2)s)' +- r'(%(space)s*(?:(%(newline)s)%(space)s*)*)' # 5, 6 +- r'(%(regex)s)' # 7 +- r'(%(space)s*(?:%(newline)s%(space)s*)+' # 8 ++ r'(%(space)s*(?:(%(newline)s)%(space)s*)*)' # 7, 8 ++ r'(%(regex)s)' # 9 ++ r'(%(space)s*(?:%(newline)s%(space)s*)+' # 10 + r'(?=%(post_regex_off)s))?' + r'|(?<=%(id_literal_close)s)' +- r'(%(space)s*(?:%(newline)s%(space)s*)+)' # 9 ++ r'(%(space)s*(?:%(newline)s%(space)s*)+)' # 11 + r'(?=%(id_literal_open)s)' +- r'|(?<=%(id_literal)s)(%(space)s+)(?=%(id_literal)s)' # 10 +- r'|(?<=\+)(%(space)s+)(?=\+)' # 11 +- r'|(?<=-)(%(space)s+)(?=-)' # 12 +- r'|(%(space)s+)' # 13 +- r'|((?:%(newline)s%(space)s*)+)' # 14 ++ r'|(?<=%(id_literal)s)(%(space)s+)(?=%(id_literal)s)' # 12 ++ r'|(?<=\+)(%(space)s+)(?=\+)' # 13 ++ r'|(?<=-)(%(space)s+)(?=-)' # 14 ++ r'|(%(space)s+)' # 15 ++ r'|((?:%(newline)s%(space)s*)+)' # 16 + ) % locals()).sub + +- # print space_sub_banged.__self__.pattern ++ # print(space_sub_banged.__self__.pattern) + + keep = _re.compile(( + r'%(space_chars)s+|%(space_comment_nobang)s+|%(newline)s+' +@@ -276,7 +293,7 @@ def _make_jsmin(python_only=False): + ) % locals()).sub + keeper = lambda m: m.groups()[0] or '' + +- # print keep.__self__.pattern ++ # print(keep.__self__.pattern) + + def space_subber_banged(match): + """ Substitution callback """ +@@ -288,26 +305,34 @@ def _make_jsmin(python_only=False): + elif groups[1]: + return groups[1] + elif groups[3]: +- return "%s%s%s%s" % ( ++ return "%s%s" % ( + keep(keeper, groups[2]), + groups[3], +- keep(keeper, groups[4] or ''), +- groups[4] and '\n' or '', + ) +- elif groups[7]: +- return "%s%s%s%s%s" % ( +- keep(keeper, groups[5]), ++ elif groups[5]: ++ return "%s%s%s%s" % ( ++ keep(keeper, groups[4]), ++ groups[5], ++ keep(keeper, groups[6] or ''), + groups[6] and '\n' or '', +- groups[7], +- keep(keeper, groups[8] or ''), +- groups[8] and '\n' or '', + ) + elif groups[9]: +- return keep(keeper, groups[9]) + '\n' +- elif groups[10] or groups[11] or groups[12]: +- return keep(keeper, groups[10] or groups[11] or groups[12]) or ' ' ++ return "%s%s%s%s%s" % ( ++ keep(keeper, groups[7]), ++ groups[8] and '\n' or '', ++ groups[9], ++ keep(keeper, groups[10] or ''), ++ groups[10] and '\n' or '', ++ ) ++ elif groups[11]: ++ return keep(keeper, groups[11]) + '\n' ++ elif groups[12] or groups[13] or groups[14]: ++ return keep(keeper, groups[12] or groups[13] or groups[14]) or ' ' + else: +- return keep(keeper, groups[13] or groups[14]) ++ return keep(keeper, groups[15] or groups[16]) ++ ++ banged = _ft.partial(space_sub_banged, space_subber_banged) ++ simple = _ft.partial(space_sub_simple, space_subber_simple) + + def jsmin(script, keep_bang_comments=False): + r""" +@@ -320,32 +345,51 @@ def _make_jsmin(python_only=False): + .. _jsmin.c by Douglas Crockford: + http://www.crockford.com/javascript/jsmin.c + +- :Parameters: +- `script` : ``str`` ++ Parameters: ++ script (str): + Script to minify + +- `keep_bang_comments` : ``bool`` ++ keep_bang_comments (bool): + Keep comments starting with an exclamation mark? (``/*!...*/``) + +- :Return: Minified script +- :Rtype: ``str`` ++ Returns: ++ str: Minified script + """ + # pylint: disable = redefined-outer-name + +- if keep_bang_comments: +- return space_sub_banged( +- space_subber_banged, '\n%s\n' % script +- ).strip() +- else: +- return space_sub_simple( +- space_subber_simple, '\n%s\n' % script +- ).strip() ++ is_bytes, script = _as_str(script) ++ script = (banged if keep_bang_comments else simple)( ++ '\n%s\n' % script ++ ).strip() ++ if is_bytes: ++ script = script.encode('latin-1') ++ if is_bytes == 2: ++ script = bytearray(script) ++ return script + + return jsmin + + jsmin = _make_jsmin() + + ++def _as_str(script): ++ """ Make sure the script is a text string """ ++ is_bytes = False ++ if str is bytes: ++ if not isinstance(script, basestring): # noqa pylint: disable = undefined-variable ++ raise TypeError("Unexpected type") ++ elif isinstance(script, bytes): ++ is_bytes = True ++ script = script.decode('latin-1') ++ elif isinstance(script, bytearray): ++ is_bytes = 2 ++ script = script.decode('latin-1') ++ elif not isinstance(script, str): ++ raise TypeError("Unexpected type") ++ ++ return is_bytes, script ++ ++ + def jsmin_for_posers(script, keep_bang_comments=False): + r""" + Minify javascript based on `jsmin.c by Douglas Crockford`_\. +@@ -361,49 +405,61 @@ def jsmin_for_posers(script, keep_bang_c + utilizes the resulting regexes. It's here for fun and may + vanish any time. Use the `jsmin` function instead. + +- :Parameters: +- `script` : ``str`` ++ Parameters: ++ script (str): + Script to minify + +- `keep_bang_comments` : ``bool`` ++ keep_bang_comments (bool): + Keep comments starting with an exclamation mark? (``/*!...*/``) + +- :Return: Minified script +- :Rtype: ``str`` ++ Returns: ++ str: Minified script + """ + if not keep_bang_comments: + rex = ( +- r'([^\047"/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]' +- r'|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]' +- r'|\r?\n|\r)[^"\\\r\n]*)*"))[^\047"/\000-\040]*)|(?<=[(,=:\[!&|?' +- r'{};\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*' +- r'][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\0' +- r'14\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*((?:/(?![\r' +- r'\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r' +- r'\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/))((?:[\000-\011\013\014' ++ r'([^\047"\140/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^' ++ r'\r\n]|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^' ++ r'\r\n]|\r?\n|\r)[^"\\\r\n]*)*")|(?:\140[^\140\\]*(?:\\(?:[^\r\n' ++ r']|\r?\n|\r)[^\140\\]*)*\140))[^\047"\140/\000-\040]*)|(?<=[)])' ++ r'(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+' ++ r')*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\0' ++ r'40]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*((?:/(?![\r\n/*])[^/' ++ r'\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]' ++ r'\r\n]*)*\]))[^/\\\[\r\n]*)*/[a-z]*))(?=(?:[\000-\011\013\014\0' ++ r'16-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r\n' ++ r']*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^' ++ r'/*][^*]*\*+)*/))*)*\.(?:[\000-\011\013\014\016-\040]|(?:/\*[^*' ++ r']*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\00' ++ r'0-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)' ++ r'*[a-z])|(?<=[(,=:\[!&|?{};\r\n+*-])(?:[\000-\011\013\014\016-' ++ r'\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)' ++ r'?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*]' ++ r'[^*]*\*+)*/))*)*((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|' ++ r'(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*' ++ r'/[a-z]*))((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/' ++ r'*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013' ++ r'\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000' ++ r'-\040&)+,.:;=?\]|}-]))?|(?<=[\000-#%-,./:-@\[-^\140{-~-]return' ++ r')(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*' ++ r'+)*/))*(?:((?:(?://[^\r\n]*)?[\r\n]))(?:[\000-\011\013\014\016' ++ r'-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*((?:/(?![\r\n/*])' ++ r'[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^' ++ r'\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/[a-z]*))((?:[\000-\011\013\014' + r'\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r' + r'\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:' +- r'[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)+,.:;=?\]|}-]))?|(?<=[\00' +- r'0-#%-,./:-@\[-^`{-~-]return)(?:[\000-\011\013\014\016-\040]|(?' +- r':/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?[\r\n]' +- r'))(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*' +- r'\*+)*/))*)*((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[' +- r'[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/))((' +- r'?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)' +- r'*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\04' +- r'0]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)+,.:;' +- r'=?\]|}-]))?|(?<=[^\000-!#%&(*,./:-@\[\\^`{|~])(?:[\000-\011\01' +- r'3\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?:' +- r'//[^\r\n]*)?[\r\n]))(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]' +- r'*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040"#%-\047)*,./:-@\\-^' +- r'`|-~])|(?<=[^\000-#%-,./:-@\[-^`{-~-])((?:[\000-\011\013\014\0' +- r'16-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=[^\000-#%-,./' +- r':-@\[-^`{-~-])|(?<=\+)((?:[\000-\011\013\014\016-\040]|(?:/\*[' +- r'^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=\+)|(?<=-)((?:[\000-\011\013' +- r'\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=-)|(?:[' +- r'\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)' +- r')+|(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]' +- r'|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+' ++ r'[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)+,.:;=?\]|}-]))?|(?<=[^\0' ++ r'00-!#%&(*,./:-@\[\\^{|~])(?:[\000-\011\013\014\016-\040]|(?:/' ++ r'\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?[\r\n]))' ++ r'(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+' ++ r')*/))*)+(?=[^\000-\040"#%-\047)*,./:-@\\-^\140|-~])|(?<=[^\000' ++ r'-#%-,./:-@\[-^\140{-~-])((?:[\000-\011\013\014\016-\040]|(?:/' ++ r'\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=[^\000-#%-,./:-@\[-^\140{-' ++ r'~-])|(?<=\+)((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:' ++ r'[^/*][^*]*\*+)*/)))+(?=\+)|(?<=-)((?:[\000-\011\013\014\016-\0' ++ r'40]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=-)|(?:[\000-\011\0' ++ r'13\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+|(?:(?:(?' ++ r'://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]' ++ r'*\*+(?:[^/*][^*]*\*+)*/))*)+' + ) + + def subber(match): +@@ -412,59 +468,72 @@ def jsmin_for_posers(script, keep_bang_c + return ( + groups[0] or + groups[1] or +- (groups[3] and (groups[2] + '\n')) or + groups[2] or +- (groups[5] and "%s%s%s" % ( +- groups[4] and '\n' or '', +- groups[5], +- groups[6] and '\n' or '', ++ (groups[4] and (groups[3] + '\n')) or ++ groups[3] or ++ (groups[6] and "%s%s%s" % ( ++ groups[5] and '\n' or '', ++ groups[6], ++ groups[7] and '\n' or '', + )) or +- (groups[7] and '\n') or +- (groups[8] and ' ') or ++ (groups[8] and '\n') or + (groups[9] and ' ') or + (groups[10] and ' ') or ++ (groups[11] and ' ') or + '' + ) + else: + rex = ( +- r'([^\047"/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]' +- r'|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]' +- r'|\r?\n|\r)[^"\\\r\n]*)*"))[^\047"/\000-\040]*)|(?<=[(,=:\[!&|?' +- r'{};\r\n])((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/' +- r'*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013' +- r'\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*)((?:/(?!' +- r'[\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^' +- r'\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/))((?:[\000-\011\013\01' +- r'4\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^' ++ r'([^\047"\140/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^' ++ r'\r\n]|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^' ++ r'\r\n]|\r?\n|\r)[^"\\\r\n]*)*")|(?:\140[^\140\\]*(?:\\(?:[^\r\n' ++ r']|\r?\n|\r)[^\140\\]*)*\140))[^\047"\140/\000-\040]*)|(?<=[)])' ++ r'((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*' ++ r'+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-' ++ r'\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*)((?:/(?![\r\n/*])' ++ r'[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^' ++ r'\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/[a-z]*))(?=(?:[\000-\011\013\0' ++ r'14\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^' + r'\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(' +- r'?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)+,.:;=?\]|}-]))?|(?<=[' +- r'\000-#%-,./:-@\[-^`{-~-]return)((?:[\000-\011\013\014\016-\040' +- r']|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?[' +- r'\r\n]))(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][' +- r'^*]*\*+)*/))*)*)((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|' +- r'(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*' +- r'/))((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]' +- r'*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\01' +- r'6-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)' +- r'+,.:;=?\]|}-]))?|(?<=[^\000-!#%&(*,./:-@\[\\^`{|~])((?:[\000-' +- r'\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:' +- r'(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/' +- r'\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+)(?=[^\000-\040"#%-\047)*,./' +- r':-@\\-^`|-~])|(?<=[^\000-#%-,./:-@\[-^`{-~-])((?:[\000-\011\01' +- r'3\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=[^\000' +- r'-#%-,./:-@\[-^`{-~-])|(?<=\+)((?:[\000-\011\013\014\016-\040]|' +- r'(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=\+)|(?<=-)((?:[\000-\0' +- r'11\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=-' +- r')|((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*' +- r'\*+)*/))+)|((?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014' +- r'\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+)' ++ r'?:[^/*][^*]*\*+)*/))*)*\.(?:[\000-\011\013\014\016-\040]|(?:/' ++ r'\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?' ++ r':[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*' ++ r'/))*)*[a-z])|(?<=[(,=:\[!&|?{};\r\n+*-])((?:[\000-\011\013\014' ++ r'\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r' ++ r'\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:' ++ r'[^/*][^*]*\*+)*/))*)*)((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^' ++ r'\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r' ++ r'\n]*)*/[a-z]*))((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+' ++ r'(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\01' ++ r'1\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[' ++ r'^\000-\040&)+,.:;=?\]|}-]))?|(?<=[\000-#%-,./:-@\[-^\140{-~-]r' ++ r'eturn)((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][' ++ r'^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?[\r\n]))(?:[\000-\011\013\0' ++ r'14\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*)((?:/(?![' ++ r'\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^' ++ r'\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/[a-z]*))((?:[\000-\011' ++ r'\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(' ++ r'?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*' ++ r']*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)+,.:;=?\]|}-]))?|' ++ r'(?<=[^\000-!#%&(*,./:-@\[\\^{|~])((?:[\000-\011\013\014\016-\0' ++ r'40]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[' ++ r'\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^' ++ r'*]*\*+)*/))*)+)(?=[^\000-\040"#%-\047)*,./:-@\\-^\140|-~])|(?<' ++ r'=[^\000-#%-,./:-@\[-^\140{-~-])((?:[\000-\011\013\014\016-\040' ++ r']|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=[^\000-#%-,./:-@\[-^' ++ r'\140{-~-])|(?<=\+)((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*' ++ r'\*+(?:[^/*][^*]*\*+)*/))+)(?=\+)|(?<=-)((?:[\000-\011\013\014' ++ r'\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=-)|((?:[\00' ++ r'0-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)' ++ r'|((?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|' ++ r'(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+)' + ) + +- keep = _re.compile(( ++ keep = _re.compile( + r'[\000-\011\013\014\016-\040]+|(?:/\*(?!!)[^*]*\*+(?:[^/*][^*]*' + r'\*+)*/)+|(?:(?://[^\r\n]*)?[\r\n])+|((?:/\*![^*]*\*+(?:[^/*][^' + r'*]*\*+)*/)+)' +- ) % locals()).sub ++ ).sub + keeper = lambda m: m.groups()[0] or '' + + def subber(match): +@@ -473,27 +542,37 @@ def jsmin_for_posers(script, keep_bang_c + return ( + groups[0] or + groups[1] or +- (groups[3] and "%s%s%s%s" % ( ++ groups[3] and "%s%s" % ( + keep(keeper, groups[2]), + groups[3], +- keep(keeper, groups[4] or ''), +- groups[4] and '\n' or '', +- )) or +- (groups[7] and "%s%s%s%s%s" % ( +- keep(keeper, groups[5]), ++ ) or ++ groups[5] and "%s%s%s%s" % ( ++ keep(keeper, groups[4]), ++ groups[5], ++ keep(keeper, groups[6] or ''), + groups[6] and '\n' or '', +- groups[7], +- keep(keeper, groups[8] or ''), ++ ) or ++ groups[9] and "%s%s%s%s%s" % ( ++ keep(keeper, groups[7]), + groups[8] and '\n' or '', +- )) or +- (groups[9] and keep(keeper, groups[9] + '\n')) or +- (groups[10] and keep(keeper, groups[10]) or ' ') or +- (groups[11] and keep(keeper, groups[11]) or ' ') or +- (groups[12] and keep(keeper, groups[12]) or ' ') or +- keep(keeper, groups[13] or groups[14]) ++ groups[9], ++ keep(keeper, groups[10] or ''), ++ groups[10] and '\n' or '', ++ ) or ++ groups[11] and (keep(keeper, groups[11]) + '\n') or ++ groups[12] and (keep(keeper, groups[12]) or ' ') or ++ groups[13] and (keep(keeper, groups[13]) or ' ') or ++ groups[14] and (keep(keeper, groups[14]) or ' ') or ++ keep(keeper, groups[15] or groups[16]) + ) + +- return _re.sub(rex, subber, '\n%s\n' % script).strip() ++ is_bytes, script = _as_str(script) ++ script = _re.sub(rex, subber, '\n%s\n' % script).strip() ++ if is_bytes: ++ script = script.encode('latin-1') ++ if is_bytes == 2: ++ script = bytearray(script) ++ return script + + + if __name__ == '__main__': +diff -up chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/setup.py.12 chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/setup.py +--- chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/setup.py.12 2022-06-28 12:50:10.171324444 +0000 ++++ chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/setup.py 2021-11-05 17:03:12.000000000 +0000 +@@ -1,41 +1,264 @@ + #!/usr/bin/env python + # -*- coding: ascii -*- +-# +-# Copyright 2006 - 2013 +-# Andr\xe9 Malo or his licensors, as applicable +-# +-# Licensed under the Apache License, Version 2.0 (the "License"); +-# you may not use this file except in compliance with the License. +-# You may obtain a copy of the License at +-# +-# http://www.apache.org/licenses/LICENSE-2.0 +-# +-# Unless required by applicable law or agreed to in writing, software +-# distributed under the License is distributed on an "AS IS" BASIS, +-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-# See the License for the specific language governing permissions and +-# limitations under the License. ++u""" ++:Copyright: + ++ Copyright 2011 - 2021 ++ Andr\xe9 Malo or his licensors, as applicable ++ ++:License: ++ ++ Licensed under the Apache License, Version 2.0 (the "License"); ++ you may not use this file except in compliance with the License. ++ You may obtain a copy of the License at ++ ++ http://www.apache.org/licenses/LICENSE-2.0 ++ ++ Unless required by applicable law or agreed to in writing, software ++ distributed under the License is distributed on an "AS IS" BASIS, ++ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ See the License for the specific language governing permissions and ++ limitations under the License. ++ ++=========================================== ++ rJSmin - A Javascript Minifier For Python ++=========================================== ++ ++rJSmin - A Javascript Minifier For Python. ++""" ++from __future__ import print_function ++__author__ = u"Andr\xe9 Malo" ++__docformat__ = "restructuredtext en" ++ ++import os as _os ++import posixpath as _posixpath + import sys as _sys +-from _setup import run + ++# pylint: disable = no-name-in-module, import-error, raise-missing-from ++import setuptools as _setuptools ++ ++# pylint: disable = invalid-name ++ ++ ++def _doc(filename): ++ """ Read docs file """ ++ # pylint: disable = unspecified-encoding ++ args = {} if str is bytes else dict(encoding='utf-8') ++ try: ++ with open(_os.path.join('docs', filename), **args) as fp: ++ return fp.read() ++ except IOError: ++ return None ++ ++ ++def _lines(multiline): ++ """ Split multiline string into single line % empty and comments """ ++ return [line for line in ( ++ line.strip() for line in multiline.splitlines(False) ++ ) if line and not line.startswith('#')] ++ ++ ++package = dict( ++ name='rjsmin', ++ top='.', ++ pathname='.', ++ provides=_doc('PROVIDES'), ++ desc=_doc('SUMMARY').strip(), ++ longdesc=_doc('DESCRIPTION'), ++ author=__author__, ++ email='nd@perlig.de', ++ license="Apache License, Version 2.0", ++ keywords=_lines(_doc('KEYWORDS')), ++ url='http://opensource.perlig.de/rjsmin/', ++ classifiers=_lines(_doc('CLASSIFIERS') or ''), ++ ++ packages=False, ++ py_modules=['rjsmin'], ++ version_file='rjsmin.py', ++ install_requires=[], ++) ++ ++ ++class BuildFailed(Exception): ++ """ The build has failed """ ++ ++ ++from distutils.command import build_ext as _build_ext # pylint: disable = wrong-import-order ++from distutils import errors as _errors # pylint: disable = wrong-import-order ++class build_ext(_build_ext.build_ext): # pylint: disable = no-init ++ """ Improved extension building code """ ++ ++ def run(self): ++ """ Unify exception """ ++ try: ++ _build_ext.build_ext.run(self) ++ except _errors.DistutilsPlatformError: ++ raise BuildFailed() ++ ++ ++ def build_extension(self, ext): ++ """ ++ Build C extension - with extended functionality + +-def setup(args=None, _manifest=0): +- """ Main setup function """ +- from _setup.ext import Extension ++ The following features are added here: + +- if 'java' in _sys.platform.lower(): +- # no c extension for jython +- ext = None ++ - The macros ``EXT_PACKAGE`` and ``EXT_MODULE`` will be filled (or ++ unset) depending on the extensions name, but only if they are not ++ already defined. ++ ++ - "." is added to the include directories (for cext.h) ++ ++ :Parameters: ++ `ext` : `Extension` ++ The extension to build ++ ++ :Return: whatever ``distutils.command.build_ext.build_ext`` returns ++ :Rtype: any ++ """ ++ # handle name macros ++ macros = dict(ext.define_macros or ()) ++ tup = ext.name.split('.') ++ if len(tup) == 1: ++ pkg, mod = None, tup[0] ++ else: ++ pkg, mod = '.'.join(tup[:-1]), tup[-1] ++ if pkg is not None and 'EXT_PACKAGE' not in macros: ++ ext.define_macros.append(('EXT_PACKAGE', pkg)) ++ if 'EXT_MODULE' not in macros: ++ ext.define_macros.append(('EXT_MODULE', mod)) ++ if pkg is None: ++ macros = dict(ext.undef_macros or ()) ++ if 'EXT_PACKAGE' not in macros: ++ ext.undef_macros.append('EXT_PACKAGE') ++ ++ import pprint; pprint.pprint(ext.__dict__) ++ try: ++ return _build_ext.build_ext.build_extension(self, ext) ++ except (_errors.CCompilerError, _errors.DistutilsExecError, ++ _errors.DistutilsPlatformError, IOError, ValueError): ++ raise BuildFailed() ++ ++ ++class Extension(_setuptools.Extension): ++ """ improved functionality """ ++ ++ def __init__(self, *args, **kwargs): ++ """ Initialization """ ++ version = kwargs.pop('version') ++ self.depends = [] ++ if 'depends' in kwargs: ++ self.depends = kwargs['depends'] ++ _setuptools.Extension.__init__(self, *args, **kwargs) ++ self.define_macros.append(('EXT_VERSION', version)) ++ ++ # add include path ++ included = '.' ++ if included not in self.include_dirs: ++ self.include_dirs.append(included) ++ ++ # add cext.h to the dependencies ++ cext_h = _posixpath.normpath(_posixpath.join(included, 'cext.h')) ++ for item in self.depends: ++ if _posixpath.normpath(item) == cext_h: ++ break ++ else: ++ self.depends.append(cext_h) ++ ++ ++EXTENSIONS = lambda v: [Extension('_rjsmin', ["rjsmin.c"], version=v)] ++ ++ ++def do_setup(cext): ++ """ Main """ ++ # pylint: disable = too-many-branches ++ # pylint: disable = unspecified-encoding ++ ++ args = {} if str is bytes else dict(encoding='utf-8') ++ version_file = '%s/%s' % (package['pathname'], ++ package.get('version_file', '__init__.py')) ++ with open(version_file, **args) as fp: ++ for line in fp: # pylint: disable = redefined-outer-name ++ if line.startswith('__version__'): ++ version = line.split('=', 1)[1].strip() ++ if version.startswith(("'", '"')): ++ version = version[1:-1].strip() ++ break ++ else: ++ raise RuntimeError("Version not found") ++ ++ kwargs = {} ++ ++ if not cext or 'java' in _sys.platform.lower(): ++ extensions = [] + else: +- ext=[Extension('_rjsmin', sources=['rjsmin.c'])] ++ extensions = EXTENSIONS(version) ++ ++ if extensions: ++ if 'build_ext' in globals(): ++ kwargs.setdefault('cmdclass', {})['build_ext'] = build_ext ++ kwargs['ext_modules'] = extensions ++ ++ cflags = None ++ if _os.environ.get('CFLAGS') is None: ++ from distutils import ccompiler as _ccompiler ++ ++ compiler = _ccompiler.get_default_compiler() ++ try: ++ with open("debug.%s.cflags" % compiler) as fp: ++ cflags = ' '.join([ ++ line for line in (line.strip() for line in fp) ++ if line and not line.startswith('#') ++ ]).split() or None ++ except IOError: ++ pass ++ ++ if cflags: ++ gcov = 'coverage' in ' '.join(cflags) ++ for ext in extensions: ++ # pylint: disable = attribute-defined-outside-init ++ ext.extra_compile_args = \ ++ getattr(ext, 'extra_compile_args', []) + cflags ++ if gcov: ++ ext.libraries.append('gcov') ++ ++ ++ if package.get('packages', True): ++ kwargs['packages'] = [package['top']] + [ ++ '%s.%s' % (package['top'], item) ++ for item in ++ _setuptools.find_packages(package['pathname']) ++ ] ++ if package.get('py_modules'): ++ kwargs['py_modules'] = package['py_modules'] + +- return run(script_args=args, ext=ext, manifest_only=_manifest) ++ _setuptools.setup( ++ name=package['name'], ++ author=package['author'], ++ author_email=package['email'], ++ license=package['license'], ++ classifiers=package['classifiers'], ++ description=package['desc'], ++ long_description=package['longdesc'], ++ url=package['url'], ++ install_requires=package['install_requires'], ++ version=version, ++ zip_safe=False, ++ **kwargs ++ ) + + +-def manifest(): +- """ Create List of packaged files """ +- return setup((), _manifest=1) ++def setup(): ++ """ Run setup """ ++ try: ++ do_setup(True) ++ except BuildFailed: ++ env = 'SETUP_CEXT_REQUIRED' ++ if _os.environ.get(env, '') not in ('', '0'): ++ raise ++ print("C extension build failed - building python only version now. " ++ "Set '%s' environment variable to '1' to make it fail." ++ % (env,), file=_sys.stderr) ++ do_setup(False) + + + if __name__ == '__main__': diff --git a/SOURCES/chromium-105.0.5195.52-python-six-1.16.0.patch b/SOURCES/chromium-105.0.5195.52-python-six-1.16.0.patch new file mode 100644 index 00000000..497c2df4 --- /dev/null +++ b/SOURCES/chromium-105.0.5195.52-python-six-1.16.0.patch @@ -0,0 +1,134 @@ +diff -up chromium-103.0.5060.53/third_party/catapult/third_party/six/six.py.116 chromium-103.0.5060.53/third_party/catapult/third_party/six/six.py +--- chromium-103.0.5060.53/third_party/catapult/third_party/six/six.py.116 2022-07-05 13:31:29.434673638 +0000 ++++ chromium-103.0.5060.53/third_party/catapult/third_party/six/six.py 2022-07-05 21:52:01.884578748 +0000 +@@ -29,7 +29,7 @@ import sys + import types + + __author__ = "Benjamin Peterson " +-__version__ = "1.15.0" ++__version__ = "1.16.0" + + + # Useful for very coarse version differentiation. +@@ -71,6 +71,11 @@ else: + MAXSIZE = int((1 << 63) - 1) + del X + ++if PY34: ++ from importlib.util import spec_from_loader ++else: ++ spec_from_loader = None ++ + + def _add_doc(func, doc): + """Add documentation to a function.""" +@@ -186,6 +191,11 @@ class _SixMetaPathImporter(object): + return self + return None + ++ def find_spec(self, fullname, path, target=None): ++ if fullname in self.known_modules: ++ return spec_from_loader(fullname, self) ++ return None ++ + def __get_module(self, fullname): + try: + return self.known_modules[fullname] +@@ -223,6 +233,12 @@ class _SixMetaPathImporter(object): + return None + get_source = get_code # same as get_code + ++ def create_module(self, spec): ++ return self.load_module(spec.name) ++ ++ def exec_module(self, module): ++ pass ++ + _importer = _SixMetaPathImporter(__name__) + + +diff -up chromium-103.0.5060.53/third_party/six/src/six.py.116 chromium-103.0.5060.53/third_party/six/src/six.py +--- chromium-103.0.5060.53/third_party/six/src/six.py.116 2022-07-05 13:32:28.916687658 +0000 ++++ chromium-103.0.5060.53/third_party/six/src/six.py 2022-07-05 21:59:42.561240407 +0000 +@@ -29,7 +29,7 @@ import sys + import types + + __author__ = "Benjamin Peterson " +-__version__ = "1.14.0" ++__version__ = "1.16.0" + + + # Useful for very coarse version differentiation. +@@ -71,6 +71,11 @@ else: + MAXSIZE = int((1 << 63) - 1) + del X + ++if PY34: ++ from importlib.util import spec_from_loader ++else: ++ spec_from_loader = None ++ + + def _add_doc(func, doc): + """Add documentation to a function.""" +@@ -186,6 +191,11 @@ class _SixMetaPathImporter(object): + return self + return None + ++ def find_spec(self, fullname, path, target=None): ++ if fullname in self.known_modules: ++ return spec_from_loader(fullname, self) ++ return None ++ + def __get_module(self, fullname): + try: + return self.known_modules[fullname] +@@ -223,6 +233,12 @@ class _SixMetaPathImporter(object): + return None + get_source = get_code # same as get_code + ++ def create_module(self, spec): ++ return self.load_module(spec.name) ++ ++ def exec_module(self, module): ++ pass ++ + _importer = _SixMetaPathImporter(__name__) + + +@@ -890,12 +906,11 @@ def ensure_binary(s, encoding='utf-8', e + - `str` -> encoded to `bytes` + - `bytes` -> `bytes` + """ ++ if isinstance(s, binary_type): ++ return s + if isinstance(s, text_type): + return s.encode(encoding, errors) +- elif isinstance(s, binary_type): +- return s +- else: +- raise TypeError("not expecting type '%s'" % type(s)) ++ raise TypeError("not expecting type '%s'" % type(s)) + + + def ensure_str(s, encoding='utf-8', errors='strict'): +@@ -909,12 +924,15 @@ def ensure_str(s, encoding='utf-8', erro + - `str` -> `str` + - `bytes` -> decoded to `str` + """ +- if not isinstance(s, (text_type, binary_type)): +- raise TypeError("not expecting type '%s'" % type(s)) ++ # Optimization: Fast return for the common case. ++ if type(s) is str: ++ return s + if PY2 and isinstance(s, text_type): +- s = s.encode(encoding, errors) ++ return s.encode(encoding, errors) + elif PY3 and isinstance(s, binary_type): +- s = s.decode(encoding, errors) ++ return s.decode(encoding, errors) ++ elif not isinstance(s, (text_type, binary_type)): ++ raise TypeError("not expecting type '%s'" % type(s)) + return s + + diff --git a/SOURCES/chromium-107-ffmpeg-duration.patch b/SOURCES/chromium-107-ffmpeg-duration.patch new file mode 100644 index 00000000..ee01cd9e --- /dev/null +++ b/SOURCES/chromium-107-ffmpeg-duration.patch @@ -0,0 +1,16 @@ +diff -up chromium-107.0.5304.121/media/filters/audio_file_reader.cc.me chromium-107.0.5304.121/media/filters/audio_file_reader.cc +--- chromium-107.0.5304.121/media/filters/audio_file_reader.cc.me 2022-12-17 08:27:12.204753071 +0100 ++++ chromium-107.0.5304.121/media/filters/audio_file_reader.cc 2022-12-17 08:28:40.908211808 +0100 +@@ -243,10 +243,10 @@ bool AudioFileReader::OnNewFrame( + // silence from being output. In the case where we are also discarding some + // portion of the packet (as indicated by a negative pts), we further want to + // adjust the duration downward by however much exists before zero. +- if (audio_codec_ == AudioCodec::kAAC && frame->duration) { ++ if (audio_codec_ == AudioCodec::kAAC && frame->pkt_duration) { + const base::TimeDelta pkt_duration = ConvertFromTimeBase( + glue_->format_context()->streams[stream_index_]->time_base, +- frame->duration + std::min(static_cast(0), frame->pts)); ++ frame->pkt_duration + std::min(static_cast(0), frame->pts)); + const base::TimeDelta frame_duration = + base::Seconds(frames_read / static_cast(sample_rate_)); + diff --git a/SOURCES/chromium-107-proprietary-codecs.patch b/SOURCES/chromium-107-proprietary-codecs.patch new file mode 100644 index 00000000..94b95b6e --- /dev/null +++ b/SOURCES/chromium-107-proprietary-codecs.patch @@ -0,0 +1,16 @@ +diff -up chromium-107.0.5304.121/media/BUILD.gn.me chromium-107.0.5304.121/media/BUILD.gn +--- chromium-107.0.5304.121/media/BUILD.gn.me 2022-12-17 12:35:44.546779129 +0100 ++++ chromium-107.0.5304.121/media/BUILD.gn 2022-12-17 12:35:59.296047028 +0100 +@@ -64,12 +64,6 @@ buildflag_header("media_buildflags") { + } + } + +-if (proprietary_codecs && media_use_ffmpeg) { +- assert( +- ffmpeg_branding != "Chromium", +- "proprietary codecs and ffmpeg_branding set to Chromium are incompatible") +-} +- + # Common configuration for targets in the media directory; these must not be + # exported since things like USE_NEON and USE_CRAS have different meanings + # elsewhere in the code base. diff --git a/SOURCES/chromium-107.0.5304.110-gn-system.patch b/SOURCES/chromium-107.0.5304.110-gn-system.patch new file mode 100644 index 00000000..4c944015 --- /dev/null +++ b/SOURCES/chromium-107.0.5304.110-gn-system.patch @@ -0,0 +1,39 @@ +diff -up chromium-105.0.5195.52/build/linux/unbundle/libusb.gn.gnsystem chromium-105.0.5195.52/build/linux/unbundle/libusb.gn +--- chromium-105.0.5195.52/build/linux/unbundle/libusb.gn.gnsystem 2022-09-01 12:23:27.557313611 +0000 ++++ chromium-105.0.5195.52/build/linux/unbundle/libusb.gn 2022-09-01 12:23:27.557313611 +0000 +@@ -0,0 +1,24 @@ ++# Copyright 2016 The Chromium Authors. All rights reserved. ++# Use of this source code is governed by a BSD-style license that can be ++# found in the LICENSE file. ++ ++import("//build/config/linux/pkg_config.gni") ++import("//build/shim_headers.gni") ++ ++pkg_config("system_libusb") { ++ packages = [ "libusb-1.0" ] ++} ++ ++shim_headers("libusb_shim") { ++ root_path = "src/libusb" ++ headers = [ ++ "libusb.h", ++ ] ++} ++ ++source_set("libusb") { ++ deps = [ ++ ":libusb_shim", ++ ] ++ public_configs = [ ":system_libusb" ] ++} +diff -up chromium-105.0.5195.52/build/linux/unbundle/replace_gn_files.py.gnsystem chromium-105.0.5195.52/build/linux/unbundle/replace_gn_files.py +--- chromium-105.0.5195.52/build/linux/unbundle/replace_gn_files.py.gnsystem 2022-09-01 12:23:27.558313577 +0000 ++++ chromium-105.0.5195.52/build/linux/unbundle/replace_gn_files.py 2022-09-01 12:36:01.870847125 +0000 +@@ -52,6 +52,7 @@ REPLACEMENTS = { + 'libjpeg': 'third_party/libjpeg.gni', + 'libjxl' : 'third_party/libjxl/BUILD.gn', + 'libpng': 'third_party/libpng/BUILD.gn', ++ 'libusb': 'third_party/libusb/BUILD.gn', + 'libvpx': 'third_party/libvpx/BUILD.gn', + 'libwebp': 'third_party/libwebp/BUILD.gn', + 'libxml': 'third_party/libxml/BUILD.gn', diff --git a/SOURCES/chromium-108-el7-include-fcntl-memfd.patch b/SOURCES/chromium-108-el7-include-fcntl-memfd.patch new file mode 100644 index 00000000..bd2925b3 --- /dev/null +++ b/SOURCES/chromium-108-el7-include-fcntl-memfd.patch @@ -0,0 +1,36 @@ +diff -up chromium-108.0.5359.124/third_party/wayland/src/src/wayland-shm.c.me chromium-108.0.5359.124/third_party/wayland/src/src/wayland-shm.c +--- chromium-108.0.5359.124/third_party/wayland/src/src/wayland-shm.c.me 2022-12-24 11:08:03.212333476 +0100 ++++ chromium-108.0.5359.124/third_party/wayland/src/src/wayland-shm.c 2022-12-24 11:08:18.316606155 +0100 +@@ -44,7 +44,7 @@ + #include + #include + #include +-#include ++#include + + #include "wayland-os.h" + #include "wayland-util.h" +diff -up chromium-102.0.5005.115/v8/src/base/platform/platform-posix.cc.el7-memfd-include chromium-102.0.5005.115/v8/src/base/platform/platform-posix.cc +--- chromium-102.0.5005.115/v8/src/base/platform/platform-posix.cc.el7-memfd-include 2022-06-15 10:52:49.553817031 -0400 ++++ chromium-102.0.5005.115/v8/src/base/platform/platform-posix.cc 2022-06-15 10:56:15.775173013 -0400 +@@ -56,6 +56,7 @@ + + #if V8_OS_LINUX + #include // for prctl ++#include // for MFD_CLOEXEC + #endif + + #if defined(V8_OS_FUCHSIA) +diff -up iridium-browser-2022.12.108.1/third_party/wayland/src/cursor/os-compatibility.c.me iridium-browser-2022.12.108.1/third_party/wayland/src/cursor/os-compatibility.c +--- iridium-browser-2022.12.108.1/third_party/wayland/src/cursor/os-compatibility.c.me 2022-12-08 21:59:43.502200984 +0100 ++++ iridium-browser-2022.12.108.1/third_party/wayland/src/cursor/os-compatibility.c 2022-12-08 22:13:53.375653343 +0100 +@@ -29,7 +29,8 @@ + + #include + #include +-#include ++#include // for F_SEAL_SHRINK, F_ADD_SEALS, F_SEAL_SEAL ++#include // for MFD_CLOEXEC + #include + #include + #include diff --git a/SOURCES/chromium-108-el7-wayland-strndup-error.patch b/SOURCES/chromium-108-el7-wayland-strndup-error.patch new file mode 100644 index 00000000..11478678 --- /dev/null +++ b/SOURCES/chromium-108-el7-wayland-strndup-error.patch @@ -0,0 +1,11 @@ +diff -up chromium-108.0.5359.124/third_party/wayland/src/src/scanner.c.me chromium-108.0.5359.124/third_party/wayland/src/src/scanner.c +--- chromium-108.0.5359.124/third_party/wayland/src/src/scanner.c.me 2022-12-27 16:14:22.507496575 +0100 ++++ chromium-108.0.5359.124/third_party/wayland/src/src/scanner.c 2022-12-27 16:35:17.617573610 +0100 +@@ -26,6 +26,7 @@ + */ + + #include "wayland-version.h" ++#include "config.h" // HAVE_STRNDUP + + #include + #include diff --git a/SOURCES/chromium-108-ffmpeg-revert-new-channel-layout-api.patch b/SOURCES/chromium-108-ffmpeg-revert-new-channel-layout-api.patch new file mode 100644 index 00000000..2d49f75e --- /dev/null +++ b/SOURCES/chromium-108-ffmpeg-revert-new-channel-layout-api.patch @@ -0,0 +1,294 @@ +diff -up chromium-108.0.5359.124/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc.revert-new-channel-layout-api chromium-108.0.5359.124/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc +--- chromium-108.0.5359.124/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc.revert-new-channel-layout-api 2022-12-14 01:39:52.000000000 +0100 ++++ chromium-108.0.5359.124/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc 2023-01-04 21:44:23.098276796 +0100 +@@ -74,7 +74,7 @@ void CdmAudioDecoderConfigToAVCodecConte + codec_context->sample_fmt = AV_SAMPLE_FMT_NONE; + } + +- codec_context->ch_layout.nb_channels = config.channel_count; ++ codec_context->channels = config.channel_count; + codec_context->sample_rate = config.samples_per_second; + + if (config.extra_data) { +@@ -124,8 +124,8 @@ void CopySamples(cdm::AudioFormat cdm_fo + case cdm::kAudioFormatPlanarS16: + case cdm::kAudioFormatPlanarF32: { + const int decoded_size_per_channel = +- decoded_audio_size / av_frame.ch_layout.nb_channels; +- for (int i = 0; i < av_frame.ch_layout.nb_channels; ++i) { ++ decoded_audio_size / av_frame.channels; ++ for (int i = 0; i < av_frame.channels; ++i) { + memcpy(output_buffer, av_frame.extended_data[i], + decoded_size_per_channel); + output_buffer += decoded_size_per_channel; +@@ -185,14 +185,13 @@ bool FFmpegCdmAudioDecoder::Initialize( + // Success! + decoding_loop_ = std::make_unique(codec_context_.get()); + samples_per_second_ = config.samples_per_second; +- bytes_per_frame_ = +- codec_context_->ch_layout.nb_channels * config.bits_per_channel / 8; ++ bytes_per_frame_ = codec_context_->channels * config.bits_per_channel / 8; + output_timestamp_helper_ = + std::make_unique(config.samples_per_second); + is_initialized_ = true; + + // Store initial values to guard against midstream configuration changes. +- channels_ = codec_context_->ch_layout.nb_channels; ++ channels_ = codec_context_->channels; + av_sample_format_ = codec_context_->sample_fmt; + + return true; +@@ -292,19 +291,17 @@ cdm::Status FFmpegCdmAudioDecoder::Decod + for (auto& frame : audio_frames) { + int decoded_audio_size = 0; + if (frame->sample_rate != samples_per_second_ || +- frame->ch_layout.nb_channels != channels_ || +- frame->format != av_sample_format_) { ++ frame->channels != channels_ || frame->format != av_sample_format_) { + DLOG(ERROR) << "Unsupported midstream configuration change!" + << " Sample Rate: " << frame->sample_rate << " vs " +- << samples_per_second_ +- << ", Channels: " << frame->ch_layout.nb_channels << " vs " +- << channels_ << ", Sample Format: " << frame->format << " vs " +- << av_sample_format_; ++ << samples_per_second_ << ", Channels: " << frame->channels ++ << " vs " << channels_ << ", Sample Format: " << frame->format ++ << " vs " << av_sample_format_; + return cdm::kDecodeError; + } + + decoded_audio_size = av_samples_get_buffer_size( +- nullptr, codec_context_->ch_layout.nb_channels, frame->nb_samples, ++ nullptr, codec_context_->channels, frame->nb_samples, + codec_context_->sample_fmt, 1); + if (!decoded_audio_size) + continue; +@@ -323,9 +320,9 @@ bool FFmpegCdmAudioDecoder::OnNewFrame( + size_t* total_size, + std::vector>* audio_frames, + AVFrame* frame) { +- *total_size += av_samples_get_buffer_size( +- nullptr, codec_context_->ch_layout.nb_channels, frame->nb_samples, +- codec_context_->sample_fmt, 1); ++ *total_size += av_samples_get_buffer_size(nullptr, codec_context_->channels, ++ frame->nb_samples, ++ codec_context_->sample_fmt, 1); + audio_frames->emplace_back(av_frame_clone(frame)); + return true; + } +diff -up chromium-108.0.5359.124/media/ffmpeg/ffmpeg_common.cc.revert-new-channel-layout-api chromium-108.0.5359.124/media/ffmpeg/ffmpeg_common.cc +--- chromium-108.0.5359.124/media/ffmpeg/ffmpeg_common.cc.revert-new-channel-layout-api 2022-12-14 01:39:52.000000000 +0100 ++++ chromium-108.0.5359.124/media/ffmpeg/ffmpeg_common.cc 2023-01-04 21:52:59.674165082 +0100 +@@ -353,11 +353,9 @@ bool AVCodecContextToAudioDecoderConfig( + codec_context->sample_fmt, codec_context->codec_id); + + ChannelLayout channel_layout = +- codec_context->ch_layout.nb_channels > 8 ++ codec_context->channels > 8 + ? CHANNEL_LAYOUT_DISCRETE +- : ChannelLayoutToChromeChannelLayout( +- codec_context->ch_layout.u.mask, +- codec_context->ch_layout.nb_channels); ++ : ChannelLayoutToChromeChannelLayout(codec_context->channel_layout, codec_context->channels); + + switch (codec) { + // For AC3/EAC3 we enable only demuxing, but not decoding, so FFmpeg does +@@ -409,7 +407,7 @@ bool AVCodecContextToAudioDecoderConfig( + extra_data, encryption_scheme, seek_preroll, + codec_context->delay); + if (channel_layout == CHANNEL_LAYOUT_DISCRETE) +- config->SetChannelsForDiscrete(codec_context->ch_layout.nb_channels); ++ config->SetChannelsForDiscrete(codec_context->channels); + + #if BUILDFLAG(ENABLE_PLATFORM_AC3_EAC3_AUDIO) + // These are bitstream formats unknown to ffmpeg, so they don't have +@@ -478,7 +476,7 @@ void AudioDecoderConfigToAVCodecContext( + + // TODO(scherkus): should we set |channel_layout|? I'm not sure if FFmpeg uses + // said information to decode. +- codec_context->ch_layout.nb_channels = config.channels(); ++ codec_context->channels = config.channels(); + codec_context->sample_rate = config.samples_per_second(); + + if (config.extra_data().empty()) { +diff -up chromium-108.0.5359.124/media/filters/audio_file_reader.cc.revert-new-channel-layout-api chromium-108.0.5359.124/media/filters/audio_file_reader.cc +--- chromium-108.0.5359.124/media/filters/audio_file_reader.cc.revert-new-channel-layout-api 2023-01-04 21:44:23.095276762 +0100 ++++ chromium-108.0.5359.124/media/filters/audio_file_reader.cc 2023-01-04 21:44:23.098276796 +0100 +@@ -113,15 +113,14 @@ bool AudioFileReader::OpenDecoder() { + + // Verify the channel layout is supported by Chrome. Acts as a sanity check + // against invalid files. See http://crbug.com/171962 +- if (ChannelLayoutToChromeChannelLayout( +- codec_context_->ch_layout.u.mask, +- codec_context_->ch_layout.nb_channels) == ++ if (ChannelLayoutToChromeChannelLayout(codec_context_->channel_layout, ++ codec_context_->channels) == + CHANNEL_LAYOUT_UNSUPPORTED) { + return false; + } + + // Store initial values to guard against midstream configuration changes. +- channels_ = codec_context_->ch_layout.nb_channels; ++ channels_ = codec_context_->channels; + audio_codec_ = CodecIDToAudioCodec(codec_context_->codec_id); + sample_rate_ = codec_context_->sample_rate; + av_sample_format_ = codec_context_->sample_fmt; +@@ -224,7 +223,7 @@ bool AudioFileReader::OnNewFrame( + if (frames_read < 0) + return false; + +- const int channels = frame->ch_layout.nb_channels; ++ const int channels = frame->channels; + if (frame->sample_rate != sample_rate_ || channels != channels_ || + frame->format != av_sample_format_) { + DLOG(ERROR) << "Unsupported midstream configuration change!" +diff -up chromium-108.0.5359.124/media/filters/audio_file_reader_unittest.cc.revert-new-channel-layout-api chromium-108.0.5359.124/media/filters/audio_file_reader_unittest.cc +--- chromium-108.0.5359.124/media/filters/audio_file_reader_unittest.cc.revert-new-channel-layout-api 2022-12-14 01:39:52.000000000 +0100 ++++ chromium-108.0.5359.124/media/filters/audio_file_reader_unittest.cc 2023-01-04 21:44:23.098276796 +0100 +@@ -121,11 +121,11 @@ class AudioFileReaderTest : public testi + EXPECT_FALSE(reader_->Open()); + } + +- void RunTestFailingDecode(const char* fn, int expect_read = 0) { ++ void RunTestFailingDecode(const char* fn) { + Initialize(fn); + EXPECT_TRUE(reader_->Open()); + std::vector> decoded_audio_packets; +- EXPECT_EQ(reader_->Read(&decoded_audio_packets), expect_read); ++ EXPECT_EQ(reader_->Read(&decoded_audio_packets), 0); + } + + void RunTestPartialDecode(const char* fn) { +@@ -219,7 +219,7 @@ TEST_F(AudioFileReaderTest, AAC_ADTS) { + } + + TEST_F(AudioFileReaderTest, MidStreamConfigChangesFail) { +- RunTestFailingDecode("midstream_config_change.mp3", 42624); ++ RunTestFailingDecode("midstream_config_change.mp3"); + } + #endif + +diff -up chromium-108.0.5359.124/media/filters/audio_video_metadata_extractor.cc.revert-new-channel-layout-api chromium-108.0.5359.124/media/filters/audio_video_metadata_extractor.cc +--- chromium-108.0.5359.124/media/filters/audio_video_metadata_extractor.cc.revert-new-channel-layout-api 2022-12-14 01:39:52.000000000 +0100 ++++ chromium-108.0.5359.124/media/filters/audio_video_metadata_extractor.cc 2023-01-04 21:44:23.098276796 +0100 +@@ -113,15 +113,6 @@ bool AudioVideoMetadataExtractor::Extrac + if (!stream) + continue; + +- void* display_matrix = +- av_stream_get_side_data(stream, AV_PKT_DATA_DISPLAYMATRIX, nullptr); +- if (display_matrix) { +- rotation_ = VideoTransformation::FromFFmpegDisplayMatrix( +- static_cast(display_matrix)) +- .rotation; +- info.tags["rotate"] = base::NumberToString(rotation_); +- } +- + // Extract dictionary from streams also. Needed for containers that attach + // metadata to contained streams instead the container itself, like OGG. + ExtractDictionary(stream->metadata, &info.tags); +@@ -264,6 +255,8 @@ void AudioVideoMetadataExtractor::Extrac + if (raw_tags->find(tag->key) == raw_tags->end()) + (*raw_tags)[tag->key] = tag->value; + ++ if (ExtractInt(tag, "rotate", &rotation_)) ++ continue; + if (ExtractString(tag, "album", &album_)) + continue; + if (ExtractString(tag, "artist", &artist_)) +diff -up chromium-108.0.5359.124/media/filters/ffmpeg_aac_bitstream_converter.cc.revert-new-channel-layout-api chromium-108.0.5359.124/media/filters/ffmpeg_aac_bitstream_converter.cc +--- chromium-108.0.5359.124/media/filters/ffmpeg_aac_bitstream_converter.cc.revert-new-channel-layout-api 2022-12-14 01:39:52.000000000 +0100 ++++ chromium-108.0.5359.124/media/filters/ffmpeg_aac_bitstream_converter.cc 2023-01-04 21:44:23.099276807 +0100 +@@ -195,15 +195,14 @@ bool FFmpegAACBitstreamConverter::Conver + if (!header_generated_ || codec_ != stream_codec_parameters_->codec_id || + audio_profile_ != stream_codec_parameters_->profile || + sample_rate_index_ != sample_rate_index || +- channel_configuration_ != +- stream_codec_parameters_->ch_layout.nb_channels || ++ channel_configuration_ != stream_codec_parameters_->channels || + frame_length_ != header_plus_packet_size) { + header_generated_ = + GenerateAdtsHeader(stream_codec_parameters_->codec_id, + 0, // layer + stream_codec_parameters_->profile, sample_rate_index, + 0, // private stream +- stream_codec_parameters_->ch_layout.nb_channels, ++ stream_codec_parameters_->channels, + 0, // originality + 0, // home + 0, // copyrighted_stream +@@ -215,7 +214,7 @@ bool FFmpegAACBitstreamConverter::Conver + codec_ = stream_codec_parameters_->codec_id; + audio_profile_ = stream_codec_parameters_->profile; + sample_rate_index_ = sample_rate_index; +- channel_configuration_ = stream_codec_parameters_->ch_layout.nb_channels; ++ channel_configuration_ = stream_codec_parameters_->channels; + frame_length_ = header_plus_packet_size; + } + +diff -up chromium-108.0.5359.124/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc.revert-new-channel-layout-api chromium-108.0.5359.124/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc +--- chromium-108.0.5359.124/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc.revert-new-channel-layout-api 2022-12-14 01:39:52.000000000 +0100 ++++ chromium-108.0.5359.124/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc 2023-01-04 21:44:23.099276807 +0100 +@@ -34,7 +34,7 @@ class FFmpegAACBitstreamConverterTest : + memset(&test_parameters_, 0, sizeof(AVCodecParameters)); + test_parameters_.codec_id = AV_CODEC_ID_AAC; + test_parameters_.profile = FF_PROFILE_AAC_MAIN; +- test_parameters_.ch_layout.nb_channels = 2; ++ test_parameters_.channels = 2; + test_parameters_.extradata = extradata_header_; + test_parameters_.extradata_size = sizeof(extradata_header_); + } +diff -up chromium-108.0.5359.124/media/filters/ffmpeg_audio_decoder.cc.revert-new-channel-layout-api chromium-108.0.5359.124/media/filters/ffmpeg_audio_decoder.cc +--- chromium-108.0.5359.124/media/filters/ffmpeg_audio_decoder.cc.revert-new-channel-layout-api 2022-12-14 01:39:52.000000000 +0100 ++++ chromium-108.0.5359.124/media/filters/ffmpeg_audio_decoder.cc 2023-01-04 21:44:23.099276807 +0100 +@@ -28,7 +28,7 @@ namespace media { + + // Return the number of channels from the data in |frame|. + static inline int DetermineChannels(AVFrame* frame) { +- return frame->ch_layout.nb_channels; ++ return frame->channels; + } + + // Called by FFmpeg's allocation routine to allocate a buffer. Uses +@@ -233,7 +233,7 @@ bool FFmpegAudioDecoder::OnNewFrame(cons + // Translate unsupported into discrete layouts for discrete configurations; + // ffmpeg does not have a labeled discrete configuration internally. + ChannelLayout channel_layout = ChannelLayoutToChromeChannelLayout( +- codec_context_->ch_layout.u.mask, codec_context_->ch_layout.nb_channels); ++ codec_context_->channel_layout, codec_context_->channels); + if (channel_layout == CHANNEL_LAYOUT_UNSUPPORTED && + config_.channel_layout() == CHANNEL_LAYOUT_DISCRETE) { + channel_layout = CHANNEL_LAYOUT_DISCRETE; +@@ -350,11 +350,11 @@ bool FFmpegAudioDecoder::ConfigureDecode + // Success! + av_sample_format_ = codec_context_->sample_fmt; + +- if (codec_context_->ch_layout.nb_channels != config.channels()) { ++ if (codec_context_->channels != config.channels()) { + MEDIA_LOG(ERROR, media_log_) + << "Audio configuration specified " << config.channels() + << " channels, but FFmpeg thinks the file contains " +- << codec_context_->ch_layout.nb_channels << " channels"; ++ << codec_context_->channels << " channels"; + ReleaseFFmpegResources(); + state_ = DecoderState::kUninitialized; + return false; +@@ -405,7 +405,7 @@ int FFmpegAudioDecoder::GetAudioBuffer(s + if (frame->nb_samples <= 0) + return AVERROR(EINVAL); + +- if (s->ch_layout.nb_channels != channels) { ++ if (s->channels != channels) { + DLOG(ERROR) << "AVCodecContext and AVFrame disagree on channel count."; + return AVERROR(EINVAL); + } +@@ -438,8 +438,7 @@ int FFmpegAudioDecoder::GetAudioBuffer(s + ChannelLayout channel_layout = + config_.channel_layout() == CHANNEL_LAYOUT_DISCRETE + ? CHANNEL_LAYOUT_DISCRETE +- : ChannelLayoutToChromeChannelLayout(s->ch_layout.u.mask, +- s->ch_layout.nb_channels); ++ : ChannelLayoutToChromeChannelLayout(s->channel_layout, s->channels); + + if (channel_layout == CHANNEL_LAYOUT_UNSUPPORTED) { + DLOG(ERROR) << "Unsupported channel layout."; diff --git a/SOURCES/chromium-108-system-brotli.patch b/SOURCES/chromium-108-system-brotli.patch new file mode 100644 index 00000000..a5a4ecc7 --- /dev/null +++ b/SOURCES/chromium-108-system-brotli.patch @@ -0,0 +1,36 @@ +diff -up chromium-108.0.5359.124/net/filter/brotli_source_stream.cc.me chromium-108.0.5359.124/net/filter/brotli_source_stream.cc +--- chromium-108.0.5359.124/net/filter/brotli_source_stream.cc.me 2022-12-30 16:00:58.320318310 +0100 ++++ chromium-108.0.5359.124/net/filter/brotli_source_stream.cc 2022-12-30 16:01:24.928581631 +0100 +@@ -10,7 +10,7 @@ + #include "base/memory/raw_ptr.h" + #include "base/metrics/histogram_macros.h" + #include "net/base/io_buffer.h" +-#include "third_party/brotli/include/brotli/decode.h" ++#include + + namespace net { + +diff -up chromium-108.0.5359.124/net/ssl/cert_compression.cc.me chromium-108.0.5359.124/net/ssl/cert_compression.cc +--- chromium-108.0.5359.124/net/ssl/cert_compression.cc.me 2022-12-30 15:57:59.859543993 +0100 ++++ chromium-108.0.5359.124/net/ssl/cert_compression.cc 2022-12-30 16:00:48.560221723 +0100 +@@ -9,7 +9,7 @@ + #include "third_party/boringssl/src/include/openssl/ssl.h" + + #if !defined(NET_DISABLE_BROTLI) +-#include "third_party/brotli/include/brotli/decode.h" ++#include + #endif + + namespace net { +diff -up chromium-108.0.5359.124/ui/base/resource/resource_bundle.cc.me chromium-108.0.5359.124/ui/base/resource/resource_bundle.cc +--- chromium-108.0.5359.124/ui/base/resource/resource_bundle.cc.me 2022-12-30 21:12:27.058346797 +0100 ++++ chromium-108.0.5359.124/ui/base/resource/resource_bundle.cc 2022-12-30 21:13:58.363183795 +0100 +@@ -31,7 +31,7 @@ + #include "build/build_config.h" + #include "net/filter/gzip_header.h" + #include "skia/ext/image_operations.h" +-#include "third_party/brotli/include/brotli/decode.h" ++#include + #include "third_party/skia/include/core/SkBitmap.h" + #include "third_party/skia/include/core/SkColor.h" + #include "third_party/zlib/google/compression_utils.h" diff --git a/SOURCES/chromium-108-system-opus.patch b/SOURCES/chromium-108-system-opus.patch new file mode 100644 index 00000000..3c7d9f2f --- /dev/null +++ b/SOURCES/chromium-108-system-opus.patch @@ -0,0 +1,12 @@ +diff -up chromium-108.0.5359.124/media/audio/audio_opus_encoder.h.me chromium-108.0.5359.124/media/audio/audio_opus_encoder.h +--- chromium-108.0.5359.124/media/audio/audio_opus_encoder.h.me 2022-12-31 09:49:17.100277502 +0100 ++++ chromium-108.0.5359.124/media/audio/audio_opus_encoder.h 2022-12-31 09:49:57.101016710 +0100 +@@ -12,7 +12,7 @@ + #include "media/base/audio_converter.h" + #include "media/base/audio_encoder.h" + #include "media/base/audio_timestamp_helper.h" +-#include "third_party/opus/src/include/opus.h" ++#include + + namespace media { + diff --git a/SOURCES/chromium-108-widevine-other-locations.patch b/SOURCES/chromium-108-widevine-other-locations.patch new file mode 100644 index 00000000..5a29089f --- /dev/null +++ b/SOURCES/chromium-108-widevine-other-locations.patch @@ -0,0 +1,32 @@ +diff -up chromium-108.0.5359.124/chrome/common/chrome_paths.cc.widevine-other-locations chromium-108.0.5359.124/chrome/common/chrome_paths.cc +--- chromium-108.0.5359.124/chrome/common/chrome_paths.cc.widevine-other-locations 2023-01-02 11:10:03.951330305 +0100 ++++ chromium-108.0.5359.124/chrome/common/chrome_paths.cc 2023-01-02 13:42:26.781022150 +0100 +@@ -319,6 +319,16 @@ bool PathProvider(int key, base::FilePat + + #if BUILDFLAG(ENABLE_WIDEVINE) + case chrome::DIR_BUNDLED_WIDEVINE_CDM: ++ base::PathService::Get(base::DIR_HOME, &cur); ++ cur = cur.Append(FILE_PATH_LITERAL(".config/chromium/WidevineCdm")); ++ if (base::PathExists(cur)) { ++ break; ++ } ++ // Yes, this has an arch hardcoded in the path, but at this time, it is the only place to find libwidevinecdm.so ++ if (base::PathExists(base::FilePath(FILE_PATH_LITERAL("/opt/google/chrome/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so")))) { ++ cur = base::FilePath(FILE_PATH_LITERAL("/opt/google/chrome/WidevineCdm")); ++ break; ++ } + if (!GetComponentDirectory(&cur)) + return false; + cur = cur.AppendASCII(kWidevineCdmBaseDirectory); +diff -up chromium-108.0.5359.124/third_party/widevine/cdm/BUILD.gn.widevine-other-locations chromium-108.0.5359.124/third_party/widevine/cdm/BUILD.gn +--- chromium-108.0.5359.124/third_party/widevine/cdm/BUILD.gn.widevine-other-locations 2023-01-02 11:10:45.953114153 +0100 ++++ chromium-108.0.5359.124/third_party/widevine/cdm/BUILD.gn 2023-01-02 11:10:45.953114153 +0100 +@@ -22,7 +22,7 @@ buildflag_header("buildflags") { + + flags = [ + "ENABLE_WIDEVINE=$enable_widevine", +- "BUNDLE_WIDEVINE_CDM=$bundle_widevine_cdm", ++ "BUNDLE_WIDEVINE_CDM=true", + "ENABLE_WIDEVINE_CDM_COMPONENT=$enable_widevine_cdm_component", + "ENABLE_MEDIA_FOUNDATION_WIDEVINE_CDM=$enable_media_foundation_widevine_cdm", + ] diff --git a/SOURCES/chromium-109-system-minizip-header-fix.patch b/SOURCES/chromium-109-system-minizip-header-fix.patch new file mode 100644 index 00000000..f17c7fad --- /dev/null +++ b/SOURCES/chromium-109-system-minizip-header-fix.patch @@ -0,0 +1,64 @@ +diff -up chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc.system-minizip chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc +--- chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc.system-minizip 2023-01-04 20:20:37.000000000 +0100 ++++ chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc 2023-01-08 15:48:08.654793086 +0100 +@@ -27,8 +27,8 @@ limitations under the License. + #include "tensorflow_lite_support/cc/port/status_macros.h" + #include "tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.h" + #include "tensorflow_lite_support/metadata/metadata_schema_generated.h" +-#include "third_party/zlib/contrib/minizip/ioapi.h" +-#include "third_party/zlib/contrib/minizip/unzip.h" ++#include ++#include + + namespace tflite { + namespace metadata { +diff -up chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc.system-minizip chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc +--- chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc.system-minizip 2023-01-04 20:20:37.000000000 +0100 ++++ chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc 2023-01-08 15:48:08.655793097 +0100 +@@ -26,8 +26,8 @@ limitations under the License. + #include "tensorflow_lite_support/cc/port/statusor.h" + #include "tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h" + #include "tensorflow_lite_support/metadata/metadata_schema_generated.h" +-#include "third_party/zlib/contrib/minizip/ioapi.h" +-#include "third_party/zlib/contrib/minizip/unzip.h" ++#include ++#include + + namespace tflite { + namespace metadata { +diff -up chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc.system-minizip chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc +--- chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc.system-minizip 2023-01-08 15:48:08.655793097 +0100 ++++ chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc 2023-01-08 15:53:17.498329640 +0100 +@@ -19,7 +19,7 @@ limitations under the License. + #include + + #include "absl/strings/string_view.h" // from @com_google_absl +-#include "third_party/zlib/contrib/minizip/ioapi.h" ++#include + + namespace tflite { + namespace metadata { +diff -up chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc.system-minizip chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc +--- chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc.system-minizip 2023-01-04 20:20:37.000000000 +0100 ++++ chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc 2023-01-08 15:48:08.655793097 +0100 +@@ -19,7 +19,7 @@ limitations under the License. + #include + + #include "absl/strings/string_view.h" // from @com_google_absl +-#include "third_party/zlib/contrib/minizip/ioapi.h" ++#include + + namespace tflite { + namespace metadata { +diff -up chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h.system-minizip chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h +--- chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h.system-minizip 2023-01-04 20:20:37.000000000 +0100 ++++ chromium-109.0.5414.74/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h 2023-01-08 15:48:08.655793097 +0100 +@@ -19,7 +19,7 @@ limitations under the License. + #include + + #include "absl/strings/string_view.h" // from @com_google_absl +-#include "third_party/zlib/contrib/minizip/ioapi.h" ++#include + + namespace tflite { + namespace metadata { diff --git a/SOURCES/chromium-110-epel7-old-headers-workarounds.patch b/SOURCES/chromium-110-epel7-old-headers-workarounds.patch new file mode 100644 index 00000000..cb91763b --- /dev/null +++ b/SOURCES/chromium-110-epel7-old-headers-workarounds.patch @@ -0,0 +1,141 @@ +diff -up chromium-110.0.5481.77/sandbox/policy/linux/bpf_hardware_video_decoding_policy_linux.cc.me chromium-110.0.5481.77/sandbox/policy/linux/bpf_hardware_video_decoding_policy_linux.cc +--- chromium-110.0.5481.77/sandbox/policy/linux/bpf_hardware_video_decoding_policy_linux.cc.me 2023-02-08 20:34:02.700010846 +0100 ++++ chromium-110.0.5481.77/sandbox/policy/linux/bpf_hardware_video_decoding_policy_linux.cc 2023-02-08 20:35:30.455580670 +0100 +@@ -4,7 +4,9 @@ + + #include "sandbox/policy/linux/bpf_hardware_video_decoding_policy_linux.h" + +-#include ++#ifndef KCMP_FILE ++#define KCMP_FILE 0 ++#endif + + #include "media/gpu/buildflags.h" + #include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h" +diff -up chromium-99.0.4844.51/mojo/core/channel_linux.cc.epel7-header-workarounds chromium-99.0.4844.51/mojo/core/channel_linux.cc +--- chromium-99.0.4844.51/mojo/core/channel_linux.cc.epel7-header-workarounds 2022-02-28 19:05:54.000000000 -0500 ++++ chromium-99.0.4844.51/mojo/core/channel_linux.cc 2022-03-05 14:50:49.876812909 -0500 +@@ -44,6 +44,25 @@ + #include "base/android/build_info.h" + #endif + ++#ifndef F_LINUX_SPECIFIC_BASE ++#define F_LINUX_SPECIFIC_BASE 1024 ++#endif ++#ifndef F_SEAL_SEAL ++#define F_SEAL_SEAL 0x0001 ++#endif ++#ifndef F_SEAL_SHRINK ++#define F_SEAL_SHRINK 0x0002 ++#endif ++#ifndef F_SEAL_GROW ++#define F_SEAL_GROW 0x0004 ++#endif ++#ifndef F_ADD_SEALS ++#define F_ADD_SEALS (F_LINUX_SPECIFIC_BASE + 9) ++#endif ++#ifndef F_GET_SEALS ++#define F_GET_SEALS (F_LINUX_SPECIFIC_BASE + 10) ++#endif ++ + #ifndef EFD_ZERO_ON_WAKE + #define EFD_ZERO_ON_WAKE O_NOFOLLOW + #endif +diff -up chromium-99.0.4844.51/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc.epel7-header-workarounds chromium-99.0.4844.51/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc +--- chromium-99.0.4844.51/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc.epel7-header-workarounds 2022-03-05 14:50:49.877812915 -0500 ++++ chromium-99.0.4844.51/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc 2022-03-05 15:15:02.536867009 -0500 +@@ -53,6 +53,25 @@ + + #endif // BUILDFLAG(IS_ANDROID) + ++#ifndef F_LINUX_SPECIFIC_BASE ++#define F_LINUX_SPECIFIC_BASE 1024 ++#endif ++#ifndef F_SEAL_SEAL ++#define F_SEAL_SEAL 0x0001 ++#endif ++#ifndef F_SEAL_SHRINK ++#define F_SEAL_SHRINK 0x0002 ++#endif ++#ifndef F_SEAL_GROW ++#define F_SEAL_GROW 0x0004 ++#endif ++#ifndef F_ADD_SEALS ++#define F_ADD_SEALS (F_LINUX_SPECIFIC_BASE + 9) ++#endif ++#ifndef F_GET_SEALS ++#define F_GET_SEALS (F_LINUX_SPECIFIC_BASE + 10) ++#endif ++ + #if defined(__arm__) && !defined(MAP_STACK) + #define MAP_STACK 0x20000 // Daisy build environment has old headers. + #endif +diff -up chromium-99.0.4844.51/sandbox/policy/linux/bpf_cros_amd_gpu_policy_linux.cc.epel7-header-workarounds chromium-99.0.4844.51/sandbox/policy/linux/bpf_cros_amd_gpu_policy_linux.cc +--- chromium-99.0.4844.51/sandbox/policy/linux/bpf_cros_amd_gpu_policy_linux.cc.epel7-header-workarounds 2022-02-28 19:05:55.000000000 -0500 ++++ chromium-99.0.4844.51/sandbox/policy/linux/bpf_cros_amd_gpu_policy_linux.cc 2022-03-05 14:50:49.877812915 -0500 +@@ -6,7 +6,24 @@ + + #include + #include +-#include ++#ifndef KCMP_FILE ++#define KCMP_FILE 0 ++#endif ++#ifndef F_LINUX_SPECIFIC_BASE ++#define F_LINUX_SPECIFIC_BASE 1024 ++#endif ++#ifndef F_SEAL_SEAL ++#define F_SEAL_SEAL 0x0001 ++#endif ++#ifndef F_SEAL_SHRINK ++#define F_SEAL_SHRINK 0x0002 ++#endif ++#ifndef F_SEAL_GROW ++#define F_SEAL_GROW 0x0004 ++#endif ++#ifndef F_ADD_SEALS ++#define F_ADD_SEALS (F_LINUX_SPECIFIC_BASE + 9) ++#endif + #include + + // Some arch's (arm64 for instance) unistd.h don't pull in symbols used here +diff -up chromium-99.0.4844.51/sandbox/policy/linux/bpf_gpu_policy_linux.cc.epel7-header-workarounds chromium-99.0.4844.51/sandbox/policy/linux/bpf_gpu_policy_linux.cc +--- chromium-99.0.4844.51/sandbox/policy/linux/bpf_gpu_policy_linux.cc.epel7-header-workarounds 2022-02-28 19:05:55.000000000 -0500 ++++ chromium-99.0.4844.51/sandbox/policy/linux/bpf_gpu_policy_linux.cc 2022-03-05 14:50:49.877812915 -0500 +@@ -22,6 +22,22 @@ + #include "sandbox/policy/linux/sandbox_linux.h" + #include "sandbox/policy/linux/sandbox_seccomp_bpf_linux.h" + ++#ifndef F_LINUX_SPECIFIC_BASE ++#define F_LINUX_SPECIFIC_BASE 1024 ++#endif ++#ifndef F_SEAL_SEAL ++#define F_SEAL_SEAL 0x0001 ++#endif ++#ifndef F_SEAL_SHRINK ++#define F_SEAL_SHRINK 0x0002 ++#endif ++#ifndef F_SEAL_GROW ++#define F_SEAL_GROW 0x0004 ++#endif ++#ifndef F_ADD_SEALS ++#define F_ADD_SEALS (F_LINUX_SPECIFIC_BASE + 9) ++#endif ++ + using sandbox::bpf_dsl::AllOf; + using sandbox::bpf_dsl::Allow; + using sandbox::bpf_dsl::Arg; +diff -up chromium-99.0.4844.51/ui/events/ozone/evdev/event_converter_evdev_impl.cc.epel7-header-workarounds chromium-99.0.4844.51/ui/events/ozone/evdev/event_converter_evdev_impl.cc +--- chromium-99.0.4844.51/ui/events/ozone/evdev/event_converter_evdev_impl.cc.epel7-header-workarounds 2022-02-28 19:06:49.000000000 -0500 ++++ chromium-99.0.4844.51/ui/events/ozone/evdev/event_converter_evdev_impl.cc 2022-03-05 14:50:49.877812915 -0500 +@@ -23,6 +23,10 @@ + #include "ui/events/ozone/evdev/numberpad_metrics.h" + #endif + ++#ifndef SW_PEN_INSERTED ++#define SW_PEN_INSERTED 0x0f /* set = pen inserted */ ++#endif ++ + namespace ui { + + namespace { diff --git a/SOURCES/chromium-110-limits.patch b/SOURCES/chromium-110-limits.patch new file mode 100644 index 00000000..31a4c1e4 --- /dev/null +++ b/SOURCES/chromium-110-limits.patch @@ -0,0 +1,11 @@ +diff -up chromium-110.0.5481.177/base/memory/ref_counted.h.me chromium-110.0.5481.177/base/memory/ref_counted.h +--- chromium-110.0.5481.177/base/memory/ref_counted.h.me 2023-02-23 13:34:33.174817255 -0500 ++++ chromium-110.0.5481.177/base/memory/ref_counted.h 2023-02-23 13:42:28.646052469 -0500 +@@ -6,6 +6,7 @@ + #define BASE_MEMORY_REF_COUNTED_H_ + + #include ++#include + + #include + diff --git a/SOURCES/chromium-112-ffmpeg-first_dts.patch b/SOURCES/chromium-112-ffmpeg-first_dts.patch new file mode 100644 index 00000000..6a8ab131 --- /dev/null +++ b/SOURCES/chromium-112-ffmpeg-first_dts.patch @@ -0,0 +1,120 @@ +From 2aef9000a1c8d76d3072365ffcb471ebffa20d3d Mon Sep 17 00:00:00 2001 +From: Andreas Schneider +Date: Tue, 15 Mar 2022 14:26:16 +0100 +Subject: [PATCH] Track first_dts instead of using non-upstream functions + +The function av_stream_get_first_dts() is not an upstream ffmpeg function and +is not available if you build with system ffmpeg. We can easily track the +first_dts on our own. + +See also +https://ffmpeg.org/pipermail/ffmpeg-devel/2021-September/285401.html + +Bug: 1306560 + +Signed-off-by: Andreas Schneider +Change-Id: I90ba3cf2f2e16f56a0b405f26c67f911349fb71d +--- + media/filters/ffmpeg_demuxer.cc | 18 ++++++++++++------ + media/filters/ffmpeg_demuxer.h | 3 +++ + 3 files changed, 16 insertions(+), 6 deletions(-) + +diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc +index 111899b661..799fc6e941 100644 +--- a/media/filters/ffmpeg_demuxer.cc ++++ b/media/filters/ffmpeg_demuxer.cc +@@ -97,7 +97,7 @@ static base::TimeDelta FramesToTimeDelta(int frames, double sample_rate) { + sample_rate); + } + +-static base::TimeDelta ExtractStartTime(AVStream* stream) { ++static base::TimeDelta ExtractStartTime(AVStream* stream, int64_t first_dts) { + // The default start time is zero. + base::TimeDelta start_time; + +@@ -107,12 +107,12 @@ static base::TimeDelta ExtractStartTime(AVStream* stream) { + + // Next try to use the first DTS value, for codecs where we know PTS == DTS + // (excludes all H26x codecs). The start time must be returned in PTS. +- if (av_stream_get_first_dts(stream) != kNoFFmpegTimestamp && ++ if (first_dts != AV_NOPTS_VALUE && + stream->codecpar->codec_id != AV_CODEC_ID_HEVC && + stream->codecpar->codec_id != AV_CODEC_ID_H264 && + stream->codecpar->codec_id != AV_CODEC_ID_MPEG4) { + const base::TimeDelta first_pts = +- ConvertFromTimeBase(stream->time_base, av_stream_get_first_dts(stream)); ++ ConvertFromTimeBase(stream->time_base, first_dts); + if (first_pts < start_time) + start_time = first_pts; + } +@@ -283,6 +283,7 @@ FFmpegDemuxerStream::FFmpegDemuxerStream( + fixup_negative_timestamps_(false), + fixup_chained_ogg_(false), + num_discarded_packet_warnings_(0), ++ first_dts_(AV_NOPTS_VALUE), + last_packet_pos_(AV_NOPTS_VALUE), + last_packet_dts_(AV_NOPTS_VALUE) { + DCHECK(demuxer_); +@@ -349,6 +350,10 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) { + int64_t packet_dts = + packet->dts == AV_NOPTS_VALUE ? packet->pts : packet->dts; + ++ if (first_dts_ == AV_NOPTS_VALUE) { ++ first_dts_ = packet_dts; ++ } ++ + // Chained ogg files have non-monotonically increasing position and time stamp + // values, which prevents us from using them to determine if a packet should + // be dropped. Since chained ogg is only allowed on single track audio only +@@ -1442,7 +1447,8 @@ void FFmpegDemuxer::OnFindStreamInfoDone(int result) { + + max_duration = std::max(max_duration, streams_[i]->duration()); + +- base::TimeDelta start_time = ExtractStartTime(stream); ++ base::TimeDelta start_time = ++ ExtractStartTime(stream, streams_[i]->first_dts()); + + // Note: This value is used for seeking, so we must take the true value and + // not the one possibly clamped to zero below. +@@ -1599,7 +1605,7 @@ FFmpegDemuxerStream* FFmpegDemuxer::FindStreamWithLowestStartTimestamp( + for (const auto& stream : streams_) { + if (!stream || stream->IsEnabled() != enabled) + continue; +- if (av_stream_get_first_dts(stream->av_stream()) == kInvalidPTSMarker) ++ if (stream->first_dts() == AV_NOPTS_VALUE) + continue; + if (!lowest_start_time_stream || + stream->start_time() < lowest_start_time_stream->start_time()) { +@@ -1620,7 +1626,7 @@ FFmpegDemuxerStream* FFmpegDemuxer::FindPreferredStreamForSeeking( + if (stream->type() != DemuxerStream::VIDEO) + continue; + +- if (av_stream_get_first_dts(stream->av_stream()) == kInvalidPTSMarker) ++ if (stream->first_dts() == AV_NOPTS_VALUE) + continue; + + if (!stream->IsEnabled()) +diff --git a/media/filters/ffmpeg_demuxer.h b/media/filters/ffmpeg_demuxer.h +index c147309d6f..48a8f6ad8c 100644 +--- a/media/filters/ffmpeg_demuxer.h ++++ b/media/filters/ffmpeg_demuxer.h +@@ -151,6 +151,8 @@ class MEDIA_EXPORT FFmpegDemuxerStream : public DemuxerStream { + base::TimeDelta start_time() const { return start_time_; } + void set_start_time(base::TimeDelta time) { start_time_ = time; } + ++ int64_t first_dts() const { return first_dts_; } ++ + private: + friend class FFmpegDemuxerTest; + +@@ -208,6 +210,7 @@ class MEDIA_EXPORT FFmpegDemuxerStream : public DemuxerStream { + bool fixup_chained_ogg_; + + int num_discarded_packet_warnings_; ++ int64_t first_dts_; + int64_t last_packet_pos_; + int64_t last_packet_dts_; + }; +-- +2.35.1 + diff --git a/SOURCES/chromium-113-disable-GlobalMediaControlsCastStartStop.patch b/SOURCES/chromium-113-disable-GlobalMediaControlsCastStartStop.patch new file mode 100644 index 00000000..cd1c0728 --- /dev/null +++ b/SOURCES/chromium-113-disable-GlobalMediaControlsCastStartStop.patch @@ -0,0 +1,12 @@ +diff -up chromium-113.0.5672.24/chrome/browser/media/router/media_router_feature.cc.disable-GlobalMediaControlsCastStartStop chromium-113.0.5672.24/chrome/browser/media/router/media_router_feature.cc +--- chromium-113.0.5672.24/chrome/browser/media/router/media_router_feature.cc.disable-GlobalMediaControlsCastStartStop 2023-04-07 13:54:52.562292026 +0200 ++++ chromium-113.0.5672.24/chrome/browser/media/router/media_router_feature.cc 2023-04-07 13:57:41.470414086 +0200 +@@ -68,7 +68,7 @@ BASE_FEATURE(kGlobalMediaControlsCastSta + #else + BASE_FEATURE(kGlobalMediaControlsCastStartStop, + "GlobalMediaControlsCastStartStop", +- base::FEATURE_ENABLED_BY_DEFAULT); ++ base::FEATURE_DISABLED_BY_DEFAULT); + #endif // BUILDFLAG(IS_CHROMEOS) + #endif // BUILDFLAG(IS_ANDROID) + diff --git a/SOURCES/chromium-113-rhel8-force-disable-use_gnome_keyring.patch b/SOURCES/chromium-113-rhel8-force-disable-use_gnome_keyring.patch new file mode 100644 index 00000000..691f528c --- /dev/null +++ b/SOURCES/chromium-113-rhel8-force-disable-use_gnome_keyring.patch @@ -0,0 +1,12 @@ +diff -up chromium-113.0.5672.24/components/os_crypt/sync/features.gni.disblegnomekeyring chromium-113.0.5672.24/components/os_crypt/sync/features.gni +--- chromium-113.0.5672.24/components/os_crypt/sync/features.gni.disblegnomekeyring 2023-04-07 14:23:11.083985460 +0200 ++++ chromium-113.0.5672.24/components/os_crypt/sync/features.gni 2023-04-07 14:23:44.276599353 +0200 +@@ -8,7 +8,7 @@ import("//build/config/ui.gni") + declare_args() { + # Whether to use libgnome-keyring (deprecated by libsecret). + # See http://crbug.com/466975 and http://crbug.com/355223. +- use_gnome_keyring = is_linux && use_glib ++ use_gnome_keyring = false + + # Whether to make account and service names for the crypto key storage + # configurable at runtime for embedders. diff --git a/SOURCES/chromium-114-add_qt6_linuxui_backend.patch b/SOURCES/chromium-114-add_qt6_linuxui_backend.patch new file mode 100644 index 00000000..fef27142 --- /dev/null +++ b/SOURCES/chromium-114-add_qt6_linuxui_backend.patch @@ -0,0 +1,545 @@ +commit 75f4b48eb71d4872ba3ac6c9fc3662a60eb4175d +Author: Tom Anderson +Date: Thu Apr 27 02:21:34 2023 +0000 + + Add QT6 LinuxUi backend + + - Enable QT6 by default on KDE6 + - If QT6 load fails, fallback to QT5 (and vice versa) + - Add use_qt6 build flag for packager control + - Add --qt-version runtime flag for user control + + R=thestig + + Change-Id: Ib1d9f6183663ecf7b9ddfe9d7f3e3442e534ccda + Fixed: 1434754 + Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4475369 + Commit-Queue: Thomas Anderson + Reviewed-by: Lei Zhang + Cr-Commit-Position: refs/heads/main@{#1136295} + +diff --git a/chrome/installer/linux/BUILD.gn b/chrome/installer/linux/BUILD.gn +index 5639b9ffc996e..3bacd3398d4a2 100644 +--- a/chrome/installer/linux/BUILD.gn ++++ b/chrome/installer/linux/BUILD.gn +@@ -109,6 +109,9 @@ if (use_qt) { + # to prevent a hard dependency on QT for the package. + packaging_files += [ "$root_out_dir/libqt5_shim.so" ] + } ++if (use_qt6) { ++ packaging_files += [ "$root_out_dir/libqt6_shim.so" ] ++} + + action_foreach("calculate_deb_dependencies") { + deps = [ ":installer_deps" ] +@@ -249,6 +252,12 @@ if (use_qt) { + deps = [ "//ui/qt:qt5_shim" ] + } + } ++if (use_qt6) { ++ strip_binary("strip_qt6_shim") { ++ binary_input = "$root_out_dir/libqt6_shim.so" ++ deps = [ "//ui/qt:qt6_shim" ] ++ } ++} + + # This target builds all "normal" Linux installers. You must set + # is_component_build=false before building this target. +@@ -447,6 +456,12 @@ group("installer_deps") { + "//ui/qt:qt5_shim", + ] + } ++ if (use_qt6) { ++ public_deps += [ ++ ":strip_qt6_shim", ++ "//ui/qt:qt6_shim", ++ ] ++ } + } + + # Creates .deb and .rpm (RPM for non-ChromeOS only) installer packages. +diff --git a/chrome/installer/linux/common/installer.include b/chrome/installer/linux/common/installer.include +index 8d76f1f280b01..439ef5ccb0f52 100644 +--- a/chrome/installer/linux/common/installer.include ++++ b/chrome/installer/linux/common/installer.include +@@ -254,6 +254,11 @@ stage_install_common() { + strippedfile="${OUTPUTDIR}/${file}.stripped" + install -m ${SHLIB_PERMS} "${strippedfile}" "${STAGEDIR}/${INSTALLDIR}/${file}" + fi ++ if [ -f "${OUTPUTDIR}/libqt6_shim.so" ]; then ++ file="libqt6_shim.so" ++ strippedfile="${OUTPUTDIR}/${file}.stripped" ++ install -m ${SHLIB_PERMS} "${strippedfile}" "${STAGEDIR}/${INSTALLDIR}/${file}" ++ fi + + # libc++ + if [ -f "${OUTPUTDIR}/lib/libc++.so" ]; then +diff --git a/ui/qt/BUILD.gn b/ui/qt/BUILD.gn +index bbede00daa4d0..6a67961edc2f7 100644 +--- a/ui/qt/BUILD.gn ++++ b/ui/qt/BUILD.gn +@@ -11,13 +11,6 @@ assert(use_qt) + assert(is_linux) + assert(!is_castos) + +-pkg_config("qt5_config") { +- packages = [ +- "Qt5Core", +- "Qt5Widgets", +- ] +-} +- + config("qt_internal_config") { + if (is_clang) { + # libstdc++ headers are incompatible with -fcomplete-member-pointers. +@@ -56,40 +49,57 @@ if (!use_sysroot) { + } + } + +-shared_library("qt5_shim") { +- visibility = [ +- ":qt", +- "//chrome/installer/linux:*", +- ] +- +- # Since qt_shim is a shared library even in non-component builds, it shouldn't +- # depend on any other targets since that would duplicate code between binaries +- # leading to increased size and potential issues from duplicated global state. +- no_default_deps = true +- assert_no_deps = [ +- "//base", +- "//buildtools/third_party/libc++", +- ] +- deps = [ ":qt_interface" ] +- +- configs -= [ "//build/config/compiler:runtime_library" ] +- configs += [ +- ":qt_internal_config", +- ":qt5_config", +- ] ++template("qt_shim") { ++ pkg_config("qt" + invoker.qt_version + "_config") { ++ packages = [ ++ "Qt" + invoker.qt_version + "Core", ++ "Qt" + invoker.qt_version + "Widgets", ++ ] ++ } + +- public = [] +- sources = [ +- "qt_shim.cc", +- "qt_shim.h", +- ] +- if (use_sysroot) { +- # This file is generated with gen_qt_shim_moc.sh on an amd64 system to +- # avoid a build-time dependency on `moc` when using the sysroot. +- sources += [ "qt_shim_moc.cc" ] +- } else { +- sources += get_target_outputs(":generate_moc") +- deps += [ ":generate_moc" ] ++ shared_library(target_name) { ++ visibility = [ ++ ":qt", ++ "//chrome/installer/linux:*", ++ ] ++ ++ # Since qt_shim is a shared library even in non-component builds, it shouldn't ++ # depend on any other targets since that would duplicate code between binaries ++ # leading to increased size and potential issues from duplicated global state. ++ no_default_deps = true ++ assert_no_deps = [ ++ "//base", ++ "//buildtools/third_party/libc++", ++ ] ++ deps = [ ":qt_interface" ] ++ ++ configs -= [ "//build/config/compiler:runtime_library" ] ++ configs += [ ++ ":qt_internal_config", ++ ":qt" + invoker.qt_version + "_config", ++ ] ++ ++ public = [] ++ sources = [ ++ "qt_shim.cc", ++ "qt_shim.h", ++ ] ++ if (use_sysroot) { ++ # This file is generated with gen_qt_shim_moc.sh on an amd64 system to ++ # avoid a build-time dependency on `moc` when using the sysroot. ++ sources += [ "qt" + invoker.qt_version + "_shim_moc.cc" ] ++ } else { ++ sources += get_target_outputs(":generate_moc") ++ deps += [ ":generate_moc" ] ++ } ++ } ++} ++qt_shim("qt5_shim") { ++ qt_version = "5" ++} ++if (use_qt6) { ++ qt_shim("qt6_shim") { ++ qt_version = "6" + } + } + +@@ -100,6 +110,9 @@ component("qt") { + + # qt_shim is in data_deps since we want to load it manually. + data_deps = [ ":qt5_shim" ] ++ if (use_qt6) { ++ data_deps += [ ":qt6_shim" ] ++ } + deps = [ + ":qt_interface", + "//base", +diff --git a/ui/qt/gen_qt_shim_moc.sh b/ui/qt/gen_qt_shim_moc.sh +index 74272d5611dab..9d02c2dfcb12f 100755 +--- a/ui/qt/gen_qt_shim_moc.sh ++++ b/ui/qt/gen_qt_shim_moc.sh +@@ -6,11 +6,15 @@ + set -o nounset + set -o errexit + +-URL="http://archive.debian.org/debian/pool/main/q/qtbase-opensource-src" +-PACKAGE="qtbase5-dev-tools_5.3.2+dfsg-4+deb8u2_amd64.deb" +-SHA256="7703754f2c230ce6b8b6030b6c1e7e030899aa9f45a415498df04bd5ec061a76" +-SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ++URL5="http://archive.debian.org/debian/pool/main/q/qtbase-opensource-src" ++PACKAGE5="qtbase5-dev-tools_5.3.2+dfsg-4+deb8u2_amd64.deb" ++SHA256_5="7703754f2c230ce6b8b6030b6c1e7e030899aa9f45a415498df04bd5ec061a76" ++ ++URL6="http://archive.ubuntu.com/ubuntu/pool/universe/q/qt6-base" ++PACKAGE6="qt6-base-dev-tools_6.2.4+dfsg-2ubuntu1_amd64.deb" ++SHA256_6="8dddfc79e7743185b07c478ca0f96a4ccc13d48ecccc42f44d2578c33c7d9b8b" + ++SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + TMP_DIR=$(mktemp -d -p "$SCRIPT_DIR") + function cleanup { + rm -rf "$TMP_DIR" +@@ -18,16 +22,22 @@ function cleanup { + trap cleanup EXIT + + cd "$TMP_DIR" +-wget "$URL/$PACKAGE" +-echo "$SHA256 $PACKAGE" | shasum -a 256 -c +-dpkg -x "$PACKAGE" . +-cat > ../qt_shim_moc.cc < ../qt5_shim_moc.cc <> ui/qt/qt_shim_moc.cc +-git cl format ui/qt/qt_shim_moc.cc ++ >> ui/qt/qt5_shim_moc.cc ++"$TMP_DIR//usr/lib/qt6/libexec/moc" ui/qt/qt_shim.h \ ++ >> ui/qt/qt6_shim_moc.cc ++git cl format ui/qt/qt5_shim_moc.cc ui/qt/qt6_shim_moc.cc +diff --git a/ui/qt/qt.gni b/ui/qt/qt.gni +index 27bb6375880b7..f45823270cb91 100644 +--- a/ui/qt/qt.gni ++++ b/ui/qt/qt.gni +@@ -4,9 +4,17 @@ + + import("//build/config/chromecast_build.gni") + import("//build/config/sanitizers/sanitizers.gni") ++import("//build/config/sysroot.gni") + + declare_args() { + # TODO(https://crbug.com/1424435): Allow QT in MSAN builds once QT is + # added to the instrumented libraries. + use_qt = is_linux && !is_castos && !is_msan + } ++ ++declare_args() { ++ use_qt6 = use_qt && use_sysroot ++} ++ ++# use_qt6 => use_qt ++assert(!use_qt6 || use_qt) +diff --git a/ui/qt/qt_shim_moc.cc b/ui/qt/qt5_shim_moc.cc +similarity index 95% +rename from ui/qt/qt_shim_moc.cc +rename to ui/qt/qt5_shim_moc.cc +index dafbfadce56ba..8f8b6b57784a8 100644 +--- a/ui/qt/qt_shim_moc.cc ++++ b/ui/qt/qt5_shim_moc.cc +@@ -1,4 +1,4 @@ +-// Copyright 2022 The Chromium Authors ++// Copyright 2023 The Chromium Authors + // Use of this source code is governed by a BSD-style license that can be + // found in the LICENSE file. + +@@ -89,26 +89,32 @@ const QMetaObject* qt::QtShim::metaObject() const { + } + + void* qt::QtShim::qt_metacast(const char* _clname) { +- if (!_clname) ++ if (!_clname) { + return 0; +- if (!strcmp(_clname, qt_meta_stringdata_qt__QtShim.stringdata)) ++ } ++ if (!strcmp(_clname, qt_meta_stringdata_qt__QtShim.stringdata)) { + return static_cast(const_cast(this)); +- if (!strcmp(_clname, "QtInterface")) ++ } ++ if (!strcmp(_clname, "QtInterface")) { + return static_cast(const_cast(this)); ++ } + return QObject::qt_metacast(_clname); + } + + int qt::QtShim::qt_metacall(QMetaObject::Call _c, int _id, void** _a) { + _id = QObject::qt_metacall(_c, _id, _a); +- if (_id < 0) ++ if (_id < 0) { + return _id; ++ } + if (_c == QMetaObject::InvokeMetaMethod) { +- if (_id < 2) ++ if (_id < 2) { + qt_static_metacall(this, _c, _id, _a); ++ } + _id -= 2; + } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { +- if (_id < 2) ++ if (_id < 2) { + *reinterpret_cast(_a[0]) = -1; ++ } + _id -= 2; + } + return _id; +diff --git a/ui/qt/qt6_shim_moc.cc b/ui/qt/qt6_shim_moc.cc +new file mode 100644 +index 0000000000000..6d02ca317b65d +--- /dev/null ++++ b/ui/qt/qt6_shim_moc.cc +@@ -0,0 +1,143 @@ ++// Copyright 2023 The Chromium Authors ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++/**************************************************************************** ++** Meta object code from reading C++ file 'qt_shim.h' ++** ++** Created by: The Qt Meta Object Compiler version 68 (Qt 6.2.4) ++** ++** WARNING! All changes made in this file will be lost! ++*****************************************************************************/ ++ ++#include ++#include ++#include ++#include "ui/qt/qt_shim.h" ++#if !defined(Q_MOC_OUTPUT_REVISION) ++#error "The header file 'qt_shim.h' doesn't include ." ++#elif Q_MOC_OUTPUT_REVISION != 68 ++#error "This file was generated using the moc from 6.2.4. It" ++#error "cannot be used with the include files from this version of Qt." ++#error "(The moc has changed too much.)" ++#endif ++ ++QT_BEGIN_MOC_NAMESPACE ++QT_WARNING_PUSH ++QT_WARNING_DISABLE_DEPRECATED ++struct qt_meta_stringdata_qt__QtShim_t { ++ const uint offsetsAndSize[12]; ++ char stringdata0[52]; ++}; ++#define QT_MOC_LITERAL(ofs, len) \ ++ uint(offsetof(qt_meta_stringdata_qt__QtShim_t, stringdata0) + ofs), len ++static const qt_meta_stringdata_qt__QtShim_t qt_meta_stringdata_qt__QtShim = { ++ { ++ QT_MOC_LITERAL(0, 10), // "qt::QtShim" ++ QT_MOC_LITERAL(11, 11), // "FontChanged" ++ QT_MOC_LITERAL(23, 0), // "" ++ QT_MOC_LITERAL(24, 4), // "font" ++ QT_MOC_LITERAL(29, 14), // "PaletteChanged" ++ QT_MOC_LITERAL(44, 7) // "palette" ++ ++ }, ++ "qt::QtShim\0FontChanged\0\0font\0" ++ "PaletteChanged\0palette"}; ++#undef QT_MOC_LITERAL ++ ++static const uint qt_meta_data_qt__QtShim[] = { ++ ++ // content: ++ 10, // revision ++ 0, // classname ++ 0, 0, // classinfo ++ 2, 14, // methods ++ 0, 0, // properties ++ 0, 0, // enums/sets ++ 0, 0, // constructors ++ 0, // flags ++ 0, // signalCount ++ ++ // slots: name, argc, parameters, tag, flags, initial metatype offsets ++ 1, 1, 26, 2, 0x08, 1 /* Private */, 4, 1, 29, 2, 0x08, 3 /* Private */, ++ ++ // slots: parameters ++ QMetaType::Void, QMetaType::QFont, 3, QMetaType::Void, QMetaType::QPalette, ++ 5, ++ ++ 0 // eod ++}; ++ ++void qt::QtShim::qt_static_metacall(QObject* _o, ++ QMetaObject::Call _c, ++ int _id, ++ void** _a) { ++ if (_c == QMetaObject::InvokeMetaMethod) { ++ auto* _t = static_cast(_o); ++ (void)_t; ++ switch (_id) { ++ case 0: ++ _t->FontChanged((*reinterpret_cast>(_a[1]))); ++ break; ++ case 1: ++ _t->PaletteChanged( ++ (*reinterpret_cast>(_a[1]))); ++ break; ++ default:; ++ } ++ } ++} ++ ++const QMetaObject qt::QtShim::staticMetaObject = { ++ {QMetaObject::SuperData::link(), ++ qt_meta_stringdata_qt__QtShim.offsetsAndSize, qt_meta_data_qt__QtShim, ++ qt_static_metacall, nullptr, ++ qt_incomplete_metaTypeArray< ++ qt_meta_stringdata_qt__QtShim_t, ++ QtPrivate::TypeAndForceComplete, ++ QtPrivate::TypeAndForceComplete, ++ QtPrivate::TypeAndForceComplete, ++ QtPrivate::TypeAndForceComplete, ++ QtPrivate::TypeAndForceComplete ++ ++ >, ++ nullptr}}; ++ ++const QMetaObject* qt::QtShim::metaObject() const { ++ return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() ++ : &staticMetaObject; ++} ++ ++void* qt::QtShim::qt_metacast(const char* _clname) { ++ if (!_clname) { ++ return nullptr; ++ } ++ if (!strcmp(_clname, qt_meta_stringdata_qt__QtShim.stringdata0)) { ++ return static_cast(this); ++ } ++ if (!strcmp(_clname, "QtInterface")) { ++ return static_cast(this); ++ } ++ return QObject::qt_metacast(_clname); ++} ++ ++int qt::QtShim::qt_metacall(QMetaObject::Call _c, int _id, void** _a) { ++ _id = QObject::qt_metacall(_c, _id, _a); ++ if (_id < 0) { ++ return _id; ++ } ++ if (_c == QMetaObject::InvokeMetaMethod) { ++ if (_id < 2) { ++ qt_static_metacall(this, _c, _id, _a); ++ } ++ _id -= 2; ++ } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { ++ if (_id < 2) { ++ *reinterpret_cast(_a[0]) = QMetaType(); ++ } ++ _id -= 2; ++ } ++ return _id; ++} ++QT_WARNING_POP ++QT_END_MOC_NAMESPACE +diff --git a/ui/qt/qt_ui.cc b/ui/qt/qt_ui.cc +index d4052b7e8bc3d..6a3b58e9f930b 100644 +--- a/ui/qt/qt_ui.cc ++++ b/ui/qt/qt_ui.cc +@@ -14,7 +14,9 @@ + #include "base/check.h" + #include "base/command_line.h" + #include "base/compiler_specific.h" ++#include "base/environment.h" + #include "base/memory/raw_ptr.h" ++#include "base/nix/xdg_util.h" + #include "base/notreached.h" + #include "base/path_service.h" + #include "base/time/time.h" +@@ -47,6 +49,45 @@ namespace qt { + + namespace { + ++const char kQtVersionFlag[] = "qt-version"; ++ ++void* LoadLibrary(const base::FilePath& path) { ++ return dlopen(path.value().c_str(), RTLD_NOW | RTLD_GLOBAL); ++} ++ ++void* LoadLibraryOrFallback(const base::FilePath& path, ++ const char* preferred, ++ const char* fallback) { ++ if (void* library = LoadLibrary(path.Append(preferred))) { ++ return library; ++ } ++ return LoadLibrary(path.Append(fallback)); ++} ++ ++bool PreferQt6() { ++ auto* cmd = base::CommandLine::ForCurrentProcess(); ++ if (cmd->HasSwitch(kQtVersionFlag)) { ++ std::string qt_version_string = cmd->GetSwitchValueASCII(kQtVersionFlag); ++ unsigned int qt_version = 0; ++ if (base::StringToUint(qt_version_string, &qt_version)) { ++ switch (qt_version) { ++ case 5: ++ return false; ++ case 6: ++ return true; ++ default: ++ LOG(ERROR) << "Unsupported QT version " << qt_version; ++ } ++ } else { ++ LOG(ERROR) << "Unable to parse QT version " << qt_version_string; ++ } ++ } ++ ++ auto env = base::Environment::Create(); ++ auto desktop = base::nix::GetDesktopEnvironment(env.get()); ++ return desktop == base::nix::DESKTOP_ENVIRONMENT_KDE6; ++} ++ + int QtWeightToCssWeight(int weight) { + struct { + int qt_weight; +@@ -179,8 +220,10 @@ bool QtUi::Initialize() { + base::FilePath path; + if (!base::PathService::Get(base::DIR_MODULE, &path)) + return false; +- path = path.Append("libqt5_shim.so"); +- void* libqt_shim = dlopen(path.value().c_str(), RTLD_NOW | RTLD_GLOBAL); ++ void* libqt_shim = ++ PreferQt6() ++ ? LoadLibraryOrFallback(path, "libqt6_shim.so", "libqt5_shim.so") ++ : LoadLibraryOrFallback(path, "libqt5_shim.so", "libqt6_shim.so"); + if (!libqt_shim) + return false; + void* create_qt_interface = dlsym(libqt_shim, "CreateQtInterface"); diff --git a/SOURCES/chromium-114-buildflag-el7.patch b/SOURCES/chromium-114-buildflag-el7.patch new file mode 100644 index 00000000..6b9e468b --- /dev/null +++ b/SOURCES/chromium-114-buildflag-el7.patch @@ -0,0 +1,21 @@ +diff -up chromium-114.0.5735.26/components/omnibox/browser/omnibox_edit_model.cc.me chromium-114.0.5735.26/components/omnibox/browser/omnibox_edit_model.cc +--- chromium-114.0.5735.26/components/omnibox/browser/omnibox_edit_model.cc.me 2023-05-14 09:14:10.886314480 +0200 ++++ chromium-114.0.5735.26/components/omnibox/browser/omnibox_edit_model.cc 2023-05-14 09:16:59.380054720 +0200 +@@ -79,7 +79,7 @@ + #include "ui/gfx/vector_icon_types.h" + #endif + +-#if BUILDFLAG(GOOGLE_CHROME_BRANDING) ++#ifdef GOOGLE_CHROME_BRANDING + #include "components/vector_icons/vector_icons.h" // nogncheck + #endif + +@@ -628,7 +628,7 @@ bool OmniboxEditModel::ShouldShowCurrent + } + + ui::ImageModel OmniboxEditModel::GetSuperGIcon(int image_size, bool dark_mode) { +-#if BUILDFLAG(GOOGLE_CHROME_BRANDING) ++#ifdef GOOGLE_CHROME_BRANDING + if (dark_mode) { + return ui::ImageModel::FromVectorIcon( + vector_icons::kGoogleGLogoMonochromeIcon, ui::kColorRefPrimary100, diff --git a/SOURCES/chromium-114-constexpr-el7.patch b/SOURCES/chromium-114-constexpr-el7.patch new file mode 100644 index 00000000..926ba247 --- /dev/null +++ b/SOURCES/chromium-114-constexpr-el7.patch @@ -0,0 +1,62 @@ +diff -up chromium-114.0.5735.26/components/version_info/version_info.cc.constexpr-el7 chromium-114.0.5735.26/components/version_info/version_info.cc +diff -up chromium-114.0.5735.26/components/version_info/version_info.h.constexpr-el7 chromium-114.0.5735.26/components/version_info/version_info.h +--- chromium-114.0.5735.26/components/version_info/version_info.h.constexpr-el7 2023-05-11 03:36:19.000000000 +0200 ++++ chromium-114.0.5735.26/components/version_info/version_info.h 2023-05-14 10:59:19.921578645 +0200 +@@ -27,18 +27,18 @@ const std::string GetProductNameAndVersi + const std::string& build_version); + + // Returns the product name, e.g. "Chromium" or "Google Chrome". +-constexpr std::string GetProductName() { ++static const std::string GetProductName() { + return PRODUCT_NAME; + } + + // Returns the version number, e.g. "6.0.490.1". +-constexpr std::string GetVersionNumber() { ++static const std::string GetVersionNumber() { + return PRODUCT_VERSION; + } + + // Returns the product name and version information for the User-Agent header, + // in the format: Chrome/.... +-constexpr std::string GetProductNameAndVersionForUserAgent() { ++static const std::string GetProductNameAndVersionForUserAgent() { + return "Chrome/" + GetVersionNumber(); + } + +@@ -53,7 +53,7 @@ std::string GetMajorVersionNumber(); + const base::Version& GetVersion(); + + // Returns a version control specific identifier of this release. +-constexpr std::string GetLastChange() { ++static const std::string GetLastChange() { + return LAST_CHANGE; + } + +@@ -65,7 +65,7 @@ constexpr bool IsOfficialBuild() { + } + + // Returns the OS type, e.g. "Windows", "Linux", "FreeBSD", ... +-constexpr std::string GetOSType() { ++static const std::string GetOSType() { + #if BUILDFLAG(IS_WIN) + return "Windows"; + #elif BUILDFLAG(IS_IOS) +@@ -97,7 +97,7 @@ constexpr std::string GetOSType() { + + // Returns a string equivalent of |channel|, independent of whether the build + // is branded or not and without any additional modifiers. +-constexpr std::string GetChannelString(Channel channel) { ++static const std::string GetChannelString(Channel channel) { + switch (channel) { + case Channel::STABLE: + return "stable"; +@@ -114,7 +114,7 @@ constexpr std::string GetChannelString(C + } + + // Returns a list of sanitizers enabled in this build. +-constexpr std::string GetSanitizerList() { ++static const std::string GetSanitizerList() { + return "" + #if defined(ADDRESS_SANITIZER) + "address " diff --git a/SOURCES/chromium-114-gcc13.patch b/SOURCES/chromium-114-gcc13.patch new file mode 100644 index 00000000..c79e74e0 --- /dev/null +++ b/SOURCES/chromium-114-gcc13.patch @@ -0,0 +1,389 @@ +diff -up chromium-109.0.5414.74/base/check_op.h.me chromium-109.0.5414.74/base/check_op.h +--- chromium-109.0.5414.74/base/check_op.h.me 2023-01-17 17:39:27.620875883 +0100 ++++ chromium-109.0.5414.74/base/check_op.h 2023-01-17 17:39:42.546060957 +0100 +@@ -5,6 +5,7 @@ + #ifndef BASE_CHECK_OP_H_ + #define BASE_CHECK_OP_H_ + ++#include + #include + #include + #include +diff -up chromium-109.0.5414.74/base/debug/profiler.h.me chromium-109.0.5414.74/base/debug/profiler.h +--- chromium-109.0.5414.74/base/debug/profiler.h.me 2023-01-17 16:29:26.368090073 +0100 ++++ chromium-109.0.5414.74/base/debug/profiler.h 2023-01-17 16:59:41.190628679 +0100 +@@ -7,6 +7,7 @@ + + #include + ++#include + #include + + #include "base/base_export.h" +diff -up chromium-109.0.5414.74/components/viz/common/view_transition_element_resource_id.h.me chromium-109.0.5414.74/components/viz/common/view_transition_element_resource_id.h +--- chromium-109.0.5414.74/components/viz/common/view_transition_element_resource_id.h.me 2023-01-17 19:03:10.920014806 +0100 ++++ chromium-109.0.5414.74/components/viz/common/view_transition_element_resource_id.h 2023-01-17 19:03:48.736395274 +0100 +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_VIZ_COMMON_VIEW_TRANSITION_ELEMENT_RESOURCE_ID_H_ + #define COMPONENTS_VIZ_COMMON_VIEW_TRANSITION_ELEMENT_RESOURCE_ID_H_ + ++#include + #include + #include + +diff -up chromium-109.0.5414.74/gpu/config/gpu_feature_info.h.me chromium-109.0.5414.74/gpu/config/gpu_feature_info.h +--- chromium-109.0.5414.74/gpu/config/gpu_feature_info.h.me 2023-01-17 19:06:53.530675129 +0100 ++++ chromium-109.0.5414.74/gpu/config/gpu_feature_info.h 2023-01-17 19:07:08.874849879 +0100 +@@ -5,6 +5,7 @@ + #ifndef GPU_CONFIG_GPU_FEATURE_INFO_H_ + #define GPU_CONFIG_GPU_FEATURE_INFO_H_ + ++#include + #include + #include + +diff -up chromium-109.0.5414.74/net/base/net_export.h.me chromium-109.0.5414.74/net/base/net_export.h +--- chromium-109.0.5414.74/net/base/net_export.h.me 2023-01-17 18:16:34.133854615 +0100 ++++ chromium-109.0.5414.74/net/base/net_export.h 2023-01-17 18:16:15.945623153 +0100 +@@ -5,6 +5,8 @@ + #ifndef NET_BASE_NET_EXPORT_H_ + #define NET_BASE_NET_EXPORT_H_ + ++#include ++ + // Defines NET_EXPORT so that functionality implemented by the net module can + // be exported to consumers, and NET_EXPORT_PRIVATE that allows unit tests to + // access features not intended to be used directly by real consumers. +diff -up chromium-109.0.5414.74/sandbox/linux/syscall_broker/broker_file_permission.h.me chromium-109.0.5414.74/sandbox/linux/syscall_broker/broker_file_permission.h +--- chromium-109.0.5414.74/sandbox/linux/syscall_broker/broker_file_permission.h.me 2023-01-17 17:12:34.184686515 +0100 ++++ chromium-109.0.5414.74/sandbox/linux/syscall_broker/broker_file_permission.h 2023-01-17 17:13:16.537162420 +0100 +@@ -5,6 +5,7 @@ + #ifndef SANDBOX_LINUX_SYSCALL_BROKER_BROKER_FILE_PERMISSION_H_ + #define SANDBOX_LINUX_SYSCALL_BROKER_BROKER_FILE_PERMISSION_H_ + ++#include + #include + #include + +diff -up chromium-109.0.5414.74/third_party/abseil-cpp/absl/strings/string_view.h.me chromium-109.0.5414.74/third_party/abseil-cpp/absl/strings/string_view.h +--- chromium-109.0.5414.74/third_party/abseil-cpp/absl/strings/string_view.h.me 2023-01-17 17:33:20.895717307 +0100 ++++ chromium-109.0.5414.74/third_party/abseil-cpp/absl/strings/string_view.h 2023-01-17 17:34:03.456185365 +0100 +@@ -27,6 +27,7 @@ + #ifndef ABSL_STRINGS_STRING_VIEW_H_ + #define ABSL_STRINGS_STRING_VIEW_H_ + ++#include + #include + #include + #include +diff -up chromium-109.0.5414.74/third_party/angle/include/GLSLANG/ShaderVars.h.me chromium-109.0.5414.74/third_party/angle/include/GLSLANG/ShaderVars.h +--- chromium-109.0.5414.74/third_party/angle/include/GLSLANG/ShaderVars.h.me 2023-01-17 17:36:15.017616250 +0100 ++++ chromium-109.0.5414.74/third_party/angle/include/GLSLANG/ShaderVars.h 2023-01-17 17:36:48.960982195 +0100 +@@ -10,6 +10,7 @@ + #ifndef GLSLANG_SHADERVARS_H_ + #define GLSLANG_SHADERVARS_H_ + ++#include + #include + #include + #include +diff -up chromium-109.0.5414.74/third_party/blink/public/common/bluetooth/web_bluetooth_device_id.h.me chromium-109.0.5414.74/third_party/blink/public/common/bluetooth/web_bluetooth_device_id.h +--- chromium-109.0.5414.74/third_party/blink/public/common/bluetooth/web_bluetooth_device_id.h.me 2023-01-17 19:17:40.480876171 +0100 ++++ chromium-109.0.5414.74/third_party/blink/public/common/bluetooth/web_bluetooth_device_id.h 2023-01-17 19:17:46.803958320 +0100 +@@ -5,6 +5,7 @@ + #ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_BLUETOOTH_WEB_BLUETOOTH_DEVICE_ID_H_ + #define THIRD_PARTY_BLINK_PUBLIC_COMMON_BLUETOOTH_WEB_BLUETOOTH_DEVICE_ID_H_ + ++#include + #include + #include + +diff -up chromium-109.0.5414.74/third_party/dawn/src/tint/reader/spirv/namer.h.me chromium-109.0.5414.74/third_party/dawn/src/tint/reader/spirv/namer.h +--- chromium-109.0.5414.74/third_party/dawn/src/tint/reader/spirv/namer.h.me 2023-01-17 18:02:44.681538107 +0100 ++++ chromium-109.0.5414.74/third_party/dawn/src/tint/reader/spirv/namer.h 2023-01-17 18:02:57.208679140 +0100 +@@ -15,6 +15,7 @@ + #ifndef SRC_TINT_READER_SPIRV_NAMER_H_ + #define SRC_TINT_READER_SPIRV_NAMER_H_ + ++#include + #include + #include + #include +diff -up chromium-109.0.5414.74/third_party/openscreen/src/discovery/dnssd/public/dns_sd_txt_record.h.me chromium-109.0.5414.74/third_party/openscreen/src/discovery/dnssd/public/dns_sd_txt_record.h +--- chromium-109.0.5414.74/third_party/openscreen/src/discovery/dnssd/public/dns_sd_txt_record.h.me 2023-01-18 15:22:38.472940648 +0100 ++++ chromium-109.0.5414.74/third_party/openscreen/src/discovery/dnssd/public/dns_sd_txt_record.h 2023-01-18 15:23:09.380255101 +0100 +@@ -5,6 +5,7 @@ + #ifndef DISCOVERY_DNSSD_PUBLIC_DNS_SD_TXT_RECORD_H_ + #define DISCOVERY_DNSSD_PUBLIC_DNS_SD_TXT_RECORD_H_ + ++#include + #include + #include + #include +diff -up chromium-109.0.5414.74/third_party/swiftshader/src/System/LRUCache.hpp.me chromium-109.0.5414.74/third_party/swiftshader/src/System/LRUCache.hpp +--- chromium-109.0.5414.74/third_party/swiftshader/src/System/LRUCache.hpp.me 2023-01-17 15:37:48.530626516 +0100 ++++ chromium-109.0.5414.74/third_party/swiftshader/src/System/LRUCache.hpp 2023-01-17 16:57:46.025548092 +0100 +@@ -17,6 +17,7 @@ + + #include "System/Debug.hpp" + ++#include + #include + #include + #include +diff -up chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h.me chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h +--- chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h.me 2023-01-17 15:40:23.854386206 +0100 ++++ chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h 2023-01-17 16:58:19.397862885 +0100 +@@ -2388,6 +2388,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeV + #ifdef VMA_IMPLEMENTATION + #undef VMA_IMPLEMENTATION + ++#include + #include + #include + #include +diff -up chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h.me chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h +--- chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h.me 2023-01-17 18:08:25.745491353 +0100 ++++ chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h 2023-01-17 18:08:35.777667632 +0100 +@@ -5,6 +5,7 @@ + #ifndef UI_GFX_LINEAR_GRADIENT_H_ + #define UI_GFX_LINEAR_GRADIENT_H_ + ++#include + #include + #include + +diff -up chromium-109.0.5414.74/third_party/ruy/src/ruy/profiler/instrumentation.h.me chromium-109.0.5414.74/third_party/ruy/src/ruy/profiler/instrumentation.h +--- chromium-109.0.5414.74/third_party/ruy/src/ruy/profiler/instrumentation.h.me 2023-01-19 10:10:21.287876736 +0100 ++++ chromium-109.0.5414.74/third_party/ruy/src/ruy/profiler/instrumentation.h 2023-01-19 10:11:21.714778896 +0100 +@@ -17,6 +17,7 @@ limitations under the License. + #define RUY_RUY_PROFILER_INSTRUMENTATION_H_ + + #ifdef RUY_PROFILER ++#include + #include + #include + #include +diff -up chromium-109.0.5414.74/third_party/tflite/src/tensorflow/lite/kernels/internal/spectrogram.h.me chromium-109.0.5414.74/third_party/tflite/src/tensorflow/lite/kernels/internal/spectrogram.h +--- chromium-109.0.5414.74/third_party/tflite/src/tensorflow/lite/kernels/internal/spectrogram.h.me 2023-01-19 10:30:27.533861985 +0100 ++++ chromium-109.0.5414.74/third_party/tflite/src/tensorflow/lite/kernels/internal/spectrogram.h 2023-01-19 10:31:12.585554183 +0100 +@@ -31,6 +31,7 @@ limitations under the License. + #ifndef TENSORFLOW_LITE_KERNELS_INTERNAL_SPECTROGRAM_H_ + #define TENSORFLOW_LITE_KERNELS_INTERNAL_SPECTROGRAM_H_ + ++#include + #include + #include + #include +diff -up chromium-109.0.5414.74/base/containers/flat_map.h.mee chromium-109.0.5414.74/base/containers/flat_map.h +--- chromium-109.0.5414.74/base/containers/flat_map.h.mee 2023-01-19 10:59:52.214957773 +0100 ++++ chromium-109.0.5414.74/base/containers/flat_map.h 2023-01-19 11:00:06.415215309 +0100 +@@ -5,6 +5,7 @@ + #ifndef BASE_CONTAINERS_FLAT_MAP_H_ + #define BASE_CONTAINERS_FLAT_MAP_H_ + ++#include + #include + #include + #include +diff -up chromium-109.0.5414.74/components/crash/core/app/crash_reporter_client.h.mee chromium-109.0.5414.74/components/crash/core/app/crash_reporter_client.h +--- chromium-109.0.5414.74/components/crash/core/app/crash_reporter_client.h.mee 2023-01-19 10:36:40.571422826 +0100 ++++ chromium-109.0.5414.74/components/crash/core/app/crash_reporter_client.h 2023-01-19 10:36:49.343565294 +0100 +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_CRASH_CORE_APP_CRASH_REPORTER_CLIENT_H_ + #define COMPONENTS_CRASH_CORE_APP_CRASH_REPORTER_CLIENT_H_ + ++#include + #include + + #include "build/build_config.h" +diff -up chromium-109.0.5414.74/ui/base/prediction/kalman_filter.h.mee chromium-109.0.5414.74/ui/base/prediction/kalman_filter.h +--- chromium-109.0.5414.74/ui/base/prediction/kalman_filter.h.mee 2023-01-19 11:45:15.953159755 +0100 ++++ chromium-109.0.5414.74/ui/base/prediction/kalman_filter.h 2023-01-19 11:45:22.320246241 +0100 +@@ -5,6 +5,8 @@ + #ifndef UI_BASE_PREDICTION_KALMAN_FILTER_H_ + #define UI_BASE_PREDICTION_KALMAN_FILTER_H_ + ++#include ++ + #include "base/component_export.h" + #include "ui/gfx/geometry/matrix3_f.h" + +diff -up chromium-109.0.5414.74/components/password_manager/core/browser/generation/password_generator.h.me chromium-109.0.5414.74/components/password_manager/core/browser/generation/password_generator.h +--- chromium-109.0.5414.74/components/password_manager/core/browser/generation/password_generator.h.me 2023-01-19 15:20:07.620987949 +0100 ++++ chromium-109.0.5414.74/components/password_manager/core/browser/generation/password_generator.h 2023-01-19 15:20:18.324173702 +0100 +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_GENERATION_PASSWORD_GENERATOR_H_ + #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_GENERATION_PASSWORD_GENERATOR_H_ + ++#include + #include + + +diff -up chromium-109.0.5414.74/components/feature_engagement/internal/event_storage_validator.h.me chromium-109.0.5414.74/components/feature_engagement/internal/event_storage_validator.h +--- chromium-109.0.5414.74/components/feature_engagement/internal/event_storage_validator.h.me 2023-01-19 16:00:14.350186515 +0100 ++++ chromium-109.0.5414.74/components/feature_engagement/internal/event_storage_validator.h 2023-01-19 16:00:21.643307993 +0100 +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_EVENT_STORAGE_VALIDATOR_H_ + #define COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_EVENT_STORAGE_VALIDATOR_H_ + ++#include + #include + + namespace feature_engagement { +diff -up chromium-109.0.5414.74/components/feature_engagement/internal/never_event_storage_validator.h.me chromium-109.0.5414.74/components/feature_engagement/internal/never_event_storage_validator.h +--- chromium-109.0.5414.74/components/feature_engagement/internal/never_event_storage_validator.h.me 2023-01-19 15:59:18.210239416 +0100 ++++ chromium-109.0.5414.74/components/feature_engagement/internal/never_event_storage_validator.h 2023-01-19 15:59:34.513515030 +0100 +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_NEVER_EVENT_STORAGE_VALIDATOR_H_ + #define COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_NEVER_EVENT_STORAGE_VALIDATOR_H_ + ++#include + #include + + #include "components/feature_engagement/internal/event_storage_validator.h" +diff -up chromium-109.0.5414.74/third_party/swiftshader/third_party/llvm-10.0/llvm/include/llvm/Support/Signals.h.me chromium-109.0.5414.74/third_party/swiftshader/third_party/llvm-10.0/llvm/include/llvm/Support/Signals.h +--- chromium-109.0.5414.74/third_party/swiftshader/third_party/llvm-10.0/llvm/include/llvm/Support/Signals.h.me 2023-01-19 16:06:17.548272878 +0100 ++++ chromium-109.0.5414.74/third_party/swiftshader/third_party/llvm-10.0/llvm/include/llvm/Support/Signals.h 2023-01-19 16:06:25.685410592 +0100 +@@ -14,6 +14,7 @@ + #ifndef LLVM_SUPPORT_SIGNALS_H + #define LLVM_SUPPORT_SIGNALS_H + ++#include + #include + + namespace llvm { +diff -up chromium-109.0.5414.74/third_party/swiftshader/third_party/llvm-10.0/llvm/lib/Support/Unix/Signals.inc.me chromium-109.0.5414.74/third_party/swiftshader/third_party/llvm-10.0/llvm/lib/Support/Unix/Signals.inc +--- chromium-109.0.5414.74/third_party/swiftshader/third_party/llvm-10.0/llvm/lib/Support/Unix/Signals.inc.me 2023-01-19 16:09:29.216477182 +0100 ++++ chromium-109.0.5414.74/third_party/swiftshader/third_party/llvm-10.0/llvm/lib/Support/Unix/Signals.inc 2023-01-19 16:10:05.657089208 +0100 +@@ -45,6 +45,7 @@ + #include "llvm/Support/SaveAndRestore.h" + #include "llvm/Support/raw_ostream.h" + #include ++#include + #include + #include + #ifdef HAVE_BACKTRACE +diff -up chromium-109.0.5414.74/chrome/browser/privacy_budget/encountered_surface_tracker.h.me chromium-109.0.5414.74/chrome/browser/privacy_budget/encountered_surface_tracker.h +--- chromium-109.0.5414.74/chrome/browser/privacy_budget/encountered_surface_tracker.h.me 2023-01-19 16:32:05.338160131 +0100 ++++ chromium-109.0.5414.74/chrome/browser/privacy_budget/encountered_surface_tracker.h 2023-01-19 16:32:16.213326798 +0100 +@@ -5,6 +5,7 @@ + #ifndef CHROME_BROWSER_PRIVACY_BUDGET_ENCOUNTERED_SURFACE_TRACKER_H_ + #define CHROME_BROWSER_PRIVACY_BUDGET_ENCOUNTERED_SURFACE_TRACKER_H_ + ++#include + #include + + #include "base/containers/flat_set.h" +diff -up chromium-109.0.5414.74/components/autofill/core/browser/autofill_ablation_study.h.me chromium-109.0.5414.74/components/autofill/core/browser/autofill_ablation_study.h +--- chromium-109.0.5414.74/components/autofill/core/browser/autofill_ablation_study.h.me 2023-01-19 16:47:55.548571102 +0100 ++++ chromium-109.0.5414.74/components/autofill/core/browser/autofill_ablation_study.h 2023-01-19 16:48:29.214146529 +0100 +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_ABLATION_STUDY_H_ + #define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_ABLATION_STUDY_H_ + ++#include + #include + + class GURL; +diff -up chromium-109.0.5414.74/components/omnibox/browser/on_device_head_model.h.me chromium-109.0.5414.74/components/omnibox/browser/on_device_head_model.h +--- chromium-109.0.5414.74/components/omnibox/browser/on_device_head_model.h.me 2023-01-19 16:57:29.525372814 +0100 ++++ chromium-109.0.5414.74/components/omnibox/browser/on_device_head_model.h 2023-01-19 16:58:02.667979288 +0100 +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_OMNIBOX_BROWSER_ON_DEVICE_HEAD_MODEL_H_ + #define COMPONENTS_OMNIBOX_BROWSER_ON_DEVICE_HEAD_MODEL_H_ + ++#include + #include + #include + #include +diff -up chromium-109.0.5414.74/components/payments/content/utility/fingerprint_parser.h.me chromium-109.0.5414.74/components/payments/content/utility/fingerprint_parser.h +--- chromium-109.0.5414.74/components/payments/content/utility/fingerprint_parser.h.me 2023-01-19 17:02:45.258544665 +0100 ++++ chromium-109.0.5414.74/components/payments/content/utility/fingerprint_parser.h 2023-01-19 17:02:52.577611757 +0100 +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_PAYMENTS_CONTENT_UTILITY_FINGERPRINT_PARSER_H_ + #define COMPONENTS_PAYMENTS_CONTENT_UTILITY_FINGERPRINT_PARSER_H_ + ++#include + #include + + #include +diff -up chromium-109.0.5414.74/pdf/document_attachment_info.h.me chromium-109.0.5414.74/pdf/document_attachment_info.h +--- chromium-109.0.5414.74/pdf/document_attachment_info.h.me 2023-01-19 17:28:28.552063534 +0100 ++++ chromium-109.0.5414.74/pdf/document_attachment_info.h 2023-01-19 17:28:48.072379953 +0100 +@@ -5,6 +5,7 @@ + #ifndef PDF_DOCUMENT_ATTACHMENT_INFO_H_ + #define PDF_DOCUMENT_ATTACHMENT_INFO_H_ + ++#include + #include + + +diff -up chromium-109.0.5414.74/third_party/pdfium/constants/annotation_flags.h.me chromium-109.0.5414.74/third_party/pdfium/constants/annotation_flags.h +--- chromium-109.0.5414.74/third_party/pdfium/constants/annotation_flags.h.me 2023-01-19 18:25:47.648193710 +0100 ++++ chromium-109.0.5414.74/third_party/pdfium/constants/annotation_flags.h 2023-01-19 18:26:11.488593556 +0100 +@@ -5,6 +5,8 @@ + #ifndef CONSTANTS_ANNOTATION_FLAGS_H_ + #define CONSTANTS_ANNOTATION_FLAGS_H_ + ++#include ++ + namespace pdfium { + namespace annotation_flags { + +diff -up chromium-109.0.5414.74/base/cpu.h.me chromium-109.0.5414.74/base/cpu.h +--- chromium-109.0.5414.74/base/cpu.h.me 2023-01-19 21:31:02.905062987 +0100 ++++ chromium-109.0.5414.74/base/cpu.h 2023-01-19 21:31:32.298573267 +0100 +@@ -5,6 +5,7 @@ + #ifndef BASE_CPU_H_ + #define BASE_CPU_H_ + ++#include + #include + + #include "base/base_export.h" +diff -up chromium-113.0.5672.24/third_party/vulkan-deps/vulkan-validation-layers/src/layers/external/vma/vk_mem_alloc.h.me chromium-113.0.5672.24/third_party/vulkan-deps/vulkan-validation-layers/src/layers/external/vma/vk_mem_alloc.h +--- chromium-113.0.5672.24/third_party/vulkan-deps/vulkan-validation-layers/src/layers/external/vma/vk_mem_alloc.h.me 2023-04-15 16:44:55.344305412 +0200 ++++ chromium-113.0.5672.24/third_party/vulkan-deps/vulkan-validation-layers/src/layers/external/vma/vk_mem_alloc.h 2023-04-15 16:47:09.028666995 +0200 +@@ -2854,6 +2854,7 @@ static void vma_aligned_free(void* VMA_N + + // Define this macro to 1 to enable functions: vmaBuildStatsString, vmaFreeStatsString. + #if VMA_STATS_STRING_ENABLED ++#include + static inline void VmaUint32ToStr(char* VMA_NOT_NULL outStr, size_t strLen, uint32_t num) + { + snprintf(outStr, strLen, "%u", static_cast(num)); +diff -up chromium-113.0.5672.37/chrome/browser/webauthn/authenticator_request_dialog_model.h.me chromium-113.0.5672.37/chrome/browser/webauthn/authenticator_request_dialog_model.h +--- chromium-113.0.5672.37/chrome/browser/webauthn/authenticator_request_dialog_model.h.me 2023-04-18 15:55:44.774916319 +0200 ++++ chromium-113.0.5672.37/chrome/browser/webauthn/authenticator_request_dialog_model.h 2023-04-18 15:55:54.441085882 +0200 +@@ -8,6 +8,7 @@ + #include + #include + #include ++#include + + #include "base/containers/span.h" + #include "base/functional/callback_forward.h" +diff -up chromium-113.0.5672.37/gin/time_clamper.h.me chromium-113.0.5672.37/gin/time_clamper.h +--- chromium-113.0.5672.37/gin/time_clamper.h.me 2023-04-18 16:38:41.180437467 +0200 ++++ chromium-113.0.5672.37/gin/time_clamper.h 2023-04-18 16:39:43.857049432 +0200 +@@ -48,7 +48,7 @@ class GIN_EXPORT TimeClamper { + const int64_t micros = now_micros % 1000; + // abs() is necessary for devices with times before unix-epoch (most likely + // configured incorrectly). +- if (abs(micros) + kResolutionMicros < 1000) { ++ if (std::abs(micros) + kResolutionMicros < 1000) { + return now_micros / 1000; + } + return ClampTimeResolution(now_micros) / 1000; +diff -up chromium-113.0.5672.53/chrome/test/chromedriver/chrome/web_view_impl.cc.me chromium-113.0.5672.53/chrome/test/chromedriver/chrome/web_view_impl.cc +--- chromium-113.0.5672.53/chrome/test/chromedriver/chrome/web_view_impl.cc.me 2023-04-21 08:07:55.362714544 +0200 ++++ chromium-113.0.5672.53/chrome/test/chromedriver/chrome/web_view_impl.cc 2023-04-21 08:14:35.424158693 +0200 +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + + #include "base/check.h" + #include "base/files/file_path.h" diff --git a/SOURCES/chromium-114-norar.patch b/SOURCES/chromium-114-norar.patch new file mode 100644 index 00000000..63205fa4 --- /dev/null +++ b/SOURCES/chromium-114-norar.patch @@ -0,0 +1,105 @@ +diff -up chromium-114.0.5735.35/chrome/browser/safe_browsing/download_protection/file_analyzer.cc.nounrar chromium-114.0.5735.35/chrome/browser/safe_browsing/download_protection/file_analyzer.cc +--- chromium-114.0.5735.35/chrome/browser/safe_browsing/download_protection/file_analyzer.cc.nounrar 2023-05-18 00:37:47.000000000 +0200 ++++ chromium-114.0.5735.35/chrome/browser/safe_browsing/download_protection/file_analyzer.cc 2023-05-21 18:12:30.368425080 +0200 +@@ -77,8 +77,6 @@ void FileAnalyzer::Start(const base::Fil + + if (inspection_type == DownloadFileType::ZIP) { + StartExtractZipFeatures(); +- } else if (inspection_type == DownloadFileType::RAR) { +- StartExtractRarFeatures(); + #if BUILDFLAG(IS_MAC) + } else if (inspection_type == DownloadFileType::DMG) { + StartExtractDmgFeatures(); +diff -up chromium-114.0.5735.35/chrome/common/safe_browsing/archive_analyzer.cc.nounrar chromium-114.0.5735.35/chrome/common/safe_browsing/archive_analyzer.cc +--- chromium-114.0.5735.35/chrome/common/safe_browsing/archive_analyzer.cc.nounrar 2023-05-18 00:37:48.000000000 +0200 ++++ chromium-114.0.5735.35/chrome/common/safe_browsing/archive_analyzer.cc 2023-05-21 18:11:14.870058635 +0200 +@@ -8,7 +8,6 @@ + #include "build/build_config.h" + #include "build/buildflag.h" + #include "chrome/common/safe_browsing/archive_analyzer_results.h" +-#include "chrome/common/safe_browsing/rar_analyzer.h" + #include "chrome/common/safe_browsing/seven_zip_analyzer.h" + #include "chrome/common/safe_browsing/zip_analyzer.h" + #include "components/safe_browsing/content/common/proto/download_file_types.pb.h" +@@ -23,9 +22,7 @@ namespace safe_browsing { + // static + std::unique_ptr ArchiveAnalyzer::CreateForArchiveType( + DownloadFileType_InspectionType file_type) { +- if (file_type == DownloadFileType::RAR) { +- return std::make_unique(); +- } else if (file_type == DownloadFileType::ZIP) { ++ if (file_type == DownloadFileType::ZIP) { + return std::make_unique(); + } else if (file_type == DownloadFileType::SEVEN_ZIP) { + return std::make_unique(); +diff -up chromium-114.0.5735.35/chrome/common/safe_browsing/BUILD.gn.nounrar chromium-114.0.5735.35/chrome/common/safe_browsing/BUILD.gn +--- chromium-114.0.5735.35/chrome/common/safe_browsing/BUILD.gn.nounrar 2023-05-18 00:37:48.000000000 +0200 ++++ chromium-114.0.5735.35/chrome/common/safe_browsing/BUILD.gn 2023-05-21 18:11:14.869058617 +0200 +@@ -145,8 +145,6 @@ source_set("safe_browsing") { + "protobuf_message_log_macros.h", + "protobuf_message_read_macros.h", + "protobuf_message_write_macros.h", +- "rar_analyzer.cc", +- "rar_analyzer.h", + "seven_zip_analyzer.cc", + "seven_zip_analyzer.h", + "zip_analyzer.cc", +@@ -162,7 +160,6 @@ source_set("safe_browsing") { + "//components/safe_browsing/content/common:file_type_policies", + "//components/safe_browsing/core/common", + "//third_party/lzma_sdk/google:seven_zip_reader", +- "//third_party/unrar:unrar", + ] + + if (is_linux) { +diff -up chromium-114.0.5735.35/chrome/common/safe_browsing/zip_analyzer.cc.nounrar chromium-114.0.5735.35/chrome/common/safe_browsing/zip_analyzer.cc +--- chromium-114.0.5735.35/chrome/common/safe_browsing/zip_analyzer.cc.nounrar 2023-05-18 00:37:48.000000000 +0200 ++++ chromium-114.0.5735.35/chrome/common/safe_browsing/zip_analyzer.cc 2023-05-21 18:11:14.869058617 +0200 +@@ -18,7 +18,6 @@ + #include "base/time/time.h" + #include "build/build_config.h" + #include "chrome/common/safe_browsing/archive_analyzer_results.h" +-#include "chrome/common/safe_browsing/rar_analyzer.h" + #include "components/safe_browsing/content/common/file_type_policies.h" + #include "components/safe_browsing/core/common/features.h" + #include "components/safe_browsing/core/common/proto/csd.pb.h" +diff -up chromium-114.0.5735.35/chrome/services/file_util/safe_archive_analyzer.cc.nounrar chromium-114.0.5735.35/chrome/services/file_util/safe_archive_analyzer.cc +--- chromium-114.0.5735.35/chrome/services/file_util/safe_archive_analyzer.cc.nounrar 2023-05-18 00:37:48.000000000 +0200 ++++ chromium-114.0.5735.35/chrome/services/file_util/safe_archive_analyzer.cc 2023-05-21 18:11:14.870058635 +0200 +@@ -71,6 +71,7 @@ void SafeArchiveAnalyzer::AnalyzeRarFile + base::File rar_file, + mojo::PendingRemote temp_file_getter, + AnalyzeRarFileCallback callback) { ++#if 0 + DCHECK(rar_file.IsValid()); + temp_file_getter_.Bind(std::move(temp_file_getter)); + callback_ = std::move(callback); +@@ -86,6 +87,9 @@ void SafeArchiveAnalyzer::AnalyzeRarFile + rar_analyzer_.Analyze(std::move(rar_file), base::FilePath(), + std::move(analysis_finished_callback), + std::move(temp_file_getter_callback), &results_); ++#else ++ NOTREACHED(); ++#endif + } + + void SafeArchiveAnalyzer::AnalyzeSevenZipFile( +diff -up chromium-114.0.5735.35/chrome/services/file_util/safe_archive_analyzer.h.nounrar chromium-114.0.5735.35/chrome/services/file_util/safe_archive_analyzer.h +--- chromium-114.0.5735.35/chrome/services/file_util/safe_archive_analyzer.h.nounrar 2023-05-18 00:37:48.000000000 +0200 ++++ chromium-114.0.5735.35/chrome/services/file_util/safe_archive_analyzer.h 2023-05-21 18:11:14.870058635 +0200 +@@ -6,7 +6,6 @@ + #define CHROME_SERVICES_FILE_UTIL_SAFE_ARCHIVE_ANALYZER_H_ + + #include "chrome/common/safe_browsing/archive_analyzer_results.h" +-#include "chrome/common/safe_browsing/rar_analyzer.h" + #include "chrome/common/safe_browsing/seven_zip_analyzer.h" + #include "chrome/common/safe_browsing/zip_analyzer.h" + #include "chrome/services/file_util/public/mojom/safe_archive_analyzer.mojom.h" +@@ -63,7 +62,6 @@ class SafeArchiveAnalyzer : public chrom + void Timeout(); + + safe_browsing::ZipAnalyzer zip_analyzer_; +- safe_browsing::RarAnalyzer rar_analyzer_; + safe_browsing::SevenZipAnalyzer seven_zip_analyzer_; + #if BUILDFLAG(IS_MAC) + safe_browsing::dmg::DMGAnalyzer dmg_analyzer_; diff --git a/SOURCES/chromium-114-qt-fix_font_double_scaling.patch b/SOURCES/chromium-114-qt-fix_font_double_scaling.patch new file mode 100644 index 00000000..9713ef63 --- /dev/null +++ b/SOURCES/chromium-114-qt-fix_font_double_scaling.patch @@ -0,0 +1,21 @@ +diff --git a/ui/qt/qt_ui.cc b/ui/qt/qt_ui.cc +index bac5245a..a97fa8b 100644 +--- a/ui/qt/qt_ui.cc ++++ b/ui/qt/qt_ui.cc +@@ -422,12 +422,14 @@ + auto desc = shim_->GetFontDescription(); + + font_family_ = desc.family.c_str(); ++ // Points are defined at 72 DPI and pixels are 96 DPI by default. ++ constexpr double kPointToPixelRatio = 96.0 / 72.0; + if (desc.size_pixels > 0) { + font_size_pixels_ = desc.size_pixels; +- font_size_points_ = font_size_pixels_ / GetDeviceScaleFactor(); ++ font_size_points_ = std::round(font_size_pixels_ / kPointToPixelRatio); + } else { + font_size_points_ = desc.size_points; +- font_size_pixels_ = font_size_points_ * GetDeviceScaleFactor(); ++ font_size_pixels_ = std::round(font_size_points_ * kPointToPixelRatio); + } + font_style_ = desc.is_italic ? gfx::Font::ITALIC : gfx::Font::NORMAL; + font_weight_ = QtWeightToCssWeight(desc.weight); diff --git a/SOURCES/chromium-114-qt-handle_scale_factor_changes.patch b/SOURCES/chromium-114-qt-handle_scale_factor_changes.patch new file mode 100644 index 00000000..d8fc72fd --- /dev/null +++ b/SOURCES/chromium-114-qt-handle_scale_factor_changes.patch @@ -0,0 +1,574 @@ +commit c51d6447fd0d124903d16bf5952efccbf9e1ca92 +Author: Tom Anderson +Date: Wed May 24 22:53:20 2023 +0000 + + [Qt] Handle scale factor changes + + This is a speculative fix for https://crbug.com/1439149. I suspect + the scale factor is not set immediately on QT initialization, but + is set asynchronously shortly after. This CL adds a listener for + QT scale changes. + + R=thestig + + Low-Coverage-Reason: No QT tests currently + Change-Id: I7dea23e16a6bb26237564af2dc4e43480f6aea9f + Bug: 1439149 + Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4559732 + Reviewed-by: Lei Zhang + Commit-Queue: Thomas Anderson + Auto-Submit: Thomas Anderson + Cr-Commit-Position: refs/heads/main@{#1148805} + +diff --git a/ui/qt/qt5_shim_moc.cc b/ui/qt/qt5_shim_moc.cc +index 8f8b6b57784a8..6e504f23c603a 100644 +--- a/ui/qt/qt5_shim_moc.cc ++++ b/ui/qt/qt5_shim_moc.cc +@@ -23,8 +23,8 @@ + + QT_BEGIN_MOC_NAMESPACE + struct qt_meta_stringdata_qt__QtShim_t { +- QByteArrayData data[6]; +- char stringdata[52]; ++ QByteArrayData data[13]; ++ char stringdata[151]; + }; + #define QT_MOC_LITERAL(idx, ofs, len) \ + Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET( \ +@@ -33,9 +33,16 @@ struct qt_meta_stringdata_qt__QtShim_t { + static const qt_meta_stringdata_qt__QtShim_t qt_meta_stringdata_qt__QtShim = { + {QT_MOC_LITERAL(0, 0, 10), QT_MOC_LITERAL(1, 11, 11), + QT_MOC_LITERAL(2, 23, 0), QT_MOC_LITERAL(3, 24, 4), +- QT_MOC_LITERAL(4, 29, 14), QT_MOC_LITERAL(5, 44, 7)}, ++ QT_MOC_LITERAL(4, 29, 14), QT_MOC_LITERAL(5, 44, 7), ++ QT_MOC_LITERAL(6, 52, 11), QT_MOC_LITERAL(7, 64, 8), ++ QT_MOC_LITERAL(8, 73, 6), QT_MOC_LITERAL(9, 80, 13), ++ QT_MOC_LITERAL(10, 94, 25), QT_MOC_LITERAL(11, 120, 3), ++ QT_MOC_LITERAL(12, 124, 26)}, + "qt::QtShim\0FontChanged\0\0font\0" +- "PaletteChanged\0palette"}; ++ "PaletteChanged\0palette\0ScreenAdded\0" ++ "QScreen*\0screen\0ScreenRemoved\0" ++ "LogicalDotsPerInchChanged\0dpi\0" ++ "PhysicalDotsPerInchChanged"}; + #undef QT_MOC_LITERAL + + static const uint qt_meta_data_qt__QtShim[] = { +@@ -44,7 +51,7 @@ static const uint qt_meta_data_qt__QtShim[] = { + 7, // revision + 0, // classname + 0, 0, // classinfo +- 2, 14, // methods ++ 6, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors +@@ -52,11 +59,15 @@ static const uint qt_meta_data_qt__QtShim[] = { + 0, // signalCount + + // slots: name, argc, parameters, tag, flags +- 1, 1, 24, 2, 0x08 /* Private */, 4, 1, 27, 2, 0x08 /* Private */, ++ 1, 1, 44, 2, 0x08 /* Private */, 4, 1, 47, 2, 0x08 /* Private */, 6, 1, 50, ++ 2, 0x08 /* Private */, 9, 1, 53, 2, 0x08 /* Private */, 10, 1, 56, 2, ++ 0x08 /* Private */, 12, 1, 59, 2, 0x08 /* Private */, + + // slots: parameters + QMetaType::Void, QMetaType::QFont, 3, QMetaType::Void, QMetaType::QPalette, +- 5, ++ 5, QMetaType::Void, 0x80000000 | 7, 8, QMetaType::Void, 0x80000000 | 7, 8, ++ QMetaType::Void, QMetaType::QReal, 11, QMetaType::Void, QMetaType::QReal, ++ 11, + + 0 // eod + }; +@@ -74,6 +85,18 @@ void qt::QtShim::qt_static_metacall(QObject* _o, + case 1: + _t->PaletteChanged((*reinterpret_cast(_a[1]))); + break; ++ case 2: ++ _t->ScreenAdded((*reinterpret_cast(_a[1]))); ++ break; ++ case 3: ++ _t->ScreenRemoved((*reinterpret_cast(_a[1]))); ++ break; ++ case 4: ++ _t->LogicalDotsPerInchChanged((*reinterpret_cast(_a[1]))); ++ break; ++ case 5: ++ _t->PhysicalDotsPerInchChanged((*reinterpret_cast(_a[1]))); ++ break; + default:; + } + } +@@ -107,15 +130,15 @@ int qt::QtShim::qt_metacall(QMetaObject::Call _c, int _id, void** _a) { + return _id; + } + if (_c == QMetaObject::InvokeMetaMethod) { +- if (_id < 2) { ++ if (_id < 6) { + qt_static_metacall(this, _c, _id, _a); + } +- _id -= 2; ++ _id -= 6; + } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { +- if (_id < 2) { ++ if (_id < 6) { + *reinterpret_cast(_a[0]) = -1; + } +- _id -= 2; ++ _id -= 6; + } + return _id; + } +diff --git a/ui/qt/qt6_shim_moc.cc b/ui/qt/qt6_shim_moc.cc +index 6d02ca317b65d..a16515008d892 100644 +--- a/ui/qt/qt6_shim_moc.cc ++++ b/ui/qt/qt6_shim_moc.cc +@@ -26,8 +26,8 @@ QT_BEGIN_MOC_NAMESPACE + QT_WARNING_PUSH + QT_WARNING_DISABLE_DEPRECATED + struct qt_meta_stringdata_qt__QtShim_t { +- const uint offsetsAndSize[12]; +- char stringdata0[52]; ++ const uint offsetsAndSize[26]; ++ char stringdata0[151]; + }; + #define QT_MOC_LITERAL(ofs, len) \ + uint(offsetof(qt_meta_stringdata_qt__QtShim_t, stringdata0) + ofs), len +@@ -38,11 +38,21 @@ static const qt_meta_stringdata_qt__QtShim_t qt_meta_stringdata_qt__QtShim = { + QT_MOC_LITERAL(23, 0), // "" + QT_MOC_LITERAL(24, 4), // "font" + QT_MOC_LITERAL(29, 14), // "PaletteChanged" +- QT_MOC_LITERAL(44, 7) // "palette" ++ QT_MOC_LITERAL(44, 7), // "palette" ++ QT_MOC_LITERAL(52, 11), // "ScreenAdded" ++ QT_MOC_LITERAL(64, 8), // "QScreen*" ++ QT_MOC_LITERAL(73, 6), // "screen" ++ QT_MOC_LITERAL(80, 13), // "ScreenRemoved" ++ QT_MOC_LITERAL(94, 25), // "LogicalDotsPerInchChanged" ++ QT_MOC_LITERAL(120, 3), // "dpi" ++ QT_MOC_LITERAL(124, 26) // "PhysicalDotsPerInchChanged" + + }, + "qt::QtShim\0FontChanged\0\0font\0" +- "PaletteChanged\0palette"}; ++ "PaletteChanged\0palette\0ScreenAdded\0" ++ "QScreen*\0screen\0ScreenRemoved\0" ++ "LogicalDotsPerInchChanged\0dpi\0" ++ "PhysicalDotsPerInchChanged"}; + #undef QT_MOC_LITERAL + + static const uint qt_meta_data_qt__QtShim[] = { +@@ -51,7 +61,7 @@ static const uint qt_meta_data_qt__QtShim[] = { + 10, // revision + 0, // classname + 0, 0, // classinfo +- 2, 14, // methods ++ 6, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors +@@ -59,11 +69,15 @@ static const uint qt_meta_data_qt__QtShim[] = { + 0, // signalCount + + // slots: name, argc, parameters, tag, flags, initial metatype offsets +- 1, 1, 26, 2, 0x08, 1 /* Private */, 4, 1, 29, 2, 0x08, 3 /* Private */, ++ 1, 1, 50, 2, 0x08, 1 /* Private */, 4, 1, 53, 2, 0x08, 3 /* Private */, 6, ++ 1, 56, 2, 0x08, 5 /* Private */, 9, 1, 59, 2, 0x08, 7 /* Private */, 10, 1, ++ 62, 2, 0x08, 9 /* Private */, 12, 1, 65, 2, 0x08, 11 /* Private */, + + // slots: parameters + QMetaType::Void, QMetaType::QFont, 3, QMetaType::Void, QMetaType::QPalette, +- 5, ++ 5, QMetaType::Void, 0x80000000 | 7, 8, QMetaType::Void, 0x80000000 | 7, 8, ++ QMetaType::Void, QMetaType::QReal, 11, QMetaType::Void, QMetaType::QReal, ++ 11, + + 0 // eod + }; +@@ -83,6 +97,22 @@ void qt::QtShim::qt_static_metacall(QObject* _o, + _t->PaletteChanged( + (*reinterpret_cast>(_a[1]))); + break; ++ case 2: ++ _t->ScreenAdded( ++ (*reinterpret_cast>(_a[1]))); ++ break; ++ case 3: ++ _t->ScreenRemoved( ++ (*reinterpret_cast>(_a[1]))); ++ break; ++ case 4: ++ _t->LogicalDotsPerInchChanged( ++ (*reinterpret_cast>(_a[1]))); ++ break; ++ case 5: ++ _t->PhysicalDotsPerInchChanged( ++ (*reinterpret_cast>(_a[1]))); ++ break; + default:; + } + } +@@ -98,7 +128,15 @@ const QMetaObject qt::QtShim::staticMetaObject = { + QtPrivate::TypeAndForceComplete, + QtPrivate::TypeAndForceComplete, + QtPrivate::TypeAndForceComplete, +- QtPrivate::TypeAndForceComplete ++ QtPrivate::TypeAndForceComplete, ++ QtPrivate::TypeAndForceComplete, ++ QtPrivate::TypeAndForceComplete, ++ QtPrivate::TypeAndForceComplete, ++ QtPrivate::TypeAndForceComplete, ++ QtPrivate::TypeAndForceComplete, ++ QtPrivate::TypeAndForceComplete, ++ QtPrivate::TypeAndForceComplete, ++ QtPrivate::TypeAndForceComplete + + >, + nullptr}}; +@@ -127,15 +165,15 @@ int qt::QtShim::qt_metacall(QMetaObject::Call _c, int _id, void** _a) { + return _id; + } + if (_c == QMetaObject::InvokeMetaMethod) { +- if (_id < 2) { ++ if (_id < 6) { + qt_static_metacall(this, _c, _id, _a); + } +- _id -= 2; ++ _id -= 6; + } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { +- if (_id < 2) { ++ if (_id < 6) { + *reinterpret_cast(_a[0]) = QMetaType(); + } +- _id -= 2; ++ _id -= 6; + } + return _id; + } +diff --git a/ui/qt/qt_interface.h b/ui/qt/qt_interface.h +index 6a362bc66c0e3..28dfc6603544f 100644 +--- a/ui/qt/qt_interface.h ++++ b/ui/qt/qt_interface.h +@@ -118,6 +118,7 @@ class QtInterface { + + virtual void FontChanged() = 0; + virtual void ThemeChanged() = 0; ++ virtual void ScaleFactorMaybeChanged() = 0; + }; + + QtInterface() = default; +diff --git a/ui/qt/qt_shim.cc b/ui/qt/qt_shim.cc +index 74d34ad196f18..0aec9c3aed4ad 100644 +--- a/ui/qt/qt_shim.cc ++++ b/ui/qt/qt_shim.cc +@@ -16,6 +16,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -52,8 +53,9 @@ FontHinting QtHintingToFontHinting(QFont::HintingPreference hinting) { + // Obtain the average color of a gradient. + SkColor GradientColor(const QGradient& gradient) { + QGradientStops stops = gradient.stops(); +- if (stops.empty()) ++ if (stops.empty()) { + return qRgba(0, 0, 0, 0); ++ } + + float a = 0; + float r = 0; +@@ -86,11 +88,13 @@ SkColor GradientColor(const QGradient& gradient) { + // Obtain the average color of a texture. + SkColor TextureColor(QImage image) { + size_t size = image.width() * image.height(); +- if (!size) ++ if (!size) { + return qRgba(0, 0, 0, 0); ++ } + +- if (image.format() != QImage::Format_ARGB32_Premultiplied) ++ if (image.format() != QImage::Format_ARGB32_Premultiplied) { + image = image.convertToFormat(QImage::Format_ARGB32_Premultiplied); ++ } + + size_t a = 0; + size_t r = 0; +@@ -203,6 +207,13 @@ QtShim::QtShim(QtInterface::Delegate* delegate, int* argc, char** argv) + SLOT(FontChanged(const QFont&))); + connect(&app_, SIGNAL(paletteChanged(const QPalette&)), this, + SLOT(PaletteChanged(const QPalette&))); ++ connect(&app_, SIGNAL(screenAdded(QScreen*)), this, ++ SLOT(ScreenAdded(QScreen*))); ++ connect(&app_, SIGNAL(screenRemoved(QScreen*)), this, ++ SLOT(ScreenRemoved(QScreen*))); ++ for (QScreen* screen : app_.screens()) { ++ ScreenAdded(screen); ++ } + } + + QtShim::~QtShim() = default; +@@ -241,8 +252,9 @@ Image QtShim::GetIconForContentType(const String& content_type, + auto icon = QIcon::fromTheme(name); + auto pixmap = icon.pixmap(size); + auto image = pixmap.toImage(); +- if (image.format() != QImage::Format_ARGB32_Premultiplied) ++ if (image.format() != QImage::Format_ARGB32_Premultiplied) { + image = image.convertToFormat(QImage::Format_ARGB32_Premultiplied); ++ } + if (auto bytes = image.sizeInBytes()) { + return {image.width(), image.height(), + static_cast(image.devicePixelRatio()), +@@ -283,6 +295,30 @@ void QtShim::PaletteChanged(const QPalette& palette) { + delegate_->ThemeChanged(); + } + ++DISABLE_CFI_VCALL ++void QtShim::ScreenAdded(QScreen* screen) { ++ connect(screen, SIGNAL(logicalDotsPerInchChanged(qreal)), this, ++ SLOT(LogicalDotsPerInchChanged(qreal))); ++ connect(screen, SIGNAL(physicalDotsPerInchChanged(qreal)), this, ++ SLOT(PhysicalDotsPerInchChanged(qreal))); ++ delegate_->ScaleFactorMaybeChanged(); ++} ++ ++DISABLE_CFI_VCALL ++void QtShim::ScreenRemoved(QScreen* screen) { ++ delegate_->ScaleFactorMaybeChanged(); ++} ++ ++DISABLE_CFI_VCALL ++void QtShim::LogicalDotsPerInchChanged(qreal dpi) { ++ delegate_->ScaleFactorMaybeChanged(); ++} ++ ++DISABLE_CFI_VCALL ++void QtShim::PhysicalDotsPerInchChanged(qreal dpi) { ++ delegate_->ScaleFactorMaybeChanged(); ++} ++ + Image QtShim::DrawHeader(int width, + int height, + SkColor default_color, +@@ -309,8 +345,9 @@ QImage QtShim::DrawHeaderImpl(int width, + QStyleOptionTitleBar opt; + opt.rect = QRect(-kBorderWidth, -kBorderWidth, width + 2 * kBorderWidth, + height + 2 * kBorderWidth); +- if (state == ColorState::kNormal) ++ if (state == ColorState::kNormal) { + opt.titleBarState = QStyle::State_Active; ++ } + app_.style()->drawComplexControl(QStyle::CC_TitleBar, &opt, &painter, + nullptr); + } else { +diff --git a/ui/qt/qt_shim.h b/ui/qt/qt_shim.h +index 607e6fe22dfc0..d979c47d589d4 100644 +--- a/ui/qt/qt_shim.h ++++ b/ui/qt/qt_shim.h +@@ -42,6 +42,10 @@ class QtShim : public QObject, public QtInterface { + private slots: + void FontChanged(const QFont& font); + void PaletteChanged(const QPalette& palette); ++ void ScreenAdded(QScreen* screen); ++ void ScreenRemoved(QScreen* screen); ++ void LogicalDotsPerInchChanged(qreal dpi); ++ void PhysicalDotsPerInchChanged(qreal dpi); + + private: + QImage DrawHeaderImpl(int width, +diff --git a/ui/qt/qt_ui.cc b/ui/qt/qt_ui.cc +index 6a3b58e9f930b..bac5245a069f9 100644 +--- a/ui/qt/qt_ui.cc ++++ b/ui/qt/qt_ui.cc +@@ -19,6 +19,7 @@ + #include "base/nix/xdg_util.h" + #include "base/notreached.h" + #include "base/path_service.h" ++#include "base/task/single_thread_task_runner.h" + #include "base/time/time.h" + #include "cc/paint/paint_canvas.h" + #include "chrome/browser/themes/theme_properties.h" // nogncheck +@@ -36,6 +37,7 @@ + #include "ui/gfx/image/image.h" + #include "ui/gfx/image/image_skia_rep.h" + #include "ui/gfx/image/image_skia_source.h" ++#include "ui/linux/device_scale_factor_observer.h" + #include "ui/linux/linux_ui.h" + #include "ui/linux/nav_button_provider.h" + #include "ui/native_theme/native_theme_aura.h" +@@ -194,16 +196,21 @@ void QtUi::GetDefaultFontDescription(std::string* family_out, + int* style_out, + int* weight_out, + gfx::FontRenderParams* params_out) const { +- if (family_out) ++ if (family_out) { + *family_out = font_family_; +- if (size_pixels_out) ++ } ++ if (size_pixels_out) { + *size_pixels_out = font_size_pixels_; +- if (style_out) ++ } ++ if (style_out) { + *style_out = font_style_; +- if (weight_out) ++ } ++ if (weight_out) { + *weight_out = font_weight_; +- if (params_out) ++ } ++ if (params_out) { + *params_out = font_params_; ++ } + } + + ui::SelectFileDialog* QtUi::CreateSelectFileDialog( +@@ -236,6 +245,7 @@ bool QtUi::Initialize() { + ui::ColorProviderManager::Get().AppendColorProviderInitializer( + base::BindRepeating(&QtUi::AddNativeColorMixer, base::Unretained(this))); + FontChanged(); ++ scale_factor_ = shim_->GetScaleFactor(); + + return true; + } +@@ -246,8 +256,9 @@ ui::NativeTheme* QtUi::GetNativeTheme() const { + + bool QtUi::GetColor(int id, SkColor* color, bool use_custom_frame) const { + auto value = GetColor(id, use_custom_frame); +- if (value) ++ if (value) { + *color = *value; ++ } + return value.has_value(); + } + +@@ -297,8 +308,9 @@ gfx::Image QtUi::GetIconForContentType(const std::string& content_type, + float scale) const { + Image image = + shim_->GetIconForContentType(String(content_type.c_str()), size * scale); +- if (!image.data_argb.size()) ++ if (!image.data_argb.size()) { + return {}; ++ } + + SkImageInfo image_info = SkImageInfo::Make( + image.width, image.height, kBGRA_8888_SkColorType, kPremul_SkAlphaType); +@@ -345,14 +357,16 @@ bool QtUi::AnimationsEnabled() const { + + void QtUi::AddWindowButtonOrderObserver( + ui::WindowButtonOrderObserver* observer) { +- if (fallback_linux_ui_) ++ if (fallback_linux_ui_) { + fallback_linux_ui_->AddWindowButtonOrderObserver(observer); ++ } + } + + void QtUi::RemoveWindowButtonOrderObserver( + ui::WindowButtonOrderObserver* observer) { +- if (fallback_linux_ui_) ++ if (fallback_linux_ui_) { + fallback_linux_ui_->RemoveWindowButtonOrderObserver(observer); ++ } + } + + std::unique_ptr QtUi::CreateNavButtonProvider() { +@@ -441,11 +455,24 @@ void QtUi::ThemeChanged() { + native_theme_->ThemeChanged(PreferDarkTheme()); + } + ++void QtUi::ScaleFactorMaybeChanged() { ++ // This gets called whenever the monitor configuration changes. Handle the ++ // scale change asynchronously to allow the change to propagate to QT's scale ++ // factor. This also coalesces scale change events together. ++ if (!scale_factor_task_active_) { ++ scale_factor_task_active_ = true; ++ base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask( ++ FROM_HERE, base::BindOnce(&QtUi::ScaleFactorMaybeChangedImpl, ++ weak_factory_.GetWeakPtr())); ++ } ++} ++ + DISABLE_CFI_VCALL + void QtUi::AddNativeColorMixer(ui::ColorProvider* provider, + const ui::ColorProviderManager::Key& key) { +- if (key.system_theme != ui::SystemTheme::kQt) ++ if (key.system_theme != ui::SystemTheme::kQt) { + return; ++ } + + ui::ColorMixer& mixer = provider->AddMixer(); + // These color constants are required by native_chrome_color_mixer_linux.cc +@@ -494,8 +521,9 @@ void QtUi::AddNativeColorMixer(ui::ColorProvider* provider, + ColorState::kInactive}, + {ui::kColorNativeToolbarBackground, ColorType::kButtonBg}, + }; +- for (const auto& map : kMaps) ++ for (const auto& map : kMaps) { + mixer[map.id] = {shim_->GetColor(map.role, map.state)}; ++ } + + const bool use_custom_frame = + key.frame_type == ui::ColorProviderManager::FrameType::kChromium; +@@ -578,6 +606,20 @@ absl::optional QtUi::GetColor(int id, bool use_custom_frame) const { + } + } + ++DISABLE_CFI_VCALL ++void QtUi::ScaleFactorMaybeChangedImpl() { ++ scale_factor_task_active_ = false; ++ double scale = shim_->GetScaleFactor(); ++ if (scale == scale_factor_) { ++ return; ++ } ++ scale_factor_ = scale; ++ for (ui::DeviceScaleFactorObserver& observer : ++ device_scale_factor_observer_list()) { ++ observer.OnDeviceScaleFactorChanged(); ++ } ++} ++ + std::unique_ptr CreateQtUi( + ui::LinuxUi* fallback_linux_ui) { + return std::make_unique(fallback_linux_ui); +diff --git a/ui/qt/qt_ui.h b/ui/qt/qt_ui.h +index b53ed93240708..3319edf1ea9bc 100644 +--- a/ui/qt/qt_ui.h ++++ b/ui/qt/qt_ui.h +@@ -8,6 +8,7 @@ + #include + + #include "base/component_export.h" ++#include "base/memory/weak_ptr.h" + #include "printing/buildflags/buildflags.h" + #include "third_party/abseil-cpp/absl/types/optional.h" + #include "ui/color/color_provider.h" +@@ -88,11 +89,14 @@ class QtUi : public ui::LinuxUiAndTheme, QtInterface::Delegate { + // QtInterface::Delegate: + void FontChanged() override; + void ThemeChanged() override; ++ void ScaleFactorMaybeChanged() override; + + private: + void AddNativeColorMixer(ui::ColorProvider* provider, + const ui::ColorProviderManager::Key& key); + ++ void ScaleFactorMaybeChangedImpl(); ++ + absl::optional GetColor(int id, bool use_custom_frame) const; + + // TODO(https://crbug.com/1317782): This is a fallback for any unimplemented +@@ -114,6 +118,11 @@ class QtUi : public ui::LinuxUiAndTheme, QtInterface::Delegate { + std::unique_ptr shim_; + + std::unique_ptr native_theme_; ++ ++ bool scale_factor_task_active_ = false; ++ double scale_factor_ = 1.0; ++ ++ base::WeakPtrFactory weak_factory_{this}; + }; + + // This should be the only symbol exported from this component. diff --git a/SOURCES/chromium-114-qt_deps.patch b/SOURCES/chromium-114-qt_deps.patch new file mode 100644 index 00000000..e8908821 --- /dev/null +++ b/SOURCES/chromium-114-qt_deps.patch @@ -0,0 +1,46 @@ +commit 7b1d747a599a752e493e34e7bbf841d8b4c7882f +Author: Tomasz Śniatowski +Date: Thu May 25 16:09:27 2023 +0000 + + Dep on //printing in //ui/qt if printing is enabled + + qt_ui.h can use printing/printing_context_linux.h, and needs to dep + on //printing if it does, to avoid a missing dependency build break. + + Without this fix, a clean build can fail on obj/ui/qt/qt/qt_ui.o with + In file included from ../../ui/qt/qt_ui.cc:8: + In file included from ../../ui/qt/qt_ui.h:21: + ../../printing/printing_context_linux.h:12:10: fatal error: + 'printing/mojom/print.mojom.h' file not found + + (the #include is a // NOGNCHECK one, which is how this came to be) + + Change-Id: I70af37071e232ffbf462a05e026051efae044b69 + Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4566944 + Reviewed-by: Thomas Anderson + Auto-Submit: Tomasz Śniatowski + Commit-Queue: Thomas Anderson + Cr-Commit-Position: refs/heads/main@{#1149138} + +diff --git a/ui/qt/BUILD.gn b/ui/qt/BUILD.gn +index 6a67961edc2f7..89fffcf3089f9 100644 +--- a/ui/qt/BUILD.gn ++++ b/ui/qt/BUILD.gn +@@ -5,6 +5,7 @@ + import("//build/config/chromecast_build.gni") + import("//build/config/linux/pkg_config.gni") + import("//build/config/sysroot.gni") ++import("//printing/buildflags/buildflags.gni") + import("//ui/qt/qt.gni") + + assert(use_qt) +@@ -127,6 +128,9 @@ component("qt") { + "//ui/views", + ] + public_deps = [ "//skia" ] ++ if (enable_printing) { ++ public_deps += [ "//printing" ] ++ } + + sources = [ + "qt_ui.cc", diff --git a/SOURCES/chromium-114-qt_enable_AllowQt_feature_flag.patch b/SOURCES/chromium-114-qt_enable_AllowQt_feature_flag.patch new file mode 100644 index 00000000..53ef6d93 --- /dev/null +++ b/SOURCES/chromium-114-qt_enable_AllowQt_feature_flag.patch @@ -0,0 +1,12 @@ +diff -up chromium-114.0.5735.106/ui/linux/linux_ui_factory.cc.me chromium-114.0.5735.106/ui/linux/linux_ui_factory.cc +--- chromium-114.0.5735.106/ui/linux/linux_ui_factory.cc.me 2023-06-11 18:47:09.742886578 +0200 ++++ chromium-114.0.5735.106/ui/linux/linux_ui_factory.cc 2023-06-11 18:48:42.231584886 +0200 +@@ -127,7 +127,7 @@ LinuxUiAndTheme* GetDefaultLinuxUiAndThe + + } // namespace + +-BASE_FEATURE(kAllowQt, "AllowQt", base::FEATURE_DISABLED_BY_DEFAULT); ++BASE_FEATURE(kAllowQt, "AllowQt", base::FEATURE_ENABLED_BY_DEFAULT); + + LinuxUi* GetDefaultLinuxUi() { + auto* linux_ui = GetDefaultLinuxUiAndTheme(); diff --git a/SOURCES/chromium-114-qt_logical_scale_factor.patch b/SOURCES/chromium-114-qt_logical_scale_factor.patch new file mode 100644 index 00000000..42f6b0ef --- /dev/null +++ b/SOURCES/chromium-114-qt_logical_scale_factor.patch @@ -0,0 +1,59 @@ +commit ff39a278ddccf61716a7dbcb575415801bbf8ded +Author: Tom Anderson +Date: Wed May 31 18:31:09 2023 +0000 + + [QT] Account for logical scale factor + + Previously we were only using the device pixel ratio. But QT UI + scales with both the device pixel ratio and the logical DPI. This CL + sets Chrome's scale factor to be the product of these two. + + R=thestig + CC=jkummerow + + Change-Id: I9bd414046058e741450fabae4913d47a16ca48c3 + Bug: 1439149 + Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4575572 + Reviewed-by: Lei Zhang + Commit-Queue: Thomas Anderson + Cr-Commit-Position: refs/heads/main@{#1151380} + +diff --git a/ui/qt/qt_shim.cc b/ui/qt/qt_shim.cc +index 0aec9c3aed4ad..3780f8c3988b4 100644 +--- a/ui/qt/qt_shim.cc ++++ b/ui/qt/qt_shim.cc +@@ -7,7 +7,7 @@ + + #include "ui/qt/qt_shim.h" + +-#include ++#include + + #include + #include +@@ -219,7 +219,24 @@ QtShim::QtShim(QtInterface::Delegate* delegate, int* argc, char** argv) + QtShim::~QtShim() = default; + + double QtShim::GetScaleFactor() const { +- return app_.devicePixelRatio(); ++ constexpr double kDefaultPixelDpi = 96.0; ++ // Use the largest scale factor across all displays as the global scale ++ // factor. This matches the behavior of `app_.devicePixelRatio()`, except ++ // this also takes into account the logical DPI. ++ // TODO(https://crbug.com/1450301): Unlike GTK, QT supports per-display ++ // scaling. Use this instead of the max scale factor. ++ double scale = 0.0; ++ for (QScreen* screen : app_.screens()) { ++ scale = ++ std::max(scale, screen->devicePixelRatio() * ++ screen->logicalDotsPerInch() / kDefaultPixelDpi); ++ } ++ // Round to the nearest 16th so that UI can losslessly multiply and divide ++ // by the scale factor using floating point arithmetic. GtkUi also rounds ++ // in this way, but to 1/64th. 1/16th is chosen here since that's what ++ // KDE settings uses. ++ scale = std::round(scale * 16) / 16; ++ return scale > 0 ? scale : 1.0; + } + + FontRenderParams QtShim::GetFontRenderParams() const { diff --git a/SOURCES/chromium-114-revert-av1enc-el9.patch b/SOURCES/chromium-114-revert-av1enc-el9.patch new file mode 100644 index 00000000..af66bd03 --- /dev/null +++ b/SOURCES/chromium-114-revert-av1enc-el9.patch @@ -0,0 +1,87 @@ +diff -up chromium-114.0.5735.35/media/gpu/vaapi/vaapi_video_encode_accelerator.cc.me chromium-114.0.5735.35/media/gpu/vaapi/vaapi_video_encode_accelerator.cc +--- chromium-114.0.5735.35/media/gpu/vaapi/vaapi_video_encode_accelerator.cc.me 2023-05-21 10:05:00.357860329 +0200 ++++ chromium-114.0.5735.35/media/gpu/vaapi/vaapi_video_encode_accelerator.cc 2023-05-21 10:18:09.665432735 +0200 +@@ -41,7 +41,6 @@ + #include "media/gpu/gpu_video_encode_accelerator_helpers.h" + #include "media/gpu/h264_dpb.h" + #include "media/gpu/macros.h" +-#include "media/gpu/vaapi/av1_vaapi_video_encoder_delegate.h" + #include "media/gpu/vaapi/h264_vaapi_video_encoder_delegate.h" + #include "media/gpu/vaapi/va_surface.h" + #include "media/gpu/vaapi/vaapi_common.h" +@@ -200,7 +199,7 @@ bool VaapiVideoEncodeAccelerator::Initia + + const VideoCodec codec = VideoCodecProfileToVideoCodec(config.output_profile); + if (codec != VideoCodec::kH264 && codec != VideoCodec::kVP8 && +- codec != VideoCodec::kVP9 && codec != VideoCodec::kAV1) { ++ codec != VideoCodec::kVP9) { + MEDIA_LOG(ERROR, media_log.get()) + << "Unsupported profile: " << GetProfileName(config.output_profile); + return false; +@@ -293,7 +292,6 @@ void VaapiVideoEncodeAccelerator::Initia + break; + case VideoCodec::kVP8: + case VideoCodec::kVP9: +- case VideoCodec::kAV1: + mode = VaapiWrapper::kEncodeConstantQuantizationParameter; + break; + default: +@@ -356,12 +354,6 @@ void VaapiVideoEncodeAccelerator::Initia + vaapi_wrapper_, error_cb); + } + break; +- case VideoCodec::kAV1: +- if (!IsConfiguredForTesting()) { +- encoder_ = std::make_unique( +- vaapi_wrapper_, error_cb); +- } +- break; + default: + NOTREACHED() << "Unsupported codec type " << GetCodecName(output_codec_); + return; +@@ -835,10 +827,6 @@ VaapiVideoEncodeAccelerator::CreateEncod + case VideoCodec::kVP9: + picture = new VaapiVP9Picture(std::move(reconstructed_surface)); + break; +- case VideoCodec::kAV1: +- picture = new VaapiAV1Picture(/*display_va_surface=*/nullptr, +- std::move(reconstructed_surface)); +- break; + default: + return nullptr; + } +diff -up chromium-114.0.5735.35/media/gpu/BUILD.gn.revert-av1enc chromium-114.0.5735.35/media/gpu/BUILD.gn +--- chromium-114.0.5735.35/media/gpu/BUILD.gn.revert-av1enc 2023-05-18 00:37:57.000000000 +0200 ++++ chromium-114.0.5735.35/media/gpu/BUILD.gn 2023-05-20 13:14:10.755183630 +0200 +@@ -373,10 +373,7 @@ source_set("common") { + "vp9_svc_layers.h", + ] + configs += [ "//third_party/libvpx:libvpx_config" ] +- deps += [ +- "//third_party/libaom:libaomrc", +- "//third_party/libvpx:libvpxrc", +- ] ++ deps += [ "//third_party/libvpx:libvpxrc" ] + } + if (use_libgav1_parser) { + sources += [ +diff -up chromium-114.0.5735.35/media/gpu/vaapi/BUILD.gn.revert-av1enc chromium-114.0.5735.35/media/gpu/vaapi/BUILD.gn +--- chromium-114.0.5735.35/media/gpu/vaapi/BUILD.gn.revert-av1enc 2023-05-18 00:37:57.000000000 +0200 ++++ chromium-114.0.5735.35/media/gpu/vaapi/BUILD.gn 2023-05-20 13:14:10.756183626 +0200 +@@ -38,8 +38,6 @@ source_set("vaapi") { + sources = [ + "av1_vaapi_video_decoder_delegate.cc", + "av1_vaapi_video_decoder_delegate.h", +- "av1_vaapi_video_encoder_delegate.cc", +- "av1_vaapi_video_encoder_delegate.h", + "h264_vaapi_video_decoder_delegate.cc", + "h264_vaapi_video_decoder_delegate.h", + "h264_vaapi_video_encoder_delegate.cc", +@@ -107,7 +105,6 @@ source_set("vaapi") { + "//media/gpu/chromeos:common", + "//media/parsers", + "//mojo/public/cpp/bindings", +- "//third_party/libaom:libaomrc", + "//third_party/libvpx:libvpxrc", + "//third_party/libyuv", + "//ui/gfx", diff --git a/SOURCES/chromium-114-typename.patch b/SOURCES/chromium-114-typename.patch new file mode 100644 index 00000000..2cec4ef7 --- /dev/null +++ b/SOURCES/chromium-114-typename.patch @@ -0,0 +1,62 @@ +diff -up chromium-113.0.5672.63/chrome/browser/download/bubble/download_bubble_update_service.cc.me chromium-113.0.5672.63/chrome/browser/download/bubble/download_bubble_update_service.cc +--- chromium-113.0.5672.63/chrome/browser/download/bubble/download_bubble_update_service.cc.me 2023-05-03 17:46:37.194000834 +0200 ++++ chromium-113.0.5672.63/chrome/browser/download/bubble/download_bubble_update_service.cc 2023-05-03 17:48:05.170317575 +0200 +@@ -87,7 +87,7 @@ ItemSortKey GetSortKey(const Item& item) + // Helper to get an iterator to the last element in the cache. The cache + // must not be empty. + template +-SortedItems::iterator GetLastIter(SortedItems& cache) { ++typename SortedItems::iterator GetLastIter(SortedItems& cache) { + CHECK(!cache.empty()); + auto it = cache.end(); + return std::prev(it); +@@ -789,9 +789,9 @@ bool DownloadBubbleUpdateService::Remove + } + + template +-SortedItems::iterator ++typename SortedItems::iterator + DownloadBubbleUpdateService::RemoveItemFromCacheByIter( +- SortedItems::iterator iter, ++ typename SortedItems::iterator iter, + SortedItems& cache, + IterMap& iter_map) { + CHECK(iter != cache.end()); +diff -up chromium-113.0.5672.63/chrome/browser/download/bubble/download_bubble_update_service.h.me chromium-113.0.5672.63/chrome/browser/download/bubble/download_bubble_update_service.h +--- chromium-113.0.5672.63/chrome/browser/download/bubble/download_bubble_update_service.h.me 2023-05-03 17:48:14.079551820 +0200 ++++ chromium-113.0.5672.63/chrome/browser/download/bubble/download_bubble_update_service.h 2023-05-03 17:49:24.702387180 +0200 +@@ -208,8 +208,8 @@ class DownloadBubbleUpdateService + + // Removes item if we already have the iterator to it. Returns next iterator. + template +- SortedItems::iterator RemoveItemFromCacheByIter( +- SortedItems::iterator iter, ++ typename SortedItems::iterator RemoveItemFromCacheByIter( ++ typename SortedItems::iterator iter, + SortedItems& cache, + IterMap& iter_map); + +diff -up chromium-114.0.5735.26/chrome/browser/printing/print_backend_service_manager.h.me chromium-114.0.5735.26/chrome/browser/printing/print_backend_service_manager.h +--- chromium-114.0.5735.26/chrome/browser/printing/print_backend_service_manager.h.me 2023-05-14 00:03:48.455961696 +0200 ++++ chromium-114.0.5735.26/chrome/browser/printing/print_backend_service_manager.h 2023-05-14 00:04:24.776589164 +0200 +@@ -587,7 +587,7 @@ class PrintBackendServiceManager { + template + void RunSavedCallbacks(RemoteSavedCallbacks& saved_callbacks, + const RemoteId& remote_id, +- std::remove_reference::type... result); ++ typename std::remove_reference::type... result); + + // Test support for client ID management. + static void SetClientsForTesting( +diff -up chromium-114.0.5735.26/chrome/browser/printing/print_backend_service_manager.cc.me chromium-114.0.5735.26/chrome/browser/printing/print_backend_service_manager.cc +--- chromium-114.0.5735.26/chrome/browser/printing/print_backend_service_manager.cc.me 2023-05-14 12:40:29.555926646 +0200 ++++ chromium-114.0.5735.26/chrome/browser/printing/print_backend_service_manager.cc 2023-05-14 12:41:12.150471791 +0200 +@@ -1477,7 +1477,7 @@ template + void PrintBackendServiceManager::RunSavedCallbacks( + RemoteSavedCallbacks& saved_callbacks, + const RemoteId& remote_id, +- std::remove_reference::type... result) { ++ typename std::remove_reference::type... result) { + auto found_callbacks_map = saved_callbacks.find(remote_id); + if (found_callbacks_map == saved_callbacks.end()) + return; // No callbacks to run. diff --git a/SOURCES/chromium-114-wireless-el7.patch b/SOURCES/chromium-114-wireless-el7.patch new file mode 100644 index 00000000..9776e905 --- /dev/null +++ b/SOURCES/chromium-114-wireless-el7.patch @@ -0,0 +1,22 @@ +diff -up chromium-114.0.5735.26/sandbox/policy/linux/bpf_network_policy_linux.cc.me chromium-114.0.5735.26/sandbox/policy/linux/bpf_network_policy_linux.cc +--- chromium-114.0.5735.26/sandbox/policy/linux/bpf_network_policy_linux.cc.me 2023-05-13 12:09:44.423727385 +0200 ++++ chromium-114.0.5735.26/sandbox/policy/linux/bpf_network_policy_linux.cc 2023-05-13 17:52:19.934347246 +0200 +@@ -11,7 +11,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -48,6 +47,10 @@ using sandbox::syscall_broker::BrokerPro + #define F2FS_IOC_GET_FEATURES _IOR(0xf5, 12, uint32_t) + #endif + ++#if !defined(SIOCGIWNAME) ++#define SIOCGIWNAME 0x8B01 ++#endif ++ + namespace sandbox::policy { + + namespace { diff --git a/SOURCES/chromium-114-workaround_clang_bug-structured_binding.patch b/SOURCES/chromium-114-workaround_clang_bug-structured_binding.patch new file mode 100644 index 00000000..af8e7370 --- /dev/null +++ b/SOURCES/chromium-114-workaround_clang_bug-structured_binding.patch @@ -0,0 +1,81 @@ +diff -up chromium-114.0.5735.26/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.workaround_clang_bug-structured_binding chromium-114.0.5735.26/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc +--- chromium-114.0.5735.26/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.workaround_clang_bug-structured_binding 2023-05-11 03:36:27.000000000 +0200 ++++ chromium-114.0.5735.26/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc 2023-05-14 11:49:42.558129164 +0200 +@@ -238,7 +238,10 @@ const NGLayoutResult* NGGridLayoutAlgori + : BuildGridSizingTree(&oof_children); + + LayoutUnit intrinsic_block_size; +- auto& [grid_items, layout_data, tree_size] = grid_sizing_tree.TreeRootData(); ++ auto& [g_i, l_d, t_s] = grid_sizing_tree.TreeRootData(); ++ auto& grid_items = g_i; ++ auto& layout_data = l_d; ++ auto& tree_size = t_s; + + if (IsBreakInside(BreakToken())) { + // TODO(layout-dev): When we support variable inline-size fragments we'll +@@ -520,8 +523,10 @@ wtf_size_t NGGridLayoutAlgorithm::BuildG + row_auto_repetitions); + + bool has_nested_subgrid = false; +- auto& [grid_items, layout_data, subtree_size] = +- sizing_tree->CreateSizingData(opt_subgrid_data); ++ auto& [g_i, l_d, s_s] = sizing_tree->CreateSizingData(opt_subgrid_data); ++ auto& grid_items = g_i; ++ auto& layout_data = l_d; ++ auto& subtree_size = s_s; + + if (!must_ignore_children) { + // Construct grid items that are not subgridded. +@@ -650,8 +655,10 @@ NGGridSizingTree NGGridLayoutAlgorithm:: + NGGridSizingTree sizing_tree; + + if (const auto* layout_subtree = ConstraintSpace().GridLayoutSubtree()) { +- auto& [grid_items, layout_data, subtree_size] = +- sizing_tree.CreateSizingData(); ++ auto& [g_i, l_d, s_s] = sizing_tree.CreateSizingData(); ++ auto& grid_items = g_i; ++ auto& layout_data = l_d; ++ auto& subtree_size = s_s; + + const auto& node = Node(); + grid_items = +@@ -1640,8 +1647,10 @@ void NGGridLayoutAlgorithm::InitializeTr + const absl::optional& opt_track_direction) const { + DCHECK(sizing_subtree); + +- auto& [grid_items, layout_data, subtree_size] = +- sizing_subtree.SubtreeRootData(); ++ auto& [g_i, l_d, s_s] = sizing_subtree.SubtreeRootData(); ++ auto& grid_items = g_i; ++ auto& layout_data = l_d; ++ auto& subtree_size = s_s; + + auto InitAndCacheTrackSizes = [&](GridTrackSizingDirection track_direction) { + InitializeTrackCollection(opt_subgrid_data, track_direction, &layout_data); +@@ -1825,8 +1834,10 @@ void NGGridLayoutAlgorithm::CompleteTrac + bool* opt_needs_additional_pass) const { + DCHECK(sizing_subtree); + +- auto& [grid_items, layout_data, subtree_size] = +- sizing_subtree.SubtreeRootData(); ++ auto& [g_i, l_d, s_s] = sizing_subtree.SubtreeRootData(); ++ auto& grid_items = g_i; ++ auto& layout_data = l_d; ++ auto& subtree_size = s_s; + + const bool is_for_columns = track_direction == kForColumns; + const bool has_non_definite_track = +diff -up chromium-114.0.5735.26/media/base/cdm_promise_adapter.cc.me chromium-114.0.5735.26/media/base/cdm_promise_adapter.cc +--- chromium-114.0.5735.26/media/base/cdm_promise_adapter.cc.me 2023-05-14 17:35:00.446844465 +0200 ++++ chromium-114.0.5735.26/media/base/cdm_promise_adapter.cc 2023-05-14 17:39:22.991733926 +0200 +@@ -94,7 +94,9 @@ void CdmPromiseAdapter::RejectPromise(ui + void CdmPromiseAdapter::Clear(ClearReason reason) { + // Reject all outstanding promises. + DCHECK(thread_checker_.CalledOnValidThread()); +- for (auto& [promise_id, promise] : promises_) { ++ for (auto& [p_i, p_e] : promises_) { ++ auto& promise_id = p_i; ++ auto& promise = p_e; + TRACE_EVENT_NESTABLE_ASYNC_END1( + "media", "CdmPromise", TRACE_ID_WITH_SCOPE("CdmPromise", promise_id), + "status", "cleared"); diff --git a/SOURCES/chromium-70.0.3538.67-sandbox-pie.patch b/SOURCES/chromium-70.0.3538.67-sandbox-pie.patch new file mode 100644 index 00000000..0f104e92 --- /dev/null +++ b/SOURCES/chromium-70.0.3538.67-sandbox-pie.patch @@ -0,0 +1,20 @@ +diff -up chromium-70.0.3538.67/sandbox/linux/BUILD.gn.sandboxpie chromium-70.0.3538.67/sandbox/linux/BUILD.gn +--- chromium-70.0.3538.67/sandbox/linux/BUILD.gn.sandboxpie 2018-10-18 12:14:05.766939769 -0400 ++++ chromium-70.0.3538.67/sandbox/linux/BUILD.gn 2018-10-18 12:16:37.820027182 -0400 +@@ -315,10 +315,16 @@ if (is_linux) { + # For ULLONG_MAX + "-std=gnu99", + ++ "-fPIE", ++ + # These files have a suspicious comparison. + # TODO fix this and re-enable this warning. + "-Wno-sign-compare", + ] ++ ++ ldflags = [ ++ "-pie", ++ ] + } + } + diff --git a/SOURCES/chromium-77.0.3865.75-no-zlib-mangle.patch b/SOURCES/chromium-77.0.3865.75-no-zlib-mangle.patch new file mode 100644 index 00000000..c32d2264 --- /dev/null +++ b/SOURCES/chromium-77.0.3865.75-no-zlib-mangle.patch @@ -0,0 +1,22 @@ +diff -up chromium-77.0.3865.75/third_party/zlib/zconf.h.nozmangle chromium-77.0.3865.75/third_party/zlib/zconf.h +--- chromium-77.0.3865.75/third_party/zlib/zconf.h.nozmangle 2019-09-12 09:36:37.924086850 +0200 ++++ chromium-77.0.3865.75/third_party/zlib/zconf.h 2019-09-12 09:53:01.623958551 +0200 +@@ -9,18 +9,6 @@ + #define ZCONF_H + + /* +- * This library is also built as a part of AOSP, which does not need to include +- * chromeconf.h. This config does not want chromeconf.h, so it can set this +- * macro to opt out. While this works today, there's no guarantee that building +- * zlib outside of Chromium keeps working in the future. +- */ +-#if !defined(CHROMIUM_ZLIB_NO_CHROMECONF) +-/* This include does prefixing as below, but with an updated set of names. Also +- * sets up export macros in component builds. */ +-#include "chromeconf.h" +-#endif +- +-/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set diff --git a/SOURCES/chromium-81.0.4044.92-unbundle-zlib.patch b/SOURCES/chromium-81.0.4044.92-unbundle-zlib.patch new file mode 100644 index 00000000..ff4e3b1e --- /dev/null +++ b/SOURCES/chromium-81.0.4044.92-unbundle-zlib.patch @@ -0,0 +1,12 @@ +diff -up chromium-81.0.4044.92/third_party/perfetto/gn/BUILD.gn.unbundle-zlib chromium-81.0.4044.92/third_party/perfetto/gn/BUILD.gn +--- chromium-81.0.4044.92/third_party/perfetto/gn/BUILD.gn.unbundle-zlib 2020-04-13 12:25:09.001172601 -0400 ++++ chromium-81.0.4044.92/third_party/perfetto/gn/BUILD.gn 2020-04-13 12:25:23.688921586 -0400 +@@ -294,7 +294,7 @@ if (enable_perfetto_zlib) { + public_configs = [ "//buildtools:zlib_config" ] + public_deps = [ "//buildtools:zlib" ] + } else { +- public_configs = [ "//third_party/zlib:zlib_config" ] ++ public_configs = [ "//third_party/zlib:system_zlib" ] + public_deps = [ "//third_party/zlib" ] + } + } diff --git a/SOURCES/chromium-85.0.4183.83-el7-old-libdrm.patch b/SOURCES/chromium-85.0.4183.83-el7-old-libdrm.patch new file mode 100644 index 00000000..d7d7f6e6 --- /dev/null +++ b/SOURCES/chromium-85.0.4183.83-el7-old-libdrm.patch @@ -0,0 +1,15 @@ +diff -up chromium-85.0.4183.83/ui/gfx/linux/drm_util_linux.cc.el7-old-libdrm chromium-85.0.4183.83/ui/gfx/linux/drm_util_linux.cc +--- chromium-85.0.4183.83/ui/gfx/linux/drm_util_linux.cc.el7-old-libdrm 2020-08-31 09:38:46.043993882 -0400 ++++ chromium-85.0.4183.83/ui/gfx/linux/drm_util_linux.cc 2020-08-31 09:39:21.599906318 -0400 +@@ -6,6 +6,11 @@ + + #include + ++// the libdrm in EL-7 is too old to have this define ++#ifndef DRM_FORMAT_P010 ++#define DRM_FORMAT_P010 DRM_FORMAT_INVALID ++#endif ++ + #include "base/notreached.h" + + namespace ui { diff --git a/SOURCES/chromium-91.0.4472.77-initial_prefs-etc-path.patch b/SOURCES/chromium-91.0.4472.77-initial_prefs-etc-path.patch new file mode 100644 index 00000000..96825e29 --- /dev/null +++ b/SOURCES/chromium-91.0.4472.77-initial_prefs-etc-path.patch @@ -0,0 +1,15 @@ +diff -up chromium-91.0.4472.77/chrome/browser/first_run/first_run_internal_linux.cc.etc chromium-91.0.4472.77/chrome/browser/first_run/first_run_internal_linux.cc +--- chromium-91.0.4472.77/chrome/browser/first_run/first_run_internal_linux.cc.etc 2021-06-01 16:37:39.182531036 -0400 ++++ chromium-91.0.4472.77/chrome/browser/first_run/first_run_internal_linux.cc 2021-06-01 16:39:31.590102809 -0400 +@@ -20,9 +20,9 @@ bool IsOrganicFirstRun() { + + base::FilePath InitialPrefsPath() { + // The standard location of the initial prefs is next to the chrome binary. ++ // ...but we patch it to use /etc/chromium + base::FilePath initial_prefs; +- if (!base::PathService::Get(base::DIR_EXE, &initial_prefs)) +- return base::FilePath(); ++ initial_prefs = base::FilePath("/etc/chromium"); + + base::FilePath new_path = initial_prefs.AppendASCII(installer::kInitialPrefs); + if (base::PathIsReadable(new_path)) diff --git a/SOURCES/chromium-91.0.4472.77-java-only-allowed-in-android-builds.patch b/SOURCES/chromium-91.0.4472.77-java-only-allowed-in-android-builds.patch new file mode 100644 index 00000000..a4748d9a --- /dev/null +++ b/SOURCES/chromium-91.0.4472.77-java-only-allowed-in-android-builds.patch @@ -0,0 +1,13 @@ +diff -up chromium-91.0.4472.77/third_party/closure_compiler/compiler.py.java-allowed chromium-91.0.4472.77/third_party/closure_compiler/compiler.py +--- chromium-91.0.4472.77/third_party/closure_compiler/compiler.py.java-allowed 2021-06-02 17:14:48.445064647 +0000 ++++ chromium-91.0.4472.77/third_party/closure_compiler/compiler.py 2021-06-02 17:15:12.994836949 +0000 +@@ -13,8 +13,7 @@ import subprocess + + + _CURRENT_DIR = os.path.join(os.path.dirname(__file__)) +-_JAVA_PATH = os.path.join(_CURRENT_DIR, "..", "jdk", "current", "bin", "java") +-assert os.path.isfile(_JAVA_PATH), "java only allowed in android builds" ++_JAVA_PATH = "java" + + class Compiler(object): + """Runs the Closure compiler on given source files to typecheck them diff --git a/SOURCES/chromium-93.0.4577.63-py3-bootstrap.patch b/SOURCES/chromium-93.0.4577.63-py3-bootstrap.patch new file mode 100644 index 00000000..899495f4 --- /dev/null +++ b/SOURCES/chromium-93.0.4577.63-py3-bootstrap.patch @@ -0,0 +1,12 @@ +diff -up chromium-93.0.4577.63/tools/gn/bootstrap/bootstrap.py.py3 chromium-93.0.4577.63/tools/gn/bootstrap/bootstrap.py +--- chromium-93.0.4577.63/tools/gn/bootstrap/bootstrap.py.py3 2021-08-31 21:40:34.000000000 -0400 ++++ chromium-93.0.4577.63/tools/gn/bootstrap/bootstrap.py 2021-09-02 08:26:04.415846917 -0400 +@@ -130,7 +130,7 @@ def main(argv): + if not options.debug: + gn_gen_args += ' is_debug=false' + subprocess.check_call([ +- gn_path, 'gen', out_dir, ++ gn_path, 'gen', out_dir, ' --script-executable=/usr/bin/python3', + '--args=%s' % gn_gen_args, "--root=" + SRC_ROOT + ]) + diff --git a/SOURCES/chromium-96.0.4664.45-missing-cstdint-header.patch b/SOURCES/chromium-96.0.4664.45-missing-cstdint-header.patch new file mode 100644 index 00000000..fe4e5dd5 --- /dev/null +++ b/SOURCES/chromium-96.0.4664.45-missing-cstdint-header.patch @@ -0,0 +1,35 @@ +diff -up chromium-96.0.4664.45/third_party/webrtc/common_video/h264/pps_parser.h.missing-cstdint chromium-96.0.4664.45/third_party/webrtc/common_video/h264/pps_parser.h +diff -up chromium-96.0.4664.45/third_party/webrtc/common_video/h264/sps_parser.h.missing-cstdint chromium-96.0.4664.45/third_party/webrtc/common_video/h264/sps_parser.h +--- chromium-96.0.4664.45/third_party/webrtc/common_video/h264/sps_parser.h.missing-cstdint 2021-11-19 17:05:31.379750350 -0500 ++++ chromium-96.0.4664.45/third_party/webrtc/common_video/h264/sps_parser.h 2021-11-19 17:07:35.191520127 -0500 +@@ -11,6 +11,7 @@ + #ifndef COMMON_VIDEO_H264_SPS_PARSER_H_ + #define COMMON_VIDEO_H264_SPS_PARSER_H_ + ++#include + #include "absl/types/optional.h" + #include "rtc_base/bitstream_reader.h" + +diff -up chromium-96.0.4664.45/third_party/webrtc/modules/include/module_common_types_public.h.missing-cstdint chromium-96.0.4664.45/third_party/webrtc/modules/include/module_common_types_public.h +--- chromium-96.0.4664.45/third_party/webrtc/modules/include/module_common_types_public.h.missing-cstdint 2021-11-12 05:28:10.000000000 -0500 ++++ chromium-96.0.4664.45/third_party/webrtc/modules/include/module_common_types_public.h 2021-11-19 17:05:31.379750350 -0500 +@@ -11,6 +11,7 @@ + #ifndef MODULES_INCLUDE_MODULE_COMMON_TYPES_PUBLIC_H_ + #define MODULES_INCLUDE_MODULE_COMMON_TYPES_PUBLIC_H_ + ++#include + #include + + #include "absl/types/optional.h" +diff -up chromium-96.0.4664.45/ui/gfx/linux/drm_util_linux.h.missing-cstdint chromium-96.0.4664.45/ui/gfx/linux/drm_util_linux.h +--- chromium-96.0.4664.45/ui/gfx/linux/drm_util_linux.h.missing-cstdint 2021-11-12 05:25:24.000000000 -0500 ++++ chromium-96.0.4664.45/ui/gfx/linux/drm_util_linux.h 2021-11-19 17:05:31.379750350 -0500 +@@ -9,6 +9,8 @@ + + #include "ui/gfx/buffer_types.h" + ++#include ++ + namespace ui { + + int GetFourCCFormatFromBufferFormat(gfx::BufferFormat format); diff --git a/SOURCES/chromium-96.0.4664.45-missing-cstring.patch b/SOURCES/chromium-96.0.4664.45-missing-cstring.patch new file mode 100644 index 00000000..5a5fa2f9 --- /dev/null +++ b/SOURCES/chromium-96.0.4664.45-missing-cstring.patch @@ -0,0 +1,24 @@ +diff -up chromium-96.0.4664.45/third_party/webrtc/audio/utility/channel_mixer.cc.missing-cstring chromium-96.0.4664.45/third_party/webrtc/audio/utility/channel_mixer.cc +--- chromium-96.0.4664.45/third_party/webrtc/audio/utility/channel_mixer.cc.missing-cstring 2021-11-12 05:28:09.000000000 -0500 ++++ chromium-96.0.4664.45/third_party/webrtc/audio/utility/channel_mixer.cc 2021-11-19 17:10:02.927438695 -0500 +@@ -8,6 +8,8 @@ + * be found in the AUTHORS file in the root of the source tree. + */ + ++#include ++ + #include "audio/utility/channel_mixer.h" + + #include "audio/utility/channel_mixing_matrix.h" +diff -up chromium-96.0.4664.45/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc.missing-cstring chromium-96.0.4664.45/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc +diff -up chromium-96.0.4664.45/third_party/webrtc/modules/video_coding/utility/ivf_file_reader.cc.missing-cstring chromium-96.0.4664.45/third_party/webrtc/modules/video_coding/utility/ivf_file_reader.cc +--- chromium-96.0.4664.45/third_party/webrtc/modules/video_coding/utility/ivf_file_reader.cc.missing-cstring 2021-11-12 05:28:10.000000000 -0500 ++++ chromium-96.0.4664.45/third_party/webrtc/modules/video_coding/utility/ivf_file_reader.cc 2021-11-19 17:10:02.928438701 -0500 +@@ -10,6 +10,7 @@ + + #include "modules/video_coding/utility/ivf_file_reader.h" + ++#include + #include + #include + diff --git a/SOURCES/chromium-98.0.4758.102-remoting-no-tests.patch b/SOURCES/chromium-98.0.4758.102-remoting-no-tests.patch new file mode 100644 index 00000000..a8c4dbd8 --- /dev/null +++ b/SOURCES/chromium-98.0.4758.102-remoting-no-tests.patch @@ -0,0 +1,20 @@ +diff -up chromium-98.0.4758.102/remoting/BUILD.gn.remoting-no-tests chromium-98.0.4758.102/remoting/BUILD.gn +--- chromium-98.0.4758.102/remoting/BUILD.gn.remoting-no-tests 2022-02-28 19:15:23.835872267 +0000 ++++ chromium-98.0.4758.102/remoting/BUILD.gn 2022-03-01 17:55:50.625536957 +0000 +@@ -8,7 +8,7 @@ import("//remoting/build/config/remoting + group("remoting_all") { + testonly = true + +- deps = [ ":remoting_unittests" ] ++ deps = [ ] + + if (is_win) { + deps += [ +@@ -37,7 +37,6 @@ group("remoting_all") { + + if (enable_remoting_host) { + deps += [ +- ":remoting_perftests", + "//remoting/host", + ] + diff --git a/SOURCES/chromium-98.0.4758.80-epel7-erase-fix.patch b/SOURCES/chromium-98.0.4758.80-epel7-erase-fix.patch new file mode 100644 index 00000000..230e9d66 --- /dev/null +++ b/SOURCES/chromium-98.0.4758.80-epel7-erase-fix.patch @@ -0,0 +1,20 @@ +diff -up chromium-98.0.4758.80/components/ui_devtools/views/ui_element_with_metadata.cc.erase-fix chromium-98.0.4758.80/components/ui_devtools/views/ui_element_with_metadata.cc +--- chromium-98.0.4758.80/components/ui_devtools/views/ui_element_with_metadata.cc.erase-fix 2022-02-03 19:16:57.784979831 +0000 ++++ chromium-98.0.4758.80/components/ui_devtools/views/ui_element_with_metadata.cc 2022-02-03 19:17:12.983633352 +0000 +@@ -19,14 +19,14 @@ namespace { + // Remove any custom editor "prefixes" from the property name. The prefixes must + // not be valid identifier characters. + void StripPrefix(std::string& property_name) { +- auto cur = property_name.cbegin(); ++ auto cur = property_name.begin(); + for (; cur < property_name.cend(); ++cur) { + if ((*cur >= 'A' && *cur <= 'Z') || (*cur >= 'a' && *cur <= 'z') || + *cur == '_') { + break; + } + } +- property_name.erase(property_name.cbegin(), cur); ++ property_name.erase(property_name.begin(), cur); + } + + } // namespace diff --git a/SOURCES/chromium-99.0.4844.51-el7-extra-operator==.patch b/SOURCES/chromium-99.0.4844.51-el7-extra-operator==.patch new file mode 100644 index 00000000..34c89d00 --- /dev/null +++ b/SOURCES/chromium-99.0.4844.51-el7-extra-operator==.patch @@ -0,0 +1,26 @@ +diff -up chromium-99.0.4844.51/base/allocator/partition_allocator/starscan/metadata_allocator.h.el7-extra-operator-equalequal chromium-99.0.4844.51/base/allocator/partition_allocator/starscan/metadata_allocator.h +--- chromium-99.0.4844.51/base/allocator/partition_allocator/starscan/metadata_allocator.h.el7-extra-operator-equalequal 2022-03-05 18:37:25.979241754 -0500 ++++ chromium-99.0.4844.51/base/allocator/partition_allocator/starscan/metadata_allocator.h 2022-03-05 18:37:25.979241754 -0500 +@@ -39,6 +39,11 @@ class MetadataAllocator { + } + + template ++ bool operator==(const MetadataAllocator&) const { ++ return true; ++ } ++ ++ template + bool operator!=(const MetadataAllocator& o) { + return !operator==(o); + } +diff -up chromium-99.0.4844.51/third_party/pdfium/core/fxcrt/fx_memory_wrappers.h.el7-extra-operator-equalequal chromium-99.0.4844.51/third_party/pdfium/core/fxcrt/fx_memory_wrappers.h +--- chromium-99.0.4844.51/third_party/pdfium/core/fxcrt/fx_memory_wrappers.h.el7-extra-operator-equalequal 2022-03-06 19:14:20.892513442 -0500 ++++ chromium-99.0.4844.51/third_party/pdfium/core/fxcrt/fx_memory_wrappers.h 2022-03-06 19:15:40.412060574 -0500 +@@ -70,6 +70,7 @@ struct FxPartitionAllocAllocator { + } + + // There's no state, so they are all the same, ++ bool operator==(const FxPartitionAllocAllocator&) const { return true; } + bool operator==(const FxPartitionAllocAllocator& that) { return true; } + bool operator!=(const FxPartitionAllocAllocator& that) { return false; } + }; diff --git a/SOURCES/chromium-99.0.4844.51-epel7-old-cups.patch b/SOURCES/chromium-99.0.4844.51-epel7-old-cups.patch new file mode 100644 index 00000000..ec0dedc9 --- /dev/null +++ b/SOURCES/chromium-99.0.4844.51-epel7-old-cups.patch @@ -0,0 +1,142 @@ +diff -up chromium-99.0.4844.51/printing/backend/cups_helper.cc.el7cups chromium-99.0.4844.51/printing/backend/cups_helper.cc +--- chromium-99.0.4844.51/printing/backend/cups_helper.cc.el7cups 2022-02-28 19:05:55.000000000 -0500 ++++ chromium-99.0.4844.51/printing/backend/cups_helper.cc 2022-03-05 15:17:45.516887985 -0500 +@@ -34,18 +34,6 @@ namespace printing { + // This section contains helper code for PPD parsing for semantic capabilities. + namespace { + +-// Function availability can be tested by checking whether its address is not +-// nullptr. Weak symbols remove the need for platform specific build flags and +-// allow for appropriate CUPS usage on platforms with non-uniform version +-// support, namely Linux. +-#define WEAK_CUPS_FN(x) extern "C" __attribute__((weak)) decltype(x) x +- +-WEAK_CUPS_FN(httpConnect2); +- +-// Timeout for establishing a CUPS connection. It is expected that cupsd is +-// able to start and respond on all systems within this duration. +-constexpr base::TimeDelta kCupsTimeout = base::Seconds(5); +- + // CUPS default max copies value (parsed from kCupsMaxCopies PPD attribute). + constexpr int32_t kDefaultMaxCopies = 9999; + constexpr char kCupsMaxCopies[] = "cupsMaxCopies"; +@@ -527,8 +515,7 @@ const int kDefaultIPPServerPort = 631; + // Helper wrapper around http_t structure, with connection and cleanup + // functionality. + HttpConnectionCUPS::HttpConnectionCUPS(const GURL& print_server_url, +- http_encryption_t encryption, +- bool blocking) ++ http_encryption_t encryption) + : http_(nullptr) { + // If we have an empty url, use default print server. + if (print_server_url.is_empty()) +@@ -538,17 +525,10 @@ HttpConnectionCUPS::HttpConnectionCUPS(c + if (port == url::PORT_UNSPECIFIED) + port = kDefaultIPPServerPort; + +- if (httpConnect2) { +- http_ = httpConnect2(print_server_url.host().c_str(), port, +- /*addrlist=*/nullptr, AF_UNSPEC, encryption, +- blocking ? 1 : 0, kCupsTimeout.InMilliseconds(), +- /*cancel=*/nullptr); +- } else { +- // Continue to use deprecated CUPS calls because because older Linux +- // distribution such as RHEL/CentOS 7 are shipped with CUPS 1.6. +- http_ = +- httpConnectEncrypt(print_server_url.host().c_str(), port, encryption); +- } ++ // Continue to use deprecated CUPS calls because because older Linux ++ // distribution such as RHEL/CentOS 7 are shipped with CUPS 1.6. ++ http_ = ++ httpConnectEncrypt(print_server_url.host().c_str(), port, encryption); + + if (!http_) { + LOG(ERROR) << "CP_CUPS: Failed connecting to print server: " +@@ -556,8 +536,6 @@ HttpConnectionCUPS::HttpConnectionCUPS(c + return; + } + +- if (!httpConnect2) +- httpBlocking(http_, blocking ? 1 : 0); + } + + HttpConnectionCUPS::~HttpConnectionCUPS() { +@@ -565,6 +543,10 @@ HttpConnectionCUPS::~HttpConnectionCUPS( + httpClose(http_); + } + ++void HttpConnectionCUPS::SetBlocking(bool blocking) { ++ httpBlocking(http_, blocking ? 1 : 0); ++} ++ + http_t* HttpConnectionCUPS::http() { + return http_; + } +diff -up chromium-99.0.4844.51/printing/backend/cups_helper.h.el7cups chromium-99.0.4844.51/printing/backend/cups_helper.h +--- chromium-99.0.4844.51/printing/backend/cups_helper.h.el7cups 2022-02-28 19:05:55.000000000 -0500 ++++ chromium-99.0.4844.51/printing/backend/cups_helper.h 2022-03-05 15:17:45.517887991 -0500 +@@ -34,10 +34,11 @@ constexpr cups_ptype_t kDestinationsFilt + class COMPONENT_EXPORT(PRINT_BACKEND) HttpConnectionCUPS { + public: + HttpConnectionCUPS(const GURL& print_server_url, +- http_encryption_t encryption, +- bool blocking); ++ http_encryption_t encryption); + ~HttpConnectionCUPS(); + ++ void SetBlocking(bool blocking); ++ + http_t* http(); + + private: +diff -up chromium-99.0.4844.51/printing/backend/print_backend_cups.cc.el7cups chromium-99.0.4844.51/printing/backend/print_backend_cups.cc +--- chromium-99.0.4844.51/printing/backend/print_backend_cups.cc.el7cups 2022-02-28 19:05:55.000000000 -0500 ++++ chromium-99.0.4844.51/printing/backend/print_backend_cups.cc 2022-03-05 15:17:45.517887991 -0500 +@@ -146,7 +146,7 @@ mojom::ResultCode PrintBackendCUPS::Enum + // not showing as available. Using cupsEnumDests() allows us to do our own + // filtering should any duplicates occur. + CupsDestsData dests_data = {0, nullptr}; +- ipp_status_t last_error = IPP_STATUS_OK; ++ ipp_status_t last_error = IPP_OK; + if (print_server_url_.is_empty()) { + VLOG(1) << "CUPS: using cupsEnumDests to enumerate printers"; + if (!cupsEnumDests(CUPS_DEST_FLAGS_NONE, kCupsTimeoutMs, +@@ -173,7 +173,7 @@ mojom::ResultCode PrintBackendCUPS::Enum + // no printer drivers installed. Rely upon CUPS error code to distinguish + // between these. + DCHECK(!dests_data.dests); +- if (last_error != IPP_STATUS_ERROR_NOT_FOUND) { ++ if (last_error != IPP_NOT_FOUND) { + VLOG(1) << "CUPS: Error getting printers from CUPS server" + << ", server: " << print_server_url_ + << ", error: " << static_cast(last_error) << " - " +@@ -336,7 +336,8 @@ int PrintBackendCUPS::GetDests(cups_dest + if (print_server_url_.is_empty()) + return cupsGetDests2(CUPS_HTTP_DEFAULT, dests); + +- HttpConnectionCUPS http(print_server_url_, cups_encryption_, blocking_); ++ HttpConnectionCUPS http(print_server_url_, cups_encryption_); ++ http.SetBlocking(blocking_); + + // This call must be made in the same scope as `http` because its destructor + // closes the connection. +@@ -362,7 +363,8 @@ base::FilePath PrintBackendCUPS::GetPPD( + // connection will timeout after 10 seconds of no data period. And it will + // return the same way as if data was completely and successfully + // downloaded. +- HttpConnectionCUPS http(print_server_url_, cups_encryption_, blocking_); ++ HttpConnectionCUPS http(print_server_url_, cups_encryption_); ++ http.SetBlocking(blocking_); + ppd_file_path = cupsGetPPD2(http.http(), name); + // Check if the get full PPD, since non-blocking call may simply return + // normally after timeout expired. +@@ -398,7 +400,8 @@ PrintBackendCUPS::ScopedDestination Prin + // Use default (local) print server. + dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, printer_name.c_str(), nullptr); + } else { +- HttpConnectionCUPS http(print_server_url_, cups_encryption_, blocking_); ++ HttpConnectionCUPS http(print_server_url_, cups_encryption_); ++ http.SetBlocking(blocking_); + dest = cupsGetNamedDest(http.http(), printer_name.c_str(), nullptr); + } + return ScopedDestination(dest); diff --git a/SOURCES/chromium-browser.desktop b/SOURCES/chromium-browser.desktop new file mode 100644 index 00000000..23d3257b --- /dev/null +++ b/SOURCES/chromium-browser.desktop @@ -0,0 +1,356 @@ +[Desktop Entry] +Version=1.0 +Name=Chromium Web Browser +Name[ast]=Restolador web Chromium +Name[ca]=Navegador web Chromium +Name[de]=Chromium-Webbrowser +Name[es]=Navegador web Chromium +Name[fr]=Navigateur Web Chromium +Name[gl]=Navegador web Chromium +Name[he]=דפדפן האינטרנט Chromium +Name[hr]=Chromium web preglednik +Name[hu]=Chromium webböngésző +Name[id]=Peramban Web Chromium +Name[it]=Browser web Chromium +Name[ja]=Chromium ウェブ・ブラウザ +Name[ko]=Chromium 웹 브라우저 +Name[pt_BR]=Chromium Navegador da Internet +Name[ru]=Веб-браузер Chromium +Name[sl]=Chromium spletni brskalnik +Name[sv]=Webbläsaren Chromium +Name[ug]=Chromium توركۆرگۈ +Name[zh_CN]=Chromium 网页浏览器 +Name[zh_HK]=Chromium 網頁瀏覽器 +Name[zh_TW]=Chromium 網頁瀏覽器 +Comment=Access the Internet +Comment[ar]=الدخول إلى الإنترنت +Comment[ast]=Accesu a Internet +Comment[bg]=Достъп до интернет +Comment[bn]=ইন্টারনেটটি অ্যাক্সেস করুন +Comment[ca]=Accediu a Internet +Comment[cs]=Přístup k internetu +Comment[da]=Få adgang til internettet +Comment[de]=Internetzugriff +Comment[el]=Πρόσβαση στο Διαδίκτυο +Comment[en_GB]=Access the Internet +Comment[es]=Acceda a Internet +Comment[et]=Pääs Internetti +Comment[fi]=Käytä internetiä +Comment[fil]=I-access ang Internet +Comment[fr]=Explorer le Web +Comment[gl]=Acceda a Internet +Comment[gu]=ઇંટરનેટ ઍક્સેસ કરો +Comment[he]=גישה לאינטרנט +Comment[hi]=इंटरनेट तक पहुंच स्थापित करें +Comment[hr]=Pristupite Internetu +Comment[hu]=Az internet elérése +Comment[id]=Akses Internet +Comment[it]=Accesso a Internet +Comment[ja]=インターネットにアクセス +Comment[kn]=ಇಂಟರ್ನೆಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿs +Comment[ko]=인터넷에 연결합니다 +Comment[lt]=Interneto prieiga +Comment[lv]=Piekļūt internetam +Comment[ml]=ഇന്റര്‍‌നെറ്റ് ആക്‌സസ് ചെയ്യുക +Comment[mr]=इंटरनेटमध्ये प्रवेश करा +Comment[nb]=Gå til Internett +Comment[nl]=Verbinding maken met internet +Comment[or]=ଇଣ୍ଟର୍ନେଟ୍ ପ୍ରବେଶ କରନ୍ତୁ +Comment[pl]=Skorzystaj z internetu +Comment[pt]=Aceder à Internet +Comment[pt_BR]=Acessar a internet +Comment[ro]=Accesaţi Internetul +Comment[ru]=Доступ в Интернет +Comment[sk]=Prístup do siete Internet +Comment[sl]=Dostop do interneta +Comment[sr]=Приступите Интернету +Comment[sv]=Surfa på Internet +Comment[ta]=இணையத்தை அணுகுதல் +Comment[te]=ఇంటర్నెట్‌ను ఆక్సెస్ చెయ్యండి +Comment[th]=เข้าถึงอินเทอร์เน็ต +Comment[tr]=İnternet'e erişin +Comment[ug]=ئىنتېرنېتنى زىيارەت قىلىش +Comment[uk]=Доступ до Інтернету +Comment[vi]=Truy cập Internet +Comment[zh_CN]=访问互联网 +Comment[zh_HK]=連線到網際網路 +Comment[zh_TW]=連線到網際網路 +GenericName=Web Browser +GenericName[ar]=متصفح الشبكة +GenericName[ast]=Restolador web +GenericName[bg]=Уеб браузър +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[ca]=Navegador web +GenericName[cs]=WWW prohlížeč +GenericName[da]=Browser +GenericName[de]=Web-Browser +GenericName[el]=Περιηγητής ιστού +GenericName[en_GB]=Web Browser +GenericName[es]=Navegador web +GenericName[et]=Veebibrauser +GenericName[fi]=WWW-selain +GenericName[fil]=Web Browser +GenericName[fr]=Navigateur Web +GenericName[gl]=Navegador web +GenericName[gu]=વેબ બ્રાઉઝર +GenericName[he]=דפדפן אינטרנט +GenericName[hi]=वेब ब्राउज़र +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[id]=Peramban Web +GenericName[it]=Browser web +GenericName[ja]=ウェブ・ブラウザ +GenericName[kn]=ಜಾಲ ವೀಕ್ಷಕ +GenericName[ko]=웹 브라우저 +GenericName[lt]=Žiniatinklio naršyklė +GenericName[lv]=Tīmekļa pārlūks +GenericName[ml]=വെബ് ബ്രൌസര്‍ +GenericName[mr]=वेब ब्राऊजर +GenericName[nb]=Nettleser +GenericName[nl]=Webbrowser +GenericName[or]=ଓ୍ବେବ ବ୍ରାଉଜର +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador da Internet +GenericName[ro]=Navigator de Internet +GenericName[ru]=Веб-браузер +GenericName[sk]=WWW prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sr]=Интернет прегледник +GenericName[sv]=Webbläsare +GenericName[ta]=இணைய உலாவி +GenericName[te]=మహాతల అన్వేషి +GenericName[th]=เว็บเบราว์เซอร์ +GenericName[tr]=Web Tarayıcı +GenericName[ug]=توركۆرگۈ +GenericName[uk]=Навігатор Тенет +GenericName[vi]=Bộ duyệt Web +GenericName[zh_CN]=网页浏览器 +GenericName[zh_HK]=網頁瀏覽器 +GenericName[zh_TW]=網頁瀏覽器 +Exec=/usr/bin/chromium-browser %U +Terminal=false +X-MultipleArgs=false +Type=Application +Icon=chromium-browser +Categories=Network;WebBrowser; +MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https; +StartupWMClass=Chromium-browser +Keywords=web;browser;internet; +Actions=new-window;new-private-window; + +[Desktop Action new-window] +Name=Open a New Window +Name[ach]=Dirica manyen +Name[af]=Nuwe venster +Name[an]=Nueva finestra +Name[ar]=نافذة جديدة +Name[as]=নতুন উইন্ডো +Name[ast]=Ventana nueva +Name[az]=Yeni Pəncərə +Name[be]=Новае акно +Name[bg]=Нов прозорец +Name[bn-BD]=নতুন উইন্ডো (N) +Name[bn-IN]=নতুন উইন্ডো +Name[br]=Prenestr nevez +Name[brx]=गोदान उइन्ड'(N) +Name[bs]=Novi prozor +Name[ca]=Finestra nova +Name[cak]=K'ak'a' tzuwäch +Name[cs]=Nové okno +Name[cy]=Ffenestr Newydd +Name[da]=Nyt vindue +Name[de]=Neues Fenster +Name[dsb]=Nowe wokno +Name[el]=Νέο παράθυρο +Name[en-GB]=New Window +Name[en-US]=New Window +Name[en-ZA]=New Window +Name[eo]=Nova fenestro +Name[es-AR]=Nueva ventana +Name[es-CL]=Nueva ventana +Name[es-ES]=Nueva ventana +Name[es-MX]=Nueva ventana +Name[et]=Uus aken +Name[eu]=Leiho berria +Name[fa]=پنجره جدید‌ +Name[ff]=Henorde Hesere +Name[fi]=Uusi ikkuna +Name[fr]=Nouvelle fenêtre +Name[fy-NL]=Nij finster +Name[ga-IE]=Fuinneog Nua +Name[gd]=Uinneag ùr +Name[gl]=Nova xanela +Name[gn]=Ovetã pyahu +Name[gu-IN]=નવી વિન્ડો +Name[he]=חלון חדש +Name[hi-IN]=नया विंडो +Name[hr]=Novi prozor +Name[hsb]=Nowe wokno +Name[hu]=Új ablak +Name[hy-AM]=Նոր Պատուհան +Name[id]=Jendela Baru +Name[is]=Nýr gluggi +Name[it]=Nuova finestra +Name[ja]=新しいウィンドウ +Name[ja-JP-mac]=新規ウインドウ +Name[ka]=ახალი ფანჯარა +Name[kk]=Жаңа терезе +Name[km]=បង្អួច​​​ថ្មី +Name[kn]=ಹೊಸ ಕಿಟಕಿ +Name[ko]=새 창 +Name[kok]=नवें जनेल +Name[ks]=نئئ وِنڈو +Name[lij]=Neuvo barcon +Name[lo]=ຫນ້າຕ່າງໃຫມ່ +Name[lt]=Naujas langas +Name[ltg]=Jauns lūgs +Name[lv]=Jauns logs +Name[mai]=नव विंडो +Name[mk]=Нов прозорец +Name[ml]=പുതിയ ജാലകം +Name[mr]=नवीन पटल +Name[ms]=Tetingkap Baru +Name[my]=ဝင်းဒိုးအသစ် +Name[nb-NO]=Nytt vindu +Name[ne-NP]=नयाँ सञ्झ्याल +Name[nl]=Nieuw venster +Name[nn-NO]=Nytt vindauge +Name[or]=ନୂତନ ୱିଣ୍ଡୋ +Name[pa-IN]=ਨਵੀਂ ਵਿੰਡੋ +Name[pl]=Nowe okno +Name[pt-BR]=Nova janela +Name[pt-PT]=Nova janela +Name[rm]=Nova fanestra +Name[ro]=Fereastră nouă +Name[ru]=Новое окно +Name[sat]=नावा विंडो (N) +Name[si]=නව කවුළුවක් +Name[sk]=Nové okno +Name[sl]=Novo okno +Name[son]=Zanfun taaga +Name[sq]=Dritare e Re +Name[sr]=Нови прозор +Name[sv-SE]=Nytt fönster +Name[ta]=புதிய சாளரம் +Name[te]=కొత్త విండో +Name[th]=หน้าต่างใหม่ +Name[tr]=Yeni pencere +Name[tsz]=Eraatarakua jimpani +Name[uk]=Нове вікно +Name[ur]=نیا دریچہ +Name[uz]=Yangi oyna +Name[vi]=Cửa sổ mới +Name[wo]=Palanteer bu bees +Name[xh]=Ifestile entsha +Name[zh-CN]=新建窗口 +Name[zh-TW]=開新視窗 +Exec=chromium-browser %U + +[Desktop Action new-private-window] +Name=Open a New Private Window +Name[ach]=Dirica manyen me mung +Name[af]=Nuwe privaatvenster +Name[an]=Nueva finestra privada +Name[ar]=نافذة خاصة جديدة +Name[as]=নতুন ব্যক্তিগত উইন্ডো +Name[ast]=Ventana privada nueva +Name[az]=Yeni Məxfi Pəncərə +Name[be]=Новае акно адасаблення +Name[bg]=Нов прозорец за поверително сърфиране +Name[bn-BD]=নতুন ব্যক্তিগত উইন্ডো +Name[bn-IN]=নতুন ব্যক্তিগত উইন্ডো +Name[br]=Prenestr merdeiñ prevez nevez +Name[brx]=गोदान प्राइभेट उइन्ड' +Name[bs]=Novi privatni prozor +Name[ca]=Finestra privada nova +Name[cak]=K'ak'a' ichinan tzuwäch +Name[cs]=Nové anonymní okno +Name[cy]=Ffenestr Breifat Newydd +Name[da]=Nyt privat vindue +Name[de]=Neues privates Fenster +Name[dsb]=Nowe priwatne wokno +Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης +Name[en-GB]=New Private Window +Name[en-US]=New Private Window +Name[en-ZA]=New Private Window +Name[eo]=Nova privata fenestro +Name[es-AR]=Nueva ventana privada +Name[es-CL]=Nueva ventana privada +Name[es-ES]=Nueva ventana privada +Name[es-MX]=Nueva ventana privada +Name[et]=Uus privaatne aken +Name[eu]=Leiho pribatu berria +Name[fa]=پنجره ناشناس جدید +Name[ff]=Henorde Suturo Hesere +Name[fi]=Uusi yksityinen ikkuna +Name[fr]=Nouvelle fenêtre de navigation privée +Name[fy-NL]=Nij priveefinster +Name[ga-IE]=Fuinneog Nua Phríobháideach +Name[gd]=Uinneag phrìobhaideach ùr +Name[gl]=Nova xanela privada +Name[gn]=Ovetã ñemi pyahu +Name[gu-IN]=નવી ખાનગી વિન્ડો +Name[he]=חלון פרטי חדש +Name[hi-IN]=नयी निजी विंडो +Name[hr]=Novi privatni prozor +Name[hsb]=Nowe priwatne wokno +Name[hu]=Új privát ablak +Name[hy-AM]=Սկսել Գաղտնի դիտարկում +Name[id]=Jendela Mode Pribadi Baru +Name[is]=Nýr huliðsgluggi +Name[it]=Nuova finestra anonima +Name[ja]=新しいプライベートウィンドウ +Name[ja-JP-mac]=新規プライベートウインドウ +Name[ka]=ახალი პირადი ფანჯარა +Name[kk]=Жаңа жекелік терезе +Name[km]=បង្អួច​ឯកជន​ថ្មី +Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ +Name[ko]=새 사생활 보호 모드 +Name[kok]=नवो खाजगी विंडो +Name[ks]=نْو پرایوٹ وینڈو& +Name[lij]=Neuvo barcon privou +Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່ +Name[lt]=Naujas privataus naršymo langas +Name[ltg]=Jauns privatais lūgs +Name[lv]=Jauns privātais logs +Name[mai]=नया निज विंडो (W) +Name[mk]=Нов приватен прозорец +Name[ml]=പുതിയ സ്വകാര്യ ജാലകം +Name[mr]=नवीन वैयक्तिक पटल +Name[ms]=Tetingkap Persendirian Baharu +Name[my]=New Private Window +Name[nb-NO]=Nytt privat vindu +Name[ne-NP]=नयाँ निजी सञ्झ्याल +Name[nl]=Nieuw privévenster +Name[nn-NO]=Nytt privat vindauge +Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ +Name[pa-IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ +Name[pl]=Nowe okno prywatne +Name[pt-BR]=Nova janela privativa +Name[pt-PT]=Nova janela privada +Name[rm]=Nova fanestra privata +Name[ro]=Fereastră privată nouă +Name[ru]=Новое приватное окно +Name[sat]=नावा निजेराक् विंडो (W ) +Name[si]=නව පුද්ගලික කවුළුව (W) +Name[sk]=Nové okno v režime Súkromné prehliadanie +Name[sl]=Novo zasebno okno +Name[son]=Sutura zanfun taaga +Name[sq]=Dritare e Re Private +Name[sr]=Нови приватан прозор +Name[sv-SE]=Nytt privat fönster +Name[ta]=புதிய தனிப்பட்ட சாளரம் +Name[te]=కొత్త ఆంతరంగిక విండో +Name[th]=หน้าต่างส่วนตัวใหม่ +Name[tr]=Yeni gizli pencere +Name[tsz]=Juchiiti eraatarakua jimpani +Name[uk]=Приватне вікно +Name[ur]=نیا نجی دریچہ +Name[uz]=Yangi maxfiy oyna +Name[vi]=Cửa sổ riêng tư mới +Name[wo]=Panlanteeru biir bu bees +Name[xh]=Ifestile yangasese entsha +Name[zh-CN]=新建隐私浏览窗口 +Name[zh-TW]=新增隱私視窗 +Exec=chromium-browser --incognito %U diff --git a/SOURCES/chromium-browser.sh b/SOURCES/chromium-browser.sh new file mode 100755 index 00000000..492a4968 --- /dev/null +++ b/SOURCES/chromium-browser.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# +# Copyright (c) 2011 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Let the wrapped binary know that it has been run through the wrapper. +export CHROME_WRAPPER="`readlink -f "$0"`" + +HERE="`dirname "$CHROME_WRAPPER"`" + +# We include some xdg utilities next to the binary, and we want to prefer them +# over the system versions when we know the system versions are very old. We +# detect whether the system xdg utilities are sufficiently new to be likely to +# work for us by looking for xdg-settings. If we find it, we leave $PATH alone, +# so that the system xdg utilities (including any distro patches) will be used. +if ! which xdg-settings &> /dev/null; then + # Old xdg utilities. Prepend $HERE to $PATH to use ours instead. + export PATH="$HERE:$PATH" +else + # Use system xdg utilities. But first create mimeapps.list if it doesn't + # exist; some systems have bugs in xdg-mime that make it fail without it. + xdg_app_dir="${XDG_DATA_HOME:-$HOME/.local/share/applications}" + mkdir -p "$xdg_app_dir" + [ -f "$xdg_app_dir/mimeapps.list" ] || touch "$xdg_app_dir/mimeapps.list" +fi + +# Always use our versions of ffmpeg libs. +# This also makes RPMs find the compatibly-named library symlinks. +if [[ -n "$LD_LIBRARY_PATH" ]]; then + LD_LIBRARY_PATH="$HERE:$HERE/lib:$LD_LIBRARY_PATH" +else + LD_LIBRARY_PATH="$HERE:$HERE/lib" +fi +export LD_LIBRARY_PATH + +export CHROME_VERSION_EXTRA="Built from source for @@BUILD_TARGET@@" + +# We don't want bug-buddy intercepting our crashes. http://crbug.com/24120 +export GNOME_DISABLE_CRASH_DIALOG=SET_BY_GOOGLE_CHROME + +# Allow users to override command-line options and prefer user defined +# CHROMIUM_USER_FLAGS from env over system wide CHROMIUM_FLAGS +[[ -f /etc/chromium/chromium.conf ]] && . /etc/chromium/chromium.conf +CHROMIUM_FLAGS=${CHROMIUM_USER_FLAGS:-$CHROMIUM_FLAGS} + +CHROMIUM_DISTRO_FLAGS=" --enable-plugins \ + --enable-extensions \ + --enable-user-scripts \ + --enable-printing \ + --enable-gpu-rasterization \ + --enable-sync \ + --auto-ssl-client-auth @@EXTRA_FLAGS@@" + +# Sanitize std{in,out,err} because they'll be shared with untrusted child +# processes (http://crbug.com/376567). +exec < /dev/null +exec > >(exec cat) +exec 2> >(exec cat >&2) + +exec -a "$0" "$HERE/@@CHROMIUM_BROWSER_CHANNEL@@" $CHROMIUM_FLAGS $CHROMIUM_DISTRO_FLAGS "$@" diff --git a/SOURCES/chromium-browser.xml b/SOURCES/chromium-browser.xml new file mode 100644 index 00000000..159e05cc --- /dev/null +++ b/SOURCES/chromium-browser.xml @@ -0,0 +1,18 @@ + + + + + + Chromium + chromium-browser + /usr/bin/chromium-browser %s + chromium-browser + false + false + + + + diff --git a/SOURCES/chromium-disable-font-tests.patch b/SOURCES/chromium-disable-font-tests.patch new file mode 100644 index 00000000..ae38a8a1 --- /dev/null +++ b/SOURCES/chromium-disable-font-tests.patch @@ -0,0 +1,26 @@ +description: disable building font tests +author: Michael Gilbert + +--- a/skia/BUILD.gn ++++ b/skia/BUILD.gn +@@ -860,7 +860,7 @@ group("test_fonts_resources") { + if (is_apple) { + deps += [ ":test_fonts_bundle_data" ] + data_deps += [ ":test_fonts_bundle_data" ] +- } else { ++ } else if (false) { + deps += [ "//third_party/test_fonts" ] + data_deps += [ "//third_party/test_fonts" ] + } +--- a/third_party/test_fonts/fontconfig/BUILD.gn ++++ b/third_party/test_fonts/fontconfig/BUILD.gn +@@ -8,9 +8,7 @@ if (is_linux || is_chromeos) { + group("test_support") { + testonly = true + public_deps = [ ":fontconfig_util_linux" ] +- data_deps = [ "//third_party/test_fonts" ] + if (current_toolchain == host_toolchain) { +- data_deps += [ ":do_generate_fontconfig_caches" ] + } + } + diff --git a/SOURCES/chromium-latest.py b/SOURCES/chromium-latest.py new file mode 100755 index 00000000..5af86286 --- /dev/null +++ b/SOURCES/chromium-latest.py @@ -0,0 +1,344 @@ +#!/usr/bin/python3 +# Copyright 2010,2015-2019 Tom Callaway +# Copyright 2013-2016 Tomas Popela +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +try: + import argparse + optparse = False +except ImportError: + from optparse import OptionParser + optparse = True +import csv +import glob +import hashlib +import locale +import os +import shutil +import io +import sys +import urllib.request, urllib.parse, urllib.error + +chromium_url = "http://commondatastorage.googleapis.com/chromium-browser-official/" + +chromium_root_dir = "." +version_string = "stable" + +name = 'Chromium Latest' +script_version = 0.9 +my_description = '{0} {1}'.format(name, script_version) + + +def dlProgress(count, blockSize, totalSize): + + if (totalSize <= blockSize): + percent = int(count * 100) + else: + percent = int(count * blockSize * 100 / totalSize) + sys.stdout.write("\r" + "Downloading ... %d%%" % percent) + sys.stdout.flush() + + +def delete_chromium_dir(ch_dir): + + full_dir = "%s/%s" % (latest_dir, ch_dir) + print('Deleting %s ' % full_dir) + if os.path.isdir(full_dir): + shutil.rmtree(full_dir) + print('[DONE]') + else: + print('[NOT FOUND]') + + +def delete_chromium_files(files): + + full_path = "%s/%s" % (latest_dir, files) + print('Deleting ' + full_path + ' ', end=' ') + for filename in glob.glob(full_path): + print('Deleting ' + filename + ' ', end=' ') + os.remove(filename) + print('[DONE]') + + +def check_omahaproxy(channel="stable"): + + version = 0 + status_url = "http://omahaproxy.appspot.com/all?os=linux&channel=" + channel + + usock = urllib.request.urlopen(status_url) + status_dump = usock.read().decode('utf-8') + usock.close() + status_list = io.StringIO(status_dump) + status_reader = list(csv.reader(status_list, delimiter=',')) + linux_channels = [s for s in status_reader if "linux" in s] + linux_channel = [s for s in linux_channels if channel in s] + version = linux_channel[0][2] + + if version == 0: + print('I could not find the latest %s build. Bailing out.' % channel) + sys.exit(1) + else: + print('Latest Chromium Version on %s at %s is %s' % (channel, status_url, version)) + return version + + +def remove_file_if_exists(filename): + + if os.path.isfile("./%s" % filename): + try: + os.remove(filename) + except Exception: + pass + + +def download_file_and_compare_hashes(file_to_download): + + hashes_file = '%s.hashes' % file_to_download + + if (args.clean): + remove_file_if_exists(file_to_download) + remove_file_if_exists(hashes_file) + + # Let's make sure we haven't already downloaded it. + tarball_local_file = "./%s" % file_to_download + if os.path.isfile(tarball_local_file): + print("%s already exists!" % file_to_download) + else: + path = '%s%s' % (chromium_url, file_to_download) + print("Downloading %s" % path) + # Perhaps look at using python-progressbar at some point? + info=urllib.request.urlretrieve(path, file_to_download, reporthook=dlProgress)[1] + urllib.request.urlcleanup() + print("") + if (info["Content-Type"] != "application/x-tar"): + print('Chromium tarballs for %s are not on servers.' % file_to_download) + remove_file_if_exists (file_to_download) + sys.exit(1) + + hashes_local_file = "./%s" % hashes_file + if not os.path.isfile(hashes_local_file): + path = '%s%s' % (chromium_url, hashes_file) + print("Downloading %s" % path) + # Perhaps look at using python-progressbar at some point? + info=urllib.request.urlretrieve(path, hashes_file, reporthook=dlProgress)[1] + urllib.request.urlcleanup() + print("") + + if os.path.isfile(hashes_local_file): + with open(hashes_local_file, "r") as input_file: + md5sum = input_file.readline().split()[1] + md5 = hashlib.md5() + with open(tarball_local_file, "rb") as f: + for block in iter(lambda: f.read(65536), b""): + md5.update(block) + if (md5sum == md5.hexdigest()): + print("MD5 matches for %s!" % file_to_download) + else: + print("MD5 mismatch for %s!" % file_to_download) + sys.exit(1) + else: + print("Cannot compare hashes for %s!" % file_to_download) + + +def download_version(version): + + download_file_and_compare_hashes ('chromium-%s.tar.xz' % version) + + if (args.tests): + download_file_and_compare_hashes ('chromium-%s-testdata.tar.xz' % version) + +def nacl_versions(version): + + if sys.version_info[0] == 2 and sys.version_info[1] == 6: + return + + myvars = {} + chrome_dir = './chromium-%s' % version + with open(chrome_dir + "/native_client/tools/REVISIONS") as myfile: + for line in myfile: + name, var = line.partition("=")[::2] + myvars[name] = var + print("nacl-binutils commit: %s" % myvars["NACL_BINUTILS_COMMIT"]) + print("nacl-gcc commit: %s" % myvars["NACL_GCC_COMMIT"]) + print("nacl-newlib commit: %s" % myvars["NACL_NEWLIB_COMMIT"]) + + # Parse GIT_REVISIONS dict from toolchain_build.py + + sys.path.append(os.path.abspath(chrome_dir + "/native_client/toolchain_build")) + from toolchain_build import GIT_REVISIONS + print("nacl-arm-binutils commit: %s" % GIT_REVISIONS['binutils']['rev']) + print("nacl-arm-gcc commit: %s" % GIT_REVISIONS['gcc']['rev']) + + +def download_chrome_latest_rpm(arch): + + chrome_rpm = 'google-chrome-%s_current_%s.rpm' % (version_string, arch) + path = 'https://dl.google.com/linux/direct/%s' % chrome_rpm + + if (args.clean): + remove_file_if_exists(chrome_rpm) + + # Let's make sure we haven't already downloaded it. + if os.path.isfile("./%s" % chrome_rpm): + print("%s already exists!" % chrome_rpm) + else: + print("Downloading %s" % path) + # Perhaps look at using python-progressbar at some point? + info=urllib.request.urlretrieve(path, chrome_rpm, reporthook=dlProgress)[1] + urllib.request.urlcleanup() + print("") + if (info["Content-Type"] != "binary/octet-stream" and info["Content-Type"] != "application/x-redhat-package-manager"): + print('Chrome %s rpms are not on servers.' % version_string) + remove_file_if_exists (chrome_rpm) + sys.exit(1) + +# This is where the magic happens +if __name__ == '__main__': + + # Locale magic + locale.setlocale(locale.LC_ALL, '') + + # Create the parser object + if optparse: + parser = OptionParser(description=my_description) + parser_add_argument = parser.add_option + else: + parser = argparse.ArgumentParser(description=my_description) + parser_add_argument = parser.add_argument + + parser_add_argument( + '--ffmpegarm', action='store_true', + help='Leave arm sources when cleaning ffmpeg') + parser_add_argument( + '--beta', action='store_true', + help='Get the latest beta Chromium source') + parser_add_argument( + '--clean', action='store_true', + help='Re-download all previously downloaded sources') + parser_add_argument( + '--cleansources', action='store_true', + help='Get the latest Chromium release from given channel and clean various directories to from unnecessary or unwanted stuff') + parser_add_argument( + '--dev', action='store_true', + help='Get the latest dev Chromium source') + parser_add_argument( + '--ffmpegclean', action='store_true', + help='Get the latest Chromium release from given channel and cleans ffmpeg sources from proprietary stuff') + parser_add_argument( + '--chrome', action='store_true', + help='Get the latest Chrome rpms for the given channel') + parser_add_argument( + '--prep', action='store_true', + help='Prepare everything, but don\'t compress the result') + parser_add_argument( + '--stable', action='store_true', + help='Get the latest stable Chromium source') + parser_add_argument( + '--tests', action='store_true', + help='Get the additional data for running tests') + parser_add_argument( + '--version', + help='Download a specific version of Chromium') + parser_add_argument( + '--naclvers', + help='Display the commit versions of nacl toolchain components') + + # Parse the args + if optparse: + args, options = parser.parse_args() + else: + args = parser.parse_args() + + if args.stable: + version_string = "stable" + elif args.beta: + version_string = "beta" + elif args.dev: + version_string = "dev" + elif (not (args.stable or args.beta or args.dev)): + if (not args.version): + print('No version specified, downloading STABLE') + args.stable = True + + chromium_version = args.version if args.version else check_omahaproxy(version_string) + + if args.dev: + version_string = "unstable" + + if args.chrome: + if args.version: + print('You cannot specify a Chrome RPM version!') + sys.exit(1) + latest = 'google-chrome-%s_current_i386' % version_string + download_chrome_latest_rpm("i386") + latest = 'google-chrome-%s_current_x86_64' % version_string + download_chrome_latest_rpm("x86_64") + if (not (args.ffmpegclean or args.tests)): + sys.exit(0) + + latest = 'chromium-%s.tar.xz' % chromium_version + + download_version(chromium_version) + + # Lets make sure we haven't unpacked it already + latest_dir = "%s/chromium-%s" % (chromium_root_dir, chromium_version) + if (args.clean and os.path.isdir(latest_dir)): + shutil.rmtree(latest_dir) + + if os.path.isdir(latest_dir): + print("%s already exists, perhaps %s has already been unpacked?" % (latest_dir, latest)) + else: + print("Unpacking %s into %s, please wait." % (latest, latest_dir)) + if (os.system("tar -xJf %s" % latest) != 0): + print("%s is possibly corrupted, exiting." % (latest)) + sys.exit(1) + + if (args.naclvers): + nacl_versions(chromium_version) + + if (args.cleansources): + junk_dirs = ['third_party/WebKit/Tools/Scripts/webkitpy/layout_tests', + 'webkit/data/layout_tests', 'third_party/hunspell/dictionaries', + 'chrome/test/data', 'native_client/tests', + 'third_party/WebKit/LayoutTests'] + + # First, the dirs: + for directory in junk_dirs: + delete_chromium_dir(directory) + + # There has got to be a better, more portable way to do this. + os.system("find %s -depth -name reference_build -type d -exec rm -rf {} \;" % latest_dir) + + # I could not find good bindings for xz/lzma support, so we system call here too. + chromium_clean_xz_file = "chromium-" + chromium_version + "-clean.tar.xz" + + remove_file_if_exists(chromium_clean_xz_file) + + if (args.ffmpegclean): + print("Cleaning ffmpeg from proprietary things...") + os.system("./clean_ffmpeg.sh %s %d" % (latest_dir, 0 if args.ffmpegarm else 1)) + print("Done!") + + if (not args.prep): + print("Compressing cleaned tree, please wait...") + os.chdir(chromium_root_dir) + os.system("tar --exclude=\.svn -cf - chromium-%s | xz -9 -T 0 -f > %s" % (chromium_version, chromium_clean_xz_file)) + + print("Finished!") diff --git a/SOURCES/chromium.conf b/SOURCES/chromium.conf new file mode 100644 index 00000000..871c0675 --- /dev/null +++ b/SOURCES/chromium.conf @@ -0,0 +1,4 @@ +# system wide chromium flags +CHROMIUM_FLAGS="" +CHROMIUM_FLAGS+=" --disable-features=AudioServiceSandbox,Vulkan" +CHROMIUM_FLAGS+=" --enable-features=VaapiVideoDecoder,VaapiVideoEncoder,VaapiVideoDecodeLinuxGL" diff --git a/SOURCES/clean_ffmpeg.sh b/SOURCES/clean_ffmpeg.sh new file mode 100755 index 00000000..d2f50ad3 --- /dev/null +++ b/SOURCES/clean_ffmpeg.sh @@ -0,0 +1,376 @@ +#!/bin/bash +# Copyright 2013-2015 Tomas Popela +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# $1 files +# $2 verbose +function copy_files() { + for file in $1 + do + dir_name=$(echo "$file" | sed 's%/[^/]*$%/%') + if [[ $dir_name == */* ]]; then + tmp_dir_name="tmp_"$dir_name + mkdir -p "../tmp_ffmpeg/$tmp_dir_name" + else + tmp_dir_name=$file + fi + + if [ "$2" -eq 1 ]; then + cp "$file" "../tmp_ffmpeg/$tmp_dir_name" + else + cp "$file" "../tmp_ffmpeg/$tmp_dir_name" > /dev/null 2>&1 + fi + done +} + +where=$(pwd) + +if ! generated_files=$(./get_free_ffmpeg_source_files.py "$1" "$2"); then + exit 1 +fi +# As the build system files does not contain the header files, cheat here +# and generate the header files names from source files. These that does not +# exist will be later skipped while copying. +generated_files_headers="${generated_files//.c/.h}" +generated_files_headers="$generated_files_headers ${generated_files//.c/_internal.h}" +if [ "$2" -ne "1" ]; then + generated_files_headers="$generated_files_headers ${generated_files//.S/.h}" +fi +generated_files_headers="$generated_files_headers ${generated_files//.asm/.h}" + +header_files=" libavcodec/x86/inline_asm.h \ + libavcodec/x86/hpeldsp.h \ + libavcodec/x86/mathops.h \ + libavcodec/x86/vpx_arith.h \ + libavcodec/aarch64/vp8dsp.h \ + libavcodec/arm/vp8dsp.h \ + libavcodec/arm/vpx_arith.h \ + libavcodec/aac.h \ + libavcodec/aacps.h \ + libavcodec/aacpsdsp.h \ + libavcodec/aacsbrdata.h \ + libavcodec/aac_ac3_parser.h \ + libavcodec/aac_defines.h \ + libavcodec/ac3.h \ + libavcodec/ac3defs.h \ + libavcodec/ac3tab.h \ + libavcodec/adts_header.h \ + libavcodec/avcodec.h \ + libavcodec/blockdsp.h \ + libavcodec/bytestream.h \ + libavcodec/cbrt_data.h \ + libavcodec/cbrt_tablegen.h \ + libavcodec/codec.h \ + libavcodec/codec_id.h \ + libavcodec/codec_internal.h \ + libavcodec/codec_par.h \ + libavcodec/dct.h \ + libavcodec/dct32.h \ + libavcodec/defs.h \ + libavcodec/dv.h \ + libavcodec/error_resilience.h \ + libavcodec/fdctdsp.h \ + libavcodec/fft.h \ + libavcodec/fft-internal.h \ + libavcodec/fft_table.h \ + libavcodec/flac.h \ + libavcodec/flacdsp.h \ + libavcodec/flac_parse.h \ + libavcodec/frame_thread_encoder.h \ + libavcodec/get_bits.h \ + libavcodec/h263dsp.h \ + libavcodec/h264chroma.h \ + libavcodec/hevc.h \ + libavcodec/hpeldsp.h \ + libavcodec/hwaccels.h \ + libavcodec/hwconfig.h \ + libavcodec/idctdsp.h \ + libavcodec/internal.h \ + libavcodec/kbdwin.h \ + libavcodec/mathops.h \ + libavcodec/me_cmp.h \ + libavcodec/mlp_parse.h \ + libavcodec/motion_est.h \ + libavcodec/mpeg12.h \ + libavcodec/mpeg12data.h \ + libavcodec/mpeg12vlc.h \ + libavcodec/mpegaudio.h \ + libavcodec/mpegaudiodecheader.h \ + libavcodec/mpegaudiodec_common_tablegen.h \ + libavcodec/mpegaudiodsp.h \ + libavcodec/mpegaudio_tablegen.h \ + libavcodec/mpegpicture.h \ + libavcodec/mpegutils.h \ + libavcodec/mpegvideo.h \ + libavcodec/mpegvideodata.h \ + libavcodec/mpegvideoencdsp.h \ + libavcodec/options_table.h \ + libavcodec/opus.h \ + libavcodec/opusdsp.h \ + libavcodec/opus_celt.h \ + libavcodec/opus_pvq.h \ + libavcodec/opus_rc.h \ + libavcodec/packet.h \ + libavcodec/packet_internal.h \ + libavcodec/pcm_tablegen.h \ + libavcodec/pixblockdsp.h \ + libavcodec/pixels.h \ + libavcodec/png.h \ + libavcodec/pngdsp.h \ + libavcodec/put_bits.h \ + libavcodec/qpeldsp.h \ + libavcodec/ratecontrol.h \ + libavcodec/rectangle.h \ + libavcodec/rl.h \ + libavcodec/rnd_avg.h \ + libavcodec/sbr.h \ + libavcodec/sbrdsp.h \ + libavcodec/sinewin.h \ + libavcodec/sinewin_tablegen.h \ + libavcodec/startcode.h \ + libavcodec/thread.h \ + libavcodec/threadframe.h \ + libavcodec/unary.h \ + libavcodec/version.h \ + libavcodec/version_major.h \ + libavcodec/videodsp.h \ + libavcodec/vlc.h \ + libavcodec/vorbisdsp.h \ + libavcodec/vp3data.h \ + libavcodec/vp4data.h \ + libavcodec/vp3dsp.h \ + libavcodec/vp56.h \ + libavcodec/vp56dsp.h \ + libavcodec/vp8data.h \ + libavcodec/vp8dsp.h \ + libavcodec/vp89_rac.h \ + libavformat/apetag.h \ + libavformat/avformat.h \ + libavformat/dv.h \ + libavformat/img2.h \ + libavformat/internal.h \ + libavformat/mov_chan.h \ + libavformat/pcm.h \ + libavformat/rdt.h \ + libavformat/rtp.h \ + libavformat/rtpdec.h \ + libavformat/spdif.h \ + libavformat/srtp.h \ + libavformat/options_table.h \ + libavformat/version.h \ + libavformat/version_major.h \ + libavformat/w64.h \ + libavutil/aarch64/cpu.h \ + libavutil/x86/asm.h \ + libavutil/x86/bswap.h \ + libavutil/x86/cpu.h \ + libavutil/x86/emms.h + libavutil/x86/intreadwrite.h \ + libavutil/x86/intmath.h + libavutil/x86/timer.h \ + libavutil/attributes.h \ + libavutil/attributes_internal.h \ + libavutil/audio_fifo.h \ + libavutil/avassert.h \ + libavutil/avutil.h \ + libavutil/bswap.h \ + libavutil/common.h \ + libavutil/colorspace.h \ + libavutil/cpu.h \ + libavutil/cpu_internal.h \ + libavutil/dynarray.h \ + libavutil/ffmath.h \ + libavutil/fixed_dsp.h \ + libavutil/float_dsp.h \ + libavutil/imgutils.h \ + libavutil/imgutils_internal.h \ + libavutil/internal.h \ + libavutil/intfloat.h \ + libavutil/intreadwrite.h \ + libavutil/libm.h \ + libavutil/lls.h \ + libavutil/macros.h \ + libavutil/pixfmt.h \ + libavutil/qsort.h \ + libavutil/replaygain.h \ + libavutil/softfloat.h \ + libavutil/softfloat_tables.h \ + libavutil/thread.h \ + libavutil/timer.h \ + libavutil/timestamp.h \ + libavutil/tx_priv.h \ + libavutil/version.h \ + libswresample/swresample.h \ + libswresample/version.h \ + libswresample/version_major.h \ + compat/va_copy.h \ + compat/atomics/gcc/stdatomic.h " + +manual_files=" libavcodec/aarch64/fft_neon.S \ + libavcodec/aarch64/h264pred_neon.S \ + libavcodec/aarch64/hpeldsp_neon.S \ + libavcodec/aarch64/mdct_neon.S \ + libavcodec/aarch64/neon.S \ + libavcodec/aarch64/vorbisdsp_neon.S \ + libavcodec/aarch64/vorbisdsp_init.c \ + libavcodec/aarch64/vp8dsp_neon.S \ + libavcodec/x86/hpeldsp.asm \ + libavcodec/x86/hpeldsp_rnd_template.c \ + libavcodec/x86/rnd_template.c \ + libavcodec/x86/videodsp.asm \ + libavcodec/x86/videodsp_init.c \ + libavcodec/x86/vorbisdsp_init.c \ + libavcodec/x86/vp3dsp.asm \ + libavcodec/x86/vp8dsp.asm \ + libavcodec/bit_depth_template.c \ + libavcodec/fft_template.c \ + libavcodec/flacdec.c \ + libavcodec/flacdsp.c \ + libavcodec/flacdsp_template.c \ + libavcodec/flacdsp_lpc_template.c \ + libavcodec/h264pred_template.c \ + libavcodec/hpel_template.c \ + libavcodec/hpeldsp.c \ + libavcodec/mdct_template.c \ + libavcodec/options.c \ + libavcodec/pcm.c \ + libavcodec/pel_template.c \ + libavcodec/utils.c \ + libavcodec/videodsp.c \ + libavcodec/videodsp_template.c \ + libavcodec/vorbisdsp.c \ + libavcodec/vp3dsp.c \ + libavcodec/vp8dsp.c \ + libavformat/flacdec.c \ + libavformat/options.c \ + libavformat/pcm.c \ + libavformat/utils.c \ + libavformat/version.c \ + libavutil/aarch64/asm.S \ + libavutil/aarch64/bswap.h \ + libavutil/aarch64/cpu.c \ + libavutil/aarch64/float_dsp_init.c \ + libavutil/aarch64/float_dsp_neon.S \ + libavutil/aarch64/timer.h \ + libavutil/cpu.c \ + libavutil/fixed_dsp.c \ + libavutil/float_dsp.c \ + libavutil/imgutils.c \ + libavutil/tx_float.c \ + libavutil/tx_template.c \ + libavutil/utils.c \ + libavutil/version.c \ + libavutil/x86/cpu.c \ + libavutil/x86/float_dsp_init.c \ + libavutil/x86/tx_float_init.c \ + libavutil/x86/x86inc.asm \ + libavutil/x86/x86util.asm " + +mp3_files=" libavcodec/aarch64/aacpsdsp_init_aarch64.c \ + libavcodec/aarch64/aacpsdsp_neon.S \ + libavcodec/aarch64/autorename_libavcodec_aarch64_aacpsdsp_neon.S \ + libavcodec/aarch64/autorename_libavcodec_aarch64_sbrdsp_neon.S \ + libavcodec/aarch64/mpegaudiodsp_init.c \ + libavcodec/aarch64/mpegaudiodsp_neon.S \ + libavcodec/aarch64/sbrdsp_init_aarch64.c \ + libavcodec/aarch64/sbrdsp_neon.S \ + libavcodec/aac_ac3_parser.c \ + libavcodec/aac_parser.c \ + libavcodec/aacps_float.c \ + libavcodec/aacpsdsp_float.c \ + libavcodec/aacsbr.c \ + libavcodec/aactab.c \ + libavcodec/ac3tab.c \ + libavcodec/autorename_libavcodec_mpegaudiodsp.c \ + libavcodec/autorename_libavcodec_sbrdsp.c \ + libavcodec/cbrt_data.c \ + libavcodec/dct.c \ + libavcodec/dct32_fixed.c \ + libavcodec/dct32_float.c \ + libavcodec/dct32_template.c \ + libavcodec/kbdwin.c \ + libavcodec/mpegaudio.c \ + libavcodec/mpegaudio_parser.c \ + libavcodec/mpegaudiodec_fixed.c \ + libavcodec/mpegaudiodec_template.c \ + libavcodec/mpegaudiodecheader.c \ + libavcodec/mpegaudiodsp.c \ + libavcodec/mpegaudiodsp_data.c \ + libavcodec/mpegaudiodsp_fixed.c \ + libavcodec/mpegaudiodsp_float.c \ + libavcodec/mpegaudiodsp_template.c \ + libavcodec/sbrdsp.c \ + libavcodec/sbrdsp_template.c \ + libavcodec/sinewin.c \ + libavcodec/x86/dct_init.c \ + libavcodec/x86/dct32.asm \ + libavcodec/x86/imdct36.asm \ + libavcodec/x86/mpegaudiodsp.c \ + libavcodec/x86/sbrdsp_init.c \ + libavcodec/x86/sbrdsp.asm \ + libavformat/aacdec.c \ + libavformat/apetag.c \ + libavformat/img2.c \ + libavformat/mov.c \ + libavformat/mov_chan.c \ + libavformat/mp3dec.c " + +other_files=" BUILD.gn \ + Changelog \ + COPYING.GPLv2 \ + COPYING.GPLv3 \ + COPYING.LGPLv2.1 \ + COPYING.LGPLv3 \ + CREDITS \ + CREDITS.chromium \ + ffmpeg_generated.gni \ + ffmpeg_options.gni \ + INSTALL.md \ + LICENSE.md \ + MAINTAINERS \ + OWNERS \ + README.chromium \ + README.md \ + RELEASE " + +cd "$1/third_party/ffmpeg" || exit 1 + +copy_files "$generated_files" 0 +copy_files "$generated_files_headers" 0 +copy_files "$manual_files" 1 +copy_files "$other_files" 1 +copy_files "$header_files" 1 +copy_files "$mp3_files" 1 + +mkdir -p ../tmp_ffmpeg/tmp_chromium/config +cp -r chromium/config ../tmp_ffmpeg/tmp_chromium + +cd ../tmp_ffmpeg || exit 1 + +while IFS= read -r -d '' tmp_directory +do + new_name=${tmp_directory//tmp_/} + mv "$tmp_directory" "$new_name" +done < <(find . -type d -name 'tmp_*' -print0) + +cd "$where" || exit 1 + +rm -rf "$1/third_party/ffmpeg" +mv "$1/third_party/tmp_ffmpeg" "$1/third_party/ffmpeg" diff --git a/SOURCES/get_free_ffmpeg_source_files.py b/SOURCES/get_free_ffmpeg_source_files.py new file mode 100755 index 00000000..9081e90c --- /dev/null +++ b/SOURCES/get_free_ffmpeg_source_files.py @@ -0,0 +1,82 @@ +#!/usr/bin/python3 +# Copyright 2015 Tomas Popela +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +import sys +import re + +def append_sources (input_sources, output_sources): + + # Get the source files. + source_files = re.findall(r"\"(.*?)\"", input_sources) + output_sources += source_files + + +def parse_sources(input_sources, output_sources, arch_not_arm): + + # Get the type of sources in one group and sources itself in the other one. + blocks = re.findall(r"(ffmpeg[^\s]*).*?\[(.*?)]", input_sources, re.DOTALL) + for block in blocks: + if (arch_not_arm): + if not 'ffmpeg_gas_sources' in block[0]: + append_sources (block[1], output_sources) + else: + append_sources (block[1], output_sources) + + +def parse_ffmpeg_gni_file(gni_path, arch_not_arm): + + with open(gni_path, "r") as input_file: + content = input_file.read().replace('\n', '') + + output_sources = [] + # Get all the sections. + sections = re.findall(r"if (.*?})", content, re.DOTALL) + for section in sections: + # Get all the conditions (first group) and sources (second group) for the + # current section. + blocks = re.findall(r"(\(.*?\))\s\{(.*?)\}", section, re.DOTALL) + for block in blocks: + conditions = re.findall(r"\(?\((.*?)\)", block[0]) + inserted = False + for condition in conditions: + if inserted: + break + limitations = ['ffmpeg_branding == "Chrome"', 'ffmpeg_branding == "ChromeOS"'] + if ('use_linux_config' in condition) and not any(limitation in condition for limitation in limitations): + if (arch_not_arm): + if ('x64' in condition) or ('x86' in condition) or ('use_linux_config' in condition): + parse_sources (block[1], output_sources, arch_not_arm) + inserted = True + else: + parse_sources (block[1], output_sources, arch_not_arm) + inserted = True + + if len(output_sources) == 0: + sys.stderr.write("Something went wrong, no sources parsed!\n") + sys.exit(1) + + print(' '.join(output_sources)) + + +if __name__ == "__main__": + + path = "%s/third_party/ffmpeg/ffmpeg_generated.gni" % sys.argv[1] + parse_ffmpeg_gni_file (path, False if sys.argv[2] == "0" else True) diff --git a/SOURCES/get_linux_tests_names.py b/SOURCES/get_linux_tests_names.py new file mode 100755 index 00000000..08a913a7 --- /dev/null +++ b/SOURCES/get_linux_tests_names.py @@ -0,0 +1,121 @@ +#!/usr/bin/python +# Copyright 2015 Tomas Popela +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +try: + import argparse + optparse = False +except ImportError: + from optparse import OptionParser + optparse = True +import locale +import simplejson as json +import sys +import os + +if __name__ == "__main__": + + added = [] + + # Create the parser object + if optparse: + parser = OptionParser() + parser_add_argument = parser.add_option + else: + parser = argparse.ArgumentParser() + parser_add_argument = parser.add_argument + + parser_add_argument( + '--check', + help='Check the tests against given SPEC file') + parser_add_argument( + '--spec', action='store_true', + help='Prints the test targets in format suitable for SPEC file') + parser_add_argument( + 'path', nargs='?', default=os.getcwd(), + help='Path to Chromium sources') + + # Parse the args + if optparse: + args, options = parser.parse_args() + else: + args = parser.parse_args() + + tests_path = "%s/testing/buildbot/chromium.linux.json" % args.path + + try: + with open(tests_path, "r") as input_file: + json_file = json.load(input_file) + except IOError: + print "Cannot find JSON file with tests in path '%s'!" % args.path + sys.exit(1) + + + for test in json_file['Linux Tests']['gtest_tests']: + if isinstance(test, dict): + added.append(test['test']) + else: + added.append(test) + + if args.check: + removed = [] + disabled = [] + in_tests = False + spec_file = None + + with open(args.check) as f: + for line in f: + if "CHROMIUM_BROWSER_UNIT_TESTS=" in line: + in_tests = True + continue + + if in_tests and line.endswith('"\n'): + break + + if in_tests: + found = False + for test in added: + if test in line: + if "#" in line: + disabled.append(test) + added.remove(test) + found = True + break + if not found: + if not "%" in line: + removed.append(line) + + for test in removed: + print "REMOVED" + print "\t" + test; + for test in added: + print "ADDED" + print "\t" + test; + for test in disabled: + print "DISABLED" + print "\t" + test; + + sys.exit(0) + + for name in added: + if args.spec: + print "\t" + name + " \\" + else: + print name diff --git a/SOURCES/master_preferences b/SOURCES/master_preferences new file mode 100644 index 00000000..f9e6d665 --- /dev/null +++ b/SOURCES/master_preferences @@ -0,0 +1,17 @@ +{ + "homepage": "http://msvsphere.ru", + "homepage_is_newtabpage": false, + "distribution": { + "alternate_shortcut_text": false, + "oem_bubble": true, + "chrome_shortcut_icon_index": 0, + "create_all_shortcuts": true, + "show_welcome_page": true, + "system_level": false, + "verbose_logging": false + }, + "first_run_tabs": [ + "http://msvsphere.ru", + "chrome://new-tab-page" + ] +} diff --git a/SPECS/chromium.spec b/SPECS/chromium.spec new file mode 100644 index 00000000..8150bb8e --- /dev/null +++ b/SPECS/chromium.spec @@ -0,0 +1,3123 @@ +%define _lto_cflags %{nil} + +# set default fuzz=2 for patch +%global _default_patch_fuzz 2 + +# enable|disable system build flags +%global system_build_flags 0 + +# disable the package notes info on f36 +# workaround for linking issue +%if 0%{?fedora} == 36 +%undefine _package_note_file +%endif + +# set default numjobs for the koji build +%ifarch aarch64 +%global numjobs 8 +%else +%global numjobs %{_smp_build_ncpus} +%endif + +# This flag is so I can build things very fast on a giant system. +# Enabling this in koji causes aarch64 builds to timeout indefinitely. +%global use_all_cpus 0 + +%if %{use_all_cpus} +%global numjobs %{_smp_build_ncpus} +%endif + +# official builds have less debugging and go faster... but we have to shut some things off. +%global official_build 1 + +# enable|disble bootstrap +%global bootstrap 0 + +# Fancy build status, so we at least know, where we are.. +# %1 where +# %2 what +%global build_target() \ + export NINJA_STATUS="[%2:%f/%t] " ; \ + ninja -j %{numjobs} -C '%1' '%2' + +# enable|disable headless client build +%global build_headless 1 + +# enable|disable chrome-remote-desktop build +%global build_remoting 0 + +# set nodejs_version +%global nodejs_version v19.8.1 + +# set version for devtoolset and gcc-toolset +%global dts_version 12 + +# set version for llvm-toolset on el7 +%global llvm_toolset_version 14.0 + +# set name for toolset +%if 0%{?rhel} == 7 +%global toolset devtoolset +%else +%global toolset gcc-toolset +%endif + +%if 0%{?rhel} == 7 +%global chromium_pybin /usr/bin/python3 +%else +%global chromium_pybin %{__python3} +%endif + +# We'd like to always have this on... +%global use_vaapi 1 +%global use_v4l2_codec 0 + +# ... but the libva in EL7 (and EL8) is too old. +%if 0%{?rhel} == 7 || 0%{?rhel} == 8 +%global use_vaapi 0 +%endif + +# enable v4l2 and disable vaapi for aarch64 platform +%ifarch aarch64 +%if 0%{?fedora} >= 36 +%global use_vaapi 0 +%global use_v4l2_codec 1 +%endif +%endif + +# Seems like we might need this sometimes +# Practically, no. But it's here in case we do. +%global use_gold 0 + +%global build_clear_key_cdm 0 + +# Disabled because of Google, starting with Chromium 88. +%global userestrictedapikeys 0 + +# We can still use the api key though. For now. +%global useapikey 1 + +# Leave this alone, please. +%global builddir out/Release +%global headlessbuilddir out/Headless +%global remotingbuilddir out/Remoting + +# Debuginfo packages aren't very useful here. If you need to debug +# you should do a proper debug build (not implemented in this spec yet) +%global debug_package %{nil} + +# %%{nil} for Stable; -beta for Beta; -dev for Devel +# dash in -beta and -dev is intentional ! +%global chromium_channel %{nil} +%global chromium_menu_name Chromium +%global chromium_browser_channel chromium-browser%{chromium_channel} +%global chromium_path %{_libdir}/chromium-browser%{chromium_channel} +%global crd_path %{_libdir}/chrome-remote-desktop + +# We don't want any libs in these directories to generate Provides +# Requires is trickier. + +# To generate this list, go into %%{buildroot}%%{chromium_path} and run +# for i in `find . -name "*.so" | sort`; do NAME=`basename -s .so $i`; printf "$NAME|"; done +# for RHEL7, append libfontconfig to the end +# make sure there is not a trailing | at the end of the list +# We always filter provides. We only filter Requires when building shared. +%global __provides_exclude_from ^(%{chromium_path}/.*\\.so|%{chromium_path}/.*\\.so.*)$ +%global __requires_exclude ^(%{chromium_path}/.*\\.so|%{chromium_path}/.*\\.so.*)$ + +# enable clang by default +%global clang 1 + +# set correct toolchain +%if %{clang} +%global toolchain clang +%else +%global toolchain gcc +%endif + +# enable system brotli +%global bundlebrotli 0 + +# Chromium's fork of ICU is now something we can't unbundle. +# This is left here to ease the change if that ever switches. +%global bundleicu 1 + +%global bundlere2 1 + +# The libxml_utils code depends on the specific bundled libxml checkout +# which is not compatible with the current code in the Fedora package as of +# 2017-06-08. +%global bundlelibxml 1 + +# Fedora's Python 2 stack is being removed, we use the bundled Python libraries +# This can be revisited once we upgrade to Python 3 +%global bundlepylibs 0 + +# RHEL 7.9 dropped minizip. +# It exists everywhere else though. +%global bundleminizip 0 +%if 0%{?rhel} == 7 +%global bundleminizip 1 +%endif + +# enable qt backend for el >= 8 and fedora >= 35 +%if 0%{?rhel} >= 8 || 0%{?fedora} >=35 +%global use_qt 1 +%else +%global use_qt 0 +%endif + +# enable gtk3 by default +%global gtk3 1 + +%if 0%{?rhel} == 7 || 0%{?rhel} == 8 +%global bundleopus 1 +%global bundlelibusbx 1 +%global bundleharfbuzz 1 +%global bundlelibwebp 1 +%global bundlelibpng 1 +%global bundlelibjpeg 1 +%global bundlefreetype 1 +%global bundlelibdrm 1 +%global bundlefontconfig 1 +%global bundleffmpegfree 1 +%global bundlelibaom 1 +%else +# Chromium really wants to use its bundled harfbuzz. Sigh. +%if 0%{?fedora} > 37 +%global bundleharfbuzz 0 +%else +%global bundleharfbuzz 1 +%endif +%global bundleopus 0 +%global bundlelibusbx 0 +%global bundlelibwebp 0 +%global bundlelibpng 0 +%global bundlelibjpeg 0 +%global bundlelibdrm 0 +%global bundlefontconfig 0 +%global bundleffmpegfree 0 +%global bundlelibaom 1 +# system freetype on fedora > 36 +%if 0%{?fedora} > 36 +%global bundlefreetype 0 +%else +%global bundlefreetype 1 +%endif +%endif + +### From 2013 until early 2021, Google permitted distribution builds of +### Chromium to access Google APIs that added significant features to +### Chromium including, but not limited to, Sync and geolocation. +### As of March 15, 2021, any Chromium builds which pass client_id and/or +### client_secret during build will prevent end-users from signing into their +### Google account. + +### With Chromium 88, I have removed the calls to "google_default_client_id" +### and "google_default_client_secret" to comply with their changes. + +### Honestly, at this point, you might be better off looking for a different +### FOSS browser. + +### Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) +### Note: These are for Fedora use ONLY. +### For your own distribution, please get your own set of keys. +### http://lists.debian.org/debian-legal/2013/11/msg00006.html +%if %{useapikey} +%global api_key AIzaSyDUIXvzVrt5OkVsgXhQ6NFfvWlA44by-aw +%else +%global api_key %nil +%endif + +%if %{userestrictedapikeys} +%global default_client_id 449907151817.apps.googleusercontent.com +%global default_client_secret miEreAep8nuvTdvLums6qyLK +%global chromoting_client_id 449907151817-8vnlfih032ni8c4jjps9int9t86k546t.apps.googleusercontent.com +%else +%global default_client_id %nil +%global default_client_secret %nil +%global chromoting_client_id %nil +%endif + +Name: chromium%{chromium_channel} +Version: 114.0.5735.133 +Release: 1%{?dist}.inferit +Summary: A WebKit (Blink) powered web browser that Google doesn't want you to use +Url: http://www.chromium.org/Home +License: BSD-3-Clause AND LGPL-2.1-or-later AND Apache-2.0 AND IJG AND MIT AND GPL-2.0-or-later AND ISC AND OpenSSL AND (MPL-1.1 OR GPL-2.0-only OR LGPL-2.0-only) + +### Chromium Fedora Patches ### +Patch0: chromium-70.0.3538.67-sandbox-pie.patch + +# Use /etc/chromium for initial_prefs +Patch1: chromium-91.0.4472.77-initial_prefs-etc-path.patch + +# Use gn system files +Patch2: chromium-107.0.5304.110-gn-system.patch + +# Do not mangle zlib +Patch5: chromium-77.0.3865.75-no-zlib-mangle.patch + +# Do not use unrar code, it is non-free +Patch6: chromium-114-norar.patch + +# Try to load widevine from other places +Patch8: chromium-108-widevine-other-locations.patch + +# Tell bootstrap.py to always use the version of Python we specify +Patch11: chromium-93.0.4577.63-py3-bootstrap.patch + +# Add "Fedora" to the user agent string +Patch12: chromium-101.0.4951.41-fedora-user-agent.patch + +# debian patch, disable font-test +Patch20: chromium-disable-font-tests.patch + +# https://gitweb.gentoo.org/repo/gentoo.git/tree/www-client/chromium/files/chromium-unbundle-zlib.patch +Patch52: chromium-81.0.4044.92-unbundle-zlib.patch + +# missing limits.h, error: no member named 'numeric_limits' in namespace 'std' +Patch53: chromium-110-limits.patch + +# ../../third_party/perfetto/include/perfetto/base/task_runner.h:48:55: error: 'uint32_t' has not been declared +Patch56: chromium-96.0.4664.45-missing-cstdint-header.patch + +# Missing (thanks c++17) +Patch57: chromium-96.0.4664.45-missing-cstring.patch + +# Fix headers to look for system paths when we are using system minizip +Patch61: chromium-109-system-minizip-header-fix.patch + +# Fix issue where closure_compiler thinks java is only allowed in android builds +# https://bugs.chromium.org/p/chromium/issues/detail?id=1192875 +Patch65: chromium-91.0.4472.77-java-only-allowed-in-android-builds.patch + +# Update rjsmin to 1.2.0 +Patch69: chromium-103.0.5060.53-update-rjsmin-to-1.2.0.patch + +# Update six to 1.16.0 +Patch70: chromium-105.0.5195.52-python-six-1.16.0.patch + +# Disable tests on remoting build +Patch82: chromium-98.0.4758.102-remoting-no-tests.patch + +# patch for using system brotli +Patch89: chromium-108-system-brotli.patch + +# disable GlobalMediaControlsCastStartStop to avoid crash +# when using the address bar media player button +Patch90: chromium-113-disable-GlobalMediaControlsCastStartStop.patch + +# patch for using system opus +Patch91: chromium-108-system-opus.patch + +# need to explicitly include a kernel header on EL7 to support MFD_CLOEXEC, F_SEAL_SHRINK, F_ADD_SEALS, F_SEAL_SEAL +Patch100: chromium-108-el7-include-fcntl-memfd.patch + +# add define HAVE_STRNDUP on epel7 +Patch101: chromium-108-el7-wayland-strndup-error.patch + +# Work around old and missing headers on EPEL7 +Patch103: chromium-110-epel7-old-headers-workarounds.patch + +# Use old cups (chromium's code workaround breaks on gcc) +# Revert: https://github.com/chromium/chromium/commit/c3213f8779ddc427e89d982514185ed5e4c94e91 +Patch104: chromium-99.0.4844.51-epel7-old-cups.patch + +# libdrm on EL7 is rather old and chromium assumes newer +# This gets us by for now +Patch105: chromium-85.0.4183.83-el7-old-libdrm.patch + +# error: no matching function for call to 'std::basic_string::erase(std::basic_string::const_iterator, __gnu_cxx::__normal_iterator >&)' +# 33 | property_name.erase(property_name.cbegin(), cur); +# Not sure how this EVER worked anywhere, but it only seems to fail on EPEL-7. +Patch106: chromium-98.0.4758.80-epel7-erase-fix.patch + +# Add additional operator== to make el7 happy. +Patch107: chromium-99.0.4844.51-el7-extra-operator==.patch +# workaround for clang bug on el7 +Patch108: chromium-114-constexpr-el7.patch +Patch109: chromium-114-wireless-el7.patch +Patch110: chromium-114-buildflag-el7.patch + +# system ffmpeg +Patch114: chromium-107-ffmpeg-duration.patch +Patch115: chromium-107-proprietary-codecs.patch +# drop av_stream_get_first_dts from internal ffmpeg +Patch116: chromium-112-ffmpeg-first_dts.patch +# revert new-channel-layout-api on f36, old ffmpeg-free +Patch117: chromium-108-ffmpeg-revert-new-channel-layout-api.patch + +# gcc13 +Patch122: chromium-114-gcc13.patch + +# revert AV1 VA-API video encode due to old libva on el9 +Patch130: chromium-114-revert-av1enc-el9.patch + +# Apply these patches to work around EPEL8 issues +Patch300: chromium-113-rhel8-force-disable-use_gnome_keyring.patch +# workaround for clang bug, https://github.com/llvm/llvm-project/issues/57826 +Patch302: chromium-114-workaround_clang_bug-structured_binding.patch +# missing typename +Patch303: chromium-114-typename.patch +# Qt issue +Patch320: chromium-114-add_qt6_linuxui_backend.patch +Patch321: chromium-114-qt-handle_scale_factor_changes.patch +Patch322: chromium-114-qt-fix_font_double_scaling.patch +Patch323: chromium-114-qt_deps.patch +Patch324: chromium-114-qt_enable_AllowQt_feature_flag.patch +Patch325: chromium-114-qt_logical_scale_factor.patch + +# Yandex Search by default +Patch500: 0001-Yandex-as-default-search-engine.patch + +# Use chromium-latest.py to generate clean tarball from released build tarballs, found here: +# http://build.chromium.org/buildbot/official/ +# For Chromium Fedora use chromium-latest.py --stable --ffmpegclean --ffmpegarm +# If you want to include the ffmpeg arm sources append the --ffmpegarm switch +# https://commondatastorage.googleapis.com/chromium-browser-official/chromium-%%{version}.tar.xz +Source0: chromium-%{version}-clean.tar.xz +Source1: README.fedora +Source2: chromium.conf +Source3: chromium-browser.sh +Source4: %{chromium_browser_channel}.desktop +# Also, only used if you want to reproduce the clean tarball. +Source5: clean_ffmpeg.sh +Source6: chromium-latest.py +Source7: get_free_ffmpeg_source_files.py +# Get the names of all tests (gtests) for Linux +# Usage: get_linux_tests_name.py chromium-%%{version} --spec +Source8: get_linux_tests_names.py +# GNOME stuff +Source9: chromium-browser.xml +Source11: chrome-remote-desktop@.service +Source13: master_preferences + +# RHEL 8 needs newer nodejs +%if 0%{?rhel} == 8 +Source19: https://nodejs.org/dist/latest-v16.x/node-%{nodejs_version}-linux-x64.tar.xz +Source21: https://nodejs.org/dist/latest-v16.x/node-%{nodejs_version}-linux-arm64.tar.xz +%endif + +# Yandex logo +Source50: https://upload.wikimedia.org/wikipedia/commons/f/f1/Yandex_logo_2021_Russian.svg + +%if %{clang} +%if 0%{?rhel} == 7 +BuildRequires: llvm-toolset-%{llvm_toolset_version} +%else +BuildRequires: clang +BuildRequires: clang-tools-extra +BuildRequires: llvm +BuildRequires: lld +%endif +# needs for libatomic +%if 0%{?rhel} >= 7 +BuildRequires: %{toolset}-%{dts_version}-libatomic-devel +%endif +%else +%if 0%{?rhel} == 7 || 0%{?rhel} == 8 +BuildRequires: %{toolset}-%{dts_version}-toolchain, %{toolset}-%{dts_version}-libatomic-devel +%endif +%if 0%{?fedora} || 0%{?rhel} > 8 +BuildRequires: gcc-c++ +BuildRequires: gcc +BuildRequires: binutils +%endif +%endif + +# build with system ffmpeg-free +%if ! %{bundleffmpegfree} +BuildRequires: pkgconfig(libavcodec) +BuildRequires: pkgconfig(libavfilter) +BuildRequires: pkgconfig(libavformat) +BuildRequires: pkgconfig(libavutil) +%endif + +# build with system libaom +%if ! %{bundlelibaom} +BuildRequires: libaom-devel +%endif + +BuildRequires: alsa-lib-devel +BuildRequires: atk-devel +BuildRequires: bison +BuildRequires: cups-devel +BuildRequires: dbus-devel +BuildRequires: desktop-file-utils +BuildRequires: expat-devel +BuildRequires: flex +BuildRequires: fontconfig-devel +BuildRequires: glib2-devel +BuildRequires: glibc-devel +BuildRequires: gperf + +%if %{use_qt} +BuildRequires: pkgconfig(Qt5Core) +BuildRequires: pkgconfig(Qt5Widgets) +%endif + +%if ! %{bundleharfbuzz} +BuildRequires: harfbuzz-devel >= 2.4.0 +%endif + +BuildRequires: libatomic +BuildRequires: libcap-devel +BuildRequires: libcurl-devel + +%if ! %{bundlelibdrm} +BuildRequires: libdrm-devel +%endif + +BuildRequires: libgcrypt-devel +BuildRequires: libudev-devel +BuildRequires: libuuid-devel + +%if 0%{?fedora} >= 37 +BuildRequires: libusb-compat-0.1-devel +%else +BuildRequires: libusb-devel +%endif + +BuildRequires: libutempter-devel +BuildRequires: libXdamage-devel +BuildRequires: libXtst-devel +BuildRequires: xcb-proto +BuildRequires: mesa-libgbm-devel + +# Old Fedora (before 30) uses the 1.2 minizip by default. +# Newer Fedora needs to use the compat package +%if 0%{?fedora} >= 30 +BuildRequires: minizip-compat-devel +%else +# RHEL 8 needs to use the compat-minizip (provided by minizip1.2) +%if 0%{?rhel} >= 8 +BuildRequires: minizip-compat-devel +%endif +%endif + +# RHEL 8 needs newer nodejs +%if 0%{?rhel} == 8 +# nothing +%else +BuildRequires: nodejs +%endif + +%if ! %{bootstrap} +BuildRequires: gn +%endif + +BuildRequires: nss-devel >= 3.26 +BuildRequires: pciutils-devel +BuildRequires: pulseaudio-libs-devel + +# For screen sharing on Wayland +%if 0%{?fedora} || 0%{?rhel} >= 8 +BuildRequires: pkgconfig(libpipewire-0.3) +%endif + +# for /usr/bin/appstream-util +BuildRequires: libappstream-glib + +%if %{bootstrap} +# gn needs these +BuildRequires: libstdc++-static +%endif + +# Fedora tries to use system libs whenever it can. +BuildRequires: bzip2-devel +BuildRequires: dbus-glib-devel +# For eu-strip +BuildRequires: elfutils +BuildRequires: elfutils-libelf-devel +BuildRequires: flac-devel + +%if ! %{bundlefreetype} +BuildRequires: freetype-devel +%endif + +# One of the python scripts invokes git to look for a hash. So helpful. +BuildRequires: /usr/bin/git +BuildRequires: hwdata +BuildRequires: kernel-headers +BuildRequires: libevent-devel +BuildRequires: libffi-devel + +%if ! %{bundleicu} +# If this is true, we're using the bundled icu. +# We'd like to use the system icu every time, but we cannot always do that. +# Not newer than 54 (at least not right now) +BuildRequires: libicu-devel = 54.1 +%endif + +%if ! %{bundlelibjpeg} +# If this is true, we're using the bundled libjpeg +# which we need to do because the RHEL 7 libjpeg doesn't work for chromium anymore +BuildRequires: libjpeg-devel +%endif + +%if ! %{bundlelibpng} +# If this is true, we're using the bundled libpng +# which we need to do because the RHEL 7 libpng doesn't work right anymore +BuildRequires: libpng-devel +%endif + +BuildRequires: libudev-devel + +%if ! %{bundlelibusbx} +Requires: libusbx >= 1.0.21-0.1.git448584a +BuildRequires: libusbx-devel >= 1.0.21-0.1.git448584a +%endif + +%if %{use_vaapi} +BuildRequires: libva-devel +%endif + +# We don't use libvpx anymore because Chromium loves to +# use bleeding edge revisions here that break other things +# ... so we just use the bundled libvpx. +%if ! %{bundlelibwebp} +BuildRequires: libwebp-devel +%endif + +BuildRequires: libxslt-devel +BuildRequires: libxshmfence-devel + +# Same here, it seems. +# BuildRequires: libyuv-devel +BuildRequires: mesa-libGL-devel + +%if ! %{bundleopus} +BuildRequires: opus-devel +%endif + +BuildRequires: perl(Switch) +BuildRequires: %{chromium_pybin} + +%if %{gtk3} +BuildRequires: pkgconfig(gtk+-3.0) +%else +BuildRequires: pkgconfig(gtk+-2.0) +%endif + +BuildRequires: python3-devel +BuildRequires: python3-zipp +BuildRequires: python3-simplejson +BuildRequires: python3-importlib-metadata + +%if 0%{?rhel} == 7 || 0%{?rhel} == 8 +BuildRequires: python3-dataclasses +%endif + +%if ! %{bundlepylibs} +%if 0%{?fedora} || 0%{?rhel} >= 8 +BuildRequires: python3-beautifulsoup4 +BuildRequires: python3-html5lib +BuildRequires: python3-markupsafe +BuildRequires: python3-ply +BuildRequires: python3-jinja2 +%else +BuildRequires: python-beautifulsoup4 +BuildRequires: python-html5lib +BuildRequires: python-markupsafe +BuildRequires: python-ply +BuildRequires: python-jinja2 +%endif +%endif + +%if ! %{bundlere2} +Requires: re2 >= 20160401 +BuildRequires: re2-devel >= 20160401 +%endif + +%if ! %{bundlebrotli} +BuildRequires: brotli-devel +%endif + +BuildRequires: speech-dispatcher-devel +BuildRequires: yasm +BuildRequires: zlib-devel + +# Technically, this logic probably applies to older rhel too... but whatever. +# RHEL 8 and 9 do not have gnome-keyring. Not sure why, but whatever again. +%if 0%{?fedora} || 0%{?rhel} == 7 +BuildRequires: pkgconfig(gnome-keyring-1) +%endif + +# remote desktop needs this +BuildRequires: pam-devel +BuildRequires: systemd + +# using the built from source version on aarch64 +BuildRequires: ninja-build + +# Yes, java is needed as well.. +%if %{build_headless} +BuildRequires: java-1.8.0-openjdk-headless +%endif + +BuildRequires: libevdev-devel + +# There is a hardcoded check for nss 3.26 in the chromium code (crypto/nss_util.cc) +Requires: nss%{_isa} >= 3.26 +Requires: nss-mdns%{_isa} + +# GTK modules it expects to find for some reason. +%if %{gtk3} +Requires: libcanberra-gtk3%{_isa} +%else +Requires: libcanberra-gtk2%{_isa} +%endif + +%if 0%{?fedora} +# This enables support for u2f tokens +Requires: u2f-hidraw-policy +%endif + +Requires: chromium-common%{_isa} = %{version}-%{release} + +# rhel 7: ia32 x86_64 +# rhel 8+: ia32, x86_64, aarch64 +# fedora 32 or older: ia32, x86_64, aarch64 +# fedora 33+: x86_64 aarch64 only +%if 0%{?rhel} == 7 +ExclusiveArch: x86_64 +%else +%if 0%{?fedora} > 32 +ExclusiveArch: x86_64 aarch64 +%else +ExclusiveArch: x86_64 aarch64 +%endif +%endif + +# Bundled bits (I'm sure I've missed some) +Provides: bundled(angle) = 2422 +Provides: bundled(bintrees) = 1.0.1 +# This is a fork of openssl. +Provides: bundled(boringssl) + +%if %{bundlebrotli} +Provides: bundled(brotli) = 222564a95d9ab58865a096b8d9f7324ea5f2e03e +%endif + +Provides: bundled(bspatch) +Provides: bundled(cacheinvalidation) = 20150720 +Provides: bundled(colorama) = 799604a104 +Provides: bundled(crashpad) +Provides: bundled(dmg_fp) +Provides: bundled(expat) = 2.2.0 +Provides: bundled(fdmlibm) = 5.3 + +# Don't get too excited. MPEG and other legally problematic stuff is stripped out. +%if %{bundleffmpegfree} +Provides: bundled(ffmpeg) = 5.1.2 +%endif + +%if %{bundlelibaom} +Provides: bundled(libaom) +%endif + +Provides: bundled(fips181) = 2.2.3 + +%if %{bundlefontconfig} +Provides: bundled(fontconfig) = 2.12.6 +%endif + +%if %{bundlefreetype} +Provides: bundled(freetype) = 2.11.0git +%endif + +Provides: bundled(gperftools) = svn144 + +%if %{bundleharfbuzz} +Provides: bundled(harfbuzz) = 2.4.0 +%endif + +Provides: bundled(hunspell) = 1.6.0 +Provides: bundled(iccjpeg) + +%if %{bundleicu} +Provides: bundled(icu) = 58.1 +%endif + +Provides: bundled(kitchensink) = 1 +Provides: bundled(leveldb) = 1.20 +Provides: bundled(libaddressinput) = 0 + +%if %{bundlelibdrm} +Provides: bundled(libdrm) = 2.4.85 +%endif + +Provides: bundled(libevent) = 1.4.15 +Provides: bundled(libjingle) = 9564 + +%if %{bundlelibjpeg} +Provides: bundled(libjpeg-turbo) = 1.4.90 +%endif + +Provides: bundled(libphonenumber) = a4da30df63a097d67e3c429ead6790ad91d36cf4 + +%if %{bundlelibpng} +Provides: bundled(libpng) = 1.6.22 +%endif + +Provides: bundled(libsrtp) = 2cbd85085037dc7bf2eda48d4cf62e2829056e2d + +%if %{bundlelibusbx} +Provides: bundled(libusbx) = 1.0.17 +%endif + +Provides: bundled(libvpx) = 1.6.0 + +%if %{bundlelibwebp} +Provides: bundled(libwebp) = 0.6.0 +%endif + +%if %{bundlelibxml} +# Well, it's actually newer than 2.9.4 and has code in it that has been reverted upstream... but eh. +Provides: bundled(libxml) = 2.9.4 +%endif + +Provides: bundled(libXNVCtrl) = 302.17 +Provides: bundled(libyuv) = 1651 +Provides: bundled(lzma) = 15.14 +Provides: bundled(libudis86) = 1.7.1 +Provides: bundled(mesa) = 9.0.3 +Provides: bundled(NSBezierPath) = 1.0 +Provides: bundled(mozc) + +%if %{bundleopus} +Provides: bundled(opus) = 1.1.3 +%endif + +Provides: bundled(ots) = 8d70cffebbfa58f67a5c3ed0e9bc84dccdbc5bc0 +Provides: bundled(protobuf) = 3.0.0.beta.3 +Provides: bundled(qcms) = 4 + +%if %{bundlere2} +Provides: bundled(re2) +%endif + +Provides: bundled(sfntly) = 04740d2600193b14aa3ef24cd9fbb3d5996b9f77 +Provides: bundled(skia) +Provides: bundled(SMHasher) = 0 +Provides: bundled(snappy) = 1.1.4-head +Provides: bundled(speech-dispatcher) = 0.7.1 +Provides: bundled(sqlite) = 3.17patched +Provides: bundled(superfasthash) = 0 +Provides: bundled(talloc) = 2.0.1 +Provides: bundled(usrsctp) = 0 +Provides: bundled(v8) = 5.9.211.31 +Provides: bundled(webrtc) = 90usrsctp +Provides: bundled(woff2) = 445f541996fe8376f3976d35692fd2b9a6eedf2d +Provides: bundled(xdg-mime) +Provides: bundled(xdg-user-dirs) +# Provides: bundled(zlib) = 1.2.11 + +# For selinux scriptlet +Requires(post): /usr/sbin/semanage +Requires(post): /usr/sbin/restorecon + +%description +Chromium is an open-source web browser, powered by WebKit (Blink). + +%package common +Summary: Files needed for both the headless_shell and full Chromium +# Chromium needs an explicit Requires: minizip-compat +# We put it here to cover headless too. +%if 0%{?fedora} >= 30 +Requires: minizip-compat%{_isa} +%else +%if 0%{?rhel} == 7 +# Do nothing +%else +%if 0%{?rhel} == 9 +Requires: minizip1.2%{_isa} +%else +Requires: minizip%{_isa} +%endif +%endif +%endif +# -common doesn't have chrome-remote-desktop bits +# but we need to clean it up if it gets disabled again +# NOTE: Check obsoletes version to be sure it matches +%if ! %{build_remoting} +Provides: chrome-remote-desktop = %{version}-%{release} +Obsoletes: chrome-remote-desktop <= 81.0.4044.138 +%endif + +%description common +%{summary}. + +%if %{build_remoting} +%package -n chrome-remote-desktop +Requires(pre): shadow-utils +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +Requires: xorg-x11-server-Xvfb +Requires: python3-psutil +Requires: chromium-common%{_isa} = %{version}-%{release} +Summary: Remote desktop support for google-chrome & chromium + +%description -n chrome-remote-desktop +Remote desktop support for google-chrome & chromium. +%endif + +%package -n chromedriver +Summary: WebDriver for Google Chrome/Chromium +Requires: chromium-common%{_isa} = %{version}-%{release} + +%description -n chromedriver +WebDriver is an open source tool for automated testing of webapps across many +browsers. It provides capabilities for navigating to web pages, user input, +JavaScript execution, and more. ChromeDriver is a standalone server which +implements WebDriver's wire protocol for Chromium. It is being developed by +members of the Chromium and WebDriver teams. + +%package headless +Summary: A minimal headless shell built from Chromium +Requires: chromium-common%{_isa} = %{version}-%{release} + +%description headless +A minimal headless client built from Chromium. headless_shell is built +without support for alsa, cups, dbus, gconf, gio, kerberos, pulseaudio, or +udev. + +%prep +%setup -q -n chromium-%{version} + +### Chromium Fedora Patches ### +%patch -P0 -p1 -b .sandboxpie +%patch -P1 -p1 -b .etc +%patch -P2 -p1 -b .gnsystem +%patch -P5 -p1 -b .nozlibmangle +%patch -P6 -p1 -b .nounrar +%patch -P8 -p1 -b .widevine-other-locations +%patch -P11 -p1 -b .py3 + +%patch -P20 -p1 -b .disable-font-test + +%if 0%{?fedora} || 0%{?rhel} >= 8 +%patch -P52 -p1 -b .unbundle-zlib +%endif + +%patch -P53 -p1 -b .limits-header +%patch -P56 -p1 -b .missing-cstdint +%patch -P57 -p1 -b .missing-cstring + +%if ! %{bundleminizip} +%patch -P61 -p1 -b .system-minizip +%endif + +%patch -P65 -p1 -b .java-only-allowed +%patch -P69 -p1 -b .update-rjsmin-to-1.2.0 +%patch -P70 -p1 -b .update-six-to-1.16.0 +%patch -P82 -p1 -b .remoting-no-tests + +%if ! %{bundlebrotli} +%patch -P89 -p1 -b .system-brotli +%endif + +%patch -P90 -p1 -b .disable-GlobalMediaControlsCastStartStop + +%if ! %{bundleopus} +%patch -P91 -p1 -b .system-opus +%endif + +# Fedora branded user agent +%if 0%{?fedora} +%patch -P12 -p1 -b .fedora-user-agent +%endif + +%if ! %{bundleffmpegfree} +%patch -P114 -p1 -b .system-ffmppeg +%patch -P115 -p1 -b .prop-codecs +%patch -P116 -p1 -b .first_dts +%if 0%{?fedora} == 36 +%patch -P117 -p1 -b .revert-new-channel-layout-api +%endif +%endif + +# EPEL specific patches +%if 0%{?rhel} == 7 +%patch -P100 -p1 -b .el7-memfd-fcntl-include +%patch -P101 -p1 -b .wayland-strndup-error +%patch -P103 -p1 -b .epel7-header-workarounds +%patch -P104 -p1 -b .el7cups +%patch -P105 -p1 -b .el7-old-libdrm +%patch -P106 -p1 -b .el7-erase-fix +%patch -P107 -p1 -b .el7-extra-operator-equalequal +%patch -P108 -p1 -b .constexpr +%patch -P109 -p1 -b .wireless +%patch -P110 -p1 -b .buildflag-el7 +%endif + +%patch -P122 -p1 -b .gcc13 + +%if 0%{?rhel} == 9 +%patch -P130 -p1 -b .revert-av1enc +%endif + +%if 0%{?rhel} >= 8 +%patch -P300 -p1 -b .disblegnomekeyring +%endif + +%if %{clang} +%if 0%{?rhel} || 0%{?fedora} < 38 +%patch -P302 -p1 -b .workaround_clang_bug-structured_binding +%endif +%endif + +%patch -P303 -p1 -b .typename + +%patch -P320 -p1 -b .add_qt6_linuxui_backend +%patch -P321 -p1 -b .handle_scale_factor_changes +%patch -P322 -p1 -b .fix_font_double_scaling +%patch -P323 -p1 -b .qt_deps +%patch -P324 -p1 -b .qt_enable_AllowQt_feature_flag +%patch -P325 -p1 -b .qt_logical_scale_factor + +%patch -P500 -p1 -b .Yandex-as-default-search-engine + +# We patch Chromium to open chrome://new-tab-page even with non-Google search engines +# and to use Yandex by default instead of Google for most of our users, +# but that page contains a Google logo and a search bar which utilises the chosen +# search engine, e.g. Yandex. That is why Google logo is irrelevant there. +# Replace file to avoid patching, but check that it exists: +# something has changed if it does not. +# TODO: allow to switch this image via alternatives(8): +# XXX Chromium does not allow to load "local files" due to security reasons. +test -f ./chrome/browser/resources/new_tab_page/icons/google_logo.svg +install -m0644 %{SOURCE50} ./chrome/browser/resources/new_tab_page/icons/google_logo.svg + +# Change shebang in all relevant files in this directory and all subdirectories +# See `man find` for how the `-exec command {} +` syntax works +find -type f \( -iname "*.py" \) -exec sed -i '1s=^#! */usr/bin/\(python\|env python\)[23]\?=#!%{__python3}=' {} + + + +%if 0%{?rhel} == 8 + pushd third_party/node/linux +%ifarch x86_64 + tar xf %{SOURCE19} + mv node-%{nodejs_version}-linux-x64 node-linux-x64 +%endif +%ifarch aarch64 + tar xf %{SOURCE21} + mv node-%{nodejs_version}-linux-arm64 node-linux-arm64 + # This is weird, but whatever + ln -s node-linux-arm64 node-linux-x64 +%endif +popd +%else + mkdir -p third_party/node/linux/node-linux-x64/bin + ln -s %{_bindir}/node third_party/node/linux/node-linux-x64/bin/node +%endif + +# Get rid of the pre-built eu-strip binary, it is x86_64 and of mysterious origin +rm -rf buildtools/third_party/eu-strip/bin/eu-strip + +# Replace it with a symlink to the Fedora copy +ln -s %{_bindir}/eu-strip buildtools/third_party/eu-strip/bin/eu-strip + +%if %{bundlelibusbx} +# no hackity hack hack +%else +# hackity hack hack +rm -rf third_party/libusb/src/libusb/libusb.h +# we _shouldn't need to do this, but it looks like we do. +cp -a %{_includedir}/libusb-1.0/libusb.h third_party/libusb/src/libusb/libusb.h +%endif + +# Hard code extra version +sed -i 's/getenv("CHROME_VERSION_EXTRA")/"Fedora Project"/' chrome/common/channel_info_posix.cc + +# Fix hardcoded path in remoting code +sed -i 's|/opt/google/chrome-remote-desktop|%{crd_path}|g' remoting/host/setup/daemon_controller_delegate_linux.cc + +# reduce debuginfos +sed -i 's|-g2|-g0|g' build/config/compiler/BUILD.gn + +# change moc to moc-qt5 for fedora +sed -i 's|moc|moc-qt5|g' ui/qt/moc_wrapper.py + +%build +# utf8 issue on epel7, Internal parsing error 'ascii' codec can't +# decode byte 0xe2 in position 474: ordinal not in range(128) +export LANG=en_US.UTF-8 + +# reduce warnings +%if %{clang} +FLAGS=' -Wno-deprecated-declarations -Wno-unknown-warning-option -Wno-unused-command-line-argument' +FLAGS+=' -Wno-unused-but-set-variable -Wno-unused-result -Wno-unused-function -Wno-unused-variable' +FLAGS+=' -Wno-unused-const-variable -Wno-unneeded-internal-declaration -Wno-unknown-attributes' +%endif + +%if %{system_build_flags} +CFLAGS=${CFLAGS/-g } +CFLAGS=${CFLAGS/-fexceptions} +CFLAGS=${CFLAGS/-Wp,-D_GLIBCXX_ASSERTIONS} +CFLAGS=${CFLAGS/-fcf-protection} +CFLAGS=${CFLAGS/-fstack-clash-protection} +CFLAGS="$CFLAGS $FLAGS" +CXXFLAGS="$CFLAGS" +%else +# override system build flags +CFLAGS="$FLAGS" +CXXFLAGS="$FLAGS" +%endif + +%if %{clang} +export CC=clang +export CXX=clang++ +export AR=llvm-ar +export NM=llvm-nm +export READELF=llvm-readelf +%else +export CC=gcc +export CXX=g++ +export AR=ar +export NM=nm +export READELF=readelf +%endif +export CFLAGS +export CXXFLAGS + +# enable toolset on el7 +%if 0%{?rhel} == 7 +%if %{clang} +. /opt/rh/llvm-toolset-%{llvm_toolset_version}/enable +%else +. /opt/rh/%{toolset}-%{dts_version}/enable +%endif +%endif + +# enable gcc toolset on el8 +%if 0%{?rhel} == 8 && ! %{clang} +. /opt/rh/%{toolset}-%{dts_version}/enable +%endif + +# Core defines are flags that are true for both the browser and headless. +CHROMIUM_CORE_GN_DEFINES="" +# using system toolchain +CHROMIUM_CORE_GN_DEFINES+=' custom_toolchain="//build/toolchain/linux/unbundle:default"' +CHROMIUM_CORE_GN_DEFINES+=' host_toolchain="//build/toolchain/linux/unbundle:default"' +CHROMIUM_CORE_GN_DEFINES+=' is_debug=false dcheck_always_on=false dcheck_is_configurable=false' +CHROMIUM_CORE_GN_DEFINES+=' use_goma=false' +CHROMIUM_CORE_GN_DEFINES+=' enable_nacl=false' +CHROMIUM_CORE_GN_DEFINES+=' system_libdir="%{_lib}"' + +%if %{official_build} +CHROMIUM_CORE_GN_DEFINES+=' is_official_build=true use_thin_lto=false is_cfi=false chrome_pgo_phase=0 use_debug_fission=true' +sed -i 's|OFFICIAL_BUILD|GOOGLE_CHROME_BUILD|g' tools/generate_shim_headers/generate_shim_headers.py +%endif + +%if %{useapikey} +CHROMIUM_CORE_GN_DEFINES+=' google_api_key="%{api_key}"' +%endif + +%if %{userestrictedapikeys} +CHROMIUM_CORE_GN_DEFINES+=' google_default_client_id="%{default_client_id}"' +CHROMIUM_CORE_GN_DEFINES+=' google_default_client_secret="%{default_client_secret}"' +%endif + +%if %{clang} +CHROMIUM_CORE_GN_DEFINES+=' is_clang=true' +CHROMIUM_CORE_GN_DEFINES+=' clang_base_path="%{_prefix}"' +CHROMIUM_CORE_GN_DEFINES+=' clang_use_chrome_plugins=false' +CHROMIUM_CORE_GN_DEFINES+=' use_lld=true' +%else +CHROMIUM_CORE_GN_DEFINES+=' is_clang=false' +CHROMIUM_CORE_GN_DEFINES+=' use_lld=false' +%endif + +CHROMIUM_CORE_GN_DEFINES+=' use_sysroot=false disable_fieldtrial_testing_config=true rtc_enable_symbol_export=true' + +%if %{use_gold} +CHROMIUM_CORE_GN_DEFINES+=' use_gold=true' +%else +CHROMIUM_CORE_GN_DEFINES+=' use_gold=false' +%endif + +%ifarch aarch64 +CHROMIUM_CORE_GN_DEFINES+=' target_cpu="arm64"' +%endif + +CHROMIUM_CORE_GN_DEFINES+=' icu_use_data_file=true' +CHROMIUM_CORE_GN_DEFINES+=' target_os="linux"' +CHROMIUM_CORE_GN_DEFINES+=' current_os="linux"' +CHROMIUM_CORE_GN_DEFINES+=' treat_warnings_as_errors=false' +CHROMIUM_CORE_GN_DEFINES+=' use_custom_libcxx=false' +CHROMIUM_CORE_GN_DEFINES+=' enable_iterator_debugging=false' +CHROMIUM_CORE_GN_DEFINES+=' enable_vr=false' +CHROMIUM_CORE_GN_DEFINES+=' build_dawn_tests=false enable_perfetto_unittests=false' +CHROMIUM_CORE_GN_DEFINES+=' disable_fieldtrial_testing_config=true' +CHROMIUM_CORE_GN_DEFINES+=' blink_symbol_level=0 symbol_level=0 v8_symbol_level=0' +CHROMIUM_CORE_GN_DEFINES+=' blink_enable_generated_code_formatting=false' +CHROMIUM_CORE_GN_DEFINES+=' angle_has_histograms=false' +export CHROMIUM_CORE_GN_DEFINES + +# browser gn defines +CHROMIUM_BROWSER_GN_DEFINES="" + +# if systemwide ffmpeg free is used, the proprietary codecs can be set to true to load the codecs from ffmpeg-free +# the codecs computation is passed to ffmpeg-free in this case +%if ! %{bundleffmpegfree} +CHROMIUM_BROWSER_GN_DEFINES+=' ffmpeg_branding="Chrome" proprietary_codecs=true is_component_ffmpeg=true enable_ffmpeg_video_decoders=true media_use_ffmpeg=true' +%else +CHROMIUM_BROWSER_GN_DEFINES+=' ffmpeg_branding="Chromium" proprietary_codecs=false is_component_ffmpeg=false enable_ffmpeg_video_decoders=false media_use_ffmpeg=true' +%endif +CHROMIUM_BROWSER_GN_DEFINES+=' media_use_openh264=false' +CHROMIUM_BROWSER_GN_DEFINES+=' rtc_use_h264=false' +CHROMIUM_BROWSER_GN_DEFINES+=' use_kerberos=true' + +%if 0%{?rhel} == 8 +CHROMIUM_BROWSER_GN_DEFINES+=' use_gnome_keyring=false use_glib=true' +%endif + +%if %{use_qt} +CHROMIUM_BROWSER_GN_DEFINES+=' use_qt=true' +%else +CHROMIUM_BROWSER_GN_DEFINES+=' use_qt=false' +%endif + +CHROMIUM_BROWSER_GN_DEFINES+=' use_gio=true use_pulseaudio=true' +CHROMIUM_BROWSER_GN_DEFINES+=' enable_hangout_services_extension=true' +CHROMIUM_BROWSER_GN_DEFINES+=' use_aura=true' +CHROMIUM_BROWSER_GN_DEFINES+=' enable_widevine=true' + +%if %{use_vaapi} +CHROMIUM_BROWSER_GN_DEFINES+=' use_vaapi=true' +%else +CHROMIUM_BROWSER_GN_DEFINES+=' use_vaapi=false' +%endif + +%if %{use_v4l2_codec} +CHROMIUM_BROWSER_GN_DEFINES+=' use_v4l2_codec=true' +%endif + +%if 0%{?fedora} || 0%{?rhel} >= 8 +CHROMIUM_BROWSER_GN_DEFINES+=' rtc_use_pipewire=true rtc_link_pipewire=true' +%endif + +CHROMIUM_BROWSER_GN_DEFINES+=' use_system_libffi=true' +export CHROMIUM_BROWSER_GN_DEFINES + +# headless gn defines +CHROMIUM_HEADLESS_GN_DEFINES="" +CHROMIUM_HEADLESS_GN_DEFINES+=' use_ozone=true ozone_auto_platforms=false ozone_platform="headless" ozone_platform_headless=true' +CHROMIUM_HEADLESS_GN_DEFINES+=' angle_enable_vulkan=true angle_enable_swiftshader=true headless_use_embedded_resources=false' +CHROMIUM_HEADLESS_GN_DEFINES+=' headless_use_prefs=false headless_use_policy=false' +CHROMIUM_HEADLESS_GN_DEFINES+=' v8_use_external_startup_data=false enable_print_preview=false enable_remoting=false' +CHROMIUM_HEADLESS_GN_DEFINES+=' use_alsa=false use_bluez=false use_cups=false use_dbus=false use_gio=false use_kerberos=false' +CHROMIUM_HEADLESS_GN_DEFINES+=' use_libpci=false use_pulseaudio=false use_udev=false rtc_use_pipewire=false' +CHROMIUM_HEADLESS_GN_DEFINES+=' v8_enable_lazy_source_positions=false use_glib=false use_gtk=false use_pangocairo=false' +CHROMIUM_HEADLESS_GN_DEFINES+=' use_qt=false is_component_build=false enable_ffmpeg_video_decoders=false media_use_ffmpeg=false' +CHROMIUM_HEADLESS_GN_DEFINES+=' media_use_libvpx=false proprietary_codecs=false' +export CHROMIUM_HEADLESS_GN_DEFINES + +build/linux/unbundle/replace_gn_files.py --system-libraries \ +%if ! %{bundlelibaom} + libaom \ +%endif +%if ! %{bundlebrotli} + brotli \ +%endif +%if ! %{bundlefontconfig} + fontconfig \ +%endif +%if ! %{bundleffmpegfree} + ffmpeg \ +%endif +%if ! %{bundlefreetype} + freetype \ +%endif +%if ! %{bundleharfbuzz} + harfbuzz-ng \ +%endif +%if ! %{bundleicu} + icu \ +%endif +%if ! %{bundlelibdrm} + libdrm \ +%endif +%if ! %{bundlelibjpeg} + libjpeg \ +%endif +%if ! %{bundlelibpng} + libpng \ +%endif +%if ! %{bundlelibusbx} + libusb \ +%endif +%if ! %{bundlelibwebp} + libwebp \ +%endif +%if ! %{bundlelibxml} + libxml \ +%endif + libxslt \ +%if ! %{bundleopus} + opus \ +%endif +%if ! %{bundlere2} + re2 \ +%endif +%if ! %{bundleminizip} + zlib \ +%endif + flac + +# Check that there is no system 'google' module, shadowing bundled ones: +if python3 -c 'import google ; print google.__path__' 2> /dev/null ; then \ + echo "Python 3 'google' module is defined, this will shadow modules of this build"; \ + exit 1 ; \ +fi + +%if %{bootstrap} +tools/gn/bootstrap/bootstrap.py --gn-gen-args="$CHROMIUM_CORE_GN_DEFINES $CHROMIUM_BROWSER_GN_DEFINES" +%else +mkdir -p %{builddir} && cp -a %{_bindir}/gn %{builddir}/ +%endif + +%{builddir}/gn --script-executable=%{chromium_pybin} gen --args="$CHROMIUM_CORE_GN_DEFINES $CHROMIUM_BROWSER_GN_DEFINES" %{builddir} + +%if %{build_headless} +%{builddir}/gn --script-executable=%{chromium_pybin} gen --args="$CHROMIUM_CORE_GN_DEFINES $CHROMIUM_HEADLESS_GN_DEFINES" %{headlessbuilddir} +%endif + +%if %{build_remoting} +%{builddir}/gn --script-executable=%{chromium_pybin} gen --args="$CHROMIUM_CORE_GN_DEFINES $CHROMIUM_BROWSER_GN_DEFINES" %{remotingbuilddir} +%endif + +%if %{build_headless} +# Do headless first. +%build_target %{headlessbuilddir} headless_shell +%endif + +%build_target %{builddir} chrome +%build_target %{builddir} chrome_sandbox +%build_target %{builddir} chromedriver + +%if %{build_clear_key_cdm} +%build_target %{builddir} clear_key_cdm +%endif + +%build_target %{builddir} policy_templates + +%if %{build_remoting} +# remote client +# ninja -C ../%{builddir} -vvv remoting_me2me_host remoting_start_host remoting_it2me_native_messaging_host remoting_me2me_native_messaging_host remoting_native_messaging_manifests remoting_resources +%build_target %{remotingbuilddir} remoting_all +%endif + +%install +rm -rf %{buildroot} + +mkdir -p %{buildroot}%{_bindir} \ + %{buildroot}%{chromium_path}/locales \ + %{buildroot}%{_sysconfdir}/%{name} + +# install system wide chromium config +cp -a %{SOURCE2} %{buildroot}%{_sysconfdir}/%{name}/%{name}.conf +cp -a %{SOURCE3} %{buildroot}%{chromium_path}/%{chromium_browser_channel}.sh + +%if ! %{use_vaapi} +# remove vaapi flags +echo "# system wide chromium flags" > %{buildroot}%{_sysconfdir}/%{name}/%{name}.conf +%endif + +export BUILD_TARGET=`cat /etc/redhat-release` +export CHROMIUM_PATH=%{chromium_path} +export CHROMIUM_BROWSER_CHANNEL=%{chromium_browser_channel} + +sed -i "s|@@BUILD_TARGET@@|$BUILD_TARGET|g" %{buildroot}%{chromium_path}/%{chromium_browser_channel}.sh +sed -i "s|@@CHROMIUM_PATH@@|$CHROMIUM_PATH|g" %{buildroot}%{chromium_path}/%{chromium_browser_channel}.sh +sed -i "s|@@CHROMIUM_BROWSER_CHANNEL@@|$CHROMIUM_BROWSER_CHANNEL|g" %{buildroot}%{chromium_path}/%{chromium_browser_channel}.sh + +%if "%{chromium_channel}" == "%{nil}" + sed -i "s|@@EXTRA_FLAGS@@||g" %{buildroot}%{chromium_path}/%{chromium_browser_channel}.sh +%else + # Enable debug outputs for beta and dev channels + export EXTRA_FLAGS="--enable-logging=stderr --v=2" + sed -i "s|@@EXTRA_FLAGS@@|$EXTRA_FLAGS|g" %{buildroot}%{chromium_path}/%{chromium_browser_channel}.sh +%endif + +ln -s ../..%{chromium_path}/%{chromium_browser_channel}.sh %{buildroot}%{_bindir}/%{chromium_browser_channel} +mkdir -p %{buildroot}%{_mandir}/man1/ + +pushd %{builddir} + cp -a chrom*.pak resources.pak icudtl.dat %{buildroot}%{chromium_path} + cp -a locales/*.pak %{buildroot}%{chromium_path}/locales/ + %ifarch x86_64 aarch64 + cp -a libvk_swiftshader.so %{buildroot}%{chromium_path} + strip %{buildroot}%{chromium_path}/libvk_swiftshader.so + cp -a libvulkan.so.1 %{buildroot}%{chromium_path} + strip %{buildroot}%{chromium_path}/libvulkan.so.1 + cp -a vk_swiftshader_icd.json %{buildroot}%{chromium_path} + %endif + cp -a chrome %{buildroot}%{chromium_path}/%{chromium_browser_channel} + # Explicitly strip chromium-browser (since we don't use debuginfo here anyway) + strip %{buildroot}%{chromium_path}/%{chromium_browser_channel} + cp -a chrome_sandbox %{buildroot}%{chromium_path}/chrome-sandbox + strip %{buildroot}%{chromium_path}/chrome-sandbox + cp -a chrome_crashpad_handler %{buildroot}%{chromium_path}/chrome_crashpad_handler + strip %{buildroot}%{chromium_path}/chrome_crashpad_handler + cp -a ../../chrome/app/resources/manpage.1.in %{buildroot}%{_mandir}/man1/%{chromium_browser_channel}.1 + sed -i "s|@@PACKAGE@@|%{chromium_browser_channel}|g" %{buildroot}%{_mandir}/man1/%{chromium_browser_channel}.1 + sed -i "s|@@MENUNAME@@|%{chromium_menu_name}|g" %{buildroot}%{_mandir}/man1/%{chromium_browser_channel}.1 + + # V8 initial snapshots + # https://code.google.com/p/chromium/issues/detail?id=421063 + cp -a v8_context_snapshot.bin %{buildroot}%{chromium_path} + + # This is ANGLE, not to be confused with the similarly named files under swiftshader/ + cp -a libEGL.so libGLESv2.so %{buildroot}%{chromium_path} + strip %{buildroot}%{chromium_path}/libEGL.so + strip %{buildroot}%{chromium_path}/libGLESv2.so + + %if %{use_qt} + cp -a libqt5_shim.so %{buildroot}%{chromium_path} + strip %{buildroot}%{chromium_path}/libqt5_shim.so + %endif + + %if %{build_clear_key_cdm} + %ifarch x86_64 + cp -a ClearKeyCdm/_platform_specific/linux_x64/libclearkeycdm.so %{buildroot}%{chromium_path} + %else + %ifarch aarch64 + cp -a ClearKeyCdm/_platform_specific/linux_arm64/libclearkeycdm.so %{buildroot}%{chromium_path} + %else + cp -a libclearkeycdm.so %{buildroot}%{chromium_path} + %endif + %endif + strip %{buildroot}%{chromium_path}/libclearkeycdm.so + %endif + + # chromedriver + cp -a chromedriver %{buildroot}%{chromium_path}/chromedriver + ln -s ../..%{chromium_path}/chromedriver %{buildroot}%{_bindir}/chromedriver + + %if %{build_remoting} + # Remote desktop bits + mkdir -p %{buildroot}%{crd_path} + %endif +popd + +%if %{build_remoting} + pushd %{remotingbuilddir} + # Hey, there is a library now. + cp -a libremoting_core.so %{buildroot}%{crd_path}/ + strip %{buildroot}%{crd_path}/libremoting_core.so + + # See remoting/host/installer/linux/Makefile for logic + mkdir -p %{buildroot}%{crd_path}/remoting_locales + cp -a remoting_native_messaging_host %{buildroot}%{crd_path}/native-messaging-host + cp -a remote_assistance_host %{buildroot}%{crd_path}/remote-assistance-host + cp -a remoting_locales/*.pak %{buildroot}%{crd_path}/remoting_locales/ + cp -a remoting_me2me_host %{buildroot}%{crd_path}/chrome-remote-desktop-host + cp -a remoting_start_host %{buildroot}%{crd_path}/start-host + cp -a remoting_user_session %{buildroot}%{crd_path}/user-session + chmod +s %{buildroot}%{crd_path}/user-session + + # chromium + mkdir -p %{buildroot}%{_sysconfdir}/chromium/native-messaging-hosts + # google-chrome + mkdir -p %{buildroot}%{_sysconfdir}/opt/chrome/ + cp -a remoting/* %{buildroot}%{_sysconfdir}/chromium/native-messaging-hosts/ + for i in %{buildroot}%{_sysconfdir}/chromium/native-messaging-hosts/*.json; do + sed -i 's|/opt/google/chrome-remote-desktop|%{crd_path}|g' $i + done + mkdir -p %{buildroot}%{_sysconfdir}/opt/chrome/native-messaging-hosts + pushd %{buildroot}%{_sysconfdir}/opt/chrome/native-messaging-hosts + for i in ../../../chromium/native-messaging-hosts/*; do + # rpm gets unhappy when we symlink here + cp -a $i . + done + popd + popd + + mkdir -p %{buildroot}/var/lib/chrome-remote-desktop + touch %{buildroot}/var/lib/chrome-remote-desktop/hashes + + mkdir -p %{buildroot}%{_sysconfdir}/pam.d/ + pushd %{buildroot}%{_sysconfdir}/pam.d/ + ln -s system-auth chrome-remote-desktop + popd + + cp -a remoting/host/linux/linux_me2me_host.py %{buildroot}%{crd_path}/chrome-remote-desktop + cp -a remoting/host/installer/linux/is-remoting-session %{buildroot}%{crd_path}/ + + mkdir -p %{buildroot}%{_unitdir} + cp -a %{SOURCE11} %{buildroot}%{_unitdir}/ + sed -i 's|@@CRD_PATH@@|%{crd_path}|g' %{buildroot}%{_unitdir}/chrome-remote-desktop@.service +%endif + +%if %{build_headless} + pushd %{headlessbuilddir} + cp -a headless_lib_data.pak headless_lib_strings.pak headless_shell %{buildroot}%{chromium_path} + # Explicitly strip headless_shell binary + strip %{buildroot}%{chromium_path}/headless_shell + popd +%endif + +# Add directories for policy management +mkdir -p %{buildroot}%{_sysconfdir}/chromium/policies/managed +mkdir -p %{buildroot}%{_sysconfdir}/chromium/policies/recommended + +cp -a out/Release/gen/chrome/app/policy/common/html/en-US/*.html . +cp -a out/Release/gen/chrome/app/policy/linux/examples/chrome.json . + +mkdir -p %{buildroot}%{_datadir}/icons/hicolor/256x256/apps +cp -a chrome/app/theme/chromium/product_logo_256.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/%{chromium_browser_channel}.png +mkdir -p %{buildroot}%{_datadir}/icons/hicolor/128x128/apps +cp -a chrome/app/theme/chromium/product_logo_128.png %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/%{chromium_browser_channel}.png +mkdir -p %{buildroot}%{_datadir}/icons/hicolor/64x64/apps +cp -a chrome/app/theme/chromium/product_logo_64.png %{buildroot}%{_datadir}/icons/hicolor/64x64/apps/%{chromium_browser_channel}.png +mkdir -p %{buildroot}%{_datadir}/icons/hicolor/48x48/apps +cp -a chrome/app/theme/chromium/product_logo_48.png %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/%{chromium_browser_channel}.png +mkdir -p %{buildroot}%{_datadir}/icons/hicolor/24x24/apps +cp -a chrome/app/theme/chromium/product_logo_24.png %{buildroot}%{_datadir}/icons/hicolor/24x24/apps/%{chromium_browser_channel}.png + +# Install the master_preferences file +install -m 0644 %{SOURCE13} %{buildroot}%{_sysconfdir}/%{name}/ + +mkdir -p %{buildroot}%{_datadir}/applications/ +desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE4} + +install -D -m0644 chrome/installer/linux/common/chromium-browser/chromium-browser.appdata.xml \ + ${RPM_BUILD_ROOT}%{_datadir}/metainfo/%{chromium_browser_channel}.appdata.xml +appstream-util validate-relax --nonet ${RPM_BUILD_ROOT}%{_datadir}/metainfo/%{chromium_browser_channel}.appdata.xml + +mkdir -p %{buildroot}%{_datadir}/gnome-control-center/default-apps/ +cp -a %{SOURCE9} %{buildroot}%{_datadir}/gnome-control-center/default-apps/ + +# README.fedora +cp %{SOURCE1} . + +%post +# Set SELinux labels - semanage itself will adjust the lib directory naming +# But only do it when selinux is enabled, otherwise, it gets noisy. +if selinuxenabled; then + semanage fcontext -a -t bin_t /usr/lib/%{chromium_browser_channel} &>/dev/null || : + semanage fcontext -a -t bin_t /usr/lib/%{chromium_browser_channel}/%{chromium_browser_channel}.sh &>/dev/null || : + semanage fcontext -a -t chrome_sandbox_exec_t /usr/lib/chrome-sandbox &>/dev/null || : + restorecon -R -v %{chromium_path}/%{chromium_browser_channel} &>/dev/null || : +fi + +%if %{build_remoting} +%pretrans -n chrome-remote-desktop -p +path = "/etc/opt/chrome/native-messaging-hosts" +st = posix.stat(path) +if st and st.type == "link" then + os.remove(path) +end +%endif + +%if %{build_remoting} +%pre -n chrome-remote-desktop +getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-desktop + +%post -n chrome-remote-desktop +%systemd_post chrome-remote-desktop@.service + +%preun -n chrome-remote-desktop +%systemd_preun chrome-remote-desktop@.service + +%postun -n chrome-remote-desktop +%systemd_postun_with_restart chrome-remote-desktop@.service +%endif + +%files +%doc AUTHORS README.fedora +%doc chrome_policy_list.html *.json +%license LICENSE +%config(noreplace) %{_sysconfdir}/%{name}/chromium.conf +%config %{_sysconfdir}/%{name}/master_preferences +%config %{_sysconfdir}/%{name}/policies/ +%if %{build_remoting} +%exclude %{_sysconfdir}/%{name}/native-messaging-hosts/* +%endif +%{_bindir}/%{chromium_browser_channel} +%{chromium_path}/*.bin +%{chromium_path}/chrome_*.pak +%{chromium_path}/chrome_crashpad_handler +%{chromium_path}/resources.pak +%{chromium_path}/%{chromium_browser_channel} +%{chromium_path}/%{chromium_browser_channel}.sh +%attr(4755, root, root) %{chromium_path}/chrome-sandbox +%if %{use_qt} +%{chromium_path}/libqt5_shim.so +%endif +%{_mandir}/man1/%{chromium_browser_channel}.* +%{_datadir}/icons/hicolor/*/apps/%{chromium_browser_channel}.png +%{_datadir}/applications/*.desktop +%{_datadir}/metainfo/*.appdata.xml +%{_datadir}/gnome-control-center/default-apps/chromium-browser.xml + +%files common +%if %{build_clear_key_cdm} +%{chromium_path}/libclearkeycdm.so +%endif +%ifarch x86_64 aarch64 +%{chromium_path}/libvk_swiftshader.so* +%{chromium_path}/libvulkan.so* +%{chromium_path}/vk_swiftshader_icd.json +%{chromium_path}/libEGL.so* +%{chromium_path}/libGLESv2.so* +%endif +%{chromium_path}/icudtl.dat +%dir %{chromium_path}/ +%dir %{chromium_path}/locales/ +%lang(af) %{chromium_path}/locales/af.pak +%lang(am) %{chromium_path}/locales/am.pak +%lang(ar) %{chromium_path}/locales/ar.pak +%lang(bg) %{chromium_path}/locales/bg.pak +%lang(bn) %{chromium_path}/locales/bn.pak +%lang(ca) %{chromium_path}/locales/ca.pak +%lang(cs) %{chromium_path}/locales/cs.pak +%lang(da) %{chromium_path}/locales/da.pak +%lang(de) %{chromium_path}/locales/de.pak +%lang(el) %{chromium_path}/locales/el.pak +%lang(en_GB) %{chromium_path}/locales/en-GB.pak +# Chromium _ALWAYS_ needs en-US.pak as a fallback +# This means we cannot apply the lang code here. +# Otherwise, it is filtered out on install. +%{chromium_path}/locales/en-US.pak +%lang(es) %{chromium_path}/locales/es.pak +%lang(es) %{chromium_path}/locales/es-419.pak +%lang(et) %{chromium_path}/locales/et.pak +%lang(fa) %{chromium_path}/locales/fa.pak +%lang(fi) %{chromium_path}/locales/fi.pak +%lang(fil) %{chromium_path}/locales/fil.pak +%lang(fr) %{chromium_path}/locales/fr.pak +%lang(gu) %{chromium_path}/locales/gu.pak +%lang(he) %{chromium_path}/locales/he.pak +%lang(hi) %{chromium_path}/locales/hi.pak +%lang(hr) %{chromium_path}/locales/hr.pak +%lang(hu) %{chromium_path}/locales/hu.pak +%lang(id) %{chromium_path}/locales/id.pak +%lang(it) %{chromium_path}/locales/it.pak +%lang(ja) %{chromium_path}/locales/ja.pak +%lang(kn) %{chromium_path}/locales/kn.pak +%lang(ko) %{chromium_path}/locales/ko.pak +%lang(lt) %{chromium_path}/locales/lt.pak +%lang(lv) %{chromium_path}/locales/lv.pak +%lang(ml) %{chromium_path}/locales/ml.pak +%lang(mr) %{chromium_path}/locales/mr.pak +%lang(ms) %{chromium_path}/locales/ms.pak +%lang(nb) %{chromium_path}/locales/nb.pak +%lang(nl) %{chromium_path}/locales/nl.pak +%lang(pl) %{chromium_path}/locales/pl.pak +%lang(pt_BR) %{chromium_path}/locales/pt-BR.pak +%lang(pt_PT) %{chromium_path}/locales/pt-PT.pak +%lang(ro) %{chromium_path}/locales/ro.pak +%lang(ru) %{chromium_path}/locales/ru.pak +%lang(sk) %{chromium_path}/locales/sk.pak +%lang(sl) %{chromium_path}/locales/sl.pak +%lang(sr) %{chromium_path}/locales/sr.pak +%lang(sv) %{chromium_path}/locales/sv.pak +%lang(sw) %{chromium_path}/locales/sw.pak +%lang(ta) %{chromium_path}/locales/ta.pak +%lang(te) %{chromium_path}/locales/te.pak +%lang(th) %{chromium_path}/locales/th.pak +%lang(tr) %{chromium_path}/locales/tr.pak +%lang(uk) %{chromium_path}/locales/uk.pak +%lang(ur) %{chromium_path}/locales/ur.pak +%lang(vi) %{chromium_path}/locales/vi.pak +%lang(zh_CN) %{chromium_path}/locales/zh-CN.pak +%lang(zh_TW) %{chromium_path}/locales/zh-TW.pak +# These are psuedolocales, not real ones. +# They only get generated when is_official_build=false +%if ! %{official_build} +%{chromium_path}/locales/ar-XB.pak +%{chromium_path}/locales/en-XA.pak +%endif + +%if %{build_headless} +%files headless +%{chromium_path}/headless_shell +%{chromium_path}/headless_lib_data.pak +%{chromium_path}/headless_lib_strings.pak +%endif + +%if %{build_remoting} +%files -n chrome-remote-desktop +%{crd_path}/chrome-remote-desktop +%{crd_path}/chrome-remote-desktop-host +%{crd_path}/is-remoting-session +%{crd_path}/libremoting_core.so* +%{crd_path}/native-messaging-host +%{crd_path}/remote-assistance-host +%{_sysconfdir}/pam.d/chrome-remote-desktop +%{_sysconfdir}/chromium/native-messaging-hosts/* +%{_sysconfdir}/opt/chrome/ +%{crd_path}/remoting_locales/ +%{crd_path}/start-host +%{crd_path}/user-session +%{_unitdir}/chrome-remote-desktop@.service +/var/lib/chrome-remote-desktop/ +%endif + +%files -n chromedriver +%doc AUTHORS +%license LICENSE +%{_bindir}/chromedriver +%{chromium_path}/chromedriver + +%changelog +* Sat Jul 1 2023 Arkady L. Shane - 114.0.5735.133-1.inferit +- Rebuilt for MSVSphere 9.2 +- set Yandex search engine by default +- replace Google logo with Yandex logo +- set new home page + +* Wed Jun 14 2023 Than Ngo - 114.0.5735.133-1 +- update to 114.0.5735.133 +- Enable AllowQt feature flag +- Fix Qt deps +- Fix Qt logical scale factor + +* Wed Jun 07 2023 Than Ngo - 114.0.5735.106-1 +- update to 114.0.5735.106 + +* Sun May 28 2023 Than Ngo - 114.0.5735.45-1 +- update to 114.0.5735.45 +- add qt6 linuxui backend +- backport: handle scale factor changes +- backport: fix font double_scaling + +* Wed May 17 2023 Than Ngo - 113.0.5672.126-1 +- drop clang workaround for el8 +- update to 113.0.5672.126 + +* Tue May 09 2023 Than Ngo - 113.0.5672.92-1 +- update to 113.0.5672.92 + +* Wed May 03 2023 Than Ngo - 113.0.5672.63-1 +- update to 113.0.5672.63 + +* Sun Apr 23 2023 Than Ngo - 112.0.5615.165-2 +- make --use-gl=egl default for x11/wayland +- enable WebUIDarkMode + +* Thu Apr 20 2023 Than Ngo - 112.0.5615.165-1 +- update to 112.0.5615.165 + +* Mon Apr 17 2023 Than Ngo - 112.0.5615.121-2 +- fix vaapi issue on xwayland +- fix the build order, chrome_feed_response_metadata.pb.h file not found +- fix compiler flags and typo + +* Sat Apr 15 2023 Than Ngo - 112.0.5615.121-1 +- update to 112.0.5615.121 + +* Wed Apr 05 2023 Than Ngo - 112.0.5615.49-1 +- update to 112.0.5615.49 +- fix #2184142, Small fonts in menus + +* Tue Mar 28 2023 Than Ngo - 111.0.5563.146-1 +- update to 111.0.5563.146 + +* Sat Mar 25 2023 Neal Gompa - 111.0.5563.110-2 +- Fix ffmpeg note in README.fedora + +* Wed Mar 22 2023 Than Ngo - 111.0.5563.110-1 +- update to 111.0.5563.110 + +* Sun Mar 12 2023 Neal Gompa - 111.0.5563.64-2 +- Rebuild for ffmpeg 6.0 + +* Tue Mar 07 2023 Than Ngo - 111.0.5563.64-1 +- update to 111.0.5563.64 + +* Mon Mar 06 2023 Than Ngo - 111.0.5563.50-1 +- update to 111.0.5563.50 +- system freetype on fedora > 36 + +* Thu Feb 23 2023 Than Ngo - 110.0.5481.177-1 +- update to 110.0.5481.177 +- workaround for crash on aarch64, rhel8 + +* Wed Feb 22 2023 Jan Grulich - 110.0.5481.100-3 +- Enable PipeWire screen sharing on RHEL8+ + +* Tue Feb 21 2023 Than Ngo - 110.0.5481.100-2 +- fixed bz#2036205, failed to load GLES library + +* Fri Feb 17 2023 Than Ngo - 110.0.5481.100-1 +- update to 110.0.5481.100 + +* Thu Feb 16 2023 Than Ngo - 110.0.5481.77-2 +- fix #2071126, enable support V4L2 stateless decoders for aarch64 plattform +- fix prefers-color-scheme +- drop snapshot_blob.bin, replace snapshot_blob.bin with v8_context_snapshot.bin +- move headless_lib*.pak to headless subpackage + +* Wed Feb 08 2023 Than Ngo - 110.0.5481.77-1 +- update to 110.0.5481.77 + +* Sat Feb 04 2023 Than Ngo - 110.0.5481.61-1 +- update to 110.0.5481.61 + +* Thu Feb 02 2023 Jan Grulich - 109.0.5414.119-2 +- Use ffmpeg decoders for h264 support + +* Wed Jan 25 2023 Than Ngo - 109.0.5414.119-1 +- update to 109.0.5414.119 + +* Sun Jan 22 2023 Than Ngo - 109.0.5414.74-4 +- clean up + +* Wed Jan 18 2023 Fedora Release Engineering - 109.0.5414.74-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Sun Jan 15 2023 Than Ngo - 109.0.5414.74-2 +- conditionalize system_build_flags +- cleaned up gn defines +- add BR on python3-importlib-metadata +- set correct toolchain gcc|clang +- fix FTBFS with gcc13 + +* Wed Jan 11 2023 Than Ngo - 109.0.5414.74-1 +- update to 109.0.5414.74 + +* Tue Jan 10 2023 Than Ngo - 108.0.5359.124-5 +- enable qt backend for el >= 9 and fedora >= 35 +- drop i686 +- conditional BR on java-1.8.0-openjdk-headless + +* Sun Jan 08 2023 Than Ngo - 108.0.5359.124-4 +- vaapi support for wayland + +* Wed Jan 04 2023 Than Ngo - 108.0.5359.124-3 +- build with system ffmpeg-free and system libaom +- fix widewine extension issue +- vaapi, disable UseChromeOSDirectVideoDecoder +- workaround for linking issue in clang <= 14 + +* Sun Jan 1 2023 Tom Callaway - 108.0.5359.124-2 +- turn headless back on (chrome-remote-desktop will stay off, probably forever) + +* Wed Dec 28 2022 Than Ngo - 108.0.5359.124-1 +- update to 108.0.5359.124 +- switch to clang + +* Tue Nov 29 2022 Than Ngo - 107.0.5304.121-1 +- update to 107.0.5304.121 + +* Fri Nov 11 2022 Than Ngo - 107.0.5304.110-1 +- update to 107.0.5304.110 + +* Fri Sep 23 2022 Tom Callaway - 105.0.5195.125-2 +- apply upstream fix for wayland menu misplacement bug + +* Mon Sep 19 2022 Tom Callaway - 105.0.5195.125-1 +- update to 105.0.5195.125 + +* Thu Sep 1 2022 Tom Callaway - 105.0.5195.52-1 +- update to 105.0.5195.52 + +* Thu Aug 18 2022 Tom Callaway - 104.0.5112.101-1 +- update to 104.0.5112.101 + +* Wed Jul 20 2022 Fedora Release Engineering - 103.0.5060.114-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Wed Jul 13 2022 Tom Callaway - 103.0.5060.114-1 +- update to 103.0.5060.114 + +* Wed Jun 22 2022 Tom Callaway - 103.0.5060.53-1 +- update to 103.0.5060.53 + +* Thu Jun 16 2022 Tom Callaway - 102.0.5005.115-2 +- fix minizip Requires for EL9 + +* Fri Jun 10 2022 Tom Callaway - 102.0.5005.115-1 +- update to 102.0.5005.115 + +* Fri Jun 3 2022 Tom Callaway - 102.0.5005.61-1 +- update to 102.0.5005.61 + +* Wed Apr 27 2022 Tom Callaway - 101.0.4951.41-1 +- update to 101.0.4951.41 + +* Thu Apr 21 2022 Tom Callaway - 100.0.4896.127-1 +- update to 100.0.4896.127 + +* Tue Apr 5 2022 Tom Callaway - 100.0.4896.75-1 +- update to 100.0.4896.75 + +* Sat Apr 2 2022 Tom Callaway - 100.0.4896.60-1 +- update to 100.0.4896.60 + +* Sun Mar 27 2022 Tom Callaway - 99.0.4844.84-1 +- update to 99.0.4844.84 +- package up libremoting_core.so* for chrome-remote-desktop +- strip all the .so files (and binaries) + +* Sat Mar 19 2022 Tom Callaway - 99.0.4844.74-1 +- update to 99.0.4844.74 + +* Sat Mar 5 2022 Tom Callaway - 99.0.4844.5-1 +- update to 99.0.4844.5 + +* Fri Feb 25 2022 Tom Callaway - 98.0.4758.102-1 +- update to 98.0.4758.102 +- fix build issue with subzero and gcc12 + +* Tue Feb 8 2022 Tom Callaway - 98.0.4758.80-1 +- update to 98.0.4758.80 + +* Sat Feb 05 2022 Jiri Vanek - 96.0.4664.110-9 +- Rebuilt for java-17-openjdk as system jdk + +* Wed Jan 19 2022 Fedora Release Engineering - 96.0.4664.110-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Wed Jan 5 2022 Tom Callaway - 96.0.4664.110-7 +- i hate regex. trying again + +* Tue Jan 4 2022 Tom Callaway - 96.0.4664.110-6 +- always filter provides, was previously inside conditional for shared builds + +* Mon Jan 3 2022 Tom Callaway - 96.0.4664.110-5 +- fix provides filtering to be more inclusive (and work properly) + +* Thu Dec 30 2021 Tom Callaway - 96.0.4664.110-4 +- package up more swiftshader/angle stuff +- move swiftshader files to -common so headless can use them + +* Mon Dec 27 2021 Tom Callaway - 96.0.4664.110-3 +- have chromium-browser.sh check for wayland env vars and if found, set ozone flags appropriately + Thanks to Neal Gompa for the nudge + +* Mon Dec 20 2021 Tom Callaway - 96.0.4664.110-2 +- enable WebRTCPipeWireCapturer by default + +* Thu Dec 16 2021 Tom Callaway - 96.0.4664.110-1 +- update to 96.0.4664.110 + +* Fri Nov 19 2021 Tom Callaway - 96.0.4664.45-1 +- update to 96.0.4664.45 + +* Fri Nov 12 2021 Tom Callaway - 95.0.4638.69-1 +- update to 95.0.4638.69 + +* Fri Oct 8 2021 Tom Callaway - 94.0.4606.81-1 +- update to 94.0.4606.81 + +* Wed Oct 6 2021 Tom Callaway - 94.0.4606.71-2 +- add official_build flag +- apply upstream patch to handle nullptr correctly in PartitionGetSizeEstimate() + +* Tue Oct 5 2021 Tom Callaway - 94.0.4606.71-1 +- update to 94.0.4606.71 + +* Fri Sep 24 2021 Tom Callaway - 94.0.4606.61-1 +- update to 94.0.4606.61 + +* Thu Sep 23 2021 Tom Callaway - 94.0.4606.54-1 +- update to 94.0.4606.54 + +* Mon Sep 20 2021 Tom Callaway - 93.0.4577.82-2 +- add fix for harfbuzz v3 (thanks to Jan Beich @ FreeBSD) + +* Thu Sep 16 2021 Tom Callaway - 93.0.4577.82-1 +- update to 93.0.4577.82 + +* Thu Sep 2 2021 Tom Callaway - 93.0.4577.63-1 +- update to 93.0.4577.63 + +* Mon Aug 30 2021 Tom Callaway - 92.0.4515.159-2 +- disable userfaultd code in epel8 +- include crashpad_handler (it works a lot better when it doesn't immediately crash because of this missing file) + +* Tue Aug 17 2021 Tom Callaway - 92.0.4515.159-1 +- update to 92.0.4515.159 + +* Mon Aug 16 2021 Tom Callaway - 92.0.4515.131-1 +- update to 92.0.4515.131 +- apply upstream fix for clone3 crash + +* Mon Jul 26 2021 Tom Callaway - 92.0.4515.107-1 +- update to 92.0.4515.107 +- drop python2 deps (finally) + +* Wed Jul 21 2021 Fedora Release Engineering - 91.0.4472.164-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jul 16 2021 Tom Callaway - 91.0.4472.164-1 +- update to 91.0.4472.164 + +* Tue Jul 6 2021 Tom Callaway - 91.0.4472.114-2 +- fix ThemeService crash (thanks OpenSUSE) + +* Wed Jun 23 2021 Tom Callaway - 91.0.4472.114-1 +- update to 91.0.4472.114 + +* Tue Jun 1 2021 Tom Callaway - 91.0.4472.77-1 +- update to 91.0.4472.77 + +* Tue May 18 2021 Tom Callaway - 90.0.4430.212-1 +- update to 90.0.4430.212 + +* Tue Apr 27 2021 Tom Callaway - 90.0.4430.93-1 +- update to 90.0.4430.93 + +* Wed Apr 21 2021 Tom Callaway - 90.0.4430.85-1 +- update to 90.0.4430.85 + +* Fri Apr 16 2021 Tom Callaway - 90.0.4430.72-1 +- update to 90.0.4430.72 + +* Wed Apr 14 2021 Tom Callaway - 89.0.4389.128-1 +- update to 89.0.4389.128 + +* Wed Mar 31 2021 Jonathan Wakely - 89.0.4389.90-5 +- Rebuilt for removed libstdc++ symbols (#1937698) + +* Mon Mar 29 2021 Tom Callaway - 89.0.4389.90-4 +- fix libva compile in rawhide + +* Thu Mar 25 2021 Tom Callaway - 89.0.4389.90-3 +- apply upstream fix for newer system libva + +* Wed Mar 24 2021 Tom Callaway - 89.0.4389.90-2 +- fix crashes with components/cast_* + +* Thu Mar 18 2021 Tom Callaway - 89.0.4389.90-1 +- update to 89.0.4389.90 +- disable auto-download of widevine binary only blob + +* Mon Mar 15 2021 Tom Callaway - 89.0.4389.82-2 +- add support for futex_time64 + +* Mon Mar 8 2021 Tom Callaway - 89.0.4389.82-1 +- update to 89.0.4389.82 + +* Thu Mar 4 2021 Tom Callaway - 89.0.4389.72-1 +- update to 89.0.4389.72 + +* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 88.0.4324.182-3 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + +* Thu Feb 25 2021 Tom Callaway - 88.0.4234.182-2 +- fix swiftshader symbols in libEGL/libGLESv2 with gcc + +* Wed Feb 17 2021 Tom Callaway - 88.0.4234.182-1 +- update to 88.0.4234.182 + +* Fri Feb 5 2021 Tom Callaway - 88.0.4234.150-1 +- update to 88.0.4234.150 + +* Tue Feb 2 2021 Tom Callaway - 88.0.4234.146-1 +- update to 88.0.4234.146 + +* Tue Feb 2 2021 Tom Callaway - 88.0.4234.96-4 +- turn on the API key (just the API key, not the client_id or client_secret) + +* Tue Jan 26 2021 Fedora Release Engineering - 88.0.4324.96-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Jan 25 2021 Tom Callaway - 88.0.4324.96-2 +- apply fix from Kevin Kofler for new glibc fstat sandbox handling + +* Wed Jan 20 2021 Tom Callaway - 88.0.4324.96-1 +- 88 goes from beta to stable +- disable use of api keys (Google shut off API access) + +* Wed Jan 13 2021 Tom Callaway +- update to 87.0.4280.141 + +* Wed Dec 30 2020 Tom Callaway - 88.0.4324.50-1 +- update to 88.0.4324.50 +- drop patches 74 & 75 (applied upstream) + +* Thu Dec 17 2020 Tom Callaway +- add two patches for missing headers to build with gcc 11 + +* Thu Dec 3 2020 Tom Callaway - 88.0.4324.27-1 +- dev release to prepare for next stable + +* Thu Dec 3 2020 Tom Callaway - 87.0.4280.88-1 +- update to 87.0.4280.88 + +* Wed Nov 18 2020 Tom Callaway - 87.0.4280.66-1 +- update to 87.0.4280.66 + +* Thu Nov 12 2020 Jeff Law - 86.0.4240.198-1 +- Fix missing #inclues for gcc-11 +- Fix bogus volatile caught by gcc-11 + +* Thu Nov 12 2020 Tom Callaway - 86.0.4240.198-1 +- update to 86.0.4240.198 + +* Tue Nov 10 2020 Tom Callaway - 86.0.4240.193-1 +- update to 86.0.4240.193 + +* Wed Nov 4 2020 Tom Callaway - 86.0.4240.183-1 +- update to 86.0.4240.183 + +* Mon Nov 2 2020 Tom Callaway - 86.0.4240.111-2 +- fix conditional typo that was causing console logging to be turned on + +* Wed Oct 21 2020 Tom Callaway - 86.0.4240.111-1 +- update to 86.0.4240.111 + +* Tue Oct 20 2020 Tom Callaway - 86.0.4240.75-2 +- use bundled zlib/minizip on el7 (thanks Red Hat. :P) + +* Wed Oct 14 2020 Tom Callaway - 86.0.4240.75-1 +- update to 86.0.4240.75 + +* Mon Sep 28 2020 Tom Callaway - 85.0.4183.121-2 +- rebuild for libevent + +* Mon Sep 21 2020 Tom Callaway - 85.0.4183.121-1 +- update to 85.0.4183.121 +- apply upstream fix for networking issue with CookieMonster + +* Tue Sep 8 2020 Tom Callaway - 85.0.4183.102-1 +- update to 85.0.4183.102 +- install ANGLE so files (libEGL.so, libGLESv2.so) + +* Wed Aug 26 2020 Tom Callaway - 85.0.4183.83-1 +- update to 85.0.4183.83 + +* Thu Aug 20 2020 Tom Callaway - 84.0.4147.135-1 +- update to 84.0.4147.135 +- conditionalize build_clear_key_cdm +- disable build_clear_key_cdm on F33+ aarch64 until binutils bug is fixed +- properly install libclearkeycdm.so everywhere else (whoops) + +* Mon Aug 17 2020 Tom Callaway - 84.0.4147.125-2 +- force fix_textrels fix in ffmpeg for i686 (even without lld) + +* Mon Aug 10 2020 Tom Callaway - 84.0.4147.125-1 +- update to 84.0.4147.125 + +* Sat Aug 01 2020 Fedora Release Engineering - 84.0.4147.105-2 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Fri Jul 31 2020 Tom Callaway - 84.0.4147.105-1 +- update to 84.0.4147.105 + +* Mon Jul 27 2020 Fedora Release Engineering - 84.0.4147.89-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jul 15 2020 Tom Callaway - 84.0.4147.89-1 +- update to 84.0.4147.89 + +* Sat Jun 27 2020 Tom Callaway - 83.0.4103.116-3 +- only set ozone on headless +- enable use_kerberos + +* Tue Jun 23 2020 Tom Callaway - 83.0.4103.116-2 +- do not force ozone into x11 + +* Tue Jun 23 2020 Tom Callaway - 83.0.4103.116-1 +- update to 83.0.4103.116 + +* Thu Jun 18 2020 Tom Callaway - 83.0.4103.106-1 +- update to 83.0.4103.106 +- remove duplicate ServiceWorker fix +- add fix to work around gcc bug on aarch64 +- disable python byte compiling (we do not need it) + +* Tue Jun 16 2020 Tom Callaway - 83.0.4103.97-5 +- add ServiceWorker fix + +* Mon Jun 15 2020 Tom Callaway - 83.0.4103.97-4 +- use old cups handling on epel7 +- fix skia attribute overrides with gcc + +* Wed Jun 10 2020 Tom Callaway - 83.0.4103.97-3 +- fix issue on epel7 where linux/kcmp.h does not exist + +* Mon Jun 8 2020 Tom Callaway - 83.0.4103.97-2 +- more fixes from gentoo + +* Sun Jun 7 2020 Tom Callaway - 83.0.4103.97-1 +- update to 83.0.4103.97 + +* Tue Jun 2 2020 Tom Callaway - 83.0.4103.61-1 +- update to 83.0.4103.61 +- conditionalize and disable remoting + +* Thu May 7 2020 Tom Callaway - 81.0.4044.138-1 +- update to 81.0.4044.138 + +* Tue May 5 2020 Tom Callaway - 81.0.4044.129-1 +- update to 81.0.4044.129 + +* Thu Apr 23 2020 Tom Callaway - 81.0.4044.122-1 +- update to 81.0.4044.122 + +* Tue Apr 21 2020 Tom Callaway - 81.0.4044.113-2 +- add explicit Requires: chromium-common + +* Thu Apr 16 2020 Tom Callaway - 81.0.4044.113-1 +- update to 81.0.4044.113 + +* Mon Apr 13 2020 Tom Callaway - 81.0.4044.92-1 +- update to 81.0.4044.92 +- squelch the selinux output in the post scriptlet +- add Provides/Obsoletes in case we're build with shared set to 0 +- add ulimit -n 4096 (needed for static builds, probably not harmful for shared builds either) +- do static build + +* Sat Apr 4 2020 Tom Callaway - 80.0.3987.163-1 +- update to 80.0.3987.163 + +* Wed Apr 1 2020 Tom Callaway - 80.0.3987.162-1 +- update to 80.0.3987.162 + +* Wed Mar 18 2020 Tom Callaway - 80.0.3987.149-1 +- update to 80.0.3987.149 + +* Thu Feb 27 2020 Tom Callaway - 80.0.3987.132-1 +- update to 80.0.3987.132 +- disable C++17 changes (this means f32+ will no longer build, but it segfaulted immediately) + +* Thu Feb 27 2020 Tom Callaway - 80.0.3987.122-1 +- update to 80.0.3987.122 + +* Mon Feb 17 2020 Tom Callaway - 80.0.3987.106-1 +- update to 80.0.3987.106 + +* Wed Feb 5 2020 Tom Callaway - 80.0.3987.87-1 +- update to 80.0.3987.87 + +* Tue Jan 28 2020 Fedora Release Engineering - 79.0.3945.130-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Jan 17 2020 Tom Callaway - 79.0.3945.130-1 +- update to 79.0.3945.130 + +* Thu Jan 9 2020 Tom Callaway - 79.0.3945.117-1 +- update to 79.0.3945.117 + +* Tue Dec 17 2019 Tom Callaway - 79.0.3945.88-1 +- update to 79.0.3945.88 + +* Tue Dec 10 2019 Tom Callaway - 79.0.3945.79-1 +- update to 79.0.3945.79 + +* Wed Dec 4 2019 Tom Callaway - 79.0.3945.56-2 +- fix lib provides filtering + +* Tue Dec 3 2019 Tom Callaway - 79.0.3945.56-1 +- update to current beta (rawhide only) +- switch to upstream patch for clock_nanosleep fix + +* Mon Nov 25 2019 Tom Callaway - 78.0.3904.108-1 +- update to 78.0.3904.108 + +* Sun Nov 17 2019 Tom Callaway - 78.0.3904.97-2 +- allow clock_nanosleep through seccomp (bz #1773289) + +* Thu Nov 7 2019 Tom Callaway - 78.0.3904.97-1 +- update to 78.0.3904.97 + +* Fri Nov 1 2019 Tom Callaway - 78.0.3904.87-1 +- update to 78.0.3904.87 +- apply most of the freeworld changes in PR 23/24/25 + +* Wed Oct 23 2019 Tom Callaway - 78.0.3904.80-1 +- update to 78.0.3904.80 + +* Wed Oct 16 2019 Tom Callaway - 77.0.3865.120-4 +- upstream fix for zlib symbol exports with gcc + +* Wed Oct 16 2019 Tom Callaway - 77.0.3865.120-3 +- silence outdated build noise (bz1745745) + +* Tue Oct 15 2019 Tom Callaway - 77.0.3865.120-2 +- fix node handling for EPEL-8 + +* Mon Oct 14 2019 Tomas Popela - 77.0.3865.120-1 +- Update to 77.0.3865.120 + +* Thu Oct 10 2019 Tom Callaway - 77.0.3865.90-4 +- enable aarch64 for EPEL-8 + +* Wed Oct 9 2019 Tom Callaway - 77.0.3865.90-3 +- spec cleanups and changes to make EPEL8 try to build + +* Mon Sep 23 2019 Tomas Popela - 77.0.3865.90-2 +- Fix the icon +- Remove quite a few of downstream patches +- Fix the crashes by backporting an upstream bug +- Resolves: rhbz#1754179 + +* Thu Sep 19 2019 Tomas Popela - 77.0.3865.90-1 +- Update to 77.0.3865.90 + +* Mon Sep 16 2019 Tomas Popela - 77.0.3865.75-2 +- Update the list of private libraries + +* Fri Sep 13 2019 Tomas Popela - 77.0.3865.75-1 +- Update to 77.0.3865.75 + +* Tue Sep 03 2019 Tomas Popela - 76.0.3809.132-2 +- Backport patch to fix certificate transparency + +* Tue Aug 27 2019 Tomas Popela - 76.0.3809.132-1 +- Update to 76.0.3809.132 + +* Tue Aug 13 2019 Tomas Popela - 76.0.3809.100-1 +- Update to 76.0.3809.100 + +* Wed Jul 24 2019 Fedora Release Engineering - 75.0.3770.100-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Tue Jul 2 2019 Tom Callaway - 75.0.3770.100-3 +- apply upstream fix to resolve issue where it is dangerous to post a + task with a RenderProcessHost pointer because the RenderProcessHost + can go away before the task is run (causing a segfault). + +* Tue Jun 25 2019 Tom Callaway - 75.0.3770.100-2 +- fix v8 compile with gcc + +* Thu Jun 20 2019 Tom Callaway - 75.0.3770.100-1 +- update to 75.0.3770.100 + +* Fri Jun 14 2019 Tom Callaway - 75.0.3770.90-1 +- update to 75.0.3770.90 + +* Wed Jun 5 2019 Tom Callaway - 75.0.3770.80-1 +- update to 75.0.3770.80 +- disable vaapi (via conditional), too broken + +* Fri May 31 2019 Tom Callaway - 74.0.3729.169-1 +- update to 74.0.3729.169 + +* Thu Apr 11 2019 Tom Callaway - 73.0.3683.103-1 +- update to 73.0.3683.103 +- add CLONE_VFORK logic to seccomp filter for linux to handle glibc 2.29 change + +* Wed Mar 27 2019 Tom Callaway - 73.0.3683.86-2 +- remove lang macro from en-US.pak* because Chromium crashes if it is not present + (bz1692660) + +* Fri Mar 22 2019 Tom Callaway - 73.0.3683.86-1 +- update to 73.0.3683.86 + +* Tue Mar 19 2019 Tom Callaway - 73.0.3683.75-2 +- do not include pyproto/protoc files in package + +* Tue Mar 12 2019 Tom Callaway - 73.0.3683.75-1 +- update to 73.0.3683.75 + +* Sat Mar 9 2019 Tom Callaway - 72.0.3626.121-1 +- update to 72.0.3626.121 + +* Tue Feb 26 2019 Tom Callaway - 71.0.3578.98-5 +- rebuild for libva api change + +* Thu Jan 31 2019 Fedora Release Engineering - 71.0.3578.98-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Mon Jan 21 2019 Tom Callaway - 71.0.3578.98-3 +- rebuild with widevine fix + +* Tue Jan 8 2019 Tom Callaway - 71.0.3578.98-2 +- drop rsp clobber, which breaks gcc9 (thanks to Jeff Law) + +* Fri Dec 14 2018 Tom Callaway - 71.0.3578.98-1 +- update to 71.0.3578.98 + +* Tue Nov 27 2018 Tom Callaway - 70.0.3538.110-2 +- enable vaapi support (thanks to Akarshan Biswas for doing the hard work here) + +* Mon Nov 26 2018 Tom Callaway - 70.0.3538.110-1 +- update to .110 + +* Wed Nov 7 2018 Tom Callaway - 70.0.3538.77-4 +- fix library requires filtering + +* Tue Nov 6 2018 Tom Callaway - 70.0.3538.77-3 +- fix build with harfbuzz2 in rawhide + +* Mon Nov 5 2018 Tom Callaway - 70.0.3538.77-2 +- drop jumbo_file_merge_limit to 8 to (hopefully) avoid OOMs on aarch64 + +* Fri Nov 2 2018 Tom Callaway - 70.0.3538.77-1 +- .77 came out while I was working on this. :/ + +* Fri Nov 2 2018 Tom Callaway - 70.0.3538.67-1 +- update to 70 + +* Tue Oct 16 2018 Tom Callaway - 69.0.3497.100-2 +- do not play with fonts on freeworld builds + +* Thu Oct 4 2018 Tom Callaway - 69.0.3497.100-1 +- update to 69.0.3497.100 + +* Wed Sep 12 2018 Tom Callaway - 69.0.3497.92-1 +- update to 69.0.3497.92 + +* Wed Sep 5 2018 Tom Callaway - 69.0.3497.81-1 +- update to 69.0.3497.81 + +* Tue Aug 28 2018 Patrik Novotný - 68.0.3440.106-4 +- change requires to minizip-compat(-devel), rhbz#1609830, rhbz#1615381 + +* Sun Aug 19 2018 Tom Callaway - 68.0.3440.106-3 +- fix library filters + +* Fri Aug 17 2018 Tom Callaway - 68.0.3440.106-2 +- fix error with defaulting on redeclaration + +* Thu Aug 9 2018 Tom Callaway - 68.0.3440.106-1 +- update to 68.0.3440.106 + +* Wed Aug 8 2018 Tom Callaway - 68.0.3440.84-1 +- update to 68.0.3440.84 + +* Mon Jul 30 2018 Tom Callaway - 68.0.3440.75-1 +- update to 68.0.3440.75 + +* Thu Jul 12 2018 Fedora Release Engineering - 67.0.3396.99-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Mon Jul 9 2018 Tom Callaway 67.0.3396.99-1 +- update to 67.0.3396.99 + +* Mon Jun 25 2018 Tom Callaway 67.0.3396.87-2 +- add "Fedora" to the user agent string + +* Tue Jun 19 2018 Tom Callaway 67.0.3396.87-1 +- update to 67.0.3396.87 + +* Thu Jun 7 2018 Tom Callaway 67.0.3396.79-1 +- update to 67.0.3396.79 + +* Wed Jun 6 2018 Tom Callaway 67.0.3396.62-2 +- work around bug in RHEL7 python exec + +* Wed May 30 2018 Tom Callaway 67.0.3396.62-1 +- 67 releases of chromium on the wall... + +* Tue May 29 2018 Tom Callaway 66.0.3359.181-3 +- also filter out fontconfig on epel7 + +* Wed May 23 2018 Tom Callaway 66.0.3359.181-2 +- fix missing files + +* Mon May 21 2018 Tom Callaway 66.0.3359.181-1 +- update to 66.0.3359.181 + +* Tue May 15 2018 Tom Callaway 66.0.3359.170-2 +- only x86_64 i686 have swiftshader +- fix gcc8 alignof issue on i686 + +* Mon May 14 2018 Tom Callaway 66.0.3359.170-1 +- update to 66.0.3359.170 +- include swiftshader files + +* Tue May 1 2018 Tom Callaway 66.0.3359.139-1 +- update to 66.0.3359.139 + +* Wed Apr 18 2018 Tom Callaway 66.0.3359.117-1 +- update to 66.0.3359.117 + +* Tue Apr 17 2018 Tom Callaway 65.0.3325.181-3 +- use system fontconfig (except on epel7) + +* Wed Apr 4 2018 Tom Callaway 65.0.3325.181-2 +- add explicit dependency on minizip (bz 1534282) + +* Wed Mar 28 2018 Tom Callaway +- check that there is no system 'google' module, shadowing bundled ones +- conditionalize api keys (on by default) + +* Wed Mar 21 2018 Tom Callaway 65.0.3325.181-1 +- update to 65.0.3325.181 + +* Mon Mar 19 2018 Tom Callaway 65.0.3325.162-3 +- use bundled libdrm on epel7 + +* Fri Mar 16 2018 Tom Callaway 65.0.3325.162-2 +- disable StartupNotify in chromium-browser.desktop (not in google-chrome desktop file) + (bz1545241) +- use bundled freetype on epel7 + +* Wed Mar 14 2018 Tom Callaway 65.0.3325.162-1 +- update to 65.0.3325.162 + +* Wed Mar 7 2018 Tom Callaway 65.0.3325.146-1 +- update to 65.0.3325.146 + +* Mon Mar 5 2018 Tom Callaway 64.0.3282.186-1 +- update to 64.0.3282.186 + +* Fri Feb 16 2018 Tom Callaway 64.0.3282.167-1 +- update to 64.0.3282.167 +- include workaround for gcc8 bug in gn +- disable unnecessary aarch64 glibc symbol change + +* Fri Feb 2 2018 Tom Callaway 64.0.3282.140-1 +- update to 64.0.3282.140 + +* Thu Feb 1 2018 Tom Callaway 64.0.3282.119-2 +- include user-session binary in chrome-remote-desktop subpackage + +* Thu Jan 25 2018 Tom Callaway 64.0.3282.119-1 +- update to 64.0.3282.119 + +* Fri Dec 15 2017 Tomas Popela 63.0.3239.108-1 +- Update to 63.0.3239.108 + +* Thu Dec 7 2017 Tom Callaway 63.0.3239.84-1 +- update to 63.0.3239.84 + +* Wed Nov 8 2017 Tom Callaway 62.0.3202.89-1 +- update to 62.0.3202.89 + +* Fri Oct 27 2017 Tom Callaway 62.0.3202.75-1 +- update to 62.0.3202.75 +- use devtoolset-7-toolchain to build on epel7 + +* Tue Oct 24 2017 Tom Callaway 62.0.3202.62-1.1 +- do not attempt std=c++14 on epel7 + +* Wed Oct 18 2017 Tom Callaway 62.0.3202.62-1 +- update to 62.0.3202.62 + +* Fri Sep 22 2017 Tom Callaway 61.0.3163.100-1 +- update to 61.0.3163.100 +- lots of epel7 specific fixes +- use bundled libpng on epel7 + +* Wed Sep 6 2017 Tom Callaway 61.0.3163.79-1 +- update to 61.0.3163.79 + +* Mon Aug 28 2017 Tom Callaway 60.0.3112.113-2 +- disable aarch64 on rhel7, missing libatomic.so for some reason + +* Wed Aug 23 2017 Tom Callaway 60.0.3112.113-1 +- fix ffmpeg clean script to not delete aarch64 file +- update to 60.0.3112.113 + +* Wed Aug 23 2017 Tom Callaway 60.0.3112.101-3 +- apply aarch64 fixes from Ryan Blakely + +* Thu Aug 17 2017 Tom Callaway 60.0.3112.101-2 +- fix dep issue with chrome-remote-desktop on el7 + +* Wed Aug 16 2017 Tom Callaway 60.0.3112.101-1 +- update to 60.0.3112.101 +- apply upstream fix for cameras which report zero resolution formats + (bz1465357) + +* Mon Aug 14 2017 Tom Callaway 60.0.3112.90-3 +- apply more workarounds to coax code to build with epel7 gcc + +* Wed Aug 9 2017 Tom Callaway 60.0.3112.90-2 +- apply post 60 code commit to get code building on epel7 + +* Fri Aug 4 2017 Tom Callaway 60.0.3112.90-1 +- update to 60.0.3112.90 + +* Wed Aug 02 2017 Fedora Release Engineering - 59.0.3071.115-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Mon Jul 31 2017 Tom Callaway 60.0.3112.78-1 +- update to 60.0.3112.78 + +* Wed Jul 26 2017 Fedora Release Engineering - 59.0.3071.115-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Jul 21 2017 Tom Callaway 59.0.3071.115-4 +- put common files in -common subpackage +- build headless_shell for -headless subpackage + +* Fri Jul 21 2017 Tom Callaway 59.0.3071.115-3 +- use posttrans to ensure that old libs are gone before trying to make alternative symlinks + +* Thu Jul 13 2017 Tom Callaway 59.0.3071.115-2 +- fix scriptlets + +* Wed Jul 12 2017 Tom Callaway 59.0.3071.115-1 +- 59.0.3071.115 +- conditionalize spec so it can be easily used to make -libs-media-freeworld + +* Wed Jun 28 2017 Dominik Mierzejewski 59.0.3071.109-6 +- use alternatives for widevine stub and media libs to allow third-party + packages to replace them without conflicts + +* Mon Jun 26 2017 Tom Callaway 59.0.3071.109-5 +- fix path in pretrans scriptlet + +* Fri Jun 23 2017 Tom Callaway 59.0.3071.109-4 +- copy files into /etc/opt/chrome/native-messaging-hosts instead of making symlinks + this results in duplicate copies of the same files, but eh. making rpm happy. + +* Fri Jun 23 2017 Tom Callaway 59.0.3071.109-3 +- use pretrans scriptlet to remove symlink on /etc/opt/chrome/native-messaging-hosts + (it is now a directory) + +* Thu Jun 22 2017 Tom Callaway 59.0.3071.109-2 +- fix duplication between chrome-remote-desktop and chromium + +* Thu Jun 22 2017 Tom Callaway 59.0.3071.109-1 +- update to .109 +- fix native-messaging-hosts dir to be a true dir instead of a symlink + +* Fri Jun 16 2017 Tom Callaway 59.0.3071.104-1 +- update to .104 + +* Fri Jun 16 2017 Tom Callaway 59.0.3071.86-4 +- actually fix mp3 playback support + +* Tue Jun 13 2017 Tom Callaway 59.0.3071.86-3 +- fix filtering + +* Mon Jun 12 2017 Tom Callaway 59.0.3071.86-2 +- pnacl/nacl now needs llvm to build the bootstrap lib + +* Mon Jun 12 2017 Tom Callaway 59.0.3071.86-1 +- update to 59.0.3071.86 +- include smaller logo files + +* Tue May 16 2017 Tom Callaway 58.0.3029.110-2 +- strip provides/requires on libsensors + +* Mon May 15 2017 Tom Callaway 58.0.3029.110-1 +- update to 58.0.3029.110 + +* Mon May 8 2017 Tom Callaway 58.0.3029.96-1 +- update to 58.0.3029.96 + +* Fri Apr 21 2017 Tom Callaway 58.0.3029.81-1 +- update to 58.0.3029.81 + +* Thu Mar 30 2017 Tom Callaway 57.0.2987.133-1 +- update to 57.0.2987.133 + +* Sun Mar 26 2017 Tom Callaway 57.0.2987.110-4 +- copy compat stdatomic.h in for RHEL. Re-enable mp3 enablement. +- fix issue in gtk_ui.cc revealed by RHEL build + +* Sun Mar 26 2017 Tom Callaway 57.0.2987.110-3 +- fix mp3 enablement +- disable mp3 enablement on RHEL (compiler too old) + +* Tue Mar 21 2017 Tom Callaway 57.0.2987.110-2 +- fix privlibs + +* Mon Mar 20 2017 Tom Callaway 57.0.2987.110-1 +- update to 57.0.2987.110 + +* Tue Mar 14 2017 Tom Callaway 57.0.2987.98-1 +- update to 57.0.2987.98 + +* Sun Mar 5 2017 Tom Callaway 56.0.2924.87-8 +- enable mp3 support + +* Sat Mar 4 2017 Tom Callaway 56.0.2924.87-7 +- fix desktop file to have "new window" and "new private window" actions + +* Tue Feb 28 2017 Tom Callaway 56.0.2924.87-6 +- fix issue with gcc7 compile in v8 (thanks to Ben Noordhuis) + +* Fri Feb 24 2017 Tom Callaway 56.0.2924.87-5 +- versioning sync build on rawhide + +* Fri Feb 24 2017 Tom Callaway 56.0.2924.87-4.1 +- fix issue with unique_ptr move on return with old gcc + +* Tue Feb 21 2017 Tom Callaway 56.0.2924.87-4 +- disable debuginfo + +* Mon Feb 13 2017 Tom Callaway 56.0.2924.87-3 +- fix compilation issue +- build third_party/WebKit with -fpermissive +- use bundled jinja everywhere + +* Fri Feb 10 2017 Tom Callaway 56.0.2924.87-2 +- add BR: gtk3-devel + +* Fri Feb 10 2017 Tom Callaway 56.0.2924.87-1 +- update to 56.0.2924.87 + +* Fri Feb 10 2017 Fedora Release Engineering - 55.0.2883.87-2.1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Tue Dec 13 2016 Tom Callaway 55.0.2883.87-1.1 +- use bundled jinja2 on RHEL (or Fedora older than 23) +- fix rvalue issue in remoting code + +* Tue Dec 13 2016 Tom Callaway 55.0.2883.87-1 +- update to 55.0.2883.87 + +* Mon Dec 12 2016 Tom Callaway 55.0.2883.75-1 +- update to 55.0.2883.75 + +* Fri Dec 2 2016 Tom Callaway 54.0.2840.100-1 +- update to 54.0.2840.100 + +* Fri Nov 4 2016 Tom Callaway 54.0.2840.90-3 +- when use_aura is on, chrome/browser needs to link to ui/snapshot + +* Wed Nov 2 2016 Tom Callaway 54.0.2840.90-2 +- export setOpaque in cc_blink + +* Wed Nov 2 2016 Tom Callaway 54.0.2840.90-1 +- update to 54.0.2840.90 +- undo ld manipulation for i686, just use -g1 there + +* Tue Nov 1 2016 Tom Callaway 54.0.2840.71-2 +- disable debugging + +* Wed Oct 26 2016 Tom Callaway 54.0.2840.71-1 +- update to 54.0.2840.71 + +* Wed Oct 26 2016 Tom Callaway 54.0.2840.59-2 +- fix deps + +* Thu Oct 13 2016 Tom Callaway 54.0.2840.59-1 +- 54.0.2840.59 +- use bundled opus, libevent + +* Fri Sep 30 2016 Tom Callaway 53.0.2785.143-1 +- 53.0.2785.143 + +* Tue Sep 20 2016 Tom Callaway 53.0.2785.116-1 +- 53.0.2785.116 + +* Wed Sep 14 2016 Tom Callaway 53.0.2785.113-1 +- 53.0.2785.113 + +* Thu Sep 8 2016 Tom Callaway 53.0.2785.101-1 +- 53.0.2785.101 +- happy star trek day. live long and prosper. + +* Wed Sep 7 2016 Tom Callaway 53.0.2785.92-1 +- add basic framework for gn tooling (disabled because it doesn't work yet) +- update to 53.0.2785.92 +- fix HOME environment issue in chrome-remote-desktop service file + +* Mon Aug 29 2016 Tom Callaway 52.0.2743.116-11 +- conditionalize Requires: u2f-hidraw-policy so that it is only used on Fedora +- use bundled harfbuzz on EL7 + +* Thu Aug 18 2016 Tom Callaway 52.0.2743.116-10 +- disable gtk3 because it breaks lots of things +- re-enable hidpi setting + +* Tue Aug 16 2016 Tom Callaway 52.0.2743.116-9 +- filter out Requires/Provides for chromium-only libs and plugins + +* Tue Aug 16 2016 Tom Callaway 52.0.2743.116-8 +- fix path on Requires(post) line for semanage + +* Mon Aug 15 2016 Tom Callaway 52.0.2743.116-7 +- add Requires(post) items for selinux scriptlets + +* Mon Aug 15 2016 Tom Callaway 52.0.2743.116-6 +- disable the "hidpi" setting +- unset MADV_FREE if set (should get F25+ working again) + +* Fri Aug 12 2016 Tom Callaway 52.0.2743.116-5 +- do not package libwidevinecdm*.so, they are just empty shells + instead, to enable widevine, get these files from Google Chrome + +* Fri Aug 12 2016 Tom Callaway 52.0.2743.116-4 +- add "freeworld" conditional for testing netflix/widevine + +* Fri Aug 12 2016 Tom Callaway 52.0.2743.116-3 +- move PepperFlash directory out of the nacl conditional (thanks to churchyard) +- fix widevine (thanks to David Vásquez and UnitedRPMS) + +* Wed Aug 10 2016 Tom Callaway 52.0.2743.116-2 +- include clearkeycdm and widevinecdm files in libs-media + +* Mon Aug 8 2016 Tom Callaway 52.0.2743.116-1 +- update to 52.0.2743.116 + +* Thu Aug 4 2016 Tom Callaway 52.0.2743.82-13 +- change libs split to "libs-media", as that actually works. +- add PepperFlash directory (nothing in it though, sorry) + +* Wed Aug 3 2016 Tom Callaway 52.0.2743.82-12 +- split out libs package beyond ffmpeg, into libs and libs-content +- fix libusbx conditional for el7 to not nuke libusb headers +- disable speech-dispatcher header prefix setting if not fedora (el7) + +* Wed Aug 3 2016 Tom Callaway 52.0.2743.82-11 +- split out chromium-libs-ffmpeg so it can be easily replaced +- conditionalize opus and libusbx for el7 + +* Wed Aug 3 2016 Tom Callaway 52.0.2743.82-10 +- Add ICU Text Codec aliases (from openSUSE via Russian Fedora) +- Use PIE in the Linux sandbox (from openSUSE via Russian Fedora) +- Enable ARM CPU detection for webrtc (from archlinux via Russian Fedora) +- Do not force -m32 in icu compile on ARM (from archlinux via Russian Fedora) +- Enable gtk3 support (via conditional) +- Enable fpic on linux +- Enable hidpi +- Force aura on +- Enable touch_ui +- Add chromedriver subpackage (from Russian Fedora) +- Set default master_preferences location to /etc/chromium +- Add master_preferences file as config file +- Improve chromium-browser.desktop (from Russian Fedora) + +* Thu Jul 28 2016 Tom Callaway 52.0.2743.82-9 +- fix conditional to disable verbose logging output unless beta/dev + +* Thu Jul 28 2016 Tom Callaway 52.0.2743.82-8 +- disable nacl/pnacl for Fedora 23 (and older) + +* Thu Jul 28 2016 Tom Callaway 52.0.2743.82-7 +- fix post scriptlet so that selinux stuff only happens when selinux is enabled + +* Thu Jul 28 2016 Richard Hughes 52.0.2743.82-6 +- Add an AppData file so that Chromium appears in the software center + +* Wed Jul 27 2016 Tom Callaway 52.0.2743.82-5 +- enable nacl/pnacl (chromium-native_client has landed in Fedora) +- fix chromium-browser.sh to report Fedora build target properly + +* Wed Jul 27 2016 Tom Callaway 52.0.2743.82-4 +- compile with -fno-delete-null-pointer-checks (fixes v8 crashes, nacl/pnacl) +- turn nacl/pnacl off until chromium-native_client lands in Fedora + +* Tue Jul 26 2016 Tom Callaway 52.0.2743.82-3 +- turn nacl back on for x86_64 + +* Thu Jul 21 2016 Tom Callaway 52.0.2743.82-2 +- fix cups 2.2 support +- try to enable widevine compatibility (you still need to get the binary .so files from chrome) + +* Thu Jul 21 2016 Tom Callaway 52.0.2743.82-1 +- update to 52.0.2743.82 +- handle locales properly +- cleanup spec + +* Tue Jul 19 2016 Tom Callaway 52.0.2743.75-1 +- update to 52.0.2743.75 + +* Wed Jul 6 2016 Tom Callaway 52.0.2743.60-1 +- bump to 52.0.2743.60, disable nacl for now + +* Mon May 9 2016 Tom Callaway 52.0.2723.2-1 +- force to dev to see if it works better on F24+ + +* Wed May 4 2016 Tom Callaway 50.0.2661.94-6 +- apply upstream fix for https://bugs.chromium.org/p/chromium/issues/detail?id=604534 + +* Tue May 3 2016 Tom Callaway 50.0.2661.94-5 +- use bundled re2 (conditionalize it) + +* Tue May 3 2016 Tom Callaway 50.0.2661.94-4 +- disable asan (it never quite built) +- do not preserve re2 bundled tree, causes header/library mismatch + +* Mon May 2 2016 Tom Callaway 50.0.2661.94-3 +- enable AddressSanize (ASan) for debugging + +* Sat Apr 30 2016 Tom Callaway 50.0.2661.94-2 +- use bundled icu always. *sigh* + +* Fri Apr 29 2016 Tom Callaway 50.0.2661.94-1 +- update to 50.0.2661.94 + +* Wed Apr 27 2016 Tom Callaway 50.0.2661.86-1 +- update to 50.0.2661.86 + +* Thu Mar 17 2016 Tom Callaway 49.0.2623.87-4 +- protect third_party/woff2 + +* Thu Mar 17 2016 Tom Callaway 49.0.2623.87-3 +- add BuildRequires: libffi-devel + +* Thu Mar 17 2016 Tom Callaway 49.0.2623.87-2 +- explicitly disable sysroot + +* Thu Mar 17 2016 Tom Callaway 49.0.2623.87-1 +- update to 49.0.2623.87 + +* Mon Feb 29 2016 Tom Callaway 48.0.2564.116-3 +- Happy Leap Day! +- add Requires: u2f-hidraw-policy for u2f token support +- add Requires: xorg-x11-server-Xvfb for chrome-remote-desktop + +* Fri Feb 26 2016 Tom Callaway 48.0.2564.116-2 +- fix icu BR + +* Wed Feb 24 2016 Tom Callaway 48.0.2564.116-1 +- Update to 48.0.2564.116 +- conditionalize icu properly +- fix libusbx handling (bz1270324) + +* Wed Feb 17 2016 Tom Callaway 48.0.2564.103-2 +- fixes for gcc6 + +* Mon Feb 8 2016 Tom Callaway 48.0.2564.103-1 +- update to 48.0.2564.103 +- use bundled libsrtp (because upstream has coded themselves into an ugly corner) + +* Fri Jan 22 2016 Tom Callaway 48.0.2564.82-1 +- update to 48.0.2564.82 + +* Fri Jan 15 2016 Tom Callaway 47.0.2526.111-1 +- update to 47.0.2526.111 + +* Thu Jan 07 2016 Tomas Popela 47.0.2526.106-2 +- compare hashes when downloading the tarballs +- Google started to include the Debian sysroots in tarballs - remove them while + processing the tarball +- add a way to not use the system display server for tests instead of Xvfb +- update the depot_tools checkout to get some GN fixes +- use the remove_bundled_libraries script +- update the clean_ffmpeg script to print errors when some files that we are + processing are missing +- update the clean_ffmpeg script to operate on tarball's toplevel folder +- don't show comments as removed tests in get_linux_tests_names script +- rework the process_ffmpeg_gyp script (also rename it to + get_free_ffmpeg_source_files) to use the GN files insted of GYP (but we still + didn't switched to GN build) + +* Wed Dec 16 2015 Tom Callaway 47.0.2526.106-1 +- update to 47.0.2526.106 + +* Tue Dec 15 2015 Tom Callaway 47.0.2526.80-4 +- entirely patch out the broken fd counter from the nacl loader code + killing it with fire would be better, but then chromium is on fire + and that somehow makes it worse. + +* Mon Dec 14 2015 Tom Callaway 47.0.2526.80-3 +- revert nacl fd patch (now we see 6 fds! 6 LIGHTS!) + +* Fri Dec 11 2015 Tom Callaway 47.0.2526.80-2 +- build everything shared, but when we do shared builds, make -libs subpackage +- make chrome-remote-desktop dep on -libs subpackage in shared builds + +* Wed Dec 9 2015 Tom Callaway 47.0.2526.80-1 +- update to 47.0.2526.80 +- only build ffmpeg shared, not any other libs + this is because if we build the other libs shared, then our + chrome-remote-desktop build deps on those libs and we do not want that + +* Tue Dec 8 2015 Tom Callaway 47.0.2526.73-2 +- The nacl loader claims it sees 7 fds open ALL THE TIME, and fails + So, we tell it that it is supposed to see 7. + I suspect building with shared objects is causing this disconnect. + +* Wed Dec 2 2015 Tom Callaway 47.0.2526.73-1 +- update to 47.0.2526.73 +- rework chrome-remote-desktop subpackage to work for google-chrome and chromium + +* Wed Dec 2 2015 Tomas Popela 47.0.2526.69-1 +- Update to 47.0.2526.69 + +* Tue Dec 1 2015 Tom Callaway 46.0.2490.86-4 +- still more remote desktop changes + +* Mon Nov 30 2015 Tom Callaway 46.0.2490.86-3 +- lots of remote desktop cleanups + +* Thu Nov 12 2015 Tom Callaway 46.0.2490.86-2 +- re-enable Requires/BuildRequires for libusbx +- add remote-desktop subpackage + +* Wed Nov 11 2015 Tomas Popela 46.0.2490.86-1 +- update to 46.0.2490.86 +- clean the SPEC file +- add support for policies: https://www.chromium.org/administrators/linux-quick-start +- replace exec_mem_t SELinux label with bin_t - see rhbz#1281437 +- refresh scripts that are used for processing the original tarball + +* Fri Oct 30 2015 Tom Callaway 46.0.2490.80-5 +- tls_edit is a nacl thing. who knew? + +* Thu Oct 29 2015 Tom Callaway 46.0.2490.80-4 +- more nacl fixups for i686 case + +* Thu Oct 29 2015 Tom Callaway 46.0.2490.80-3 +- conditionalize nacl/nonacl, disable nacl on i686, build for i686 + +* Mon Oct 26 2015 Tom Callaway 46.0.2490.80-2 +- conditionalize shared bits (enable by default) + +* Fri Oct 23 2015 Tom Callaway 46.0.2490.80-1 +- update to 46.0.2490.80 + +* Thu Oct 15 2015 Tom Callaway 46.0.2490.71-1 +- update to 46.0.2490.71 + +* Thu Oct 15 2015 Tom Callaway 45.0.2454.101-2 +- fix icu handling for f21 and older + +* Mon Oct 5 2015 Tom Callaway 45.0.2454.101-1 +- update to 45.0.2454.101 + +* Thu Jun 11 2015 Tom Callaway 43.0.2357.124-1 +- update to 43.0.2357.124 + +* Tue Jun 2 2015 Tom Callaway 43.0.2357.81-1 +- update to 43.0.2357.81 + +* Thu Feb 26 2015 Tom Callaway 40.0.2214.115-1 +- update to 40.0.2214.115 + +* Thu Feb 19 2015 Tom Callaway 40.0.2214.111-1 +- update to 40.0.2214.111 + +* Mon Feb 2 2015 Tom Callaway 40.0.2214.94-1 +- update to 40.0.2214.94 + +* Tue Jan 27 2015 Tom Callaway 40.0.2214.93-1 +- update to 40.0.2214.93 + +* Sat Jan 24 2015 Tom Callaway 40.0.2214.91-1 +- update to 40.0.2214.91 + +* Wed Jan 21 2015 Tom Callaway 39.0.2171.95-3 +- use bundled icu on Fedora < 21, we need 5.2 + +* Tue Jan 6 2015 Tom Callaway 39.0.2171.95-2 +- rebase off Tomas's spec file for Fedora + +* Fri Dec 12 2014 Tomas Popela 39.0.2171.95-1 +- Update to 39.0.2171.95 +- Resolves: rhbz#1173448 + +* Wed Nov 26 2014 Tomas Popela 39.0.2171.71-1 +- Update to 39.0.2171.71 +- Resolves: rhbz#1168128 + +* Wed Nov 19 2014 Tomas Popela 39.0.2171.65-2 +- Revert the chrome-sandbox rename to chrome_sandbox +- Resolves: rhbz#1165653 + +* Wed Nov 19 2014 Tomas Popela 39.0.2171.65-1 +- Update to 39.0.2171.65 +- Use Red Hat Developer Toolset for compilation +- Set additional SELinux labels +- Add more unit tests +- Resolves: rhbz#1165653 + +* Fri Nov 14 2014 Tomas Popela 38.0.2125.122-1 +- Update to 38.0.2125.122 +- Resolves: rhbz#1164116 + +* Wed Oct 29 2014 Tomas Popela 38.0.2125.111-1 +- Update to 38.0.2125.111 +- Resolves: rhbz#1158347 + +* Fri Oct 24 2014 Tomas Popela 38.0.2125.104-2 +- Fix the situation when the return key (and keys from numpad) does not work + in HTML elements with input +- Resolves: rhbz#1153988 +- Dynamically determine the presence of the PepperFlash plugin +- Resolves: rhbz#1154118 + +* Thu Oct 16 2014 Tomas Popela 38.0.2125.104-1 +- Update to 38.0.2125.104 +- Resolves: rhbz#1153012 + +* Thu Oct 09 2014 Tomas Popela 38.0.2125.101-2 +- The boringssl is used for tests, without the possibility of using + the system openssl instead. Remove the openssl and boringssl sources + when not building the tests. +- Resolves: rhbz#1004948 + +* Wed Oct 08 2014 Tomas Popela 38.0.2125.101-1 +- Update to 38.0.2125.101 +- System openssl is used for tests, otherwise the bundled boringssl is used +- Don't build with clang +- Resolves: rhbz#1004948 + +* Wed Sep 10 2014 Tomas Popela 37.0.2062.120-1 +- Update to 37.0.2062.120 +- Resolves: rhbz#1004948 + +* Wed Aug 27 2014 Tomas Popela 37.0.2062.94-1 +- Update to 37.0.2062.94 +- Include the pdf viewer library + +* Wed Aug 13 2014 Tomas Popela 36.0.1985.143-1 +- Update to 36.0.1985.143 +- Use system openssl instead of bundled one +- Resolves: rhbz#1004948 + +* Thu Jul 17 2014 Tomas Popela 36.0.1985.125-1 +- Update to 36.0.1985.125 +- Add libexif as BR +- Resolves: rhbz#1004948 + +* Wed Jun 11 2014 Tomas Popela 35.0.1916.153-1 +- Update to 35.0.1916.153 +- Resolves: rhbz#1004948 + +* Wed May 21 2014 Tomas Popela 35.0.1916.114-1 +- Update to 35.0.1916.114 +- Bundle python-argparse +- Resolves: rhbz#1004948 + +* Wed May 14 2014 Tomas Popela 34.0.1847.137-1 +- Update to 34.0.1847.137 +- Resolves: rhbz#1004948 + +* Mon May 5 2014 Tomas Popela 34.0.1847.132-1 +- Update to 34.0.1847.132 +- Bundle depot_tools and switch from make to ninja +- Remove PepperFlash +- Resolves: rhbz#1004948 + +* Mon Feb 3 2014 Tomas Popela 32.0.1700.102-1 +- Update to 32.0.1700.102 + +* Thu Jan 16 2014 Tomas Popela 32.0.1700.77-1 +- Update to 32.0.1700.77 +- Properly kill Xvfb when tests fails +- Add libdrm as BR +- Add libcap as BR + +* Tue Jan 7 2014 Tomas Popela 31.0.1650.67-2 +- Minor changes in spec files and scripts +- Add Xvfb as BR for tests +- Add policycoreutils-python as Requires +- Compile unittests and run them in chech phase, but turn them off by default + as many of them are failing in Brew + +* Thu Dec 5 2013 Tomas Popela 31.0.1650.67-1 +- Update to 31.0.1650.63 + +* Thu Nov 21 2013 Tomas Popela 31.0.1650.57-1 +- Update to 31.0.1650.57 + +* Wed Nov 13 2013 Tomas Popela 31.0.1650.48-1 +- Update to 31.0.1650.48 +- Minimal supported RHEL6 version is now RHEL 6.5 due to GTK+ + +* Fri Oct 25 2013 Tomas Popela 30.0.1599.114-1 +- Update to 30.0.1599.114 +- Hide the infobar with warning that this version of OS is not supported +- Polished the chromium-latest.py + +* Thu Oct 17 2013 Tomas Popela 30.0.1599.101-1 +- Update to 30.0.1599.101 +- Minor changes in scripts + +* Wed Oct 2 2013 Tomas Popela 30.0.1599.66-1 +- Update to 30.0.1599.66 +- Automated the script for cleaning the proprietary sources from ffmpeg. + +* Thu Sep 19 2013 Tomas Popela 29.0.1547.76-1 +- Update to 29.0.1547.76 +- Added script for removing the proprietary sources from ffmpeg. This script is called during cleaning phase of ./chromium-latest --rhel + +* Mon Sep 16 2013 Tomas Popela 29.0.1547.65-2 +- Compile with Dproprietary_codecs=0 and Dffmpeg_branding=Chromium to disable proprietary codecs (i.e. MP3) + +* Mon Sep 9 2013 Tomas Popela 29.0.1547.65-1 +- Initial version based on Tom Callaway's work +