diff options
author | Mike Gilbert <floppym@gentoo.org> | 2019-05-27 23:59:55 -0400 |
---|---|---|
committer | Mike Gilbert <floppym@gentoo.org> | 2019-05-28 00:01:28 -0400 |
commit | f142549e0ec9bb068bbf9160fbeb116eff93770f (patch) | |
tree | ee0ee9743b187690c98ebce4d0cf0c015176cd38 /www-client | |
parent | app-shells/ksh: backport fix for gcc 9 (diff) | |
download | gentoo-f142549e0ec9bb068bbf9160fbeb116eff93770f.tar.gz gentoo-f142549e0ec9bb068bbf9160fbeb116eff93770f.tar.bz2 gentoo-f142549e0ec9bb068bbf9160fbeb116eff93770f.zip |
www-client/chromium: bump to 74.0.3729.169
Package-Manager: Portage-2.3.66_p2, Repoman-2.3.12_p111
Signed-off-by: Mike Gilbert <floppym@gentoo.org>
Diffstat (limited to 'www-client')
-rw-r--r-- | www-client/chromium/Manifest | 1 | ||||
-rw-r--r-- | www-client/chromium/chromium-74.0.3729.169.ebuild | 706 | ||||
-rw-r--r-- | www-client/chromium/files/chromium-74-2f28731.patch | 483 | ||||
-rw-r--r-- | www-client/chromium/files/chromium-74-7685422.patch | 42 | ||||
-rw-r--r-- | www-client/chromium/files/chromium-74-c2c467f.patch | 75 | ||||
-rw-r--r-- | www-client/chromium/files/chromium-74-e1b1f3a.patch | 587 | ||||
-rw-r--r-- | www-client/chromium/files/chromium-compiler-r8.patch | 169 | ||||
-rw-r--r-- | www-client/chromium/files/quiche-00f47df.patch | 38 |
8 files changed, 2101 insertions, 0 deletions
diff --git a/www-client/chromium/Manifest b/www-client/chromium/Manifest index 8788374049e5..891c6691a428 100644 --- a/www-client/chromium/Manifest +++ b/www-client/chromium/Manifest @@ -1,2 +1,3 @@ DIST chromium-73.0.3683.75.tar.xz 710439908 BLAKE2B 23ed7facf2f67e9bbfc2f1baf434892773d9d63dab10cebab350c3b0b2c75a07f84a4f677e01563a441cc3bae0d42212b3eb28b6d7c573b0137d25e478064a3b SHA512 52bd1dac782a2f7960eba48446d4dfc4c6c13c8e9de21bbee250fad2802beb222cff7bea9878c7338926030aa3aa7ffd2dd1238d35e261a0d766b2d9974fdaf6 DIST chromium-73.0.3683.86.tar.xz 710449412 BLAKE2B 87b4d15440e88be506920813a52e7a503ac81458aa3f2818490c28f6bb5cfc0ca24b316072e5a0664a8bfe6444be23e565579bc232cdfcef42acf8eeca9f216f SHA512 5dd450640c1ea30f7941231e8c459aec0312c18e089b2c8b9104c4ee835a8fa389f5fb9b301b46d87ce260956eaf3e3bd6aff6ae54c279a303aa757537cace15 +DIST chromium-74.0.3729.169.tar.xz 749495820 BLAKE2B bfe485220239aad146eab0cd7bf158a20bccf03abe74457ea3933094c9fb200ff7a2e9db4a62fa1a736341ce8ee987520e20bd32e13e213435fd6724d15a7d85 SHA512 783558bbae43a928b7d9fe18717b63be432409c81aba0a38ccb14f38398d8681122bdd763db6d22b01363108253432ed203a86f8c9ba627247219bf1519f839b diff --git a/www-client/chromium/chromium-74.0.3729.169.ebuild b/www-client/chromium/chromium-74.0.3729.169.ebuild new file mode 100644 index 000000000000..a280c02724c4 --- /dev/null +++ b/www-client/chromium/chromium-74.0.3729.169.ebuild @@ -0,0 +1,706 @@ +# Copyright 1999-2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 +PYTHON_COMPAT=( python2_7 ) + +CHROMIUM_LANGS="am ar bg bn ca cs da de el en-GB es es-419 et fa fi fil fr gu he + hi hr hu id it ja kn ko lt lv ml mr ms nb nl pl pt-BR pt-PT ro ru sk sl sr + sv sw ta te th tr uk vi zh-CN zh-TW" + +inherit check-reqs chromium-2 desktop flag-o-matic multilib ninja-utils pax-utils portability python-any-r1 readme.gentoo-r1 toolchain-funcs xdg-utils + +DESCRIPTION="Open-source version of Google Chrome web browser" +HOMEPAGE="http://chromium.org/" +SRC_URI="https://commondatastorage.googleapis.com/chromium-browser-official/${P}.tar.xz" + +LICENSE="BSD" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="+closure-compile component-build cups gnome-keyring +hangouts jumbo-build kerberos neon pic +proprietary-codecs pulseaudio selinux +suid +system-ffmpeg +system-icu +system-libvpx +tcmalloc widevine" +RESTRICT="!system-ffmpeg? ( proprietary-codecs? ( bindist ) )" +REQUIRED_USE="component-build? ( !suid )" + +COMMON_DEPEND=" + >=app-accessibility/at-spi2-atk-2.26:2 + app-arch/bzip2:= + cups? ( >=net-print/cups-1.3.11:= ) + >=dev-libs/atk-2.26 + dev-libs/expat:= + dev-libs/glib:2 + system-icu? ( >=dev-libs/icu-59:= ) + >=dev-libs/libxml2-2.9.4-r3:=[icu] + dev-libs/libxslt:= + dev-libs/nspr:= + >=dev-libs/nss-3.26:= + >=dev-libs/re2-0.2016.11.01:= + gnome-keyring? ( >=gnome-base/libgnome-keyring-3.12:= ) + >=media-libs/alsa-lib-1.0.19:= + media-libs/fontconfig:= + media-libs/freetype:= + >=media-libs/harfbuzz-2.2.0:0=[icu(-)] + media-libs/libjpeg-turbo:= + media-libs/libpng:= + system-libvpx? ( media-libs/libvpx:=[postproc,svc] ) + >=media-libs/openh264-1.6.0:= + pulseaudio? ( media-sound/pulseaudio:= ) + system-ffmpeg? ( + >=media-video/ffmpeg-4:= + || ( + media-video/ffmpeg[-samba] + >=net-fs/samba-4.5.10-r1[-debug(-)] + ) + !=net-fs/samba-4.5.12-r0 + media-libs/opus:= + ) + sys-apps/dbus:= + sys-apps/pciutils:= + virtual/udev + x11-libs/cairo:= + x11-libs/gdk-pixbuf:2 + x11-libs/gtk+:3[X] + x11-libs/libX11:= + x11-libs/libXcomposite:= + x11-libs/libXcursor:= + x11-libs/libXdamage:= + x11-libs/libXext:= + x11-libs/libXfixes:= + >=x11-libs/libXi-1.6.0:= + x11-libs/libXrandr:= + x11-libs/libXrender:= + x11-libs/libXScrnSaver:= + x11-libs/libXtst:= + x11-libs/pango:= + app-arch/snappy:= + media-libs/flac:= + >=media-libs/libwebp-0.4.0:= + sys-libs/zlib:=[minizip] + kerberos? ( virtual/krb5 ) +" +# For nvidia-drivers blocker, see bug #413637 . +RDEPEND="${COMMON_DEPEND} + !<www-plugins/chrome-binary-plugins-57 + x11-misc/xdg-utils + virtual/opengl + virtual/ttf-fonts + selinux? ( sec-policy/selinux-chromium ) + tcmalloc? ( !<x11-drivers/nvidia-drivers-331.20 ) + widevine? ( www-plugins/chrome-binary-plugins[widevine(-)] ) +" +# dev-vcs/git - https://bugs.gentoo.org/593476 +# sys-apps/sandbox - https://crbug.com/586444 +DEPEND="${COMMON_DEPEND} +" +BDEPEND=" + >=app-arch/gzip-1.7 + !arm? ( + dev-lang/yasm + ) + dev-lang/perl + dev-util/gn + dev-vcs/git + >=dev-util/gperf-3.0.3 + >=dev-util/ninja-1.7.2 + >=net-libs/nodejs-7.6.0[inspector] + sys-apps/hwids[usb(+)] + >=sys-devel/bison-2.4.3 + sys-devel/flex + closure-compile? ( virtual/jre ) + virtual/pkgconfig +" + +: ${CHROMIUM_FORCE_CLANG=no} + +if [[ ${CHROMIUM_FORCE_CLANG} == yes ]]; then + BDEPEND+=" >=sys-devel/clang-5" +fi + +if ! has chromium_pkg_die ${EBUILD_DEATH_HOOKS}; then + EBUILD_DEATH_HOOKS+=" chromium_pkg_die"; +fi + +DISABLE_AUTOFORMATTING="yes" +DOC_CONTENTS=" +Some web pages may require additional fonts to display properly. +Try installing some of the following packages if some characters +are not displayed properly: +- media-fonts/arphicfonts +- media-fonts/droid +- media-fonts/ipamonafont +- media-fonts/noto +- media-fonts/ja-ipafonts +- media-fonts/takao-fonts +- media-fonts/wqy-microhei +- media-fonts/wqy-zenhei + +To fix broken icons on the Downloads page, you should install an icon +theme that covers the appropriate MIME types, and configure this as your +GTK+ icon theme. +" + +PATCHES=( + "${FILESDIR}"/chromium-compiler-r8.patch + "${FILESDIR}"/chromium-widevine-r4.patch + "${FILESDIR}"/chromium-fix-char_traits.patch + "${FILESDIR}"/chromium-74-e1b1f3a.patch + "${FILESDIR}"/chromium-74-c2c467f.patch + "${FILESDIR}"/chromium-74-2f28731.patch + "${FILESDIR}"/chromium-74-7685422.patch + "${FILESDIR}"/quiche-00f47df.patch +) + +pre_build_checks() { + if [[ ${MERGE_TYPE} != binary ]]; then + local -x CPP="$(tc-getCXX) -E" + if tc-is-gcc && ! ver_test "$(gcc-version)" -ge 8.0; then + die "At least gcc 8.0 is required" + fi + fi + + # Check build requirements, bug #541816 and bug #471810 . + CHECKREQS_MEMORY="3G" + CHECKREQS_DISK_BUILD="5G" + if ( shopt -s extglob; is-flagq '-g?(gdb)?([1-9])' ); then + CHECKREQS_DISK_BUILD="25G" + if ! use component-build; then + CHECKREQS_MEMORY="16G" + fi + fi + check-reqs_pkg_setup +} + +pkg_pretend() { + pre_build_checks +} + +pkg_setup() { + pre_build_checks + + chromium_suid_sandbox_check_kernel_config +} + +src_prepare() { + # Calling this here supports resumption via FEATURES=keepwork + python_setup + + default + + mkdir -p third_party/node/linux/node-linux-x64/bin || die + ln -s "${EPREFIX}"/usr/bin/node third_party/node/linux/node-linux-x64/bin/node || die + + local keeplibs=( + base/third_party/dmg_fp + base/third_party/dynamic_annotations + base/third_party/icu + base/third_party/nspr + base/third_party/superfasthash + base/third_party/symbolize + base/third_party/valgrind + base/third_party/xdg_mime + base/third_party/xdg_user_dirs + buildtools/third_party/libc++ + buildtools/third_party/libc++abi + chrome/third_party/mozilla_security_manager + courgette/third_party + net/third_party/mozilla_security_manager + net/third_party/nss + net/third_party/quic + net/third_party/uri_template + third_party/abseil-cpp + third_party/angle + third_party/angle/src/common/third_party/base + third_party/angle/src/common/third_party/smhasher + third_party/angle/src/common/third_party/xxhash + third_party/angle/src/third_party/compiler + third_party/angle/src/third_party/libXNVCtrl + third_party/angle/src/third_party/trace_event + third_party/angle/third_party/glslang + third_party/angle/third_party/spirv-headers + third_party/angle/third_party/spirv-tools + third_party/angle/third_party/vulkan-headers + third_party/angle/third_party/vulkan-loader + third_party/angle/third_party/vulkan-tools + third_party/angle/third_party/vulkan-validation-layers + third_party/apple_apsl + third_party/blink + third_party/boringssl + third_party/boringssl/src/third_party/fiat + third_party/breakpad + third_party/breakpad/breakpad/src/third_party/curl + third_party/brotli + third_party/cacheinvalidation + third_party/catapult + third_party/catapult/common/py_vulcanize/third_party/rcssmin + third_party/catapult/common/py_vulcanize/third_party/rjsmin + third_party/catapult/third_party/beautifulsoup4 + third_party/catapult/third_party/html5lib-python + third_party/catapult/third_party/polymer + third_party/catapult/third_party/six + third_party/catapult/tracing/third_party/d3 + third_party/catapult/tracing/third_party/gl-matrix + third_party/catapult/tracing/third_party/jszip + third_party/catapult/tracing/third_party/mannwhitneyu + third_party/catapult/tracing/third_party/oboe + third_party/catapult/tracing/third_party/pako + third_party/ced + third_party/cld_3 + third_party/closure_compiler + third_party/crashpad + third_party/crashpad/crashpad/third_party/zlib + third_party/crc32c + third_party/cros_system_api + third_party/dav1d + third_party/devscripts + third_party/dom_distiller_js + third_party/emoji-segmenter + third_party/fips181 + third_party/flatbuffers + third_party/flot + third_party/freetype + third_party/glslang + third_party/google_input_tools + third_party/google_input_tools/third_party/closure_library + third_party/google_input_tools/third_party/closure_library/third_party/closure + third_party/googletest + third_party/hunspell + third_party/iccjpeg + third_party/inspector_protocol + third_party/jinja2 + third_party/jsoncpp + third_party/jstemplate + third_party/khronos + third_party/leveldatabase + third_party/libXNVCtrl + third_party/libaddressinput + third_party/libaom + third_party/libaom/source/libaom/third_party/vector + third_party/libaom/source/libaom/third_party/x86inc + third_party/libjingle + third_party/libphonenumber + third_party/libsecret + third_party/libsrtp + third_party/libsync + third_party/libudev + third_party/libwebm + third_party/libxml/chromium + third_party/libyuv + third_party/llvm + third_party/lss + third_party/lzma_sdk + third_party/markupsafe + third_party/mesa + third_party/metrics_proto + third_party/modp_b64 + third_party/nasm + third_party/node + third_party/node/node_modules/polymer-bundler/lib/third_party/UglifyJS2 + third_party/openmax_dl + third_party/ots + third_party/pdfium + third_party/pdfium/third_party/agg23 + third_party/pdfium/third_party/base + third_party/pdfium/third_party/bigint + third_party/pdfium/third_party/freetype + third_party/pdfium/third_party/lcms + third_party/pdfium/third_party/libopenjpeg20 + third_party/pdfium/third_party/libpng16 + third_party/pdfium/third_party/libtiff + third_party/pdfium/third_party/skia_shared + third_party/perfetto + third_party/ply + third_party/polymer + third_party/protobuf + third_party/protobuf/third_party/six + third_party/pyjson5 + third_party/qcms + third_party/rnnoise + third_party/s2cellid + third_party/sfntly + third_party/simplejson + third_party/skia + third_party/skia/include/third_party/vulkan + third_party/skia/third_party/gif + third_party/skia/third_party/skcms + third_party/skia/third_party/vulkan + third_party/smhasher + third_party/spirv-headers + third_party/SPIRV-Tools + third_party/sqlite + third_party/swiftshader + third_party/swiftshader/third_party/llvm-7.0 + third_party/swiftshader/third_party/llvm-subzero + third_party/swiftshader/third_party/subzero + third_party/unrar + third_party/usrsctp + third_party/vulkan + third_party/web-animations-js + third_party/webdriver + third_party/webrtc + third_party/webrtc/common_audio/third_party/fft4g + third_party/webrtc/common_audio/third_party/spl_sqrt_floor + third_party/webrtc/modules/third_party/fft + third_party/webrtc/modules/third_party/g711 + third_party/webrtc/modules/third_party/g722 + third_party/webrtc/rtc_base/third_party/base64 + third_party/webrtc/rtc_base/third_party/sigslot + third_party/widevine + third_party/woff2 + third_party/zlib/google + url/third_party/mozilla + v8/src/third_party/siphash + v8/src/third_party/valgrind + v8/src/third_party/utf8-decoder + v8/third_party/inspector_protocol + v8/third_party/v8 + + # gyp -> gn leftovers + base/third_party/libevent + third_party/adobe + third_party/speech-dispatcher + third_party/usb_ids + third_party/yasm/run_yasm.py + third_party/xdg-utils + ) + if ! use system-ffmpeg; then + keeplibs+=( third_party/ffmpeg third_party/opus ) + fi + if ! use system-icu; then + keeplibs+=( third_party/icu ) + fi + if ! use system-libvpx; then + keeplibs+=( third_party/libvpx ) + keeplibs+=( third_party/libvpx/source/libvpx/third_party/x86inc ) + fi + if use tcmalloc; then + keeplibs+=( third_party/tcmalloc ) + fi + + # Remove most bundled libraries. Some are still needed. + build/linux/unbundle/remove_bundled_libraries.py "${keeplibs[@]}" --do-remove || die +} + +src_configure() { + # Calling this here supports resumption via FEATURES=keepwork + python_setup + + local myconf_gn="" + + # Make sure the build system will use the right tools, bug #340795. + tc-export AR CC CXX NM + + if [[ ${CHROMIUM_FORCE_CLANG} == yes ]] && ! tc-is-clang; then + # Force clang since gcc is pretty broken at the moment. + CC=${CHOST}-clang + CXX=${CHOST}-clang++ + strip-unsupported-flags + fi + + if tc-is-clang; then + myconf_gn+=" is_clang=true clang_use_chrome_plugins=false" + else + myconf_gn+=" is_clang=false" + fi + + # Define a custom toolchain for GN + myconf_gn+=" custom_toolchain=\"//build/toolchain/linux/unbundle:default\"" + + if tc-is-cross-compiler; then + tc-export BUILD_{AR,CC,CXX,NM} + myconf_gn+=" host_toolchain=\"//build/toolchain/linux/unbundle:host\"" + myconf_gn+=" v8_snapshot_toolchain=\"//build/toolchain/linux/unbundle:host\"" + else + myconf_gn+=" host_toolchain=\"//build/toolchain/linux/unbundle:default\"" + fi + + # GN needs explicit config for Debug/Release as opposed to inferring it from build directory. + myconf_gn+=" is_debug=false" + + # Component build isn't generally intended for use by end users. It's mostly useful + # for development and debugging. + myconf_gn+=" is_component_build=$(usex component-build true false)" + + # https://chromium.googlesource.com/chromium/src/+/lkcr/docs/jumbo.md + myconf_gn+=" use_jumbo_build=$(usex jumbo-build true false)" + + myconf_gn+=" use_allocator=$(usex tcmalloc \"tcmalloc\" \"none\")" + + # Disable nacl, we can't build without pnacl (http://crbug.com/269560). + myconf_gn+=" enable_nacl=false" + + # Use system-provided libraries. + # TODO: freetype -- remove sources (https://bugs.chromium.org/p/pdfium/issues/detail?id=733). + # TODO: use_system_hunspell (upstream changes needed). + # TODO: use_system_libsrtp (bug #459932). + # TODO: use_system_protobuf (bug #525560). + # TODO: use_system_ssl (http://crbug.com/58087). + # TODO: use_system_sqlite (http://crbug.com/22208). + + # libevent: https://bugs.gentoo.org/593458 + local gn_system_libraries=( + flac + fontconfig + freetype + # Need harfbuzz_from_pkgconfig target + #harfbuzz-ng + libdrm + libjpeg + libpng + libwebp + libxml + libxslt + openh264 + re2 + snappy + yasm + zlib + ) + if use system-ffmpeg; then + gn_system_libraries+=( ffmpeg opus ) + fi + if use system-icu; then + gn_system_libraries+=( icu ) + fi + if use system-libvpx; then + gn_system_libraries+=( libvpx ) + fi + build/linux/unbundle/replace_gn_files.py --system-libraries "${gn_system_libraries[@]}" || die + + # See dependency logic in third_party/BUILD.gn + myconf_gn+=" use_system_harfbuzz=true" + + # Optional dependencies. + myconf_gn+=" closure_compile=$(usex closure-compile true false)" + myconf_gn+=" enable_hangout_services_extension=$(usex hangouts true false)" + myconf_gn+=" enable_widevine=$(usex widevine true false)" + myconf_gn+=" use_cups=$(usex cups true false)" + myconf_gn+=" use_gnome_keyring=$(usex gnome-keyring true false)" + myconf_gn+=" use_kerberos=$(usex kerberos true false)" + myconf_gn+=" use_pulseaudio=$(usex pulseaudio true false)" + + # TODO: link_pulseaudio=true for GN. + + myconf_gn+=" fieldtrial_testing_like_official_build=true" + + # Never use bundled gold binary. Disable gold linker flags for now. + # Do not use bundled clang. + # Trying to use gold results in linker crash. + myconf_gn+=" use_gold=false use_sysroot=false linux_use_bundled_binutils=false use_custom_libcxx=false" + + # Disable forced lld, bug 641556 + myconf_gn+=" use_lld=false" + + ffmpeg_branding="$(usex proprietary-codecs Chrome Chromium)" + myconf_gn+=" proprietary_codecs=$(usex proprietary-codecs true false)" + myconf_gn+=" ffmpeg_branding=\"${ffmpeg_branding}\"" + + # Set up Google API keys, see http://www.chromium.org/developers/how-tos/api-keys . + # Note: these are for Gentoo use ONLY. For your own distribution, + # please get your own set of keys. Feel free to contact chromium@gentoo.org + # for more info. + local google_api_key="AIzaSyDEAOvatFo0eTgsV_ZlEzx0ObmepsMzfAc" + local google_default_client_id="329227923882.apps.googleusercontent.com" + local google_default_client_secret="vgKG0NNv7GoDpbtoFNLxCUXu" + myconf_gn+=" google_api_key=\"${google_api_key}\"" + myconf_gn+=" google_default_client_id=\"${google_default_client_id}\"" + myconf_gn+=" google_default_client_secret=\"${google_default_client_secret}\"" + + local myarch="$(tc-arch)" + + # Avoid CFLAGS problems, bug #352457, bug #390147. + if ! use custom-cflags; then + replace-flags "-Os" "-O2" + strip-flags + + # Prevent linker from running out of address space, bug #471810 . + if use x86; then + filter-flags "-g*" + fi + + # Prevent libvpx build failures. Bug 530248, 544702, 546984. + if [[ ${myarch} == amd64 || ${myarch} == x86 ]]; then + filter-flags -mno-mmx -mno-sse2 -mno-ssse3 -mno-sse4.1 -mno-avx -mno-avx2 + fi + fi + + if [[ $myarch = amd64 ]] ; then + myconf_gn+=" target_cpu=\"x64\"" + ffmpeg_target_arch=x64 + elif [[ $myarch = x86 ]] ; then + myconf_gn+=" target_cpu=\"x86\"" + ffmpeg_target_arch=ia32 + + # This is normally defined by compiler_cpu_abi in + # build/config/compiler/BUILD.gn, but we patch that part out. + append-flags -msse2 -mfpmath=sse -mmmx + elif [[ $myarch = arm64 ]] ; then + myconf_gn+=" target_cpu=\"arm64\"" + ffmpeg_target_arch=arm64 + elif [[ $myarch = arm ]] ; then + myconf_gn+=" target_cpu=\"arm\"" + ffmpeg_target_arch=$(usex neon arm-neon arm) + else + die "Failed to determine target arch, got '$myarch'." + fi + + # Make sure that -Werror doesn't get added to CFLAGS by the build system. + # Depending on GCC version the warnings are different and we don't want + # the build to fail because of that. + myconf_gn+=" treat_warnings_as_errors=false" + + # Disable fatal linker warnings, bug 506268. + myconf_gn+=" fatal_linker_warnings=false" + + # https://bugs.gentoo.org/588596 + #append-cxxflags $(test-flags-CXX -fno-delete-null-pointer-checks) + + # Bug 491582. + export TMPDIR="${WORKDIR}/temp" + mkdir -p -m 755 "${TMPDIR}" || die + + # https://bugs.gentoo.org/654216 + addpredict /dev/dri/ #nowarn + + #if ! use system-ffmpeg; then + if false; then + local build_ffmpeg_args="" + if use pic && [[ "${ffmpeg_target_arch}" == "ia32" ]]; then + build_ffmpeg_args+=" --disable-asm" + fi + + # Re-configure bundled ffmpeg. See bug #491378 for example reasons. + einfo "Configuring bundled ffmpeg..." + pushd third_party/ffmpeg > /dev/null || die + chromium/scripts/build_ffmpeg.py linux ${ffmpeg_target_arch} \ + --branding ${ffmpeg_branding} -- ${build_ffmpeg_args} || die + chromium/scripts/copy_config.sh || die + chromium/scripts/generate_gn.py || die + popd > /dev/null || die + fi + + einfo "Configuring Chromium..." + set -- gn gen --args="${myconf_gn} ${EXTRA_GN}" out/Release + echo "$@" + "$@" || die +} + +src_compile() { + # Final link uses lots of file descriptors. + ulimit -n 2048 + + # Calling this here supports resumption via FEATURES=keepwork + python_setup + + #"${EPYTHON}" tools/clang/scripts/update.py --force-local-build --gcc-toolchain /usr --skip-checkout --use-system-cmake --without-android || die + + # Work around broken deps + #eninja -C out/Release gen/ui/accessibility/ax_enums.mojom{,-shared}.h + + # Build mksnapshot and pax-mark it. + local x + for x in mksnapshot v8_context_snapshot_generator; do + if tc-is-cross-compiler; then + eninja -C out/Release "host/${x}" + pax-mark m "out/Release/host/${x}" + else + eninja -C out/Release "${x}" + pax-mark m "out/Release/${x}" + fi + done + + # Even though ninja autodetects number of CPUs, we respect + # user's options, for debugging with -j 1 or any other reason. + eninja -C out/Release chrome chromedriver + use suid && eninja -C out/Release chrome_sandbox + + pax-mark m out/Release/chrome +} + +src_install() { + local CHROMIUM_HOME="/usr/$(get_libdir)/chromium-browser" + exeinto "${CHROMIUM_HOME}" + doexe out/Release/chrome + + if use suid; then + newexe out/Release/chrome_sandbox chrome-sandbox + fperms 4755 "${CHROMIUM_HOME}/chrome-sandbox" + fi + + doexe out/Release/chromedriver + + local sedargs=( -e "s:/usr/lib/:/usr/$(get_libdir)/:g" ) + sed "${sedargs[@]}" "${FILESDIR}/chromium-launcher-r3.sh" > chromium-launcher.sh || die + doexe chromium-launcher.sh + + # It is important that we name the target "chromium-browser", + # xdg-utils expect it; bug #355517. + dosym "${CHROMIUM_HOME}/chromium-launcher.sh" /usr/bin/chromium-browser + # keep the old symlink around for consistency + dosym "${CHROMIUM_HOME}/chromium-launcher.sh" /usr/bin/chromium + + dosym "${CHROMIUM_HOME}/chromedriver" /usr/bin/chromedriver + + # Allow users to override command-line options, bug #357629. + insinto /etc/chromium + newins "${FILESDIR}/chromium.default" "default" + + pushd out/Release/locales > /dev/null || die + chromium_remove_language_paks + popd + + insinto "${CHROMIUM_HOME}" + doins out/Release/*.bin + doins out/Release/*.pak + doins out/Release/*.so + + if ! use system-icu; then + doins out/Release/icudtl.dat + fi + + doins -r out/Release/locales + doins -r out/Release/resources + + if [[ -d out/Release/swiftshader ]]; then + insinto "${CHROMIUM_HOME}/swiftshader" + doins out/Release/swiftshader/*.so + fi + + # Install icons and desktop entry. + local branding size + for size in 16 22 24 32 48 64 128 256 ; do + case ${size} in + 16|32) branding="chrome/app/theme/default_100_percent/chromium" ;; + *) branding="chrome/app/theme/chromium" ;; + esac + newicon -s ${size} "${branding}/product_logo_${size}.png" \ + chromium-browser.png + done + + local mime_types="text/html;text/xml;application/xhtml+xml;" + mime_types+="x-scheme-handler/http;x-scheme-handler/https;" # bug #360797 + mime_types+="x-scheme-handler/ftp;" # bug #412185 + mime_types+="x-scheme-handler/mailto;x-scheme-handler/webcal;" # bug #416393 + make_desktop_entry \ + chromium-browser \ + "Chromium" \ + chromium-browser \ + "Network;WebBrowser" \ + "MimeType=${mime_types}\nStartupWMClass=chromium-browser" + sed -e "/^Exec/s/$/ %U/" -i "${ED}"/usr/share/applications/*.desktop || die + + # Install GNOME default application entry (bug #303100). + insinto /usr/share/gnome-control-center/default-apps + newins "${FILESDIR}"/chromium-browser.xml chromium-browser.xml + + readme.gentoo_create_doc +} + +pkg_postrm() { + xdg_icon_cache_update + xdg_desktop_database_update +} + +pkg_postinst() { + xdg_icon_cache_update + xdg_desktop_database_update + readme.gentoo_print_elog +} diff --git a/www-client/chromium/files/chromium-74-2f28731.patch b/www-client/chromium/files/chromium-74-2f28731.patch new file mode 100644 index 000000000000..83452619fe06 --- /dev/null +++ b/www-client/chromium/files/chromium-74-2f28731.patch @@ -0,0 +1,483 @@ +From 2f28731c17b246bd70075f828dcafcd23547da5d Mon Sep 17 00:00:00 2001 +From: David 'Digit' Turner <digit@google.com> +Date: Wed, 3 Apr 2019 14:32:09 +0000 +Subject: [PATCH] base: Fix Value layout for GCC +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It turns out that the previous changes to the base::Value +layout broke GCC compilation (see [1] for details). + +This CL fixes the situation by using a new DoubleStorage +type that will store double values in a 4-byte aligned +struct, with bit_cast<> being used to convert between +double and DoubleStorage values in the implementation. + +This ensures that base::Value remains as small as possible +in all cases. The small penalty is that loading/storing +double values on 32-bit ARM is slightly slower due to +the fact that the value is no longer 8-byte aligned. + ++ Fix the ValuesTest.SizeOfValue test to work correctly, + and disable it for debug builds, so it doesn't fail + because debug versions of the internal containers + are larger on certain systems. + +[1] https://chromium-review.googlesource.com/c/chromium/src/+/1472716 + +BUG=646113 +R=dcheng@chromium.org, pasko@chromium.org, lizeb@chromium.org, jdoerrie@chromium.org, jose.dapena@lge.com + +Change-Id: I9a365407dc064ba1bdc19859706f4154a495921e +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1550363 +Commit-Queue: David Turner <digit@chromium.org> +Reviewed-by: Jan Wilken Dörrie <jdoerrie@chromium.org> +Cr-Commit-Position: refs/heads/master@{#647271} +--- + base/values.cc | 67 +++++++++++++--------------- + base/values.h | 94 ++++++++++------------------------------ + base/values_unittest.cc | 96 ++++++++++++++++++++++++++++++----------- + 3 files changed, 124 insertions(+), 133 deletions(-) + +diff --git a/base/values.cc b/base/values.cc +index 9fed5b52d60e..16d686b0bee5 100644 +--- a/base/values.cc ++++ b/base/values.cc +@@ -12,6 +12,7 @@ + #include <ostream> + #include <utility> + ++#include "base/bit_cast.h" + #include "base/json/json_writer.h" + #include "base/logging.h" + #include "base/memory/ptr_util.h" +@@ -36,6 +37,9 @@ static_assert(std::is_standard_layout<Value>::value, + "base::Value should be a standard-layout C++ class in order " + "to avoid undefined behaviour in its implementation!"); + ++static_assert(sizeof(Value::DoubleStorage) == sizeof(double), ++ "The double and DoubleStorage types should have the same size"); ++ + namespace { + + const char* const kTypeNames[] = {"null", "boolean", "integer", "double", +@@ -110,8 +114,6 @@ Value::Value(Value&& that) noexcept { + InternalMoveConstructFrom(std::move(that)); + } + +-Value::Value() noexcept : type_(Type::NONE) {} +- + Value::Value(Type type) : type_(type) { + // Initialize with the default value. + switch (type_) { +@@ -125,7 +127,7 @@ Value::Value(Type type) : type_(type) { + int_value_ = 0; + return; + case Type::DOUBLE: +- double_value_ = 0.0; ++ double_value_ = bit_cast<DoubleStorage>(0.0); + return; + case Type::STRING: + new (&string_value_) std::string(); +@@ -149,21 +151,16 @@ Value::Value(Type type) : type_(type) { + CHECK(false); + } + +-Value::Value(bool in_bool) +- : bool_type_(Type::BOOLEAN), +- bool_value_(in_bool) {} ++Value::Value(bool in_bool) : type_(Type::BOOLEAN), bool_value_(in_bool) {} + +-Value::Value(int in_int) +- : int_type_(Type::INTEGER), +- int_value_(in_int) {} ++Value::Value(int in_int) : type_(Type::INTEGER), int_value_(in_int) {} + + Value::Value(double in_double) +- : double_type_(Type::DOUBLE), +- double_value_(in_double) { +- if (!std::isfinite(double_value_)) { ++ : type_(Type::DOUBLE), double_value_(bit_cast<DoubleStorage>(in_double)) { ++ if (!std::isfinite(in_double)) { + NOTREACHED() << "Non-finite (i.e. NaN or positive/negative infinity) " + << "values cannot be represented in JSON"; +- double_value_ = 0.0; ++ double_value_ = bit_cast<DoubleStorage>(0.0); + } + } + +@@ -172,8 +169,7 @@ Value::Value(const char* in_string) : Value(std::string(in_string)) {} + Value::Value(StringPiece in_string) : Value(std::string(in_string)) {} + + Value::Value(std::string&& in_string) noexcept +- : string_type_(Type::STRING), +- string_value_(std::move(in_string)) { ++ : type_(Type::STRING), string_value_(std::move(in_string)) { + DCHECK(IsStringUTF8(string_value_)); + } + +@@ -182,19 +178,15 @@ Value::Value(const char16* in_string16) : Value(StringPiece16(in_string16)) {} + Value::Value(StringPiece16 in_string16) : Value(UTF16ToUTF8(in_string16)) {} + + Value::Value(const std::vector<char>& in_blob) +- : binary_type_(Type::BINARY), +- binary_value_(in_blob.begin(), in_blob.end()) {} ++ : type_(Type::BINARY), binary_value_(in_blob.begin(), in_blob.end()) {} + + Value::Value(base::span<const uint8_t> in_blob) +- : binary_type_(Type::BINARY), +- binary_value_(in_blob.begin(), in_blob.end()) {} ++ : type_(Type::BINARY), binary_value_(in_blob.begin(), in_blob.end()) {} + + Value::Value(BlobStorage&& in_blob) noexcept +- : binary_type_(Type::BINARY), +- binary_value_(std::move(in_blob)) {} ++ : type_(Type::BINARY), binary_value_(std::move(in_blob)) {} + +-Value::Value(const DictStorage& in_dict) +- : dict_type_(Type::DICTIONARY), dict_() { ++Value::Value(const DictStorage& in_dict) : type_(Type::DICTIONARY), dict_() { + dict_.reserve(in_dict.size()); + for (const auto& it : in_dict) { + dict_.try_emplace(dict_.end(), it.first, +@@ -203,18 +195,16 @@ Value::Value(const DictStorage& in_dict) + } + + Value::Value(DictStorage&& in_dict) noexcept +- : dict_type_(Type::DICTIONARY), +- dict_(std::move(in_dict)) {} ++ : type_(Type::DICTIONARY), dict_(std::move(in_dict)) {} + +-Value::Value(const ListStorage& in_list) : list_type_(Type::LIST), list_() { ++Value::Value(const ListStorage& in_list) : type_(Type::LIST), list_() { + list_.reserve(in_list.size()); + for (const auto& val : in_list) + list_.emplace_back(val.Clone()); + } + + Value::Value(ListStorage&& in_list) noexcept +- : list_type_(Type::LIST), +- list_(std::move(in_list)) {} ++ : type_(Type::LIST), list_(std::move(in_list)) {} + + Value& Value::operator=(Value&& that) noexcept { + InternalCleanup(); +@@ -223,6 +213,10 @@ Value& Value::operator=(Value&& that) noexcept { + return *this; + } + ++double Value::AsDoubleInternal() const { ++ return bit_cast<double>(double_value_); ++} ++ + Value Value::Clone() const { + switch (type_) { + case Type::NONE: +@@ -232,7 +226,7 @@ Value Value::Clone() const { + case Type::INTEGER: + return Value(int_value_); + case Type::DOUBLE: +- return Value(double_value_); ++ return Value(AsDoubleInternal()); + case Type::STRING: + return Value(string_value_); + case Type::BINARY: +@@ -277,7 +271,7 @@ int Value::GetInt() const { + + double Value::GetDouble() const { + if (is_double()) +- return double_value_; ++ return AsDoubleInternal(); + if (is_int()) + return int_value_; + CHECK(false); +@@ -342,9 +336,10 @@ base::Optional<double> Value::FindDoubleKey(StringPiece key) const { + const Value* result = FindKey(key); + if (result) { + if (result->is_int()) +- return base::make_optional(static_cast<double>(result->int_value_)); +- if (result->is_double()) +- return base::make_optional(result->double_value_); ++ return static_cast<double>(result->int_value_); ++ if (result->is_double()) { ++ return result->AsDoubleInternal(); ++ } + } + return base::nullopt; + } +@@ -601,7 +596,7 @@ bool Value::GetAsInteger(int* out_value) const { + + bool Value::GetAsDouble(double* out_value) const { + if (out_value && is_double()) { +- *out_value = double_value_; ++ *out_value = AsDoubleInternal(); + return true; + } + if (out_value && is_int()) { +@@ -696,7 +691,7 @@ bool operator==(const Value& lhs, const Value& rhs) { + case Value::Type::INTEGER: + return lhs.int_value_ == rhs.int_value_; + case Value::Type::DOUBLE: +- return lhs.double_value_ == rhs.double_value_; ++ return lhs.AsDoubleInternal() == rhs.AsDoubleInternal(); + case Value::Type::STRING: + return lhs.string_value_ == rhs.string_value_; + case Value::Type::BINARY: +@@ -741,7 +736,7 @@ bool operator<(const Value& lhs, const Value& rhs) { + case Value::Type::INTEGER: + return lhs.int_value_ < rhs.int_value_; + case Value::Type::DOUBLE: +- return lhs.double_value_ < rhs.double_value_; ++ return lhs.AsDoubleInternal() < rhs.AsDoubleInternal(); + case Value::Type::STRING: + return lhs.string_value_ < rhs.string_value_; + case Value::Type::BINARY: +diff --git a/base/values.h b/base/values.h +index 486fe7ff3976..c455936d4961 100644 +--- a/base/values.h ++++ b/base/values.h +@@ -83,6 +83,8 @@ class BASE_EXPORT Value { + using BlobStorage = std::vector<uint8_t>; + using DictStorage = flat_map<std::string, std::unique_ptr<Value>>; + using ListStorage = std::vector<Value>; ++ // See technical note below explaining why this is used. ++ using DoubleStorage = struct { alignas(4) char v[sizeof(double)]; }; + + enum class Type { + NONE = 0, +@@ -111,7 +113,10 @@ class BASE_EXPORT Value { + static std::unique_ptr<Value> ToUniquePtrValue(Value val); + + Value(Value&& that) noexcept; +- Value() noexcept; // A null value. ++ Value() noexcept {} // A null value ++ // Fun fact: using '= default' above instead of '{}' does not work because ++ // the compiler complains that the default constructor was deleted since ++ // the inner union contains fields with non-default constructors. + + // Value's copy constructor and copy assignment operator are deleted. Use this + // to obtain a deep copy explicitly. +@@ -405,82 +410,29 @@ class BASE_EXPORT Value { + size_t EstimateMemoryUsage() const; + + protected: +- // Technical note: +- // The naive way to implement a tagged union leads to wasted bytes +- // in the object on CPUs like ARM ones, which impose an 8-byte alignment +- // for double values. I.e. if one does something like: ++ // Special case for doubles, which are aligned to 8 bytes on some ++ // 32-bit architectures. In this case, a simple declaration as a ++ // double member would make the whole union 8 byte-aligned, which ++ // would also force 4 bytes of wasted padding space before it in ++ // the Value layout. + // +- // struct TaggedValue { +- // int type_; // size = 1, align = 4 +- // union { +- // bool bool_value_; // size = 1, align = 1 +- // int int_value_; // size = 4, align = 4 +- // double double_value_; // size = 8, align = 8 +- // std::string string_value_; // size = 12, align = 4 (32-bit) +- // }; +- // }; +- // +- // The end result is that the union will have an alignment of 8, and a size +- // of 16, due to 4 extra padding bytes following |string_value_| to respect +- // the alignment requirement. +- // +- // As a consequence, the struct TaggedValue will have a size of 24 bytes, +- // due to the size of the union (16), the size of |type_| (4) and 4 bytes +- // of padding between |type_| and the union to respect its alignment. +- // +- // This means 8 bytes of unused memory per instance on 32-bit ARM! +- // +- // To reclaim these, a union of structs is used instead, in order to ensure +- // that |double_value_| below is always located at an offset that is a +- // multiple of 8, relative to the start of the overall data structure. +- // +- // Each struct must declare its own |type_| field, which must have a different +- // name, to appease the C++ compiler. +- // +- // Using this technique sizeof(base::Value) == 16 on 32-bit ARM instead +- // of 24, without losing any information. Results are unchanged for x86, +- // x86_64 and arm64 (16, 32 and 32 bytes respectively). ++ // To override this, store the value as an array of 32-bit integers, and ++ // perform the appropriate bit casts when reading / writing to it. ++ Type type_ = Type::NONE; ++ + union { +- struct { +- // TODO(crbug.com/646113): Make these private once DictionaryValue and +- // ListValue are properly inlined. +- Type type_ : 8; +- }; +- struct { +- Type bool_type_ : 8; +- bool bool_value_; +- }; +- struct { +- Type int_type_ : 8; +- int int_value_; +- }; +- struct { +- Type double_type_ : 8; +- // Subtle: On architectures that require it, the compiler will ensure +- // that |double_value_|'s offset is a multiple of 8 (e.g. 32-bit ARM). +- // See technical note above to understand why it is important. +- double double_value_; +- }; +- struct { +- Type string_type_ : 8; +- std::string string_value_; +- }; +- struct { +- Type binary_type_ : 8; +- BlobStorage binary_value_; +- }; +- struct { +- Type dict_type_ : 8; +- DictStorage dict_; +- }; +- struct { +- Type list_type_ : 8; +- ListStorage list_; +- }; ++ bool bool_value_; ++ int int_value_; ++ DoubleStorage double_value_; ++ std::string string_value_; ++ BlobStorage binary_value_; ++ DictStorage dict_; ++ ListStorage list_; + }; + + private: + friend class ValuesTest_SizeOfValue_Test; ++ double AsDoubleInternal() const; + void InternalMoveConstructFrom(Value&& that); + void InternalCleanup(); + +diff --git a/base/values_unittest.cc b/base/values_unittest.cc +index 2dd1c76afaa9..f3536a8612b1 100644 +--- a/base/values_unittest.cc ++++ b/base/values_unittest.cc +@@ -26,45 +26,89 @@ + + namespace base { + +-// Test is currently incorrect on Windows x86. +-#if !defined(OS_WIN) || !defined(ARCH_CPU_X86) ++// Ensure that base::Value is as small as possible, i.e. that there is ++// no wasted space after the inner value due to alignment constraints. ++// Distinguish between the 'header' that includes |type_| and and the inner ++// value that follows it, which can be a bool, int, double, string, blob, list ++// or dict. ++// ++// This test is only enabled when NDEBUG is defined. This way the test will not ++// fail in debug builds that sometimes contain larger versions of the standard ++// containers used inside base::Value. ++#if defined(NDEBUG) ++ ++static size_t AlignSizeTo(size_t size, size_t alignment) { ++ EXPECT_TRUE((alignment & (alignment - 1)) == 0) ++ << "Alignment " << alignment << " is not a power of 2!"; ++ return (size + (alignment - 1u)) & ~(alignment - 1u); ++} ++ + TEST(ValuesTest, SizeOfValue) { +- // Ensure that base::Value is as small as possible, i.e. that there is +- // no wasted space after the inner value due to alignment constraints. +- // Distinguish between the 'header' that includes |type_| and and the inner +- // value that follows it, which can be a bool, int, double, string, blob, list +- // or dict. +-#define INNER_TYPES_LIST(X) \ +- X(bool, bool_value_) \ +- X(int, int_value_) \ +- X(double, double_value_) \ +- X(std::string, string_value_) \ +- X(Value::BlobStorage, binary_value_) \ +- X(Value::ListStorage, list_) \ ++#define INNER_TYPES_LIST(X) \ ++ X(bool, bool_value_) \ ++ X(int, int_value_) \ ++ X(Value::DoubleStorage, double_value_) \ ++ X(std::string, string_value_) \ ++ X(Value::BlobStorage, binary_value_) \ ++ X(Value::ListStorage, list_) \ + X(Value::DictStorage, dict_) + +-#define INNER_STRUCT_LIMIT(type, value) offsetof(Value, value) + sizeof(type), ++#define INNER_FIELD_ALIGNMENT(type, value) alignof(type), ++ ++ // The maximum alignment of each inner struct value field inside base::Value ++ size_t max_inner_value_alignment = ++ std::max({INNER_TYPES_LIST(INNER_FIELD_ALIGNMENT)}); ++ ++ // Check that base::Value has the smallest alignment possible. This would ++ // fail if the header would contain something that has a larger alignment ++ // than necessary. ++ EXPECT_EQ(max_inner_value_alignment, alignof(Value)); ++ ++ // Find the offset of each inner value. Which should normally not be ++ // larger than 4. Note that we use std::max(4, ...) because bool_value_ ++ // could be stored just after the |bool_type_| field, with an offset of ++ // 1, and that would be ok. ++#define INNER_VALUE_START_OFFSET(type, value) offsetof(Value, value), ++ ++ size_t min_inner_value_offset = ++ std::min({INNER_TYPES_LIST(INNER_VALUE_START_OFFSET)}); + +- // Return the maximum size in bytes of each inner struct inside base::Value +- size_t max_inner_struct_limit = +- std::max({INNER_TYPES_LIST(INNER_STRUCT_LIMIT)}); ++ // Inner fields may contain pointers, which have an alignment of 8 ++ // on most 64-bit platforms. ++ size_t expected_min_offset = alignof(void*); ++ ++ EXPECT_EQ(expected_min_offset, min_inner_value_offset); + + // Ensure that base::Value is not larger than necessary, i.e. that there is +- // no un-necessary padding afte the structs due to alignment constraints of ++ // no un-necessary padding after the structs due to alignment constraints of + // one of the inner fields. +- EXPECT_EQ(max_inner_struct_limit, sizeof(Value)); +- if (max_inner_struct_limit != sizeof(Value)) { ++#define INNER_STRUCT_END_OFFSET(type, value) \ ++ offsetof(Value, value) + sizeof(type), ++ ++ // The maximum size in bytes of each inner struct inside base::Value, ++ size_t max_inner_struct_end_offset = ++ std::max({INNER_TYPES_LIST(INNER_STRUCT_END_OFFSET)}); ++ ++ // The expected value size. ++ size_t expected_value_size = ++ AlignSizeTo(max_inner_struct_end_offset, alignof(Value)); ++ ++ EXPECT_EQ(expected_value_size, sizeof(Value)); ++ if (min_inner_value_offset != expected_min_offset || ++ expected_value_size != sizeof(Value)) { + // The following are useful to understand what's wrong when the EXPECT_EQ() +- // above actually fails. +-#define PRINT_INNER_FIELD_INFO(x, y) \ +- LOG(INFO) << #y " type=" #x " size=" << sizeof(x) << " align=" << alignof(x); ++ // above actually fail. ++#define PRINT_INNER_FIELD_INFO(x, y) \ ++ LOG(INFO) << #y " type=" #x " offset=" << offsetof(Value, y) \ ++ << " size=" << sizeof(x) << " align=" << alignof(x); + + LOG(INFO) << "Value size=" << sizeof(Value) << " align=" << alignof(Value); + INNER_TYPES_LIST(PRINT_INNER_FIELD_INFO) +- LOG(INFO) << "max_inner_struct_limit=" << max_inner_struct_limit; ++ LOG(INFO) << "max_inner_struct_end_offset=" << max_inner_struct_end_offset; + } + } +-#endif ++ ++#endif // NDEBUG + + TEST(ValuesTest, TestNothrow) { + static_assert(std::is_nothrow_move_constructible<Value>::value, +-- +2.21.0 + diff --git a/www-client/chromium/files/chromium-74-7685422.patch b/www-client/chromium/files/chromium-74-7685422.patch new file mode 100644 index 000000000000..19747245bd78 --- /dev/null +++ b/www-client/chromium/files/chromium-74-7685422.patch @@ -0,0 +1,42 @@ +From 7685422a90e1da829cb32d685a4b970d30738098 Mon Sep 17 00:00:00 2001 +From: Jose Dapena Paz <jose.dapena@lge.com> +Date: Wed, 3 Apr 2019 18:35:04 +0000 +Subject: [PATCH] base: Value::Type enum class size should be 8-bit. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +GCC is complaining because, when base::Type is used to declare the different +variants of Type in its union, they are forced to take 8-bit, that is smaller +than the enum class default size (same as int). + +So this change sets explicitely the enum class underlying type to be unsigned +char. + +BUG=chromium:819294 + +Change-Id: I1765e2503e2c3d3675c73ecb0f7f5bc33456e6f0 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1550366 +Commit-Queue: José Dapena Paz <jose.dapena@lge.com> +Reviewed-by: Jan Wilken Dörrie <jdoerrie@chromium.org> +Cr-Commit-Position: refs/heads/master@{#647382} +--- + base/values.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/base/values.h b/base/values.h +index c455936d4961..14b76acec02f 100644 +--- a/base/values.h ++++ b/base/values.h +@@ -86,7 +86,7 @@ class BASE_EXPORT Value { + // See technical note below explaining why this is used. + using DoubleStorage = struct { alignas(4) char v[sizeof(double)]; }; + +- enum class Type { ++ enum class Type : unsigned char { + NONE = 0, + BOOLEAN, + INTEGER, +-- +2.21.0 + diff --git a/www-client/chromium/files/chromium-74-c2c467f.patch b/www-client/chromium/files/chromium-74-c2c467f.patch new file mode 100644 index 000000000000..e9e5d22e4a87 --- /dev/null +++ b/www-client/chromium/files/chromium-74-c2c467f.patch @@ -0,0 +1,75 @@ +From c2c467f69fc00d353879d7add5f2c04a6acabbb1 Mon Sep 17 00:00:00 2001 +From: David 'Digit' Turner <digit@google.com> +Date: Wed, 20 Mar 2019 21:41:09 +0000 +Subject: [PATCH] base: Value::FindDoubleKey() converts integers to doubles + +Ensure that FindDoubleKey() can return the value of an +INTEGER key as a double. This is consistent with the behaviour +of Value::GetDouble() which will auto-convert INTEGER values +to doubles. + +BUG=646113 +R=dcheng@chromium.org,jdoerrie@chromium.org,sdefresne@chromium.org,hidehiko@chromium.org + +Change-Id: I2c08cb91b6cfd5db268a182ffffe16682d848008 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1529017 +Reviewed-by: Sylvain Defresne <sdefresne@chromium.org> +Reviewed-by: Daniel Cheng <dcheng@chromium.org> +Commit-Queue: David Turner <digit@chromium.org> +Cr-Commit-Position: refs/heads/master@{#642680} +--- + base/values.cc | 10 ++++++++-- + base/values.h | 2 ++ + base/values_unittest.cc | 2 +- + 3 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/base/values.cc b/base/values.cc +index 035aa2350cde..69d66ff8ab00 100644 +--- a/base/values.cc ++++ b/base/values.cc +@@ -339,8 +339,14 @@ base::Optional<int> Value::FindIntKey(StringPiece key) const { + } + + base::Optional<double> Value::FindDoubleKey(StringPiece key) const { +- const Value* result = FindKeyOfType(key, Type::DOUBLE); +- return result ? base::make_optional(result->double_value_) : base::nullopt; ++ const Value* result = FindKey(key); ++ if (result) { ++ if (result->is_int()) ++ return base::make_optional(static_cast<double>(result->int_value_)); ++ if (result->is_double()) ++ return base::make_optional(result->double_value_); ++ } ++ return base::nullopt; + } + + const std::string* Value::FindStringKey(StringPiece key) const { +diff --git a/base/values.h b/base/values.h +index e31cadd83102..6f2cd3cc3d79 100644 +--- a/base/values.h ++++ b/base/values.h +@@ -200,6 +200,8 @@ class BASE_EXPORT Value { + // function's name. + base::Optional<bool> FindBoolKey(StringPiece key) const; + base::Optional<int> FindIntKey(StringPiece key) const; ++ // Note FindDoubleKey() will auto-convert INTEGER keys to their double ++ // value, for consistency with GetDouble(). + base::Optional<double> FindDoubleKey(StringPiece key) const; + + // |FindStringKey| returns |nullptr| if value is not found or not a string. +diff --git a/base/values_unittest.cc b/base/values_unittest.cc +index b23fd8332491..7c545c09d947 100644 +--- a/base/values_unittest.cc ++++ b/base/values_unittest.cc +@@ -674,7 +674,7 @@ TEST(ValuesTest, FindDoubleKey) { + const Value dict(std::move(storage)); + EXPECT_EQ(base::nullopt, dict.FindDoubleKey("null")); + EXPECT_EQ(base::nullopt, dict.FindDoubleKey("bool")); +- EXPECT_EQ(base::nullopt, dict.FindDoubleKey("int")); ++ EXPECT_NE(base::nullopt, dict.FindDoubleKey("int")); + EXPECT_NE(base::nullopt, dict.FindDoubleKey("double")); + EXPECT_EQ(base::nullopt, dict.FindDoubleKey("string")); + EXPECT_EQ(base::nullopt, dict.FindDoubleKey("blob")); +-- +2.21.0 + diff --git a/www-client/chromium/files/chromium-74-e1b1f3a.patch b/www-client/chromium/files/chromium-74-e1b1f3a.patch new file mode 100644 index 000000000000..344b0874b812 --- /dev/null +++ b/www-client/chromium/files/chromium-74-e1b1f3a.patch @@ -0,0 +1,587 @@ +From e1b1f3a5f273c8da533fad495b9de316e2c83c9b Mon Sep 17 00:00:00 2001 +From: jdoerrie <jdoerrie@chromium.org> +Date: Sat, 16 Mar 2019 04:08:01 +0000 +Subject: [PATCH] [base] Add Dead Type to base::Value + +This change adds a temporary DEAD type to base::Value which should help +to track down use-after-free bugs. Furthermore, this change also removes +the now unneeded is_alive_ flag. + +Bug: 859477, 941404 +Change-Id: I9b7a2f3cbb0b22d7e3ed35b2453537419f3f7e55 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1478897 +Reviewed-by: Pavol Marko <pmarko@chromium.org> +Reviewed-by: Tao Bai <michaelbai@chromium.org> +Reviewed-by: Thomas Anderson <thomasanderson@chromium.org> +Reviewed-by: Mike Pinkerton <pinkerton@chromium.org> +Reviewed-by: Bill Budge <bbudge@chromium.org> +Reviewed-by: Ken Rockot <rockot@google.com> +Reviewed-by: Steven Bennetts <stevenjb@chromium.org> +Reviewed-by: Daniel Cheng <dcheng@chromium.org> +Reviewed-by: David Turner <digit@chromium.org> +Commit-Queue: Thomas Anderson <thomasanderson@chromium.org> +Cr-Commit-Position: refs/heads/master@{#641404} +--- + base/json/json_writer.cc | 5 ++ + base/values.cc | 68 ++++++++++++------- + base/values.h | 23 ++----- + base/values_unittest.cc | 10 ++- + .../ui/cocoa/applescript/apple_event_util.mm | 10 +++ + chromeos/network/onc/variable_expander.cc | 6 ++ + .../core/browser/android/policy_converter.cc | 11 ++- + .../core/common/policy_loader_win_unittest.cc | 8 ++- + .../policy/core/common/policy_test_utils.cc | 5 ++ + .../policy/core/common/registry_dict.cc | 4 ++ + .../gin_java_script_to_java_types_coercion.cc | 8 ++- + ipc/ipc_message_utils.cc | 11 ++- + mojo/public/cpp/base/values_mojom_traits.h | 7 +- + .../ppb_x509_certificate_private_shared.cc | 2 + + 14 files changed, 127 insertions(+), 51 deletions(-) + +diff --git a/base/json/json_writer.cc b/base/json/json_writer.cc +index 376a459f9a46..cd020e7fa0c0 100644 +--- a/base/json/json_writer.cc ++++ b/base/json/json_writer.cc +@@ -179,6 +179,11 @@ bool JSONWriter::BuildJSONString(const Value& node, size_t depth) { + // Successful only if we're allowed to omit it. + DLOG_IF(ERROR, !omit_binary_values_) << "Cannot serialize binary value."; + return omit_binary_values_; ++ ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case Value::Type::DEAD: ++ CHECK(false); ++ return false; + } + + // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found. +diff --git a/base/values.cc b/base/values.cc +index 0c002551b317..035aa2350cde 100644 +--- a/base/values.cc ++++ b/base/values.cc +@@ -90,8 +90,6 @@ std::unique_ptr<Value> CopyWithoutEmptyChildren(const Value& node) { + + } // namespace + +-constexpr uint16_t Value::kMagicIsAlive; +- + // static + std::unique_ptr<Value> Value::CreateWithCopiedBuffer(const char* buffer, + size_t size) { +@@ -112,9 +110,9 @@ Value::Value(Value&& that) noexcept { + InternalMoveConstructFrom(std::move(that)); + } + +-Value::Value() noexcept : type_(Type::NONE), is_alive_(kMagicIsAlive) {} ++Value::Value() noexcept : type_(Type::NONE) {} + +-Value::Value(Type type) : type_(type), is_alive_(kMagicIsAlive) { ++Value::Value(Type type) : type_(type) { + // Initialize with the default value. + switch (type_) { + case Type::NONE: +@@ -141,22 +139,26 @@ Value::Value(Type type) : type_(type), is_alive_(kMagicIsAlive) { + case Type::LIST: + new (&list_) ListStorage(); + return; ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case Type::DEAD: ++ CHECK(false); ++ return; + } ++ ++ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found. ++ CHECK(false); + } + + Value::Value(bool in_bool) + : bool_type_(Type::BOOLEAN), +- bool_is_alive_(kMagicIsAlive), + bool_value_(in_bool) {} + + Value::Value(int in_int) + : int_type_(Type::INTEGER), +- int_is_alive_(kMagicIsAlive), + int_value_(in_int) {} + + Value::Value(double in_double) + : double_type_(Type::DOUBLE), +- double_is_alive_(kMagicIsAlive), + double_value_(in_double) { + if (!std::isfinite(double_value_)) { + NOTREACHED() << "Non-finite (i.e. NaN or positive/negative infinity) " +@@ -171,7 +173,6 @@ Value::Value(StringPiece in_string) : Value(std::string(in_string)) {} + + Value::Value(std::string&& in_string) noexcept + : string_type_(Type::STRING), +- string_is_alive_(kMagicIsAlive), + string_value_(std::move(in_string)) { + DCHECK(IsStringUTF8(string_value_)); + } +@@ -182,21 +183,18 @@ Value::Value(StringPiece16 in_string16) : Value(UTF16ToUTF8(in_string16)) {} + + Value::Value(const std::vector<char>& in_blob) + : binary_type_(Type::BINARY), +- binary_is_alive_(kMagicIsAlive), + binary_value_(in_blob.begin(), in_blob.end()) {} + + Value::Value(base::span<const uint8_t> in_blob) + : binary_type_(Type::BINARY), +- binary_is_alive_(kMagicIsAlive), + binary_value_(in_blob.begin(), in_blob.end()) {} + + Value::Value(BlobStorage&& in_blob) noexcept + : binary_type_(Type::BINARY), +- binary_is_alive_(kMagicIsAlive), + binary_value_(std::move(in_blob)) {} + + Value::Value(const DictStorage& in_dict) +- : dict_type_(Type::DICTIONARY), dict_is_alive_(kMagicIsAlive), dict_() { ++ : dict_type_(Type::DICTIONARY), dict_() { + dict_.reserve(in_dict.size()); + for (const auto& it : in_dict) { + dict_.try_emplace(dict_.end(), it.first, +@@ -206,11 +204,9 @@ Value::Value(const DictStorage& in_dict) + + Value::Value(DictStorage&& in_dict) noexcept + : dict_type_(Type::DICTIONARY), +- dict_is_alive_(kMagicIsAlive), + dict_(std::move(in_dict)) {} + +-Value::Value(const ListStorage& in_list) +- : list_type_(Type::LIST), list_is_alive_(kMagicIsAlive), list_() { ++Value::Value(const ListStorage& in_list) : list_type_(Type::LIST), list_() { + list_.reserve(in_list.size()); + for (const auto& val : in_list) + list_.emplace_back(val.Clone()); +@@ -218,7 +214,6 @@ Value::Value(const ListStorage& in_list) + + Value::Value(ListStorage&& in_list) noexcept + : list_type_(Type::LIST), +- list_is_alive_(kMagicIsAlive), + list_(std::move(in_list)) {} + + Value& Value::operator=(Value&& that) noexcept { +@@ -246,15 +241,21 @@ Value Value::Clone() const { + return Value(dict_); + case Type::LIST: + return Value(list_); ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case Type::DEAD: ++ CHECK(false); ++ return Value(); + } + +- NOTREACHED(); ++ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found. ++ CHECK(false); + return Value(); + } + + Value::~Value() { + InternalCleanup(); +- is_alive_ = 0; ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ type_ = Type::DEAD; + } + + // static +@@ -654,9 +655,14 @@ bool operator==(const Value& lhs, const Value& rhs) { + }); + case Value::Type::LIST: + return lhs.list_ == rhs.list_; ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case Value::Type::DEAD: ++ CHECK(false); ++ return false; + } + +- NOTREACHED(); ++ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found. ++ CHECK(false); + return false; + } + +@@ -693,9 +699,14 @@ bool operator<(const Value& lhs, const Value& rhs) { + }); + case Value::Type::LIST: + return lhs.list_ < rhs.list_; ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case Value::Type::DEAD: ++ CHECK(false); ++ return false; + } + +- NOTREACHED(); ++ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found. ++ CHECK(false); + return false; + } + +@@ -733,7 +744,6 @@ size_t Value::EstimateMemoryUsage() const { + + void Value::InternalMoveConstructFrom(Value&& that) { + type_ = that.type_; +- is_alive_ = that.is_alive_; + + switch (type_) { + case Type::NONE: +@@ -759,12 +769,17 @@ void Value::InternalMoveConstructFrom(Value&& that) { + case Type::LIST: + new (&list_) ListStorage(std::move(that.list_)); + return; ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case Type::DEAD: ++ CHECK(false); ++ return; + } ++ ++ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found. ++ CHECK(false); + } + + void Value::InternalCleanup() { +- CHECK_EQ(is_alive_, kMagicIsAlive); +- + switch (type_) { + case Type::NONE: + case Type::BOOLEAN: +@@ -785,7 +800,14 @@ void Value::InternalCleanup() { + case Type::LIST: + list_.~ListStorage(); + return; ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case Type::DEAD: ++ CHECK(false); ++ return; + } ++ ++ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found. ++ CHECK(false); + } + + ///////////////////// DictionaryValue //////////////////// +diff --git a/base/values.h b/base/values.h +index 429ef1dfdebd..e31cadd83102 100644 +--- a/base/values.h ++++ b/base/values.h +@@ -92,7 +92,9 @@ class BASE_EXPORT Value { + STRING, + BINARY, + DICTIONARY, +- LIST ++ LIST, ++ // TODO(crbug.com/859477): Remove once root cause is found. ++ DEAD + // Note: Do not add more types. See the file-level comment above for why. + }; + +@@ -375,10 +377,6 @@ class BASE_EXPORT Value { + size_t EstimateMemoryUsage() const; + + protected: +- // Magic IsAlive signature to debug double frees. +- // TODO(crbug.com/859477): Remove once root cause is found. +- static constexpr uint16_t kMagicIsAlive = 0x2f19; +- + // Technical note: + // The naive way to implement a tagged union leads to wasted bytes + // in the object on CPUs like ARM ones, which impose an 8-byte alignment +@@ -408,8 +406,8 @@ class BASE_EXPORT Value { + // that |double_value_| below is always located at an offset that is a + // multiple of 8, relative to the start of the overall data structure. + // +- // Each struct must declare its own |type_| and |is_alive_| field, which +- // must have a different name, to appease the C++ compiler. ++ // Each struct must declare its own |type_| field, which must have a different ++ // name, to appease the C++ compiler. + // + // Using this technique sizeof(base::Value) == 16 on 32-bit ARM instead + // of 24, without losing any information. Results are unchanged for x86, +@@ -419,24 +417,17 @@ class BASE_EXPORT Value { + // TODO(crbug.com/646113): Make these private once DictionaryValue and + // ListValue are properly inlined. + Type type_ : 8; +- +- // IsAlive member to debug double frees. +- // TODO(crbug.com/859477): Remove once root cause is found. +- uint16_t is_alive_ = kMagicIsAlive; + }; + struct { + Type bool_type_ : 8; +- uint16_t bool_is_alive_; + bool bool_value_; + }; + struct { + Type int_type_ : 8; +- uint16_t int_is_alive_; + int int_value_; + }; + struct { + Type double_type_ : 8; +- uint16_t double_is_alive_; + // Subtle: On architectures that require it, the compiler will ensure + // that |double_value_|'s offset is a multiple of 8 (e.g. 32-bit ARM). + // See technical note above to understand why it is important. +@@ -444,22 +435,18 @@ class BASE_EXPORT Value { + }; + struct { + Type string_type_ : 8; +- uint16_t string_is_alive_; + std::string string_value_; + }; + struct { + Type binary_type_ : 8; +- uint16_t binary_is_alive_; + BlobStorage binary_value_; + }; + struct { + Type dict_type_ : 8; +- uint16_t dict_is_alive_; + DictStorage dict_; + }; + struct { + Type list_type_ : 8; +- uint16_t list_is_alive_; + ListStorage list_; + }; + }; +diff --git a/base/values_unittest.cc b/base/values_unittest.cc +index 0a641bcc7ef4..b23fd8332491 100644 +--- a/base/values_unittest.cc ++++ b/base/values_unittest.cc +@@ -20,17 +20,20 @@ + #include "base/strings/string16.h" + #include "base/strings/string_piece.h" + #include "base/strings/utf_string_conversions.h" ++#include "build/build_config.h" + #include "testing/gmock/include/gmock/gmock.h" + #include "testing/gtest/include/gtest/gtest.h" + + namespace base { + ++// Test is currently incorrect on Windows x86. ++#if !defined(OS_WIN) || !defined(ARCH_CPU_X86) + TEST(ValuesTest, SizeOfValue) { + // Ensure that base::Value is as small as possible, i.e. that there is + // no wasted space after the inner value due to alignment constraints. +- // Distinguish between the 'header' that includes |type_| and |is_alive_| +- // and the inner value that follows it, which can be a bool, int, double, +- // string, blob, list or dict. ++ // Distinguish between the 'header' that includes |type_| and and the inner ++ // value that follows it, which can be a bool, int, double, string, blob, list ++ // or dict. + #define INNER_TYPES_LIST(X) \ + X(bool, bool_value_) \ + X(int, int_value_) \ +@@ -61,6 +64,7 @@ TEST(ValuesTest, SizeOfValue) { + LOG(INFO) << "max_inner_struct_limit=" << max_inner_struct_limit; + } + } ++#endif + + TEST(ValuesTest, TestNothrow) { + static_assert(std::is_nothrow_move_constructible<Value>::value, +diff --git a/chrome/browser/ui/cocoa/applescript/apple_event_util.mm b/chrome/browser/ui/cocoa/applescript/apple_event_util.mm +index 16d685607ced..25a59338ee73 100644 +--- a/chrome/browser/ui/cocoa/applescript/apple_event_util.mm ++++ b/chrome/browser/ui/cocoa/applescript/apple_event_util.mm +@@ -96,6 +96,16 @@ NSAppleEventDescriptor* ValueToAppleEventDescriptor(const base::Value* value) { + } + break; + } ++ ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case base::Value::Type::DEAD: ++ CHECK(false); ++ break; ++ ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ default: ++ CHECK(false); ++ break; + } + + return descriptor; +diff --git a/chromeos/network/onc/variable_expander.cc b/chromeos/network/onc/variable_expander.cc +index fd72752c2aa6..cd5bbb238eb3 100644 +--- a/chromeos/network/onc/variable_expander.cc ++++ b/chromeos/network/onc/variable_expander.cc +@@ -145,6 +145,12 @@ bool VariableExpander::ExpandValue(base::Value* value) const { + // Nothing to do here. + break; + } ++ ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case base::Value::Type::DEAD: { ++ CHECK(false); ++ break; ++ } + } + return no_error; + } +diff --git a/components/policy/core/browser/android/policy_converter.cc b/components/policy/core/browser/android/policy_converter.cc +index b711a64febc9..9d41ad0d1507 100644 +--- a/components/policy/core/browser/android/policy_converter.cc ++++ b/components/policy/core/browser/android/policy_converter.cc +@@ -175,10 +175,17 @@ std::unique_ptr<base::Value> PolicyConverter::ConvertValueToSchema( + } + return value; + } ++ ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case base::Value::Type::DEAD: { ++ CHECK(false); ++ return nullptr; ++ } + } + +- NOTREACHED(); +- return std::unique_ptr<base::Value>(); ++ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found. ++ CHECK(false); ++ return nullptr; + } + + void PolicyConverter::SetPolicyValue(const std::string& key, +diff --git a/components/policy/core/common/policy_loader_win_unittest.cc b/components/policy/core/common/policy_loader_win_unittest.cc +index 311e7fb122fc..0377307c5e28 100644 +--- a/components/policy/core/common/policy_loader_win_unittest.cc ++++ b/components/policy/core/common/policy_loader_win_unittest.cc +@@ -133,8 +133,14 @@ bool InstallValue(const base::Value& value, + + case base::Value::Type::BINARY: + return false; ++ ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case base::Value::Type::DEAD: ++ CHECK(false); ++ return false; + } +- NOTREACHED(); ++ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found. ++ CHECK(false); + return false; + } + +diff --git a/components/policy/core/common/policy_test_utils.cc b/components/policy/core/common/policy_test_utils.cc +index 5af98b47275c..919f004153ec 100644 +--- a/components/policy/core/common/policy_test_utils.cc ++++ b/components/policy/core/common/policy_test_utils.cc +@@ -137,6 +137,11 @@ CFPropertyListRef ValueToProperty(const base::Value& value) { + // because there's no equivalent JSON type, and policy values can only + // take valid JSON values. + break; ++ ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case base::Value::Type::DEAD: ++ CHECK(false); ++ break; + } + + return NULL; +diff --git a/components/policy/core/common/registry_dict.cc b/components/policy/core/common/registry_dict.cc +index f3ed372bdcb3..696ba7e04abe 100644 +--- a/components/policy/core/common/registry_dict.cc ++++ b/components/policy/core/common/registry_dict.cc +@@ -135,6 +135,10 @@ std::unique_ptr<base::Value> ConvertRegistryValue(const base::Value& value, + case base::Value::Type::BINARY: + // No conversion possible. + break; ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case base::Value::Type::DEAD: ++ CHECK(false); ++ return nullptr; + } + + LOG(WARNING) << "Failed to convert " << value.type() << " to " +diff --git a/content/browser/android/java/gin_java_script_to_java_types_coercion.cc b/content/browser/android/java/gin_java_script_to_java_types_coercion.cc +index dabd66ba8c72..84fd5489a414 100644 +--- a/content/browser/android/java/gin_java_script_to_java_types_coercion.cc ++++ b/content/browser/android/java/gin_java_script_to_java_types_coercion.cc +@@ -722,8 +722,14 @@ jvalue CoerceJavaScriptValueToJavaValue(JNIEnv* env, + case base::Value::Type::BINARY: + return CoerceGinJavaBridgeValueToJavaValue( + env, value, target_type, coerce_to_string, object_refs, error); ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case base::Value::Type::DEAD: ++ CHECK(false); ++ return jvalue(); + } +- NOTREACHED(); ++ ++ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found. ++ CHECK(false); + return jvalue(); + } + +diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc +index ec04c77c6c18..df6ec39bd663 100644 +--- a/ipc/ipc_message_utils.cc ++++ b/ipc/ipc_message_utils.cc +@@ -92,7 +92,7 @@ void WriteValue(base::Pickle* m, const base::Value* value, int recursion) { + + switch (value->type()) { + case base::Value::Type::NONE: +- break; ++ break; + case base::Value::Type::BOOLEAN: { + bool val; + result = value->GetAsBoolean(&val); +@@ -147,6 +147,11 @@ void WriteValue(base::Pickle* m, const base::Value* value, int recursion) { + } + break; + } ++ ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ default: ++ CHECK(false); ++ break; + } + } + +@@ -260,7 +265,9 @@ bool ReadValue(const base::Pickle* m, + break; + } + default: +- return false; ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ CHECK(false); ++ return false; + } + + return true; +diff --git a/mojo/public/cpp/base/values_mojom_traits.h b/mojo/public/cpp/base/values_mojom_traits.h +index cdb9bbbd94df..66752b7c90d8 100644 +--- a/mojo/public/cpp/base/values_mojom_traits.h ++++ b/mojo/public/cpp/base/values_mojom_traits.h +@@ -86,8 +86,13 @@ struct COMPONENT_EXPORT(MOJO_BASE_SHARED_TRAITS) + return mojo_base::mojom::ValueDataView::Tag::DICTIONARY_VALUE; + case base::Value::Type::LIST: + return mojo_base::mojom::ValueDataView::Tag::LIST_VALUE; ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case base::Value::Type::DEAD: ++ CHECK(false); ++ return mojo_base::mojom::ValueDataView::Tag::NULL_VALUE; + } +- NOTREACHED(); ++ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found. ++ CHECK(false); + return mojo_base::mojom::ValueDataView::Tag::NULL_VALUE; + } + +diff --git a/ppapi/shared_impl/private/ppb_x509_certificate_private_shared.cc b/ppapi/shared_impl/private/ppb_x509_certificate_private_shared.cc +index 6ffff36337e0..7f392d50f718 100644 +--- a/ppapi/shared_impl/private/ppb_x509_certificate_private_shared.cc ++++ b/ppapi/shared_impl/private/ppb_x509_certificate_private_shared.cc +@@ -73,6 +73,8 @@ PP_Var PPB_X509Certificate_Fields::GetFieldAsPPVar( + } + case base::Value::Type::DICTIONARY: + case base::Value::Type::LIST: ++ // TODO(crbug.com/859477): Remove after root cause is found. ++ case base::Value::Type::DEAD: + // Not handled. + break; + } +-- +2.21.0 + diff --git a/www-client/chromium/files/chromium-compiler-r8.patch b/www-client/chromium/files/chromium-compiler-r8.patch new file mode 100644 index 000000000000..5d8bd0efecd5 --- /dev/null +++ b/www-client/chromium/files/chromium-compiler-r8.patch @@ -0,0 +1,169 @@ +From aff4a3a1c35dc37141a61d2c6b7e703a55f9b371 Mon Sep 17 00:00:00 2001 +From: Mike Gilbert <floppym@gentoo.org> +Date: Sat, 23 Mar 2019 12:12:37 -0400 +Subject: [PATCH] Disable various compiler configs + +--- + build/config/compiler/BUILD.gn | 55 ++++++++++++---------------------- + 1 file changed, 19 insertions(+), 36 deletions(-) + +diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn +index ca6ff2b13809..b614709cd1db 100644 +--- a/build/config/compiler/BUILD.gn ++++ b/build/config/compiler/BUILD.gn +@@ -240,8 +240,6 @@ config("compiler") { + + configs += [ + # See the definitions below. +- ":clang_revision", +- ":compiler_cpu_abi", + ":compiler_codegen", + ":compiler_deterministic", + ] +@@ -489,17 +487,6 @@ config("compiler") { + } + } + +- if (is_clang && !is_nacl && !use_xcode_clang) { +- cflags += [ +- # TODO(hans): Remove this once Clang generates better optimized debug info +- # by default. https://crbug.com/765793 +- "-Xclang", +- "-mllvm", +- "-Xclang", +- "-instcombine-lower-dbg-declare=0", +- ] +- } +- + # Print absolute paths in diagnostics. There is no precedent for doing this + # on Linux/Mac (GCC doesn't support it), but MSVC does this with /FC and + # Windows developers rely on it (crbug.com/636109) so only do this on Windows. +@@ -1540,7 +1527,7 @@ config("chromium_code") { + defines = [ "_HAS_NODISCARD" ] + } + } else { +- cflags = [ "-Wall" ] ++ cflags = [] + if (treat_warnings_as_errors) { + cflags += [ "-Werror" ] + +@@ -1549,10 +1536,6 @@ config("chromium_code") { + # well. + ldflags = [ "-Werror" ] + } +- if (is_clang) { +- # Enable extra warnings for chromium_code when we control the compiler. +- cflags += [ "-Wextra" ] +- } + + # In Chromium code, we define __STDC_foo_MACROS in order to get the + # C99 macros on Mac and Linux. +@@ -1561,15 +1544,6 @@ config("chromium_code") { + "__STDC_FORMAT_MACROS", + ] + +- if (!is_debug && !using_sanitizer && current_cpu != "s390x" && +- current_cpu != "s390" && current_cpu != "ppc64" && +- current_cpu != "mips" && current_cpu != "mips64") { +- # Non-chromium code is not guaranteed to compile cleanly with +- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are +- # disabled, so only do that for Release build. +- defines += [ "_FORTIFY_SOURCE=2" ] +- } +- + if (is_mac) { + cflags_objc = [ "-Wobjc-missing-property-synthesis" ] + cflags_objcc = [ "-Wobjc-missing-property-synthesis" ] +@@ -1949,7 +1923,8 @@ config("default_stack_frames") { + } + + # Default "optimization on" config. +-config("optimize") { ++config("optimize") { } ++config("xoptimize") { + if (is_win) { + # TODO(thakis): Remove is_clang here, https://crbug.com/598772 + if (is_official_build && full_wpo_on_official && !is_clang) { +@@ -1983,7 +1958,8 @@ config("optimize") { + } + + # Same config as 'optimize' but without the WPO flag. +-config("optimize_no_wpo") { ++config("optimize_no_wpo") { } ++config("xoptimize_no_wpo") { + if (is_win) { + # Favor size over speed, /O1 must be before the common flags. The GYP + # build also specifies /Os and /GF but these are implied by /O1. +@@ -2006,7 +1982,8 @@ config("optimize_no_wpo") { + } + + # Turn off optimizations. +-config("no_optimize") { ++config("no_optimize") { } ++config("xno_optimize") { + if (is_win) { + cflags = [ + "/Od", # Disable optimization. +@@ -2034,7 +2011,8 @@ config("no_optimize") { + # Turns up the optimization level. On Windows, this implies whole program + # optimization and link-time code generation which is very expensive and should + # be used sparingly. +-config("optimize_max") { ++config("optimize_max") { } ++config("xoptimize_max") { + if (is_nacl && is_nacl_irt) { + # The NaCl IRT is a special case and always wants its own config. + # Various components do: +@@ -2081,7 +2059,8 @@ config("optimize_max") { + # + # TODO(crbug.com/621335) - rework how all of these configs are related + # so that we don't need this disclaimer. +-config("optimize_speed") { ++config("optimize_speed") { } ++config("xoptimize_speed") { + if (is_nacl && is_nacl_irt) { + # The NaCl IRT is a special case and always wants its own config. + # Various components do: +@@ -2119,7 +2098,8 @@ config("optimize_speed") { + } + } + +-config("optimize_fuzzing") { ++config("optimize_fuzzing") { } ++config("xoptimize_fuzzing") { + cflags = [ "-O1" ] + common_optimize_on_cflags + ldflags = common_optimize_on_ldflags + visibility = [ ":default_optimization" ] +@@ -2221,7 +2201,8 @@ config("win_pdbaltpath") { + } + + # Full symbols. +-config("symbols") { ++config("symbols") { } ++config("xsymbols") { + if (is_win) { + if (use_goma || is_clang) { + # Note that with VC++ this requires is_win_fastlink, enforced elsewhere. +@@ -2328,7 +2309,8 @@ config("symbols") { + # Minimal symbols. + # This config guarantees to hold symbol for stack trace which are shown to user + # when crash happens in unittests running on buildbot. +-config("minimal_symbols") { ++config("minimal_symbols") { } ++config("xminimal_symbols") { + if (is_win) { + # Linker symbols for backtraces only. + cflags = [] +@@ -2380,7 +2362,8 @@ config("minimal_symbols") { + } + + # No symbols. +-config("no_symbols") { ++config("no_symbols") { } ++config("xno_symbols") { + if (!is_win) { + cflags = [ "-g0" ] + asmflags = cflags +-- +2.21.0 + diff --git a/www-client/chromium/files/quiche-00f47df.patch b/www-client/chromium/files/quiche-00f47df.patch new file mode 100644 index 000000000000..720edf934d30 --- /dev/null +++ b/www-client/chromium/files/quiche-00f47df.patch @@ -0,0 +1,38 @@ +From 00f47df999c9b19e80fdc01db0ae9ca1b6a12b3a Mon Sep 17 00:00:00 2001 +From: vasilvv <vasilvv@google.com> +Date: Wed, 3 Apr 2019 13:58:53 -0700 +Subject: [PATCH] GCC: do not delete move constructor of QuicStreamSendBuffer +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +QuicStreamSendBuffer constructor is implicitely required in the +initialization of the vector of substreams in QuicCryptoStream. +Though clang apparently ignores that, GCC fails to build. + +BUG=chromium:819294 + +Originally submitted by José Dapena Paz <jose.dapena@lge.com> at https://quiche-review.googlesource.com/c/quiche/+/2420 + +PiperOrigin-RevId: 241800134 +Change-Id: I4e3c97d6e5895d85340e8c1b740e6196d9104066 +--- + quic/core/quic_stream_send_buffer.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/quic/core/quic_stream_send_buffer.h b/quic/core/quic_stream_send_buffer.h +index e34514b..74e9d0d 100644 +--- a/net/third_party/quic/core/quic_stream_send_buffer.h ++++ b/net/third_party/quic/core/quic_stream_send_buffer.h +@@ -62,7 +62,7 @@ class QUIC_EXPORT_PRIVATE QuicStreamSendBuffer { + public: + explicit QuicStreamSendBuffer(QuicBufferAllocator* allocator); + QuicStreamSendBuffer(const QuicStreamSendBuffer& other) = delete; +- QuicStreamSendBuffer(QuicStreamSendBuffer&& other) = delete; ++ QuicStreamSendBuffer(QuicStreamSendBuffer&& other) = default; + ~QuicStreamSendBuffer(); + + // Save |data_length| of data starts at |iov_offset| in |iov| to send buffer. +-- +2.21.0 + |