commit:     f142549e0ec9bb068bbf9160fbeb116eff93770f
Author:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Tue May 28 03:59:55 2019 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Tue May 28 04:01:28 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f142549e

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 <AT> gentoo.org>

 www-client/chromium/Manifest                       |   1 +
 www-client/chromium/chromium-74.0.3729.169.ebuild  | 706 +++++++++++++++++++++
 .../chromium/files/chromium-74-2f28731.patch       | 483 ++++++++++++++
 .../chromium/files/chromium-74-7685422.patch       |  42 ++
 .../chromium/files/chromium-74-c2c467f.patch       |  75 +++
 .../chromium/files/chromium-74-e1b1f3a.patch       | 587 +++++++++++++++++
 .../chromium/files/chromium-compiler-r8.patch      | 169 +++++
 www-client/chromium/files/quiche-00f47df.patch     |  38 ++
 8 files changed, 2101 insertions(+)

diff --git a/www-client/chromium/Manifest b/www-client/chromium/Manifest
index 8788374049e..891c6691a42 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 00000000000..a280c02724c
--- /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 
[email protected]
+       # 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 00000000000..83452619fe0
--- /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 <[email protected]>
+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
[email protected], [email protected], [email protected], 
[email protected], [email protected]
+
+Change-Id: I9a365407dc064ba1bdc19859706f4154a495921e
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1550363
+Commit-Queue: David Turner <[email protected]>
+Reviewed-by: Jan Wilken Dörrie <[email protected]>
+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 00000000000..19747245bd7
--- /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 <[email protected]>
+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 <[email protected]>
+Reviewed-by: Jan Wilken Dörrie <[email protected]>
+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 00000000000..e9e5d22e4a8
--- /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 <[email protected]>
+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
[email protected],[email protected],[email protected],[email protected]
+
+Change-Id: I2c08cb91b6cfd5db268a182ffffe16682d848008
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1529017
+Reviewed-by: Sylvain Defresne <[email protected]>
+Reviewed-by: Daniel Cheng <[email protected]>
+Commit-Queue: David Turner <[email protected]>
+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 00000000000..344b0874b81
--- /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 <[email protected]>
+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 <[email protected]>
+Reviewed-by: Tao Bai <[email protected]>
+Reviewed-by: Thomas Anderson <[email protected]>
+Reviewed-by: Mike Pinkerton <[email protected]>
+Reviewed-by: Bill Budge <[email protected]>
+Reviewed-by: Ken Rockot <[email protected]>
+Reviewed-by: Steven Bennetts <[email protected]>
+Reviewed-by: Daniel Cheng <[email protected]>
+Reviewed-by: David Turner <[email protected]>
+Commit-Queue: Thomas Anderson <[email protected]>
+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 00000000000..5d8bd0efecd
--- /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 <[email protected]>
+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 00000000000..720edf934d3
--- /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 <[email protected]>
+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 <[email protected]> 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
+

Reply via email to