[obs-studio/f28] Update to 21.1.0
by Leigh Scott
Summary of changes:
25cc932... Update to 21.1.0 (*)
(*) This commit already existed in another branch; no separate mail sent
6 years, 7 months
[obs-studio] Update to 21.1.0
by Leigh Scott
commit 25cc93200fbec1e09890c1e54964f2f29213db91
Author: leigh123linux <leigh123linux(a)googlemail.com>
Date: Mon Mar 19 23:30:05 2018 +0000
Update to 21.1.0
obs-studio.spec | 10 +++++++---
sources | 2 +-
2 files changed, 8 insertions(+), 4 deletions(-)
---
diff --git a/obs-studio.spec b/obs-studio.spec
index 07e0c5f..6031408 100644
--- a/obs-studio.spec
+++ b/obs-studio.spec
@@ -2,13 +2,13 @@
%global __python %{__python3}
Name: obs-studio
-Version: 21.0.3
+Version: 21.1.0
Release: 1%{?dist}
Summary: Open Broadcaster Software Studio
License: GPLv2+
URL: https://obsproject.com/
-Source0: https://github.com/jp9000/obs-studio/archive/%{version}.tar.gz#/%{name}-%...
+Source0: https://github.com/obsproject/obs-studio/archive/%{version}.tar.gz#/%{nam...
Patch0: obs-ffmpeg-mux.patch
# Arm gcc has no xmmintrin.h file
@@ -39,7 +39,8 @@ BuildRequires: systemd-devel
BuildRequires: doxygen
BuildRequires: speexdsp-devel
BuildRequires: python3-devel
-Requires: ffmpeg x264
+Requires: ffmpeg
+Requires: x264
%description
Open Broadcaster Software is free and open source
@@ -120,6 +121,9 @@ mv -f %{buildroot}/%{_datadir}/obs/obs-plugins/obs-ffmpeg/ffmpeg-mux \
%doc docs/html
%changelog
+* Mon Mar 19 2018 Leigh Scott <leigh123linux(a)googlemail.com> - 21.1.0-1
+- Update to 21.1.0
+
* Fri Mar 09 2018 Martin Gansser <martinkg(a)fedoraproject.org> - 21.0.3-1
- Update to 21.0.3
- Add BR python3-devel
diff --git a/sources b/sources
index ce316a8..3769cec 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-3c89284814da6b69134ea969ad8d9de4 obs-studio-21.0.3.tar.gz
+bae4ae1983d86ab8b1fb37c3d9722d57 obs-studio-21.1.0.tar.gz
6 years, 7 months
[chromium-freeworld: 10/10] Merge Fedora, chromium-65.0.3325.162-1
by Miro Hrončok
commit e9b35376c61c2b68efdd1135849be1f3f541bcca
Merge: 7c1ea9e 9e38b7c
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Mar 19 21:47:29 2018 +0100
Merge Fedora, chromium-65.0.3325.162-1
.gitignore | 1 +
...46-Fix-non-copyable-class-s-optional-move.patch | 41 ++++
...C-IDB-methods-String-renamed-to-GetString.patch | 108 +++++++++
...kImageProvider-Settings-do-not-provide-co.patch | 22 ++
...ix-base-Optional-T-requires-the-full-decl.patch | 33 +++
...tely-std-move-to-base-Optional-instead-of.patch | 24 ++
...fully-declare-ConfigurationPolicyProvider.patch | 18 ++
...onditional-copy-move-ctors-assign-operato.patch | 91 +++++++
...t-converting-constructors-from-Optional-U.patch | 116 +++++++++
...5.146-Implement-value-forward-constructor.patch | 72 ++++++
...Update-non-copy-non-move-assign-operators.patch | 144 +++++++++++
...e-affirmative-expression-in-base-Optional.patch | 265 +++++++++++++++++++++
chromium-65.0.3325.146-gcc-round-fix.patch | 12 +
chromium-65.0.3325.146-gcc5-r3.patch | 74 ++++++
chromium-65.0.3325.146-gcc7.patch | 11 +
chromium-65.0.3325.146-memcpy-fix.patch | 12 +
...7-is_trivially_copy_constructable-failure.patch | 55 +++++
...lpan-Remove-GC-checks-from-WTF-Optional-T.patch | 61 +++++
chromium-65.0.3325.146-wtf-vector-fix.patch | 54 +++++
chromium-65.0.3325.162-boolfix.patch | 36 +++
chromium-65.0.3325.162-skia-aarch64-buildfix.patch | 21 ++
chromium-freeworld.spec | 130 +++++++---
chromium-math.h-r0.patch | 29 +++
chromium-stdint.patch | 21 ++
clean_ffmpeg.sh | 5 +-
sources | 2 +-
26 files changed, 1417 insertions(+), 41 deletions(-)
---
diff --cc .gitignore
index 54a022a,3e50fe8..ebc8a50
--- a/.gitignore
+++ b/.gitignore
@@@ -27,14 -27,17 +27,15 @@@
/chromium-59.0.3071.109-freetype.tar.bz2
/chromium-60.0.3112.90-clean.tar.xz
/chromium-60.0.3112.101-clean.tar.xz
-/chromium-60.0.3112.113-clean.tar.xz
+/chromium-60.0.3112.101.tar.xz
/chromium-60.0.3112.113.tar.xz
/chromium-61.0.3163.79-clean.tar.xz
-/chromium-61.0.3163.100-clean.tar.xz
-/chromium-62.0.3202.75-clean.tar.xz
-/chromium-62.0.3202.89-clean.tar.xz
-/chromium-63.0.3239.84-clean.tar.xz
-/chromium-63.0.3239.108-clean.tar.xz
-/chromium-64.0.3282.119-clean.tar.xz
-/chromium-64.0.3282.140-clean.tar.xz
-/chromium-64.0.3282.167-clean.tar.xz
-/chromium-64.0.3282.186-clean.tar.xz
-/chromium-65.0.3325.146-clean.tar.xz
-/chromium-65.0.3325.162-clean.tar.xz
+/chromium-61.0.3163.79.tar.xz
+/chromium-61.0.3163.100.tar.xz
+/chromium-62.0.3202.62.tar.xz
+/chromium-62.0.3202.89.tar.xz
+/chromium-63.0.3239.108.tar.xz
+/chromium-64.0.3282.119.tar.xz
+/chromium-64.0.3282.167.tar.xz
+/chromium-64.0.3282.186.tar.xz
++/chromium-65.0.3325.162.tar.xz
diff --cc sources
index 77e26a4,d2b2768..bfddc9d
--- a/sources
+++ b/sources
@@@ -1,2 -1,2 +1,2 @@@
-SHA512 (depot_tools.git-master.tar.gz) = d3d6a1873b2b0296a8cd99e0d8d2e629a17b1808934b4972556168f8b4ccea60577ebaeab4445baf15afb1b04080808db59a832a5b61d247bd48da14fa6acf03
-SHA512 (chromium-65.0.3325.162-clean.tar.xz) = 6f8d2267ca27027a87515e0dfc4aafeb89b2344b994b48c0b7302dd56868e47df46f270c403f7311a2bbacaf5e1eb8b96b31141e9a99080e12321a0d38a618f5
+49a7f897775cce21d2b69968b8af1cea depot_tools.git-master.tar.gz
- 0c361a429c5dcea568cbc7b001a82d92 chromium-64.0.3282.186.tar.xz
++8800f620a2c068c657fc4767cdbfc416 chromium-65.0.3325.162.tar.xz
6 years, 7 months
[chromium-freeworld: 9/10] fix skia build issue on aarch64
by Miro Hrončok
commit 9e38b7c8af4f80a71fe22d311d5eeaf31fee968e
Author: Tom Callaway <spot(a)fedoraproject.org>
Date: Thu Mar 15 15:32:44 2018 -0400
fix skia build issue on aarch64
chromium-65.0.3325.162-skia-aarch64-buildfix.patch | 21 +++++++++++++++++++++
chromium.spec | 3 +++
2 files changed, 24 insertions(+)
---
diff --git a/chromium-65.0.3325.162-skia-aarch64-buildfix.patch b/chromium-65.0.3325.162-skia-aarch64-buildfix.patch
new file mode 100644
index 0000000..e48346c
--- /dev/null
+++ b/chromium-65.0.3325.162-skia-aarch64-buildfix.patch
@@ -0,0 +1,21 @@
+diff -up chromium-65.0.3325.162/third_party/skia/src/jumper/SkJumper_stages.cpp.aarch64fix chromium-65.0.3325.162/third_party/skia/src/jumper/SkJumper_stages.cpp
+--- chromium-65.0.3325.162/third_party/skia/src/jumper/SkJumper_stages.cpp.aarch64fix 2018-03-15 15:27:35.201345844 -0400
++++ chromium-65.0.3325.162/third_party/skia/src/jumper/SkJumper_stages.cpp 2018-03-15 15:31:30.471777400 -0400
+@@ -666,7 +666,7 @@ SI F approx_powf(F x, F y) {
+ }
+
+ SI F from_half(U16 h) {
+-#if defined(__aarch64__) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
++#if defined(JUMPER_IS_NEON) && defined(__aarch64__) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
+ return vcvt_f32_f16(h);
+
+ #elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512)
+@@ -686,7 +686,7 @@ SI F from_half(U16 h) {
+ }
+
+ SI U16 to_half(F f) {
+-#if defined(__aarch64__) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
++#if defined(JUMPER_IS_NEON) && defined(__aarch64__) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
+ return vcvt_f16_f32(f);
+
+ #elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512)
diff --git a/chromium.spec b/chromium.spec
index ce61034..307e0d4 100644
--- a/chromium.spec
+++ b/chromium.spec
@@ -240,6 +240,8 @@ Patch83: chromium-65.0.3325.146-GCC-IDB-methods-String-renamed-to-GetString.patc
Patch84: chromium-65.0.3325.146-GCC-fully-declare-ConfigurationPolicyProvider.patch
# ../../mojo/public/cpp/bindings/associated_interface_ptr_info.h:48:43: error: cannot convert 'const mojo::ScopedInterfaceEndpointHandle' to 'bool' in return
Patch85: chromium-65.0.3325.162-boolfix.patch
+# From Debian
+Patch86: chromium-65.0.3325.162-skia-aarch64-buildfix.patch
# Use chromium-latest.py to generate clean tarball from released build tarballs, found here:
# http://build.chromium.org/buildbot/official/
@@ -700,6 +702,7 @@ udev.
%patch83 -p1 -b .GetString
%patch84 -p1 -b .fully-declare
%patch85 -p1 -b .boolfix
+%patch86 -p1 -b .aarch64fix
%if 0%{?asan}
export CC="clang"
6 years, 7 months
[chromium-freeworld: 8/10] use normal bool cast
by Miro Hrončok
commit 61203bf461707bb8cad7f9a64969bdf6e3c98d1f
Author: Tom Callaway <spot(a)fedoraproject.org>
Date: Thu Mar 15 13:48:43 2018 -0400
use normal bool cast
chromium-65.0.3325.162-boolfix.patch | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
---
diff --git a/chromium-65.0.3325.162-boolfix.patch b/chromium-65.0.3325.162-boolfix.patch
index 325d649..a27f3a8 100644
--- a/chromium-65.0.3325.162-boolfix.patch
+++ b/chromium-65.0.3325.162-boolfix.patch
@@ -6,7 +6,7 @@ diff -up chromium-65.0.3325.162/mojo/public/cpp/bindings/associated_interface_pt
bool is_valid() const { return handle_.is_valid(); }
- explicit operator bool() const { return handle_; }
-+ explicit operator bool() const { return static_cast<bool> (handle_); }
++ explicit operator bool() const { return (bool) handle_; }
ScopedInterfaceEndpointHandle PassHandle() {
return std::move(handle_);
@@ -18,7 +18,7 @@ diff -up chromium-65.0.3325.162/mojo/public/cpp/bindings/associated_interface_re
bool is_pending() const { return handle_.is_valid(); }
- explicit operator bool() const { return handle_; }
-+ explicit operator bool() const { return static_cast<bool> (handle_); }
++ explicit operator bool() const { return (bool) handle_; }
ScopedInterfaceEndpointHandle PassHandle() { return std::move(handle_); }
@@ -30,7 +30,7 @@ diff -up chromium-65.0.3325.162/mojo/public/cpp/bindings/interface_request.h.boo
bool is_pending() const { return handle_.is_valid(); }
- explicit operator bool() const { return handle_; }
-+ explicit operator bool() const { return static_cast<bool> (handle_); }
++ explicit operator bool() const { return (bool) handle_; }
// Removes the message pipe from the request and returns it.
ScopedMessagePipeHandle PassMessagePipe() { return std::move(handle_); }
6 years, 7 months
[chromium-freeworld: 7/10] fix bool issue triggered by newer gcc
by Miro Hrončok
commit 8cfa28d97447ac6c323c3576d5efffc5bf8fca19
Author: Tom Callaway <spot(a)fedoraproject.org>
Date: Thu Mar 15 13:12:01 2018 -0400
fix bool issue triggered by newer gcc
chromium-65.0.3325.162-boolfix.patch | 36 ++++++++++++++++++++++++++++++++++++
chromium.spec | 3 +++
2 files changed, 39 insertions(+)
---
diff --git a/chromium-65.0.3325.162-boolfix.patch b/chromium-65.0.3325.162-boolfix.patch
new file mode 100644
index 0000000..325d649
--- /dev/null
+++ b/chromium-65.0.3325.162-boolfix.patch
@@ -0,0 +1,36 @@
+diff -up chromium-65.0.3325.162/mojo/public/cpp/bindings/associated_interface_ptr_info.h.boolfix chromium-65.0.3325.162/mojo/public/cpp/bindings/associated_interface_ptr_info.h
+--- chromium-65.0.3325.162/mojo/public/cpp/bindings/associated_interface_ptr_info.h.boolfix 2018-03-15 13:07:54.999428755 -0400
++++ chromium-65.0.3325.162/mojo/public/cpp/bindings/associated_interface_ptr_info.h 2018-03-15 13:08:21.270794252 -0400
+@@ -45,7 +45,7 @@ class AssociatedInterfacePtrInfo {
+
+ bool is_valid() const { return handle_.is_valid(); }
+
+- explicit operator bool() const { return handle_; }
++ explicit operator bool() const { return static_cast<bool> (handle_); }
+
+ ScopedInterfaceEndpointHandle PassHandle() {
+ return std::move(handle_);
+diff -up chromium-65.0.3325.162/mojo/public/cpp/bindings/associated_interface_request.h.boolfix chromium-65.0.3325.162/mojo/public/cpp/bindings/associated_interface_request.h
+--- chromium-65.0.3325.162/mojo/public/cpp/bindings/associated_interface_request.h.boolfix 2018-03-15 13:07:09.680523296 -0400
++++ chromium-65.0.3325.162/mojo/public/cpp/bindings/associated_interface_request.h 2018-03-15 13:07:44.429684037 -0400
+@@ -50,7 +50,7 @@ class AssociatedInterfaceRequest {
+ // handle.
+ bool is_pending() const { return handle_.is_valid(); }
+
+- explicit operator bool() const { return handle_; }
++ explicit operator bool() const { return static_cast<bool> (handle_); }
+
+ ScopedInterfaceEndpointHandle PassHandle() { return std::move(handle_); }
+
+diff -up chromium-65.0.3325.162/mojo/public/cpp/bindings/interface_request.h.boolfix chromium-65.0.3325.162/mojo/public/cpp/bindings/interface_request.h
+--- chromium-65.0.3325.162/mojo/public/cpp/bindings/interface_request.h.boolfix 2018-03-15 13:08:33.494499025 -0400
++++ chromium-65.0.3325.162/mojo/public/cpp/bindings/interface_request.h 2018-03-15 13:10:39.218462546 -0400
+@@ -54,7 +54,7 @@ class InterfaceRequest {
+ // Indicates whether the request currently contains a valid message pipe.
+ bool is_pending() const { return handle_.is_valid(); }
+
+- explicit operator bool() const { return handle_; }
++ explicit operator bool() const { return static_cast<bool> (handle_); }
+
+ // Removes the message pipe from the request and returns it.
+ ScopedMessagePipeHandle PassMessagePipe() { return std::move(handle_); }
diff --git a/chromium.spec b/chromium.spec
index db28101..ce61034 100644
--- a/chromium.spec
+++ b/chromium.spec
@@ -238,6 +238,8 @@ Patch82: chromium-65.0.3325.146-GCC-explicitely-std-move-to-base-Optional-instea
Patch83: chromium-65.0.3325.146-GCC-IDB-methods-String-renamed-to-GetString.patch
# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be...
Patch84: chromium-65.0.3325.146-GCC-fully-declare-ConfigurationPolicyProvider.patch
+# ../../mojo/public/cpp/bindings/associated_interface_ptr_info.h:48:43: error: cannot convert 'const mojo::ScopedInterfaceEndpointHandle' to 'bool' in return
+Patch85: chromium-65.0.3325.162-boolfix.patch
# Use chromium-latest.py to generate clean tarball from released build tarballs, found here:
# http://build.chromium.org/buildbot/official/
@@ -697,6 +699,7 @@ udev.
%patch82 -p1 -b .explicit-std-move
%patch83 -p1 -b .GetString
%patch84 -p1 -b .fully-declare
+%patch85 -p1 -b .boolfix
%if 0%{?asan}
export CC="clang"
6 years, 7 months
[chromium-freeworld: 6/10] use bundled libjpeg on epel7
by Miro Hrončok
commit 3534f5e56ff7746c7d30193cf7e64f2822d39592
Author: Tom Callaway <spot(a)fedoraproject.org>
Date: Thu Mar 15 12:56:27 2018 -0400
use bundled libjpeg on epel7
chromium.spec | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
---
diff --git a/chromium.spec b/chromium.spec
index 252a9a3..db28101 100644
--- a/chromium.spec
+++ b/chromium.spec
@@ -84,12 +84,14 @@ BuildRequires: libicu-devel >= 5.4
%global bundleharfbuzz 1
%global bundlelibwebp 1
%global bundlelibpng 1
+%global bundlelibjpeg 1
%else
%global bundleharfbuzz 0
%global bundleopus 1
%global bundlelibusbx 0
%global bundlelibwebp 0
%global bundlelibpng 0
+%global bundlelibjpeg 0
%endif
# Needs at least harfbuzz 1.7.3 now.
@@ -338,7 +340,12 @@ BuildRequires: libffi-devel
# Not newer than 54 (at least not right now)
BuildRequires: libicu-devel = 54.1
%endif
+%if 0%{?bundlelibjpeg}
+# If this is true, we're using the bundled libjpeg
+# which we need to do because the RHEL 7 libjpeg doesn't work for chromium anymore
+%else
BuildRequires: libjpeg-devel
+%endif
%if 0%{?bundlelibpng}
# If this is true, we're using the bundled libpng
# which we need to do because the RHEL 7 libpng doesn't work right anymore
@@ -482,7 +489,9 @@ Provides: bundled(libaddressinput) = 0
Provides: bundled(libdrm) = 2.4.70
Provides: bundled(libevent) = 1.4.15
Provides: bundled(libjingle) = 9564
-# Provides: bundled(libjpeg-turbo) = 1.4.90
+%if 0%{?bundlelibjpeg}
+Provides: bundled(libjpeg-turbo) = 1.4.90
+%endif
Provides: bundled(libphonenumber) = a4da30df63a097d67e3c429ead6790ad91d36cf4
%if 0%{?bundlelibpng}
Provides: bundled(libpng) = 1.6.22
@@ -1038,7 +1047,10 @@ build/linux/unbundle/replace_gn_files.py --system-libraries \
icu \
%endif
libdrm \
+%if %{bundlelibjpeg}
+%else
libjpeg \
+%endif
%if %{bundlelibpng}
%else
libpng \
6 years, 7 months
[chromium-freeworld: 5/10] version conditionalize gnome-keyring-devel
by Miro Hrončok
commit fe5b552f8eb7d1c6928a19de27cb0dc637c33fbe
Author: Tom Callaway <spot(a)fedoraproject.org>
Date: Thu Mar 15 12:29:18 2018 -0400
version conditionalize gnome-keyring-devel
chromium.spec | 2 ++
1 file changed, 2 insertions(+)
---
diff --git a/chromium.spec b/chromium.spec
index e0cce6e..252a9a3 100644
--- a/chromium.spec
+++ b/chromium.spec
@@ -277,7 +277,9 @@ BuildRequires: flex
BuildRequires: fontconfig-devel
BuildRequires: GConf2-devel
BuildRequires: glib2-devel
+%if 0%{?fedora} <= 27
BuildRequires: gnome-keyring-devel
+%endif
BuildRequires: glibc-devel
BuildRequires: gperf
BuildRequires: libatomic
6 years, 7 months
[chromium-freeworld: 4/10] clean sources
by Miro Hrončok
commit 8ca12f156d0e02cef908c4054331026356f90051
Author: Tom Callaway <spot(a)fedoraproject.org>
Date: Thu Mar 15 12:17:47 2018 -0400
clean sources
sources | 1 -
1 file changed, 1 deletion(-)
---
diff --git a/sources b/sources
index e3860a3..d2b2768 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,2 @@
SHA512 (depot_tools.git-master.tar.gz) = d3d6a1873b2b0296a8cd99e0d8d2e629a17b1808934b4972556168f8b4ccea60577ebaeab4445baf15afb1b04080808db59a832a5b61d247bd48da14fa6acf03
-SHA512 (chromium-65.0.3325.146-clean.tar.xz) = 18a45e41eb706fa87a707c89ee419b6a408132d763318c06cffca9e453f09a0e52a76089002ec1c25224d77a54eecc17013a6087dd4acdbd15df073fd7eff937
SHA512 (chromium-65.0.3325.162-clean.tar.xz) = 6f8d2267ca27027a87515e0dfc4aafeb89b2344b994b48c0b7302dd56868e47df46f270c403f7311a2bbacaf5e1eb8b96b31141e9a99080e12321a0d38a618f5
6 years, 7 months
[chromium-freeworld: 3/10] 65.0.3325.162
by Miro Hrončok
commit 4e6c6ef24dd0296bc2b2ec7144a153a61b36f2d9
Author: Tom Callaway <spot(a)fedoraproject.org>
Date: Thu Mar 15 12:17:21 2018 -0400
65.0.3325.162
.gitignore | 1 +
...46-Fix-non-copyable-class-s-optional-move.patch | 41 ++++
...C-IDB-methods-String-renamed-to-GetString.patch | 108 +++++++++
...kImageProvider-Settings-do-not-provide-co.patch | 22 ++
...ix-base-Optional-T-requires-the-full-decl.patch | 33 +++
...tely-std-move-to-base-Optional-instead-of.patch | 24 ++
...fully-declare-ConfigurationPolicyProvider.patch | 18 ++
...onditional-copy-move-ctors-assign-operato.patch | 91 +++++++
...t-converting-constructors-from-Optional-U.patch | 116 +++++++++
...5.146-Implement-value-forward-constructor.patch | 72 ++++++
...Update-non-copy-non-move-assign-operators.patch | 144 +++++++++++
...e-affirmative-expression-in-base-Optional.patch | 265 +++++++++++++++++++++
...7-is_trivially_copy_constructable-failure.patch | 55 +++++
...lpan-Remove-GC-checks-from-WTF-Optional-T.patch | 61 +++++
chromium-65.0.3325.146-wtf-vector-fix.patch | 54 +++++
chromium.spec | 53 ++++-
clean_ffmpeg.sh | 3 +
sources | 1 +
18 files changed, 1159 insertions(+), 3 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 11c035f..3e50fe8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,3 +40,4 @@
/chromium-64.0.3282.167-clean.tar.xz
/chromium-64.0.3282.186-clean.tar.xz
/chromium-65.0.3325.146-clean.tar.xz
+/chromium-65.0.3325.162-clean.tar.xz
diff --git a/chromium-65.0.3325.146-Fix-non-copyable-class-s-optional-move.patch b/chromium-65.0.3325.146-Fix-non-copyable-class-s-optional-move.patch
new file mode 100644
index 0000000..6cf8ca8
--- /dev/null
+++ b/chromium-65.0.3325.146-Fix-non-copyable-class-s-optional-move.patch
@@ -0,0 +1,41 @@
+diff -up chromium-65.0.3325.146/base/optional.h.noncopyable chromium-65.0.3325.146/base/optional.h
+--- chromium-65.0.3325.146/base/optional.h.noncopyable 2018-03-13 16:52:15.953729689 -0400
++++ chromium-65.0.3325.146/base/optional.h 2018-03-13 16:53:55.365792522 -0400
+@@ -45,6 +45,15 @@ struct OptionalStorageBase {
+
+ // When T is not trivially destructible we must call its
+ // destructor before deallocating its memory.
++ // Note that this hides the (implicitly declared) move constructor, which
++ // would be used for constexpr move constructor in OptionalStorage<T>.
++ // It is needed iff T is trivially move constructible. However, the current
++ // is_trivially_{copy,move}_constructible implementation requires
++ // is_trivially_destructible (which looks a bug, cf:
++ // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51452 and
++ // http://cplusplus.github.io/LWG/lwg-active.html#2116), so it is not
++ // necessary for this case at the moment. Please see also the destructor
++ // comment in "is_trivially_destructible = true" specialization below.
+ ~OptionalStorageBase() {
+ if (!is_null_)
+ value_.~T();
+@@ -78,9 +87,18 @@ struct OptionalStorageBase<T, true /* tr
+ : is_null_(false), value_(std::forward<Args>(args)...) {}
+
+ // When T is trivially destructible (i.e. its destructor does nothing) there
+- // is no need to call it. Explicitly defaulting the destructor means it's not
+- // user-provided. Those two together make this destructor trivial.
+- ~OptionalStorageBase() = default;
++ // is no need to call it. Implicitly defined destructor is trivial, because
++ // both members (bool and union containing only variants which are trivially
++ // destructible) are trivially destructible.
++ // Explicitly-defaulted destructor is also trivial, but do not use it here,
++ // because it hides the implicit move constructor. It is needed to implement
++ // constexpr move constructor in OptionalStorage iff T is trivially move
++ // constructible. Note that, if T is trivially move constructible, the move
++ // constructor of OptionalStorageBase<T> is also implicitly defined and it is
++ // trivially move constructor. If T is not trivially move constructible,
++ // "not declaring move constructor without destructor declaration" here means
++ // "delete move constructor", which works because any move constructor of
++ // OptionalStorage will not refer to it in that case.
+
+ template <class... Args>
+ void Init(Args&&... args) {
diff --git a/chromium-65.0.3325.146-GCC-IDB-methods-String-renamed-to-GetString.patch b/chromium-65.0.3325.146-GCC-IDB-methods-String-renamed-to-GetString.patch
new file mode 100644
index 0000000..dbdf68f
--- /dev/null
+++ b/chromium-65.0.3325.146-GCC-IDB-methods-String-renamed-to-GetString.patch
@@ -0,0 +1,108 @@
+diff -up chromium-65.0.3325.146/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp.GetString chromium-65.0.3325.146/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp
+--- chromium-65.0.3325.146/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp.GetString 2018-03-13 22:54:27.262671113 -0400
++++ chromium-65.0.3325.146/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp 2018-03-13 22:55:47.722113713 -0400
+@@ -68,7 +68,7 @@ v8::Local<v8::Value> ToV8(const IDBKeyPa
+ case IDBKeyPath::kNullType:
+ return v8::Null(isolate);
+ case IDBKeyPath::kStringType:
+- return V8String(isolate, value.String());
++ return V8String(isolate, value.GetString());
+ case IDBKeyPath::kArrayType:
+ return ToV8(value.Array(), creation_context, isolate);
+ }
+@@ -97,7 +97,7 @@ v8::Local<v8::Value> ToV8(const IDBKey*
+ case IDBKey::kNumberType:
+ return v8::Number::New(isolate, key->Number());
+ case IDBKey::kStringType:
+- return V8String(isolate, key->String());
++ return V8String(isolate, key->GetString());
+ case IDBKey::kBinaryType:
+ // https://w3c.github.io/IndexedDB/#convert-a-value-to-a-key
+ return ToV8(DOMArrayBuffer::Create(key->Binary()), creation_context,
+@@ -379,7 +379,7 @@ static std::unique_ptr<IDBKey> CreateIDB
+ }
+
+ DCHECK_EQ(key_path.GetType(), IDBKeyPath::kStringType);
+- return CreateIDBKeyFromValueAndKeyPath(isolate, value, key_path.String(),
++ return CreateIDBKeyFromValueAndKeyPath(isolate, value, key_path.GetString(),
+ exception_state);
+ }
+
+@@ -483,7 +483,7 @@ bool InjectV8KeyIntoV8Value(v8::Isolate*
+ DCHECK(isolate->InContext());
+
+ DCHECK_EQ(key_path.GetType(), IDBKeyPath::kStringType);
+- Vector<String> key_path_elements = ParseKeyPath(key_path.String());
++ Vector<String> key_path_elements = ParseKeyPath(key_path.GetString());
+
+ // The conbination of a key generator and an empty key path is forbidden by
+ // spec.
+@@ -569,7 +569,7 @@ bool CanInjectIDBKeyIntoScriptValue(v8::
+ const IDBKeyPath& key_path) {
+ IDB_TRACE("canInjectIDBKeyIntoScriptValue");
+ DCHECK_EQ(key_path.GetType(), IDBKeyPath::kStringType);
+- Vector<String> key_path_elements = ParseKeyPath(key_path.String());
++ Vector<String> key_path_elements = ParseKeyPath(key_path.GetString());
+
+ if (!key_path_elements.size())
+ return false;
+diff -up chromium-65.0.3325.146/third_party/WebKit/Source/modules/exported/WebIDBKey.cpp.GetString chromium-65.0.3325.146/third_party/WebKit/Source/modules/exported/WebIDBKey.cpp
+--- chromium-65.0.3325.146/third_party/WebKit/Source/modules/exported/WebIDBKey.cpp.GetString 2018-03-13 22:56:04.041798217 -0400
++++ chromium-65.0.3325.146/third_party/WebKit/Source/modules/exported/WebIDBKey.cpp 2018-03-13 22:56:22.481440993 -0400
+@@ -56,7 +56,7 @@ WebData WebIDBKeyView::Binary() const {
+ }
+
+ WebString WebIDBKeyView::String() const {
+- return private_->String();
++ return private_->GetString();
+ }
+
+ double WebIDBKeyView::Date() const {
+diff -up chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp.GetString chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
+--- chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp.GetString 2018-03-13 22:56:36.028178758 -0400
++++ chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp 2018-03-13 22:56:58.846736831 -0400
+@@ -297,7 +297,7 @@ IDBObjectStore* IDBDatabase::createObjec
+ }
+
+ if (auto_increment && ((key_path.GetType() == IDBKeyPath::kStringType &&
+- key_path.String().IsEmpty()) ||
++ key_path.GetString().IsEmpty()) ||
+ key_path.GetType() == IDBKeyPath::kArrayType)) {
+ exception_state.ThrowDOMException(
+ kInvalidAccessError,
+diff -up chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKey.h.GetString chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKey.h
+--- chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKey.h.GetString 2018-03-13 22:57:13.229458842 -0400
++++ chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKey.h 2018-03-13 22:57:38.633966776 -0400
+@@ -106,7 +106,7 @@ class MODULES_EXPORT IDBKey {
+ return binary_;
+ }
+
+- const String& String() const {
++ const String& GetString() const {
+ DCHECK_EQ(type_, kStringType);
+ return string_;
+ }
+diff -up chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.h.GetString chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.h
+--- chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.h.GetString 2018-03-13 22:57:51.104725428 -0400
++++ chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.h 2018-03-13 22:58:09.459369906 -0400
+@@ -65,7 +65,7 @@ class MODULES_EXPORT IDBKeyPath {
+ return array_;
+ }
+
+- const String& String() const {
++ const String& GetString() const {
+ DCHECK_EQ(type_, kStringType);
+ return string_;
+ }
+diff -up chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp.GetString chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp
+--- chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp.GetString 2018-03-13 22:58:28.778995834 -0400
++++ chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp 2018-03-13 22:58:45.044681364 -0400
+@@ -399,7 +399,7 @@ static std::unique_ptr<KeyPath> KeyPathF
+ case IDBKeyPath::kStringType:
+ key_path = KeyPath::create()
+ .setType(KeyPath::TypeEnum::String)
+- .setString(idb_key_path.String())
++ .setString(idb_key_path.GetString())
+ .build();
+ break;
+ case IDBKeyPath::kArrayType: {
diff --git a/chromium-65.0.3325.146-GCC-PlaybackImageProvider-Settings-do-not-provide-co.patch b/chromium-65.0.3325.146-GCC-PlaybackImageProvider-Settings-do-not-provide-co.patch
new file mode 100644
index 0000000..8edc424
--- /dev/null
+++ b/chromium-65.0.3325.146-GCC-PlaybackImageProvider-Settings-do-not-provide-co.patch
@@ -0,0 +1,22 @@
+diff -up chromium-65.0.3325.146/cc/raster/playback_image_provider.cc.pipcc chromium-65.0.3325.146/cc/raster/playback_image_provider.cc
+--- chromium-65.0.3325.146/cc/raster/playback_image_provider.cc.pipcc 2018-03-13 22:47:00.271322726 -0400
++++ chromium-65.0.3325.146/cc/raster/playback_image_provider.cc 2018-03-13 22:47:53.127300060 -0400
+@@ -92,7 +92,6 @@ PlaybackImageProvider::GetDecodedDrawIma
+ }
+
+ PlaybackImageProvider::Settings::Settings() = default;
+-PlaybackImageProvider::Settings::Settings(const Settings& other) = default;
+ PlaybackImageProvider::Settings::~Settings() = default;
+
+ } // namespace cc
+diff -up chromium-65.0.3325.146/cc/raster/playback_image_provider.h.pipcc chromium-65.0.3325.146/cc/raster/playback_image_provider.h
+--- chromium-65.0.3325.146/cc/raster/playback_image_provider.h.pipcc 2018-03-13 22:48:00.673153629 -0400
++++ chromium-65.0.3325.146/cc/raster/playback_image_provider.h 2018-03-13 22:48:12.726920597 -0400
+@@ -20,7 +20,6 @@ class CC_EXPORT PlaybackImageProvider :
+ public:
+ struct CC_EXPORT Settings {
+ Settings();
+- Settings(const Settings& other);
+ ~Settings();
+
+ // The set of image ids to skip during raster.
diff --git a/chromium-65.0.3325.146-GCC-build-fix-base-Optional-T-requires-the-full-decl.patch b/chromium-65.0.3325.146-GCC-build-fix-base-Optional-T-requires-the-full-decl.patch
new file mode 100644
index 0000000..62124be
--- /dev/null
+++ b/chromium-65.0.3325.146-GCC-build-fix-base-Optional-T-requires-the-full-decl.patch
@@ -0,0 +1,33 @@
+diff -up chromium-65.0.3325.146/services/preferences/tracked/pref_hash_filter.h.fulldecl chromium-65.0.3325.146/services/preferences/tracked/pref_hash_filter.h
+--- chromium-65.0.3325.146/services/preferences/tracked/pref_hash_filter.h.fulldecl 2018-03-13 16:38:38.870652491 -0400
++++ chromium-65.0.3325.146/services/preferences/tracked/pref_hash_filter.h 2018-03-13 16:39:02.691186647 -0400
+@@ -21,9 +21,9 @@
+ #include "services/preferences/public/interfaces/preferences.mojom.h"
+ #include "services/preferences/tracked/hash_store_contents.h"
+ #include "services/preferences/tracked/interceptable_pref_filter.h"
++#include "services/preferences/tracked/pref_hash_store.h"
+ #include "services/preferences/tracked/tracked_preference.h"
+
+-class PrefHashStore;
+ class PrefService;
+
+ namespace base {
+diff -up chromium-65.0.3325.146/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.h.fulldecl chromium-65.0.3325.146/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.h
+--- chromium-65.0.3325.146/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.h.fulldecl 2018-03-13 16:39:13.787970233 -0400
++++ chromium-65.0.3325.146/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.h 2018-03-13 16:39:42.614407235 -0400
+@@ -30,6 +30,7 @@
+
+ #include <memory>
+ #include "modules/webdatabase/DatabaseBasicTypes.h"
++#include "modules/webdatabase/SQLError.h"
+ #include "modules/webdatabase/SQLStatement.h"
+ #include "modules/webdatabase/SQLStatementBackend.h"
+ #include "modules/webdatabase/SQLTransactionStateMachine.h"
+@@ -41,7 +42,6 @@
+ namespace blink {
+
+ class Database;
+-class SQLErrorData;
+ class SQLiteTransaction;
+ class SQLTransaction;
+ class SQLTransactionBackend;
diff --git a/chromium-65.0.3325.146-GCC-explicitely-std-move-to-base-Optional-instead-of.patch b/chromium-65.0.3325.146-GCC-explicitely-std-move-to-base-Optional-instead-of.patch
new file mode 100644
index 0000000..9c6f315
--- /dev/null
+++ b/chromium-65.0.3325.146-GCC-explicitely-std-move-to-base-Optional-instead-of.patch
@@ -0,0 +1,24 @@
+diff -up chromium-65.0.3325.146/content/browser/appcache/appcache_request_handler.cc.explicit-std-move chromium-65.0.3325.146/content/browser/appcache/appcache_request_handler.cc
+--- chromium-65.0.3325.146/content/browser/appcache/appcache_request_handler.cc.explicit-std-move 2018-03-13 22:50:41.346043716 -0400
++++ chromium-65.0.3325.146/content/browser/appcache/appcache_request_handler.cc 2018-03-13 22:51:21.428267583 -0400
+@@ -639,7 +639,7 @@ AppCacheRequestHandler::MaybeCreateSubre
+
+ SubresourceLoaderParams params;
+ params.loader_factory_info = factory_ptr.PassInterface();
+- return params;
++ return base::Optional<SubresourceLoaderParams>(std::move(params));
+ }
+
+ void AppCacheRequestHandler::MaybeCreateSubresourceLoader(
+diff -up chromium-65.0.3325.146/content/browser/service_worker/service_worker_controllee_request_handler.cc.explicit-std-move chromium-65.0.3325.146/content/browser/service_worker/service_worker_controllee_request_handler.cc
+--- chromium-65.0.3325.146/content/browser/service_worker/service_worker_controllee_request_handler.cc.explicit-std-move 2018-03-13 22:51:38.133943776 -0400
++++ chromium-65.0.3325.146/content/browser/service_worker/service_worker_controllee_request_handler.cc 2018-03-13 22:51:57.658566347 -0400
+@@ -271,7 +271,7 @@ ServiceWorkerControlleeRequestHandler::M
+ controller_info->object_info = provider_host_->GetOrCreateServiceWorkerHandle(
+ provider_host_->controller());
+ params.controller_service_worker_info = std::move(controller_info);
+- return params;
++ return base::Optional<SubresourceLoaderParams>(std::move(params));
+ }
+
+ void ServiceWorkerControlleeRequestHandler::PrepareForMainResource(
diff --git a/chromium-65.0.3325.146-GCC-fully-declare-ConfigurationPolicyProvider.patch b/chromium-65.0.3325.146-GCC-fully-declare-ConfigurationPolicyProvider.patch
new file mode 100644
index 0000000..809a321
--- /dev/null
+++ b/chromium-65.0.3325.146-GCC-fully-declare-ConfigurationPolicyProvider.patch
@@ -0,0 +1,18 @@
+diff -up chromium-65.0.3325.146/components/policy/core/browser/browser_policy_connector_base.h.fully-declare chromium-65.0.3325.146/components/policy/core/browser/browser_policy_connector_base.h
+--- chromium-65.0.3325.146/components/policy/core/browser/browser_policy_connector_base.h.fully-declare 2018-03-13 23:02:13.989635567 -0400
++++ chromium-65.0.3325.146/components/policy/core/browser/browser_policy_connector_base.h 2018-03-13 23:02:44.318048625 -0400
+@@ -12,13 +12,13 @@
+ #include "base/macros.h"
+ #include "base/optional.h"
+ #include "components/policy/core/browser/configuration_policy_handler_list.h"
++#include "components/policy/core/common/configuration_policy_provider.h"
+ #include "components/policy/core/common/schema.h"
+ #include "components/policy/core/common/schema_registry.h"
+ #include "components/policy/policy_export.h"
+
+ namespace policy {
+
+-class ConfigurationPolicyProvider;
+ class PolicyService;
+ class PolicyServiceImpl;
+
diff --git a/chromium-65.0.3325.146-Implement-conditional-copy-move-ctors-assign-operato.patch b/chromium-65.0.3325.146-Implement-conditional-copy-move-ctors-assign-operato.patch
new file mode 100644
index 0000000..9b4befe
--- /dev/null
+++ b/chromium-65.0.3325.146-Implement-conditional-copy-move-ctors-assign-operato.patch
@@ -0,0 +1,91 @@
+diff -up chromium-65.0.3325.146/base/optional.h.conditional chromium-65.0.3325.146/base/optional.h
+--- chromium-65.0.3325.146/base/optional.h.conditional 2018-03-13 22:11:02.328058249 -0400
++++ chromium-65.0.3325.146/base/optional.h 2018-03-13 22:12:43.622098296 -0400
+@@ -266,6 +266,58 @@ class OptionalBase {
+ OptionalStorage<T> storage_;
+ };
+
++// The following {Copy,Move}{Constructible,Assignable} structs are helpers to
++// implement constructor/assign-operator overloading. Specifically, if T is
++// is not movable but copyable, Optional<T>'s move constructor should not
++// participate in overload resolution. This inheritance trick implements that.
++template <bool is_copy_constructible>
++struct CopyConstructible {};
++
++template <>
++struct CopyConstructible<false> {
++ constexpr CopyConstructible() = default;
++ constexpr CopyConstructible(const CopyConstructible&) = delete;
++ constexpr CopyConstructible(CopyConstructible&&) = default;
++ CopyConstructible& operator=(const CopyConstructible&) = default;
++ CopyConstructible& operator=(CopyConstructible&&) = default;
++};
++
++template <bool is_move_constructible>
++struct MoveConstructible {};
++
++template <>
++struct MoveConstructible<false> {
++ constexpr MoveConstructible() = default;
++ constexpr MoveConstructible(const MoveConstructible&) = default;
++ constexpr MoveConstructible(MoveConstructible&&) = delete;
++ MoveConstructible& operator=(const MoveConstructible&) = default;
++ MoveConstructible& operator=(MoveConstructible&&) = default;
++};
++
++template <bool is_copy_assignable>
++struct CopyAssignable {};
++
++template <>
++struct CopyAssignable<false> {
++ constexpr CopyAssignable() = default;
++ constexpr CopyAssignable(const CopyAssignable&) = default;
++ constexpr CopyAssignable(CopyAssignable&&) = default;
++ CopyAssignable& operator=(const CopyAssignable&) = delete;
++ CopyAssignable& operator=(CopyAssignable&&) = default;
++};
++
++template <bool is_move_assignable>
++struct MoveAssignable {};
++
++template <>
++struct MoveAssignable<false> {
++ constexpr MoveAssignable() = default;
++ constexpr MoveAssignable(const MoveAssignable&) = default;
++ constexpr MoveAssignable(MoveAssignable&&) = default;
++ MoveAssignable& operator=(const MoveAssignable&) = default;
++ MoveAssignable& operator=(MoveAssignable&&) = delete;
++};
++
+ } // namespace internal
+
+ // base::Optional is a Chromium version of the C++17 optional class:
+@@ -280,12 +332,18 @@ class OptionalBase {
+ // - No exceptions are thrown, because they are banned from Chromium.
+ // - All the non-members are in the 'base' namespace instead of 'std'.
+ template <typename T>
+-class Optional : public internal::OptionalBase<T> {
++class Optional
++ : public internal::OptionalBase<T>,
++ public internal::CopyConstructible<std::is_copy_constructible<T>::value>,
++ public internal::MoveConstructible<std::is_move_constructible<T>::value>,
++ public internal::CopyAssignable<std::is_copy_constructible<T>::value &&
++ std::is_copy_assignable<T>::value>,
++ public internal::MoveAssignable<std::is_move_constructible<T>::value &&
++ std::is_move_assignable<T>::value> {
+ public:
+ using value_type = T;
+
+ // Defer default/copy/move constructor implementation to OptionalBase.
+- // TODO(hidehiko): Implement conditional enabling.
+ constexpr Optional() = default;
+ constexpr Optional(const Optional& other) = default;
+ constexpr Optional(Optional&& other) = default;
+@@ -316,7 +374,6 @@ class Optional : public internal::Option
+ ~Optional() = default;
+
+ // Defer copy-/move- assign operator implementation to OptionalBase.
+- // TOOD(hidehiko): Implement conditional enabling.
+ Optional& operator=(const Optional& other) = default;
+ Optional& operator=(Optional&& other) = default;
+
diff --git a/chromium-65.0.3325.146-Implement-converting-constructors-from-Optional-U.patch b/chromium-65.0.3325.146-Implement-converting-constructors-from-Optional-U.patch
new file mode 100644
index 0000000..3214104
--- /dev/null
+++ b/chromium-65.0.3325.146-Implement-converting-constructors-from-Optional-U.patch
@@ -0,0 +1,116 @@
+diff -up chromium-65.0.3325.146/base/optional.h.converting chromium-65.0.3325.146/base/optional.h
+--- chromium-65.0.3325.146/base/optional.h.converting 2018-03-13 22:31:05.248797490 -0400
++++ chromium-65.0.3325.146/base/optional.h 2018-03-13 22:33:10.826368771 -0400
+@@ -31,6 +31,10 @@ constexpr in_place_t in_place = {};
+ // http://en.cppreference.com/w/cpp/utility/optional/nullopt
+ constexpr nullopt_t nullopt(0);
+
++// Forward declaration, which is refered by following helpers.
++template <typename T>
++class Optional;
++
+ namespace internal {
+
+ template <typename T, bool = std::is_trivially_destructible<T>::value>
+@@ -220,6 +224,19 @@ class OptionalBase {
+ constexpr explicit OptionalBase(in_place_t, Args&&... args)
+ : storage_(in_place, std::forward<Args>(args)...) {}
+
++ // Implementation of converting constructors.
++ template <typename U>
++ explicit OptionalBase(const OptionalBase<U>& other) {
++ if (other.storage_.is_populated_)
++ storage_.Init(other.storage_.value_);
++ }
++
++ template <typename U>
++ explicit OptionalBase(OptionalBase<U>&& other) {
++ if (other.storage_.is_populated_)
++ storage_.Init(std::move(other.storage_.value_));
++ }
++
+ ~OptionalBase() = default;
+
+ OptionalBase& operator=(const OptionalBase& other) {
+@@ -263,6 +280,11 @@ class OptionalBase {
+ storage_.is_populated_ = false;
+ }
+
++ // For implementing conversion, allow access to other typed OptionalBase
++ // class.
++ template <typename U>
++ friend class OptionalBase;
++
+ OptionalStorage<T> storage_;
+ };
+
+@@ -318,6 +340,20 @@ struct MoveAssignable<false> {
+ MoveAssignable& operator=(MoveAssignable&&) = delete;
+ };
+
++// Helper to conditionally enable converting constructors.
++template <typename T, typename U>
++struct IsConvertibleFromOptional
++ : std::integral_constant<
++ bool,
++ std::is_constructible<T, Optional<U>&>::value ||
++ std::is_constructible<T, const Optional<U>&>::value ||
++ std::is_constructible<T, Optional<U>&&>::value ||
++ std::is_constructible<T, const Optional<U>&&>::value ||
++ std::is_convertible<Optional<U>&, T>::value ||
++ std::is_convertible<const Optional<U>&, T>::value ||
++ std::is_convertible<Optional<U>&&, T>::value ||
++ std::is_convertible<const Optional<U>&&, T>::value> {};
++
+ } // namespace internal
+
+ // base::Optional is a Chromium version of the C++17 optional class:
+@@ -348,7 +384,47 @@ class Optional
+ constexpr Optional(const Optional& other) = default;
+ constexpr Optional(Optional&& other) = default;
+
+- constexpr Optional(nullopt_t) {}
++ constexpr Optional(nullopt_t) {} // NOLINT(runtime/explicit)
++
++ // Converting copy constructor. "explicit" only if
++ // std::is_convertible<const U&, T>::value is false. It is implemented by
++ // declaring two almost same constructors, but that condition in enable_if_t
++ // is different, so that either one is chosen, thanks to SFINAE.
++ template <
++ typename U,
++ std::enable_if_t<std::is_constructible<T, const U&>::value &&
++ !internal::IsConvertibleFromOptional<T, U>::value &&
++ std::is_convertible<const U&, T>::value,
++ bool> = false>
++ Optional(const Optional<U>& other) : internal::OptionalBase<T>(other) {}
++
++ template <
++ typename U,
++ std::enable_if_t<std::is_constructible<T, const U&>::value &&
++ !internal::IsConvertibleFromOptional<T, U>::value &&
++ !std::is_convertible<const U&, T>::value,
++ bool> = false>
++ explicit Optional(const Optional<U>& other)
++ : internal::OptionalBase<T>(other) {}
++
++ // Converting move constructor. Similar to converting copy constructor,
++ // declaring two (explicit and non-explicit) constructors.
++ template <
++ typename U,
++ std::enable_if_t<std::is_constructible<T, U&&>::value &&
++ !internal::IsConvertibleFromOptional<T, U>::value &&
++ std::is_convertible<U&&, T>::value,
++ bool> = false>
++ Optional(Optional<U>&& other) : internal::OptionalBase<T>(std::move(other)) {}
++
++ template <
++ typename U,
++ std::enable_if_t<std::is_constructible<T, U&&>::value &&
++ !internal::IsConvertibleFromOptional<T, U>::value &&
++ !std::is_convertible<U&&, T>::value,
++ bool> = false>
++ explicit Optional(Optional<U>&& other)
++ : internal::OptionalBase<T>(std::move(other)) {}
+
+ constexpr Optional(const T& value)
+ : internal::OptionalBase<T>(in_place, value) {}
diff --git a/chromium-65.0.3325.146-Implement-value-forward-constructor.patch b/chromium-65.0.3325.146-Implement-value-forward-constructor.patch
new file mode 100644
index 0000000..db727d8
--- /dev/null
+++ b/chromium-65.0.3325.146-Implement-value-forward-constructor.patch
@@ -0,0 +1,72 @@
+diff -up chromium-65.0.3325.146/base/optional.h.vforward chromium-65.0.3325.146/base/optional.h
+--- chromium-65.0.3325.146/base/optional.h.vforward 2018-03-13 22:35:46.383359966 -0400
++++ chromium-65.0.3325.146/base/optional.h 2018-03-13 22:37:48.724992995 -0400
+@@ -354,6 +354,10 @@ struct IsConvertibleFromOptional
+ std::is_convertible<Optional<U>&&, T>::value ||
+ std::is_convertible<const Optional<U>&&, T>::value> {};
+
++// Forward compatibility for C++20.
++template <typename T>
++using RemoveCvRefT = std::remove_cv_t<std::remove_reference_t<T>>;
++
+ } // namespace internal
+
+ // base::Optional is a Chromium version of the C++17 optional class:
+@@ -367,6 +371,13 @@ struct IsConvertibleFromOptional
+ // - 'constexpr' might be missing in some places for reasons specified locally.
+ // - No exceptions are thrown, because they are banned from Chromium.
+ // - All the non-members are in the 'base' namespace instead of 'std'.
++//
++// Note that T cannot have a constructor T(Optional<T>) etc. Optional<T> checks
++// T's constructor (specifically via IsConvertibleFromOptional), and in the
++// check whether T can be constructible from Optional<T>, which is recursive
++// so it does not work. As of Feb 2018, std::optional C++17 implementation in
++// both clang and gcc has same limitation. MSVC SFINAE looks to have different
++// behavior, but anyway it reports an error, too.
+ template <typename T>
+ class Optional
+ : public internal::OptionalBase<T>,
+@@ -426,12 +437,6 @@ class Optional
+ explicit Optional(Optional<U>&& other)
+ : internal::OptionalBase<T>(std::move(other)) {}
+
+- constexpr Optional(const T& value)
+- : internal::OptionalBase<T>(in_place, value) {}
+-
+- constexpr Optional(T&& value)
+- : internal::OptionalBase<T>(in_place, std::move(value)) {}
+-
+ template <class... Args>
+ constexpr explicit Optional(in_place_t, Args&&... args)
+ : internal::OptionalBase<T>(in_place, std::forward<Args>(args)...) {}
+@@ -447,6 +452,30 @@ class Optional
+ Args&&... args)
+ : internal::OptionalBase<T>(in_place, il, std::forward<Args>(args)...) {}
+
++ // Forward value constructor. Similar to converting constructors,
++ // conditionally explicit.
++ template <
++ typename U = value_type,
++ std::enable_if_t<
++ std::is_constructible<T, U&&>::value &&
++ !std::is_same<internal::RemoveCvRefT<U>, in_place_t>::value &&
++ !std::is_same<internal::RemoveCvRefT<U>, Optional<T>>::value &&
++ std::is_convertible<U&&, T>::value,
++ bool> = false>
++ constexpr Optional(U&& value)
++ : internal::OptionalBase<T>(in_place, std::forward<U>(value)) {}
++
++ template <
++ typename U = value_type,
++ std::enable_if_t<
++ std::is_constructible<T, U&&>::value &&
++ !std::is_same<internal::RemoveCvRefT<U>, in_place_t>::value &&
++ !std::is_same<internal::RemoveCvRefT<U>, Optional<T>>::value &&
++ !std::is_convertible<U&&, T>::value,
++ bool> = false>
++ constexpr explicit Optional(U&& value)
++ : internal::OptionalBase<T>(in_place, std::forward<U>(value)) {}
++
+ ~Optional() = default;
+
+ // Defer copy-/move- assign operator implementation to OptionalBase.
diff --git a/chromium-65.0.3325.146-Update-non-copy-non-move-assign-operators.patch b/chromium-65.0.3325.146-Update-non-copy-non-move-assign-operators.patch
new file mode 100644
index 0000000..f9c4503
--- /dev/null
+++ b/chromium-65.0.3325.146-Update-non-copy-non-move-assign-operators.patch
@@ -0,0 +1,144 @@
+diff -up chromium-65.0.3325.146/base/optional.h.ncnm chromium-65.0.3325.146/base/optional.h
+--- chromium-65.0.3325.146/base/optional.h.ncnm 2018-03-13 22:40:11.743226276 -0400
++++ chromium-65.0.3325.146/base/optional.h 2018-03-13 22:44:30.948211358 -0400
+@@ -240,37 +240,37 @@ class OptionalBase {
+ ~OptionalBase() = default;
+
+ OptionalBase& operator=(const OptionalBase& other) {
+- if (!other.storage_.is_populated_) {
+- FreeIfNeeded();
+- return *this;
+- }
+-
+- InitOrAssign(other.storage_.value_);
++ CopyAssign(other);
+ return *this;
+ }
+
+ OptionalBase& operator=(OptionalBase&& other) {
+- if (!other.storage_.is_populated_) {
+- FreeIfNeeded();
+- return *this;
+- }
+-
+- InitOrAssign(std::move(other.storage_.value_));
++ MoveAssign(std::move(other));
+ return *this;
+ }
+
+- void InitOrAssign(const T& value) {
+- if (!storage_.is_populated_)
+- storage_.Init(value);
++ template <typename U>
++ void CopyAssign(const OptionalBase<U>& other) {
++ if (other.storage_.is_populated_)
++ InitOrAssign(other.storage_.value_);
+ else
+- storage_.value_ = value;
++ FreeIfNeeded();
+ }
+
+- void InitOrAssign(T&& value) {
+- if (!storage_.is_populated_)
+- storage_.Init(std::move(value));
++ template <typename U>
++ void MoveAssign(OptionalBase<U>&& other) {
++ if (other.storage_.is_populated_)
++ InitOrAssign(std::move(other.storage_.value_));
++ else
++ FreeIfNeeded();
++ }
++
++ template <typename U>
++ void InitOrAssign(U&& value) {
++ if (storage_.is_populated_)
++ storage_.value_ = std::forward<U>(value);
+ else
+- storage_.value_ = std::move(value);
++ storage_.Init(std::forward<U>(value));
+ }
+
+ void FreeIfNeeded() {
+@@ -340,7 +340,7 @@ struct MoveAssignable<false> {
+ MoveAssignable& operator=(MoveAssignable&&) = delete;
+ };
+
+-// Helper to conditionally enable converting constructors.
++// Helper to conditionally enable converting constructors and assign operators.
+ template <typename T, typename U>
+ struct IsConvertibleFromOptional
+ : std::integral_constant<
+@@ -354,6 +354,16 @@ struct IsConvertibleFromOptional
+ std::is_convertible<Optional<U>&&, T>::value ||
+ std::is_convertible<const Optional<U>&&, T>::value> {};
+
++template <typename T, typename U>
++struct IsAssignableFromOptional
++ : std::integral_constant<
++ bool,
++ IsConvertibleFromOptional<T, U>::value ||
++ std::is_assignable<T&, Optional<U>&>::value ||
++ std::is_assignable<T&, const Optional<U>&>::value ||
++ std::is_assignable<T&, Optional<U>&&>::value ||
++ std::is_assignable<T&, const Optional<U>&&>::value> {};
++
+ // Forward compatibility for C++20.
+ template <typename T>
+ using RemoveCvRefT = std::remove_cv_t<std::remove_reference_t<T>>;
+@@ -487,14 +497,42 @@ class Optional
+ return *this;
+ }
+
+- template <class U>
+- typename std::enable_if<std::is_same<std::decay_t<U>, T>::value,
+- Optional&>::type
++ // Perfect-forwarded assignment.
++ template <typename U>
++ std::enable_if_t<
++ !std::is_same<internal::RemoveCvRefT<U>, Optional<T>>::value &&
++ std::is_constructible<T, U>::value &&
++ std::is_assignable<T&, U>::value &&
++ (!std::is_scalar<T>::value ||
++ !std::is_same<std::decay_t<U>, T>::value),
++ Optional&>
+ operator=(U&& value) {
+ InitOrAssign(std::forward<U>(value));
+ return *this;
+ }
+
++// Copy assign the state of other.
++ template <typename U>
++ std::enable_if_t<!internal::IsAssignableFromOptional<T, U>::value &&
++ std::is_constructible<T, const U&>::value &&
++ std::is_assignable<T&, const U&>::value,
++ Optional&>
++ operator=(const Optional<U>& other) {
++ CopyAssign(other);
++ return *this;
++ }
++
++ // Move assign the state of other.
++ template <typename U>
++ std::enable_if_t<!internal::IsAssignableFromOptional<T, U>::value &&
++ std::is_constructible<T, U>::value &&
++ std::is_assignable<T&, U>::value,
++ Optional&>
++ operator=(Optional<U>&& other) {
++ MoveAssign(std::move(other));
++ return *this;
++ }
++
+ constexpr const T* operator->() const {
+ DCHECK(storage_.is_populated_);
+ return &value();
+@@ -606,8 +644,10 @@ class Optional
+ private:
+ // Accessing template base class's protected member needs explicit
+ // declaration to do so.
++ using internal::OptionalBase<T>::CopyAssign;
+ using internal::OptionalBase<T>::FreeIfNeeded;
+ using internal::OptionalBase<T>::InitOrAssign;
++ using internal::OptionalBase<T>::MoveAssign;
+ using internal::OptionalBase<T>::storage_;
+ };
+
diff --git a/chromium-65.0.3325.146-Use-affirmative-expression-in-base-Optional.patch b/chromium-65.0.3325.146-Use-affirmative-expression-in-base-Optional.patch
new file mode 100644
index 0000000..8aaea85
--- /dev/null
+++ b/chromium-65.0.3325.146-Use-affirmative-expression-in-base-Optional.patch
@@ -0,0 +1,265 @@
+diff -up chromium-65.0.3325.146/base/optional.h.affirmative chromium-65.0.3325.146/base/optional.h
+--- chromium-65.0.3325.146/base/optional.h.affirmative 2018-03-13 22:27:29.451969704 -0400
++++ chromium-65.0.3325.146/base/optional.h 2018-03-13 22:27:57.031436045 -0400
+@@ -41,7 +41,7 @@ struct OptionalStorageBase {
+
+ template <class... Args>
+ constexpr explicit OptionalStorageBase(in_place_t, Args&&... args)
+- : is_null_(false), value_(std::forward<Args>(args)...) {}
++ : is_populated_(true), value_(std::forward<Args>(args)...) {}
+
+ // When T is not trivially destructible we must call its
+ // destructor before deallocating its memory.
+@@ -55,18 +55,18 @@ struct OptionalStorageBase {
+ // necessary for this case at the moment. Please see also the destructor
+ // comment in "is_trivially_destructible = true" specialization below.
+ ~OptionalStorageBase() {
+- if (!is_null_)
++ if (is_populated_)
+ value_.~T();
+ }
+
+ template <class... Args>
+ void Init(Args&&... args) {
+- DCHECK(is_null_);
++ DCHECK(!is_populated_);
+ ::new (&value_) T(std::forward<Args>(args)...);
+- is_null_ = false;
++ is_populated_ = true;
+ }
+
+- bool is_null_ = true;
++ bool is_populated_ = false;
+ union {
+ // |empty_| exists so that the union will always be initialized, even when
+ // it doesn't contain a value. Union members must be initialized for the
+@@ -84,7 +84,7 @@ struct OptionalStorageBase<T, true /* tr
+
+ template <class... Args>
+ constexpr explicit OptionalStorageBase(in_place_t, Args&&... args)
+- : is_null_(false), value_(std::forward<Args>(args)...) {}
++ : is_populated_(true), value_(std::forward<Args>(args)...) {}
+
+ // When T is trivially destructible (i.e. its destructor does nothing) there
+ // is no need to call it. Implicitly defined destructor is trivial, because
+@@ -102,12 +102,12 @@ struct OptionalStorageBase<T, true /* tr
+
+ template <class... Args>
+ void Init(Args&&... args) {
+- DCHECK(is_null_);
++ DCHECK(!is_populated_);
+ ::new (&value_) T(std::forward<Args>(args)...);
+- is_null_ = false;
++ is_populated_ = true;
+ }
+
+- bool is_null_ = true;
++ bool is_populated_ = false;
+ union {
+ // |empty_| exists so that the union will always be initialized, even when
+ // it doesn't contain a value. Union members must be initialized for the
+@@ -133,7 +133,7 @@ struct OptionalStorage : OptionalStorage
+
+ // Accessing the members of template base class requires explicit
+ // declaration.
+- using OptionalStorageBase<T>::is_null_;
++ using OptionalStorageBase<T>::is_populated_;
+ using OptionalStorageBase<T>::value_;
+ using OptionalStorageBase<T>::Init;
+
+@@ -145,12 +145,12 @@ struct OptionalStorage : OptionalStorage
+ OptionalStorage() = default;
+
+ OptionalStorage(const OptionalStorage& other) {
+- if (!other.is_null_)
++ if (other.is_populated_)
+ Init(other.value_);
+ }
+
+ OptionalStorage(OptionalStorage&& other) {
+- if (!other.is_null_)
++ if (other.is_populated_)
+ Init(std::move(other.value_));
+ }
+ };
+@@ -160,7 +160,7 @@ struct OptionalStorage<T,
+ true /* trivially copy constructible */,
+ false /* trivially move constructible */>
+ : OptionalStorageBase<T> {
+- using OptionalStorageBase<T>::is_null_;
++ using OptionalStorageBase<T>::is_populated_;
+ using OptionalStorageBase<T>::value_;
+ using OptionalStorageBase<T>::Init;
+ using OptionalStorageBase<T>::OptionalStorageBase;
+@@ -169,7 +169,7 @@ struct OptionalStorage<T,
+ OptionalStorage(const OptionalStorage& other) = default;
+
+ OptionalStorage(OptionalStorage&& other) {
+- if (!other.is_null_)
++ if (other.is_populated_)
+ Init(std::move(other.value_));
+ }
+ };
+@@ -179,7 +179,7 @@ struct OptionalStorage<T,
+ false /* trivially copy constructible */,
+ true /* trivially move constructible */>
+ : OptionalStorageBase<T> {
+- using OptionalStorageBase<T>::is_null_;
++ using OptionalStorageBase<T>::is_populated_;
+ using OptionalStorageBase<T>::value_;
+ using OptionalStorageBase<T>::Init;
+ using OptionalStorageBase<T>::OptionalStorageBase;
+@@ -188,7 +188,7 @@ struct OptionalStorage<T,
+ OptionalStorage(OptionalStorage&& other) = default;
+
+ OptionalStorage(const OptionalStorage& other) {
+- if (!other.is_null_)
++ if (other.is_populated_)
+ Init(other.value_);
+ }
+ };
+@@ -223,7 +223,7 @@ class OptionalBase {
+ ~OptionalBase() = default;
+
+ OptionalBase& operator=(const OptionalBase& other) {
+- if (other.storage_.is_null_) {
++ if (!other.storage_.is_populated_) {
+ FreeIfNeeded();
+ return *this;
+ }
+@@ -233,7 +233,7 @@ class OptionalBase {
+ }
+
+ OptionalBase& operator=(OptionalBase&& other) {
+- if (other.storage_.is_null_) {
++ if (!other.storage_.is_populated_) {
+ FreeIfNeeded();
+ return *this;
+ }
+@@ -243,24 +243,24 @@ class OptionalBase {
+ }
+
+ void InitOrAssign(const T& value) {
+- if (storage_.is_null_)
++ if (!storage_.is_populated_)
+ storage_.Init(value);
+ else
+ storage_.value_ = value;
+ }
+
+ void InitOrAssign(T&& value) {
+- if (storage_.is_null_)
++ if (!storage_.is_populated_)
+ storage_.Init(std::move(value));
+ else
+ storage_.value_ = std::move(value);
+ }
+
+ void FreeIfNeeded() {
+- if (storage_.is_null_)
++ if (!storage_.is_populated_)
+ return;
+ storage_.value_.~T();
+- storage_.is_null_ = true;
++ storage_.is_populated_ = false;
+ }
+
+ OptionalStorage<T> storage_;
+@@ -334,12 +334,12 @@ class Optional : public internal::Option
+ }
+
+ constexpr const T* operator->() const {
+- DCHECK(!storage_.is_null_);
++ DCHECK(storage_.is_populated_);
+ return &value();
+ }
+
+ constexpr T* operator->() {
+- DCHECK(!storage_.is_null_);
++ DCHECK(storage_.is_populated_);
+ return &value();
+ }
+
+@@ -351,27 +351,27 @@ class Optional : public internal::Option
+
+ constexpr T&& operator*() && { return std::move(value()); }
+
+- constexpr explicit operator bool() const { return !storage_.is_null_; }
++ constexpr explicit operator bool() const { return storage_.is_populated_; }
+
+- constexpr bool has_value() const { return !storage_.is_null_; }
++ constexpr bool has_value() const { return storage_.is_populated_; }
+
+ constexpr T& value() & {
+- DCHECK(!storage_.is_null_);
++ DCHECK(storage_.is_populated_);
+ return storage_.value_;
+ }
+
+ constexpr const T& value() const & {
+- DCHECK(!storage_.is_null_);
++ DCHECK(storage_.is_populated_);
+ return storage_.value_;
+ }
+
+ constexpr T&& value() && {
+- DCHECK(!storage_.is_null_);
++ DCHECK(storage_.is_populated_);
+ return std::move(storage_.value_);
+ }
+
+ constexpr const T&& value() const && {
+- DCHECK(!storage_.is_null_);
++ DCHECK(storage_.is_populated_);
+ return std::move(storage_.value_);
+ }
+
+@@ -382,8 +382,9 @@ class Optional : public internal::Option
+ // "T must be copy constructible");
+ static_assert(std::is_convertible<U, T>::value,
+ "U must be convertible to T");
+- return storage_.is_null_ ? static_cast<T>(std::forward<U>(default_value))
+- : value();
++ return storage_.is_populated_
++ ? value()
++ : static_cast<T>(std::forward<U>(default_value));
+ }
+
+ template <class U>
+@@ -393,26 +394,27 @@ class Optional : public internal::Option
+ // "T must be move constructible");
+ static_assert(std::is_convertible<U, T>::value,
+ "U must be convertible to T");
+- return storage_.is_null_ ? static_cast<T>(std::forward<U>(default_value))
+- : std::move(value());
++ return storage_.is_populated_
++ ? std::move(value())
++ : static_cast<T>(std::forward<U>(default_value));
+ }
+
+ void swap(Optional& other) {
+- if (storage_.is_null_ && other.storage_.is_null_)
++ if (!storage_.is_populated_ && !other.storage_.is_populated_)
+ return;
+
+- if (storage_.is_null_ != other.storage_.is_null_) {
+- if (storage_.is_null_) {
+- storage_.Init(std::move(other.storage_.value_));
+- other.FreeIfNeeded();
+- } else {
++ if (storage_.is_populated_ != other.storage_.is_populated_) {
++ if (storage_.is_populated_) {
+ other.storage_.Init(std::move(storage_.value_));
+ FreeIfNeeded();
++ } else {
++ storage_.Init(std::move(other.storage_.value_));
++ other.FreeIfNeeded();
+ }
+ return;
+ }
+
+- DCHECK(!storage_.is_null_ && !other.storage_.is_null_);
++ DCHECK(storage_.is_populated_ && other.storage_.is_populated_);
+ using std::swap;
+ swap(**this, *other);
+ }
diff --git a/chromium-65.0.3325.146-workaround-gcc7-is_trivially_copy_constructable-failure.patch b/chromium-65.0.3325.146-workaround-gcc7-is_trivially_copy_constructable-failure.patch
new file mode 100644
index 0000000..241dfb5
--- /dev/null
+++ b/chromium-65.0.3325.146-workaround-gcc7-is_trivially_copy_constructable-failure.patch
@@ -0,0 +1,55 @@
+diff -up chromium-65.0.3325.146/base/optional.h.784732 chromium-65.0.3325.146/base/optional.h
+--- chromium-65.0.3325.146/base/optional.h.784732 2018-03-07 13:40:00.103579631 -0500
++++ chromium-65.0.3325.146/base/optional.h 2018-03-07 13:41:08.950323996 -0500
+@@ -9,6 +9,7 @@
+ #include <utility>
+
+ #include "base/logging.h"
++#include "base/template_util.h"
+
+ namespace base {
+
+@@ -106,7 +107,7 @@ struct OptionalStorageBase<T, true /* tr
+ // compiler generated constexpr {copy,move} constructors). Note that
+ // placement-new is prohibited in constexpr.
+ template <typename T,
+- bool = std::is_trivially_copy_constructible<T>::value,
++ bool = is_trivially_copy_constructible<T>::value,
+ bool = std::is_trivially_move_constructible<T>::value>
+ struct OptionalStorage : OptionalStorageBase<T> {
+ // This is no trivially {copy,move} constructible case. Other cases are
+diff -up chromium-65.0.3325.146/base/template_util.h.784732 chromium-65.0.3325.146/base/template_util.h
+--- chromium-65.0.3325.146/base/template_util.h.784732 2018-03-07 13:41:19.479131969 -0500
++++ chromium-65.0.3325.146/base/template_util.h 2018-03-07 13:42:41.308639551 -0500
+@@ -10,6 +10,7 @@
+ #include <iterator>
+ #include <type_traits>
+ #include <utility>
++#include <vector>
+
+ #include "build/build_config.h"
+
+@@ -127,6 +128,23 @@ template <class T>
+ using is_trivially_copyable = std::is_trivially_copyable<T>;
+ #endif
+
++#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ <= 7
++// Workaround for g++7 and earlier family.
++// Due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80654, without this
++// Optional<std::vector<T>> where T is non-copyable causes a compile error.
++// As we know it is not trivially copy constructible, explicitly declare so.
++template <typename T>
++struct is_trivially_copy_constructible
++ : std::is_trivially_copy_constructible<T> {};
++
++template <typename... T>
++struct is_trivially_copy_constructible<std::vector<T...>> : std::false_type {};
++#else
++// Otherwise use std::is_trivially_copy_constructible as is.
++template <typename T>
++using is_trivially_copy_constructible = std::is_trivially_copy_constructible<T>;
++#endif
++
+ } // namespace base
+
+ #undef CR_USE_FALLBACKS_FOR_GCC_WITH_LIBCXX
diff --git a/chromium-65.0.3325.146-wtf-oilpan-Remove-GC-checks-from-WTF-Optional-T.patch b/chromium-65.0.3325.146-wtf-oilpan-Remove-GC-checks-from-WTF-Optional-T.patch
new file mode 100644
index 0000000..8b5ff7f
--- /dev/null
+++ b/chromium-65.0.3325.146-wtf-oilpan-Remove-GC-checks-from-WTF-Optional-T.patch
@@ -0,0 +1,61 @@
+diff -up chromium-65.0.3325.146/third_party/WebKit/Source/platform/heap/TraceTraits.h.oilpan chromium-65.0.3325.146/third_party/WebKit/Source/platform/heap/TraceTraits.h
+--- chromium-65.0.3325.146/third_party/WebKit/Source/platform/heap/TraceTraits.h.oilpan 2018-03-13 16:45:40.613426445 -0400
++++ chromium-65.0.3325.146/third_party/WebKit/Source/platform/heap/TraceTraits.h 2018-03-13 16:45:49.946244905 -0400
+@@ -18,6 +18,7 @@
+ #include "platform/wtf/HashTable.h"
+ #include "platform/wtf/LinkedHashSet.h"
+ #include "platform/wtf/ListHashSet.h"
++#include "platform/wtf/Optional.h"
+ #include "platform/wtf/TypeTraits.h"
+
+ namespace blink {
+@@ -325,6 +326,23 @@ class TraceTrait<std::pair<T, U>> {
+ }
+ };
+
++// While using Optional<T> with garbage-collected types is generally disallowed
++// by the OptionalGarbageCollected check in blink_gc_plugin, garbage-collected
++// containers such as HeapVector are allowed and need to be traced.
++template <typename T>
++class TraceTrait<WTF::Optional<T>> {
++ STATIC_ONLY(TraceTrait);
++
++ public:
++ template <typename VisitorDispatcher>
++ static void Trace(VisitorDispatcher visitor, WTF::Optional<T>* optional) {
++ if (*optional != WTF::nullopt) {
++ TraceIfEnabled<T, WTF::IsTraceable<T>::value>::Trace(visitor,
++ optional->value());
++ }
++ }
++};
++
+ // If eager tracing leads to excessively deep |trace()| call chains (and
+ // the system stack usage that this brings), the marker implementation will
+ // switch to using an explicit mark stack. Recursive and deep object graphs
+diff -up chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h.oilpan chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h
+--- chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h.oilpan 2018-03-13 16:46:01.683015951 -0400
++++ chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h 2018-03-13 16:46:51.632043375 -0400
+@@ -7,20 +7,15 @@
+
+ #include "base/optional.h"
+ #include "platform/wtf/TemplateUtil.h"
+-#include "platform/wtf/TypeTraits.h"
+
+ namespace WTF {
+
+ // WTF::Optional is base::Optional. See base/optional.h for documentation.
+ //
+ // A clang plugin enforces that garbage collected types are not allocated
+-// outside of the heap, similarly we enforce that one doesn't create garbage
+-// collected types nested inside an Optional.
++// outside of the heap. GC containers such as HeapVector are allowed though.
+ template <typename T>
+-using Optional =
+- typename std::enable_if<!IsGarbageCollectedType<T>::value ||
+- IsPersistentReferenceType<T>::value,
+- base::Optional<T>>::type;
++using Optional = base::Optional<T>;
+
+ constexpr base::nullopt_t nullopt = base::nullopt;
+ constexpr base::in_place_t in_place = base::in_place;
diff --git a/chromium-65.0.3325.146-wtf-vector-fix.patch b/chromium-65.0.3325.146-wtf-vector-fix.patch
new file mode 100644
index 0000000..e4bfeba
--- /dev/null
+++ b/chromium-65.0.3325.146-wtf-vector-fix.patch
@@ -0,0 +1,54 @@
+diff -up chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/DEPS.jdp chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/DEPS
+--- chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/DEPS.jdp 2018-03-07 13:54:42.653286576 -0500
++++ chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/DEPS 2018-03-07 13:55:00.973903591 -0500
+@@ -16,6 +16,7 @@ include_rules = [
+ "+base/process/process_metrics.h",
+ "+base/rand_util.h",
+ "+base/strings",
++ "+base/template_util.h",
+ "+base/threading/thread_checker.h",
+ "+base/time/time.h",
+ "+base/tuple.h",
+diff -up chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h.jdp chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h
+--- chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h.jdp 2018-03-07 13:56:29.053062331 -0500
++++ chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h 2018-03-07 13:56:36.595904651 -0500
+@@ -6,6 +6,7 @@
+ #define Optional_h
+
+ #include "base/optional.h"
++#include "platform/wtf/TemplateUtil.h"
+ #include "platform/wtf/TypeTraits.h"
+
+ namespace WTF {
+diff -up chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/TemplateUtil.h.jdp chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/TemplateUtil.h
+--- chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/TemplateUtil.h.jdp 2018-03-07 13:56:47.356679702 -0500
++++ chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/TemplateUtil.h 2018-03-07 13:57:41.769542223 -0500
+@@ -0,0 +1,28 @@
++// Copyright 2018 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef TemplateUtil_h
++#define TemplateUtil_h
++
++#include "base/template_util.h"
++#include "platform/wtf/Vector.h"
++
++namespace base {
++
++#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ <= 7
++// Workaround for g++7 and earlier family.
++// Due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80654, without this
++// Optional<WTF::Vector<T>> where T is non-copyable causes a compile error.
++// As we know it is not trivially copy constructible, explicitly declare so.
++//
++// It completes the declaration in base/template_util.h that was provided
++// for std::vector
++template <typename T>
++struct is_trivially_copy_constructible<WTF::Vector<T>> : std::false_type {};
++#endif
++
++} // namespace base
++
++#endif // TemplateUtil_h
++
diff --git a/chromium.spec b/chromium.spec
index 5fe1f18..e0cce6e 100644
--- a/chromium.spec
+++ b/chromium.spec
@@ -26,7 +26,7 @@
# Requires is trickier.
%global __provides_exclude_from %{chromium_path}/.*\\.so|%{chromium_path}/lib/.*\\.so
-%global privlibs libaccessibility|libanimation|libaura_extra|libaura|libbase_i18n|libbase|libbindings|libblink_android_mojo_bindings_shared|libblink_common|libblink_controller|libblink_core_mojo_bindings_shared|libblink_core|libblink_modules|libblink_mojo_bindings_shared|libblink_offscreen_canvas_mojo_bindings_shared|libblink_platform|libbluetooth|libboringssl|libbrowser_ui_views|libcaptive_portal|libcapture_base|libcapture_lib|libcc_animation|libcc_base|libcc_blink|libcc_debug|libcc_ipc|libcc_paint|libcc|libcdm_manager|libchromium_sqlite3|libclearkeycdm|libclient|libcloud_policy_proto_generated_compile|libcodec|libcolor_space|libcommon|libcompositor|libcontent_common_mojo_bindings_shared|libcontent_public_common_mojo_bindings_shared|libcontent|libcpp|libcrcrypto|libdbus|libdevice_base|libdevice_event_log|libdevice_gamepad|libdevices|libdevice_vr_mojo_bindings_blink|libdevice_vr_mojo_bindings_shared|libdevice_vr_mojo_bindings|libdiscardable_memory_client|libdiscardable_memory_common
|libdiscardable_memory_service|libdisplay|libdisplay_types|libdisplay_util|libdomain_reliability|libEGL|libembedder|libembedder_switches|libevents_base|libevents_devices_x11|libevents_ozone_layout|libevents|libevents_x|libffmpeg|libfingerprint|libfreetype_harfbuzz|libgcm|libgeolocation|libgeometry_skia|libgeometry|libgesture_detection|libgfx_ipc_color|libgfx_ipc_geometry|libgfx_ipc_skia|libgfx_ipc|libgfx|libgfx_switches|libgfx_x11|libgin|libgles2_c_lib|libgles2_implementation|libgles2_utils|libGLESv2|libgl_init|libgl_in_process_context|libgl_wrapper|libgpu|libgpu_util|libgtk3ui|libheadless|libhost|libicui18n|libicuuc|libipc_mojom_shared|libipc_mojom|libipc|libjs|libkeyboard|libkeyboard_with_content|libkeycodes_x11|libkeyed_service_content|libkeyed_service_core|libleveldatabase|libmanager|libmedia_blink|libmedia_devices_mojo_bindings_shared|libmedia_gpu|libmedia_mojo_services|libmedia|libmessage_center|libmessage_support|libmetrics_cpp|libmidi|libmojo_bindings_shared|libmojo_common_l
ib|libmojo_ime_lib|libmojo_platform_bindings_shared|libmojo_public_system_cpp|libmojo_public_system|libmojo_system_impl|libnative_theme|libnet|libnet_with_v8|libonc|libplatform|libpolicy_component|libpolicy_proto|libppapi_host|libppapi_proxy|libppapi_shared|libprefs|libprinting|libprotobuf_lite|libproxy_config|librange|libresource_coordinator_cpp|libresource_coordinator_public_interfaces_internal_shared|libsandbox_services|libsandbox|libseccomp_bpf|libsensors|libservice_manager_cpp|libservice_manager_cpp_types|libservice_manager_mojom_blink|libservice_manager_mojom_constants_blink|libservice_manager_mojom_constants_shared|libservice_manager_mojom_constants|libservice_manager_mojom_shared|libservice_manager_mojom|libservice|libsessions|libshared_memory_support|libshell_dialogs|libskia|libsnapshot|libsql|libstartup_tracing|libstorage_browser|libstorage_common|libstub_window|libsuid_sandbox_client|libsurface|libtracing|libui_base_ime|libui_base|libui_base_x|libui_data_pack|libui_devtoo
ls|libui_touch_selection|libui_views_mus_lib|liburl_ipc|liburl_matcher|liburl|libuser_manager|libuser_prefs|libv8_libbase|libv8_libplatform|libv8|libviews|libviz_common|libviz_resource_format|libVkLayer_core_validation|libVkLayer_object_tracker|libVkLayer_parameter_validation|libVkLayer_swapchain|libVkLayer_threading|libVkLayer_unique_objects|libwebdata_common|libweb_dialogs|libwebview|libwidevinecdmadapter|libwidevinecdm|libwm_public|libwm|libwtf|libx11_events_platform|libx11_window
+%global privlibs libaccessibility|libanimation|libaura_extra|libaura|libbase_i18n|libbase|libbindings|libblink_android_mojo_bindings_shared|libblink_common|libblink_controller|libblink_core_mojo_bindings_shared|libblink_core|libblink_modules|libblink_mojo_bindings_shared|libblink_offscreen_canvas_mojo_bindings_shared|libblink_platform|libbluetooth|libboringssl|libbrowser_ui_views|libcaptive_portal|libcapture_base|libcapture_lib|libcbor|libcc_animation|libcc_base|libcc_blink|libcc_debug|libcc_ipc|libcc_paint|libcc|libcdm_manager|libchromium_sqlite3|libclearkeycdm|libclient|libcloud_policy_proto_generated_compile|libcodec|libcolor_space|libcommon|libcompositor|libcontent_common_mojo_bindings_shared|libcontent_public_common_mojo_bindings_shared|libcontent|libcpp|libcrash_key|libcrcrypto|libdbus|libdevice_base|libdevice_event_log|libdevice_features|libdevice_gamepad|libdevices|libdevice_vr_mojo_bindings_blink|libdevice_vr_mojo_bindings_shared|libdevice_vr_mojo_bindings|libdevice_vr|libd
iscardable_memory_client|libdiscardable_memory_common|libdiscardable_memory_service|libdisplay|libdisplay_types|libdisplay_util|libdomain_reliability|libEGL|libembedder|libembedder_switches|libevents_base|libevents_devices_x11|libevents_ozone_layout|libevents|libevents_x|libffmpeg|libfingerprint|libfontconfig|libfreetype_harfbuzz|libgcm|libgeolocation|libgeometry_skia|libgeometry|libgesture_detection|libgfx_ipc_buffer_types|libgfx_ipc_color|libgfx_ipc_geometry|libgfx_ipc_skia|libgfx_ipc|libgfx|libgfx_switches|libgfx_x11|libgin|libgles2_c_lib|libgles2_implementation|libgles2|libgles2_utils|libGLESv2|libgl_init|libgl_in_process_context|libgl_wrapper|libgpu_ipc_service|libgpu|libgpu_util|libgtk3ui|libheadless|libhost|libicui18n|libicuuc|libipc_mojom_shared|libipc_mojom|libipc|libkeyboard|libkeyboard_with_content|libkeycodes_x11|libkeyed_service_content|libkeyed_service_core|libleveldatabase|libmanager|libmedia_blink|libmedia_devices_mojo_bindings_shared|libmedia_gpu|libmedia_mojo_servi
ces|libmedia|libmessage_center|libmessage_support|libmetrics_cpp|libmidi|libmojo_base_lib|libmojo_base_mojom_blink|libmojo_base_mojom_shared|libmojo_base_mojom|libmojo_base_shared_typemap_traits|libmojo_bindings_shared|libmojo_common_lib|libmojo_ime_lib|libmojo_platform_bindings_shared|libmojo_public_system_cpp|libmojo_public_system|libmojo_system_impl|libnative_theme|libnet|libnet_with_v8|libnetwork_session_configurator|libonc|libplatform|libpolicy_component|libpolicy_proto|libppapi_host|libppapi_proxy|libppapi_shared|libprefs|libprinting|libprotobuf_lite|libproxy_config|librange|libresource_coordinator_cpp_base|libresource_coordinator_cpp|libresource_coordinator_public_interfaces_blink|libresource_coordinator_public_interfaces_shared|libresource_coordinator_public_interfaces|libsandbox_services|libsandbox|libseccomp_bpf|libsensors|libservice_manager_cpp|libservice_manager_cpp_types|libservice_manager_mojom_blink|libservice_manager_mojom_constants_blink|libservice_manager_mojom_con
stants_shared|libservice_manager_mojom_constants|libservice_manager_mojom_shared|libservice_manager_mojom|libservice|libsessions|libshared_memory_support|libshell_dialogs|libskia|libsnapshot|libsql|libstartup_tracing|libstorage_browser|libstorage_common|libstub_window|libsuid_sandbox_client|libsurface|libtracing|libui_base_ime|libui_base|libui_base_x|libui_data_pack|libui_devtools|libui_touch_selection|libui_views_mus_lib|liburl_ipc|liburl_matcher|liburl|libuser_manager|libuser_prefs|libv8_libbase|libv8_libplatform|libv8|libviews|libviz_common|libviz_resource_format|libVkLayer_core_validation|libVkLayer_object_tracker|libVkLayer_parameter_validation|libVkLayer_threading|libVkLayer_unique_objects|libwebdata_common|libweb_dialogs|libwebview|libwidevinecdmadapter|libwidevinecdm|libwm_public|libwm|libwtf|libx11_events_platform|libx11_window
%global __requires_exclude ^(%{privlibs})\\.so
# If we build with shared on, then chrome-remote-desktop depends on chromium libs.
@@ -116,7 +116,7 @@ Name: chromium%{chromium_channel}%{?freeworld:-freeworld}
%else
Name: chromium%{chromium_channel}
%endif
-Version: %{majorversion}.0.3325.146
+Version: %{majorversion}.0.3325.162
Release: 1%{?dist}
Summary: A WebKit (Blink) powered web browser
Url: http://www.chromium.org/Home
@@ -206,6 +206,36 @@ Patch68: chromium-64.0.3282.167-gcc8-fabi11.patch
# From Gentoo
Patch69: chromium-math.h-r0.patch
Patch70: chromium-stdint.patch
+# Workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80654
+# crbug.com/784732#27
+# https://chromium-review.googlesource.com/c/chromium/src/+/927942
+Patch71: chromium-65.0.3325.146-workaround-gcc7-is_trivially_copy_constructable-failure.patch
+# And https://bugs.chromium.org/p/chromium/issues/detail?id=816952
+Patch72: chromium-65.0.3325.146-wtf-vector-fix.patch
+# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be...
+Patch73: chromium-65.0.3325.146-GCC-build-fix-base-Optional-T-requires-the-full-decl.patch
+# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be...
+Patch74: chromium-65.0.3325.146-wtf-oilpan-Remove-GC-checks-from-WTF-Optional-T.patch
+# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be...
+Patch75: chromium-65.0.3325.146-Fix-non-copyable-class-s-optional-move.patch
+# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be...
+Patch76: chromium-65.0.3325.146-Use-affirmative-expression-in-base-Optional.patch
+# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be...
+Patch77: chromium-65.0.3325.146-Implement-conditional-copy-move-ctors-assign-operato.patch
+# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be...
+Patch78: chromium-65.0.3325.146-Implement-converting-constructors-from-Optional-U.patch
+# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be...
+Patch79: chromium-65.0.3325.146-Implement-value-forward-constructor.patch
+# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be...
+Patch80: chromium-65.0.3325.146-Update-non-copy-non-move-assign-operators.patch
+# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be...
+Patch81: chromium-65.0.3325.146-GCC-PlaybackImageProvider-Settings-do-not-provide-co.patch
+# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be...
+Patch82: chromium-65.0.3325.146-GCC-explicitely-std-move-to-base-Optional-instead-of.patch
+# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be...
+Patch83: chromium-65.0.3325.146-GCC-IDB-methods-String-renamed-to-GetString.patch
+# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be...
+Patch84: chromium-65.0.3325.146-GCC-fully-declare-ConfigurationPolicyProvider.patch
# Use chromium-latest.py to generate clean tarball from released build tarballs, found here:
# http://build.chromium.org/buildbot/official/
@@ -642,6 +672,20 @@ udev.
%patch68 -p1 -b .fabi11
%patch69 -p1 -b .gentoo-math
%patch70 -p1 -b .gentoo-stdint
+%patch71 -p1 -b .gcc7-itcc
+%patch72 -p1 -b .wtf-fix
+%patch73 -p1 -b .fulldecl
+%patch74 -p1 -b .oilpan
+%patch75 -p1 -b .noncopyable
+%patch76 -p1 -b .affirmative
+%patch77 -p1 -b .conditional
+%patch78 -p1 -b .converting
+%patch79 -p1 -b .vforward
+%patch80 -p1 -b .ncnm
+%patch81 -p1 -b .pipcc
+%patch82 -p1 -b .explicit-std-move
+%patch83 -p1 -b .GetString
+%patch84 -p1 -b .fully-declare
%if 0%{?asan}
export CC="clang"
@@ -1075,7 +1119,7 @@ sed -i.orig -e 's/getenv("CHROME_VERSION_EXTRA")/"Fedora Project"/' $FILE
# Do headless first.
../depot_tools/ninja -C %{headlesstarget} -vvv headless_shell
-../depot_tools/ninja -C %{target} -vvv chrome chrome_sandbox chromedriver widevinecdmadapter clearkeycdm policy_templates
+../depot_tools/ninja -C %{target} -vvv chrome chrome_sandbox chromedriver widevinecdmadapter clear_key_cdm policy_templates
# remote client
pushd remoting
@@ -1505,6 +1549,9 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt
%changelog
+* Wed Mar 14 2018 Tom Callaway <spot(a)fedoraproject.org> 65.0.3325.162-1
+- update to 65.0.3325.162
+
* Wed Mar 7 2018 Tom Callaway <spot(a)fedoraproject.org> 65.0.3325.146-1
- update to 65.0.3325.146
diff --git a/clean_ffmpeg.sh b/clean_ffmpeg.sh
index f5c85a5..7c63d50 100755
--- a/clean_ffmpeg.sh
+++ b/clean_ffmpeg.sh
@@ -87,6 +87,7 @@ header_files=" libavcodec/x86/inline_asm.h \
libavcodec/h264chroma.h \
libavcodec/hpeldsp.h \
libavcodec/hwaccel.h \
+ libavcodec/hwaccels.h \
libavcodec/idctdsp.h \
libavcodec/internal.h \
libavcodec/kbdwin.h \
@@ -109,6 +110,8 @@ header_files=" libavcodec/x86/inline_asm.h \
libavcodec/mpegvideodsp.h \
libavcodec/mpegvideoencdsp.h \
libavcodec/options_table.h \
+ libavcodec/opus_celt.h \
+ libavcodec/opus_pvq.h \
libavcodec/opus_rc.h \
libavcodec/pcm_tablegen.h \
libavcodec/pixblockdsp.h \
diff --git a/sources b/sources
index 8b00246..e3860a3 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,3 @@
SHA512 (depot_tools.git-master.tar.gz) = d3d6a1873b2b0296a8cd99e0d8d2e629a17b1808934b4972556168f8b4ccea60577ebaeab4445baf15afb1b04080808db59a832a5b61d247bd48da14fa6acf03
SHA512 (chromium-65.0.3325.146-clean.tar.xz) = 18a45e41eb706fa87a707c89ee419b6a408132d763318c06cffca9e453f09a0e52a76089002ec1c25224d77a54eecc17013a6087dd4acdbd15df073fd7eff937
+SHA512 (chromium-65.0.3325.162-clean.tar.xz) = 6f8d2267ca27027a87515e0dfc4aafeb89b2344b994b48c0b7302dd56868e47df46f270c403f7311a2bbacaf5e1eb8b96b31141e9a99080e12321a0d38a618f5
6 years, 7 months