Gentoo Archives: gentoo-commits

From: Mike Gilbert <floppym@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: www-client/chromium/files/, www-client/chromium/
Date: Mon, 23 Dec 2019 16:22:25
Message-Id: 1577118116.8ba7a983c4c70ff8d4afe770efeebe60160baafd.floppym@gentoo
1 commit: 8ba7a983c4c70ff8d4afe770efeebe60160baafd
2 Author: Stephan Hartmann <stha09 <AT> googlemail <DOT> com>
3 AuthorDate: Mon Dec 23 15:07:03 2019 +0000
4 Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
5 CommitDate: Mon Dec 23 16:21:56 2019 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8ba7a983
7
8 www-client/chromium: beta channel bump to 80.0.3987.16
9
10 Package-Manager: Portage-2.3.76, Repoman-2.3.16
11 Signed-off-by: Stephan Hartmann <stha09 <AT> googlemail.com>
12 Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>
13
14 www-client/chromium/Manifest | 2 +-
15 ....3970.5.ebuild => chromium-80.0.3987.16.ebuild} | 11 +-
16 .../chromium/files/chromium-80-gcc-abstract.patch | 41 ++++
17 .../chromium/files/chromium-80-gcc-blink.patch | 18 ++
18 .../files/chromium-80-gcc-incomplete-type.patch | 229 +++++++++++++++++++++
19 .../chromium/files/chromium-80-gcc-noexcept.patch | 48 -----
20 .../files/chromium-80-gcc-permissive.patch | 33 +++
21 .../chromium/files/chromium-80-include.patch | 44 ++--
22 8 files changed, 360 insertions(+), 66 deletions(-)
23
24 diff --git a/www-client/chromium/Manifest b/www-client/chromium/Manifest
25 index 5fed89d9e5e..aae1648d6c6 100644
26 --- a/www-client/chromium/Manifest
27 +++ b/www-client/chromium/Manifest
28 @@ -1,2 +1,2 @@
29 DIST chromium-79.0.3945.88.tar.xz 778181840 BLAKE2B cf9eb0823f184f1590fc75df89bca907440f42244a519a5fd48bec9a25e16dd887c44b699acadc8a717f000c159bff843d5d0b007ca0e8d2c7eee09bb669e0ff SHA512 6474da7225beb9c99c01dc234b820924dd2fb3d736f53abbac02556f3bec43acd09aa02224666c4a735417500d10f57265ab130c29cce27124e5a69463cf5e0d
30 -DIST chromium-80.0.3970.5.tar.xz 789810132 BLAKE2B 400fcefeb58cb784412eca7011267c9224786036494337ecb8dbc7f3f483ec05d6e26c424ef55286cbebdbc872e1c15acfb62413264bb8843334a11bbe73ab4d SHA512 398666d81beaeef3eeb3f00a9a512b2d4c4e74bd9f01f20fab06901eadcb6fdbd345c39c54f2af57c4e485f2cd35700cde6f6a3d6301df7ee920bf067bee31d6
31 +DIST chromium-80.0.3987.16.tar.xz 798746524 BLAKE2B 6b57e41d7859c179b513b9bc81dff2227e0cd3420349591286f27bdbb7fb21b489137c83949d32827c874d5aaccedea5b82fabc9a5325354c7f6519ba1606074 SHA512 6d6108cabead5e67fa2fc01894a26b07c16d1061e78c52180ee20b612b2943aa40f5743d75b6048f5aa90ffb2c94a6125ef9d0f4d3cd11abe4c94a6759d48869
32
33 diff --git a/www-client/chromium/chromium-80.0.3970.5.ebuild b/www-client/chromium/chromium-80.0.3987.16.ebuild
34 similarity index 98%
35 rename from www-client/chromium/chromium-80.0.3970.5.ebuild
36 rename to www-client/chromium/chromium-80.0.3987.16.ebuild
37 index c6af893cb11..34a27c4e758 100644
38 --- a/www-client/chromium/chromium-80.0.3970.5.ebuild
39 +++ b/www-client/chromium/chromium-80.0.3987.16.ebuild
40 @@ -33,7 +33,7 @@ COMMON_DEPEND="
41 dev-libs/libxslt:=
42 dev-libs/nspr:=
43 >=dev-libs/nss-3.26:=
44 - >=dev-libs/re2-0.2016.11.01:=
45 + >=dev-libs/re2-0.2019.08.01:=
46 gnome-keyring? ( >=gnome-base/libgnome-keyring-3.12:= )
47 >=media-libs/alsa-lib-1.0.19:=
48 media-libs/fontconfig:=
49 @@ -51,7 +51,7 @@ COMMON_DEPEND="
50 >=net-fs/samba-4.5.10-r1[-debug(-)]
51 )
52 !=net-fs/samba-4.5.12-r0
53 - media-libs/opus:=
54 + >=media-libs/opus-1.3.1:=
55 )
56 sys-apps/dbus:=
57 sys-apps/pciutils:=
58 @@ -148,9 +148,11 @@ PATCHES=(
59 "${FILESDIR}/chromium-79-gcc-alignas.patch"
60 "${FILESDIR}/chromium-80-unbundle-libxml.patch"
61 "${FILESDIR}/chromium-80-include.patch"
62 - "${FILESDIR}/chromium-80-gcc-noexcept.patch"
63 "${FILESDIR}/chromium-80-gcc-quiche.patch"
64 + "${FILESDIR}/chromium-80-gcc-permissive.patch"
65 "${FILESDIR}/chromium-80-gcc-blink.patch"
66 + "${FILESDIR}/chromium-80-gcc-abstract.patch"
67 + "${FILESDIR}/chromium-80-gcc-incomplete-type.patch"
68 )
69
70 pre_build_checks() {
71 @@ -275,8 +277,8 @@ src_prepare() {
72 third_party/dom_distiller_js
73 third_party/emoji-segmenter
74 third_party/flatbuffers
75 - third_party/flot
76 third_party/freetype
77 + third_party/libgifcodec
78 third_party/glslang
79 third_party/google_input_tools
80 third_party/google_input_tools/third_party/closure_library
81 @@ -344,7 +346,6 @@ src_prepare() {
82 third_party/skia
83 third_party/skia/include/third_party/skcms
84 third_party/skia/include/third_party/vulkan
85 - third_party/skia/third_party/gif
86 third_party/skia/third_party/skcms
87 third_party/skia/third_party/vulkan
88 third_party/smhasher
89
90 diff --git a/www-client/chromium/files/chromium-80-gcc-abstract.patch b/www-client/chromium/files/chromium-80-gcc-abstract.patch
91 new file mode 100644
92 index 00000000000..190a67258e1
93 --- /dev/null
94 +++ b/www-client/chromium/files/chromium-80-gcc-abstract.patch
95 @@ -0,0 +1,41 @@
96 +In file included from ../../third_party/blink/renderer/platform/heap/persistent.h:18,
97 + from ../../third_party/blink/public/platform/web_private_ptr.h:40,
98 + from ../../third_party/blink/public/platform/web_media_stream_track.h:33,
99 + from ../../third_party/blink/public/platform/web_media_stream_source.h:37,
100 + from ../../third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h:19,
101 + from ../../third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc:5:
102 +../../third_party/blink/renderer/platform/wtf/cross_thread_copier.h: In instantiation of 'struct WTF::CrossThreadCopierPassThrough<webrtc::VideoTrackInterface>':
103 +../../third_party/blink/renderer/modules/peerconnection/adapters/web_rtc_cross_thread_copier.h:169:14: required from here
104 +../../third_party/blink/renderer/platform/wtf/cross_thread_copier.h:80:15: error: invalid abstract return type 'webrtc::VideoTrackInterface'
105 + 80 | static Type Copy(const T& parameter) { return parameter; }
106 + | ^~~~
107 +In file included from ../../third_party/webrtc/api/peer_connection_interface.h:88,
108 + from ../../third_party/blink/public/platform/web_rtc_peer_connection_handler.h:39,
109 + from ../../third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h:20,
110 + from ../../third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc:5:
111 +../../third_party/webrtc/api/media_stream_interface.h:174:18: note: because the following virtual functions are pure within 'webrtc::VideoTrackInterface':
112 + 174 | class RTC_EXPORT VideoTrackInterface
113 + | ^~~~~~~~~~~~~~~~~~~
114 +../../third_party/webrtc/api/media_stream_interface.h:48:16: note: 'virtual void webrtc::NotifierInterface::RegisterObserver(webrtc::ObserverInterface*)'
115 + 48 | virtual void RegisterObserver(ObserverInterface* observer) = 0;
116 + | ^~~~~~~~~~~~~~~~
117 +../../third_party/webrtc/api/media_stream_interface.h:49:16: note: 'virtual void webrtc::NotifierInterface::UnregisterObserver(webrtc::ObserverInterface*)'
118 + 49 | virtual void UnregisterObserver(ObserverInterface* observer) = 0;
119 + | ^~~~~~~~~~~~~~~~~~
120 +
121 +diff --git a/third_party/blink/renderer/modules/peerconnection/adapters/web_rtc_cross_thread_copier.h b/third_party/blink/renderer/modules/peerconnection/adapters/web_rtc_cross_thread_copier.h
122 +index 54cb7d1..0d6c40f 100644
123 +--- a/third_party/blink/renderer/modules/peerconnection/adapters/web_rtc_cross_thread_copier.h
124 ++++ b/third_party/blink/renderer/modules/peerconnection/adapters/web_rtc_cross_thread_copier.h
125 +@@ -165,8 +165,9 @@ struct CrossThreadCopier<blink::MediaStreamVideoTrack>
126 + };
127 +
128 + template <>
129 +-struct CrossThreadCopier<webrtc::VideoTrackInterface>
130 +- : public CrossThreadCopierPassThrough<webrtc::VideoTrackInterface> {
131 ++struct CrossThreadCopier<rtc::scoped_refptr<webrtc::VideoTrackInterface>>
132 ++ : public CrossThreadCopierPassThrough<
133 ++ rtc::scoped_refptr<webrtc::VideoTrackInterface>> {
134 + STATIC_ONLY(CrossThreadCopier);
135 + };
136 +
137
138 diff --git a/www-client/chromium/files/chromium-80-gcc-blink.patch b/www-client/chromium/files/chromium-80-gcc-blink.patch
139 index fdc28f32435..2118b46f39a 100644
140 --- a/www-client/chromium/files/chromium-80-gcc-blink.patch
141 +++ b/www-client/chromium/files/chromium-80-gcc-blink.patch
142 @@ -1,3 +1,21 @@
143 +../../third_party/blink/renderer/core/editing/commands/delete_selection_command.cc: In member function 'void blink::DeleteSelectionCommand::InitializePositionData(blink::EditingState*)':
144 +../../third_party/blink/renderer/core/editing/commands/delete_selection_command.cc:256:59: error: no matching function for call to 'EnclosingNodeOfType(blink::Position&, <unresolved overloaded function type>)'
145 + 256 | EnclosingNodeOfType(start, &IsA<HTMLTableRowElement>));
146 + | ^
147 +In file included from ../../third_party/blink/renderer/core/editing/commands/delete_selection_command.cc:34:
148 +../../third_party/blink/renderer/core/editing/editing_utilities.h:112:19: note: candidate: 'blink::Node* blink::EnclosingNodeOfType(const Position&, bool (*)(const blink::Node*), blink::EditingBoundaryCrossingRule)'
149 + 112 | CORE_EXPORT Node* EnclosingNodeOfType(
150 + | ^~~~~~~~~~~~~~~~~~~
151 +../../third_party/blink/renderer/core/editing/editing_utilities.h:114:12: note: no known conversion for argument 2 from '<unresolved overloaded function type>' to 'bool (*)(const blink::Node*)'
152 + 114 | bool (*node_is_of_type)(const Node*),
153 + | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
154 +../../third_party/blink/renderer/core/editing/editing_utilities.h:116:19: note: candidate: 'blink::Node* blink::EnclosingNodeOfType(const PositionInFlatTree&, bool (*)(const blink::Node*), blink::EditingBoundaryCrossingRule)'
155 + 116 | CORE_EXPORT Node* EnclosingNodeOfType(
156 + | ^~~~~~~~~~~~~~~~~~~
157 +../../third_party/blink/renderer/core/editing/editing_utilities.h:117:5: note: no known conversion for argument 1 from 'blink::Position' {aka 'blink::PositionTemplate<blink::EditingAlgorithm<blink::NodeTraversal> >'} to 'const PositionInFlatTree&' {aka 'const blink::PositionTemplate<blink::EditingAlgorithm<blink::FlatTreeTraversal> >&'}
158 + 117 | const PositionInFlatTree&,
159 + | ^~~~~~~~~~~~~~~~~~~~~~~~~
160 +
161 diff --git a/third_party/blink/renderer/core/editing/commands/delete_selection_command.cc b/third_party/blink/renderer/core/editing/commands/delete_selection_command.cc
162 index 6ff6906..dd531ae 100644
163 --- a/third_party/blink/renderer/core/editing/commands/delete_selection_command.cc
164
165 diff --git a/www-client/chromium/files/chromium-80-gcc-incomplete-type.patch b/www-client/chromium/files/chromium-80-gcc-incomplete-type.patch
166 new file mode 100644
167 index 00000000000..8d10620a717
168 --- /dev/null
169 +++ b/www-client/chromium/files/chromium-80-gcc-incomplete-type.patch
170 @@ -0,0 +1,229 @@
171 +From cdf3e81ff49b200213d67d65558f2919222b60ab Mon Sep 17 00:00:00 2001
172 +From: Raphael Kubo da Costa <raphael.kubo.da.costa@×××××.com>
173 +Date: Mon, 16 Dec 2019 11:39:11 +0000
174 +Subject: [PATCH] BookmarkModelMerger: Move RemoteTreeNode declaration to header.
175 +
176 +This fixes the build with libstdc++ after commit 8f5dad93e58 ("Fix CHECK
177 +failure due to untracked local nodes"):
178 +
179 +/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/stl_pair.h:215:11: error: field has incomplete type 'sync_bookmarks::BookmarkModelMerger::RemoteTreeNode'
180 + _T2 second; /// @c second is a copy of the second object
181 + ^
182 +/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/ext/aligned_buffer.h:91:28: note: in instantiation of template class 'std::pair<const std::__cxx11::basic_string<char>, sync_bookmarks::BookmarkModelMerger::RemoteTreeNode>' requested here
183 + : std::aligned_storage<sizeof(_Tp), __alignof__(_Tp)>
184 + ^
185 +/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/hashtable_policy.h:233:43: note: in instantiation of template class '__gnu_cxx::__aligned_buffer<std::pair<const std::__cxx11::basic_string<char>, sync_bookmarks::BookmarkModelMerger::RemoteTreeNode> >' requested here
186 + __gnu_cxx::__aligned_buffer<_Value> _M_storage;
187 + ^
188 +/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/hashtable_policy.h:264:39: note: in instantiation of template class 'std::__detail::_Hash_node_value_base<std::pair<const std::__cxx11::basic_string<char>, sync_bookmarks::BookmarkModelMerger::RemoteTreeNode> >' requested here
189 + struct _Hash_node<_Value, true> : _Hash_node_value_base<_Value>
190 + ^
191 +/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/hashtable_policy.h:2028:25: note: in instantiation of template class 'std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, sync_bookmarks::BookmarkModelMerger::RemoteTreeNode>, true>' requested here
192 + rebind_traits<typename __node_type::value_type>;
193 + ^
194 +/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/hashtable.h:184:15: note: in instantiation of template class 'std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, sync_bookmarks::BookmarkModelMerger::RemoteTreeNode>, true> > >
195 +' requested here
196 + private __detail::_Hashtable_alloc<
197 + ^
198 +/usr/lib/gcc/x86_64-redhat-linux/9/../../../../include/c++/9/bits/unordered_map.h:105:18: note: in instantiation of template class 'std::_Hashtable<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, sync_bookmarks::BookmarkModelMerger::RemoteTreeNode>, std::allocator<std::pair<con
199 +st std::__cxx11::basic_string<char>, sync_bookmarks::BookmarkModelMerger::RemoteTreeNode> >, std::__detail::_Select1st, std::equal_to<std::__cxx11::basic_string<char> >, std::hash<std::string>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__deta
200 +il::_Hashtable_traits<true, false, true> >' requested here
201 + _Hashtable _M_h;
202 + ^
203 +../../components/sync_bookmarks/bookmark_model_merger.h:146:22: note: in instantiation of template class 'std::unordered_map<std::__cxx11::basic_string<char>, sync_bookmarks::BookmarkModelMerger::RemoteTreeNode, std::hash<std::string>, std::equal_to<std::__cxx11::basic_string<char> >, std::allocator<std::pair<con
204 +st std::__cxx11::basic_string<char>, sync_bookmarks::BookmarkModelMerger::RemoteTreeNode> > >' requested here
205 + const RemoteForest remote_forest_;
206 + ^
207 +../../components/sync_bookmarks/bookmark_model_merger.h:53:9: note: forward declaration of 'sync_bookmarks::BookmarkModelMerger::RemoteTreeNode'
208 + class RemoteTreeNode;
209 + ^
210 +
211 +Essentially, the problem is that libstdc++'s std::unordered_map<T, U>
212 +implementation requires both T and U to be fully declared. I raised the
213 +problem in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92770, and GCC's
214 +position is that we are relying on undefined behavior according to the C++
215 +standard (https://eel.is/c++draft/requirements#res.on.functions-2.5).
216 +
217 +Bug: 957519
218 +Change-Id: Ife7e435e516932a795bfbe05b2c910c3272878f0
219 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1960156
220 +Commit-Queue: Raphael Kubo da Costa <raphael.kubo.da.costa@×××××.com>
221 +Reviewed-by: Mikel Astiz <mastiz@××××××××.org>
222 +Auto-Submit: Raphael Kubo da Costa <raphael.kubo.da.costa@×××××.com>
223 +Cr-Commit-Position: refs/heads/master@{#725070}
224 +---
225 +
226 +diff --git a/components/sync_bookmarks/bookmark_model_merger.cc b/components/sync_bookmarks/bookmark_model_merger.cc
227 +index eae153ef..579848e 100644
228 +--- a/components/sync_bookmarks/bookmark_model_merger.cc
229 ++++ b/components/sync_bookmarks/bookmark_model_merger.cc
230 +@@ -5,7 +5,6 @@
231 + #include "components/sync_bookmarks/bookmark_model_merger.h"
232 +
233 + #include <algorithm>
234 +-#include <memory>
235 + #include <set>
236 + #include <string>
237 + #include <utility>
238 +@@ -205,66 +204,44 @@
239 +
240 + } // namespace
241 +
242 +-class BookmarkModelMerger::RemoteTreeNode final {
243 +- public:
244 +- // Constructs a tree given |update| as root and recursively all descendants by
245 +- // traversing |*updates_per_parent_id|. |update| and |updates_per_parent_id|
246 +- // must not be null. All updates |*updates_per_parent_id| must represent valid
247 +- // updates. Updates corresponding from descendant nodes are moved away from
248 +- // |*updates_per_parent_id|.
249 +- static RemoteTreeNode BuildTree(
250 +- std::unique_ptr<syncer::UpdateResponseData> update,
251 +- UpdatesPerParentId* updates_per_parent_id);
252 ++BookmarkModelMerger::RemoteTreeNode::RemoteTreeNode() = default;
253 +
254 +- ~RemoteTreeNode() = default;
255 ++BookmarkModelMerger::RemoteTreeNode::~RemoteTreeNode() = default;
256 +
257 +- // Allow moves, useful during construction.
258 +- RemoteTreeNode(RemoteTreeNode&&) = default;
259 +- RemoteTreeNode& operator=(RemoteTreeNode&&) = default;
260 ++BookmarkModelMerger::RemoteTreeNode::RemoteTreeNode(
261 ++ BookmarkModelMerger::RemoteTreeNode&&) = default;
262 ++BookmarkModelMerger::RemoteTreeNode& BookmarkModelMerger::RemoteTreeNode::
263 ++operator=(BookmarkModelMerger::RemoteTreeNode&&) = default;
264 +
265 +- const syncer::EntityData& entity() const { return *update_->entity; }
266 +- int64_t response_version() const { return update_->response_version; }
267 ++void BookmarkModelMerger::RemoteTreeNode::EmplaceSelfAndDescendantsByGUID(
268 ++ std::unordered_map<std::string, const RemoteTreeNode*>*
269 ++ guid_to_remote_node_map) const {
270 ++ DCHECK(guid_to_remote_node_map);
271 +
272 +- // Direct children nodes, sorted by ascending unique position. These are
273 +- // guaranteed to be valid updates (e.g. IsValidBookmarkSpecifics()).
274 +- const std::vector<RemoteTreeNode>& children() const { return children_; }
275 ++ const std::string& guid = entity().specifics.bookmark().guid();
276 ++ if (!guid.empty()) {
277 ++ DCHECK(base::IsValidGUID(guid));
278 +
279 +- // Recursively emplaces all GUIDs (this node and descendants) into
280 +- // |*guid_to_remote_node_map|, which must not be null.
281 +- void EmplaceSelfAndDescendantsByGUID(
282 +- std::unordered_map<std::string, const RemoteTreeNode*>*
283 +- guid_to_remote_node_map) const {
284 +- DCHECK(guid_to_remote_node_map);
285 +-
286 +- const std::string& guid = entity().specifics.bookmark().guid();
287 +- if (!guid.empty()) {
288 +- DCHECK(base::IsValidGUID(guid));
289 +-
290 +- // Duplicate GUIDs have been sorted out before.
291 +- bool success = guid_to_remote_node_map->emplace(guid, this).second;
292 +- DCHECK(success);
293 +- }
294 +-
295 +- for (const RemoteTreeNode& child : children_) {
296 +- child.EmplaceSelfAndDescendantsByGUID(guid_to_remote_node_map);
297 +- }
298 ++ // Duplicate GUIDs have been sorted out before.
299 ++ bool success = guid_to_remote_node_map->emplace(guid, this).second;
300 ++ DCHECK(success);
301 + }
302 +
303 +- private:
304 +- static bool UniquePositionLessThan(const RemoteTreeNode& lhs,
305 +- const RemoteTreeNode& rhs) {
306 +- const syncer::UniquePosition a_pos =
307 +- syncer::UniquePosition::FromProto(lhs.entity().unique_position);
308 +- const syncer::UniquePosition b_pos =
309 +- syncer::UniquePosition::FromProto(rhs.entity().unique_position);
310 +- return a_pos.LessThan(b_pos);
311 ++ for (const RemoteTreeNode& child : children_) {
312 ++ child.EmplaceSelfAndDescendantsByGUID(guid_to_remote_node_map);
313 + }
314 ++}
315 +
316 +- RemoteTreeNode() = default;
317 +-
318 +- std::unique_ptr<syncer::UpdateResponseData> update_;
319 +- std::vector<RemoteTreeNode> children_;
320 +-};
321 ++// static
322 ++bool BookmarkModelMerger::RemoteTreeNode::UniquePositionLessThan(
323 ++ const RemoteTreeNode& lhs,
324 ++ const RemoteTreeNode& rhs) {
325 ++ const syncer::UniquePosition a_pos =
326 ++ syncer::UniquePosition::FromProto(lhs.entity().unique_position);
327 ++ const syncer::UniquePosition b_pos =
328 ++ syncer::UniquePosition::FromProto(rhs.entity().unique_position);
329 ++ return a_pos.LessThan(b_pos);
330 ++}
331 +
332 + // static
333 + BookmarkModelMerger::RemoteTreeNode
334 +diff --git a/components/sync_bookmarks/bookmark_model_merger.h b/components/sync_bookmarks/bookmark_model_merger.h
335 +index 9b59200..bf0783ec 100644
336 +--- a/components/sync_bookmarks/bookmark_model_merger.h
337 ++++ b/components/sync_bookmarks/bookmark_model_merger.h
338 +@@ -5,6 +5,7 @@
339 + #ifndef COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_MODEL_MERGER_H_
340 + #define COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_MODEL_MERGER_H_
341 +
342 ++#include <memory>
343 + #include <string>
344 + #include <unordered_map>
345 + #include <vector>
346 +@@ -50,7 +51,52 @@
347 +
348 + private:
349 + // Internal representation of a remote tree, composed of nodes.
350 +- class RemoteTreeNode;
351 ++ class RemoteTreeNode final {
352 ++ private:
353 ++ using UpdatesPerParentId =
354 ++ std::unordered_map<base::StringPiece,
355 ++ syncer::UpdateResponseDataList,
356 ++ base::StringPieceHash>;
357 ++
358 ++ public:
359 ++ // Constructs a tree given |update| as root and recursively all descendants
360 ++ // by traversing |*updates_per_parent_id|. |update| and
361 ++ // |updates_per_parent_id| must not be null. All updates
362 ++ // |*updates_per_parent_id| must represent valid updates. Updates
363 ++ // corresponding from descendant nodes are moved away from
364 ++ // |*updates_per_parent_id|.
365 ++ static RemoteTreeNode BuildTree(
366 ++ std::unique_ptr<syncer::UpdateResponseData> update,
367 ++ UpdatesPerParentId* updates_per_parent_id);
368 ++
369 ++ ~RemoteTreeNode();
370 ++
371 ++ // Allow moves, useful during construction.
372 ++ RemoteTreeNode(RemoteTreeNode&&);
373 ++ RemoteTreeNode& operator=(RemoteTreeNode&&);
374 ++
375 ++ const syncer::EntityData& entity() const { return *update_->entity; }
376 ++ int64_t response_version() const { return update_->response_version; }
377 ++
378 ++ // Direct children nodes, sorted by ascending unique position. These are
379 ++ // guaranteed to be valid updates (e.g. IsValidBookmarkSpecifics()).
380 ++ const std::vector<RemoteTreeNode>& children() const { return children_; }
381 ++
382 ++ // Recursively emplaces all GUIDs (this node and descendants) into
383 ++ // |*guid_to_remote_node_map|, which must not be null.
384 ++ void EmplaceSelfAndDescendantsByGUID(
385 ++ std::unordered_map<std::string, const RemoteTreeNode*>*
386 ++ guid_to_remote_node_map) const;
387 ++
388 ++ private:
389 ++ static bool UniquePositionLessThan(const RemoteTreeNode& lhs,
390 ++ const RemoteTreeNode& rhs);
391 ++
392 ++ RemoteTreeNode();
393 ++
394 ++ std::unique_ptr<syncer::UpdateResponseData> update_;
395 ++ std::vector<RemoteTreeNode> children_;
396 ++ };
397 +
398 + // A forest composed of multiple trees where the root of each tree represents
399 + // a permanent node, keyed by server-defined unique tag of the root.
400
401 diff --git a/www-client/chromium/files/chromium-80-gcc-noexcept.patch b/www-client/chromium/files/chromium-80-gcc-noexcept.patch
402 deleted file mode 100644
403 index 93ac6c409be..00000000000
404 --- a/www-client/chromium/files/chromium-80-gcc-noexcept.patch
405 +++ /dev/null
406 @@ -1,48 +0,0 @@
407 -From a75a2539ca600163f2136776fdc751111e887cd7 Mon Sep 17 00:00:00 2001
408 -From: Jose Dapena Paz <jose.dapena@×××.com>
409 -Date: Tue, 05 Nov 2019 17:57:52 +0100
410 -Subject: [PATCH] GCC: do not set noexcept on move assignment operator of ColorSet
411 -
412 -GCC build is broken because ColorSet default move assign operator is
413 -noexcept (because the color flat_map is not noexcept). It does not
414 -break clang because clang does not warn about this situation when
415 -building with -fno-exception.
416 -
417 -../../ui/color/color_set.cc:14:11: error: function ‘ui::ColorSet& ui::ColorSet::operator=(ui::ColorSet&&)’ defaulted on its redeclaration with an exception-specification that differs from the implicit exception-specification ‘’
418 - ColorSet& ColorSet::operator=(ColorSet&&) noexcept = default;
419 -
420 -Bug: 819294
421 -Change-Id: I00f4374fbf3d41dced9f9451c90478db528cb986
422 ----
423 -
424 -diff --git a/ui/color/color_set.cc b/ui/color/color_set.cc
425 -index 56564d7..0d43b2b 100644
426 ---- a/ui/color/color_set.cc
427 -+++ b/ui/color/color_set.cc
428 -@@ -9,9 +9,9 @@
429 - ColorSet::ColorSet(ColorSetId id, ColorMap&& colors)
430 - : id(id), colors(std::move(colors)) {}
431 -
432 --ColorSet::ColorSet(ColorSet&&) noexcept = default;
433 -+ColorSet::ColorSet(ColorSet&&) = default;
434 -
435 --ColorSet& ColorSet::operator=(ColorSet&&) noexcept = default;
436 -+ColorSet& ColorSet::operator=(ColorSet&&) = default;
437 -
438 - ColorSet::~ColorSet() = default;
439 -
440 -diff --git a/ui/color/color_set.h b/ui/color/color_set.h
441 -index b273c48..3eaea42 100644
442 ---- a/ui/color/color_set.h
443 -+++ b/ui/color/color_set.h
444 -@@ -28,8 +28,8 @@
445 - using ColorMap = base::flat_map<ColorId, SkColor>;
446 -
447 - ColorSet(ColorSetId id, ColorMap&& colors);
448 -- ColorSet(ColorSet&&) noexcept;
449 -- ColorSet& operator=(ColorSet&&) noexcept;
450 -+ ColorSet(ColorSet&&);
451 -+ ColorSet& operator=(ColorSet&&);
452 - ~ColorSet();
453 -
454 - ColorSetId id;
455
456 diff --git a/www-client/chromium/files/chromium-80-gcc-permissive.patch b/www-client/chromium/files/chromium-80-gcc-permissive.patch
457 new file mode 100644
458 index 00000000000..c7aef49add1
459 --- /dev/null
460 +++ b/www-client/chromium/files/chromium-80-gcc-permissive.patch
461 @@ -0,0 +1,33 @@
462 +In file included from ../../media/base/media_log_properties.h:13,
463 + from ../../media/base/media_log.h:23,
464 + from ../../media/filters/frame_processor.h:15,
465 + from ../../media/filters/frame_processor.cc:5:
466 +../../media/base/media_log_properties_helper.h:86:8: error: extra qualification not allowed [-fpermissive]
467 + 86 | struct internal::MediaLogPropertyTypeConverter<media::AudioDecoderConfig> {
468 + | ^~~~~~~~
469 +../../media/base/media_log_properties_helper.h:86:75: error: explicit specialization of non-template 'media::internal::<unnamed struct>'
470 + 86 | struct internal::MediaLogPropertyTypeConverter<media::AudioDecoderConfig> {
471 + | ^
472 +
473 +diff --git a/media/base/media_log_properties_helper.h b/media/base/media_log_properties_helper.h
474 +index 95ff70a..549b003 100644
475 +--- a/media/base/media_log_properties_helper.h
476 ++++ b/media/base/media_log_properties_helper.h
477 +@@ -83,7 +83,7 @@ struct MediaLogPropertyTypeConverter<std::vector<T>> {
478 +
479 + // Specializer for sending AudioDecoderConfigs to the media tab in devtools.
480 + template <>
481 +-struct internal::MediaLogPropertyTypeConverter<media::AudioDecoderConfig> {
482 ++struct MediaLogPropertyTypeConverter<media::AudioDecoderConfig> {
483 + static base::Value Convert(const AudioDecoderConfig& value) {
484 + base::Value result(base::Value::Type::DICTIONARY);
485 + result.SetStringKey("codec", GetCodecName(value.codec()));
486 +@@ -114,7 +114,7 @@ struct internal::MediaLogPropertyTypeConverter<media::AudioDecoderConfig> {
487 +
488 + // Specializer for sending VideoDecoderConfigs to the media tab in devtools.
489 + template <>
490 +-struct internal::MediaLogPropertyTypeConverter<VideoDecoderConfig> {
491 ++struct MediaLogPropertyTypeConverter<VideoDecoderConfig> {
492 + static base::Value Convert(const VideoDecoderConfig& value) {
493 + base::Value result(base::Value::Type::DICTIONARY);
494 + result.SetStringKey("codec", GetCodecName(value.codec()));
495
496 diff --git a/www-client/chromium/files/chromium-80-include.patch b/www-client/chromium/files/chromium-80-include.patch
497 index a2a00a9d455..dd85de7249c 100644
498 --- a/www-client/chromium/files/chromium-80-include.patch
499 +++ b/www-client/chromium/files/chromium-80-include.patch
500 @@ -1,13 +1,33 @@
501 -diff --git a/third_party/blink/renderer/core/core_initializer.h b/third_party/blink/renderer/core/core_initializer.h
502 -index 5e67f46..3b750c7 100644
503 ---- a/third_party/blink/renderer/core/core_initializer.h
504 -+++ b/third_party/blink/renderer/core/core_initializer.h
505 -@@ -36,6 +36,8 @@
506 - #include "third_party/blink/renderer/core/core_export.h"
507 - #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
508 +From 8273f4d3130e06fd8b6bef87b07c936304b971d9 Mon Sep 17 00:00:00 2001
509 +From: Raphael Kubo da Costa <raphael.kubo.da.costa@×××××.com>
510 +Date: Tue, 10 Dec 2019 20:59:57 +0000
511 +Subject: [PATCH] [cros search service]: Include <cmath> for std::pow()
512 +
513 +IWYU. Follow up to commit 2b2ea3c09b ("[cros search service] Move shared
514 +string matching functions to //chrome"), which broke the libstdc++ build:
515 +
516 + ../../chrome/common/string_matching/fuzzy_tokenized_string_match.cc:199:14: error: no member named 'pow' in namespace 'std'
517 + std::pow(partial_match_penalty_rate, long_start - current - 1);
518 + ~~~~~^
519 +
520 +Bug: 957519
521 +Change-Id: I66f61cb4f93cfa0bfa3d1b00ba391ddd8f31a7fb
522 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1960310
523 +Auto-Submit: Raphael Kubo da Costa <raphael.kubo.da.costa@×××××.com>
524 +Reviewed-by: Jia Meng <jiameng@××××××××.org>
525 +Commit-Queue: Raphael Kubo da Costa <raphael.kubo.da.costa@×××××.com>
526 +Cr-Commit-Position: refs/heads/master@{#723499}
527 +---
528 +
529 +diff --git a/chrome/common/string_matching/fuzzy_tokenized_string_match.cc b/chrome/common/string_matching/fuzzy_tokenized_string_match.cc
530 +index 8351fa7..884ef63 100644
531 +--- a/chrome/common/string_matching/fuzzy_tokenized_string_match.cc
532 ++++ b/chrome/common/string_matching/fuzzy_tokenized_string_match.cc
533 +@@ -5,6 +5,7 @@
534 + #include "chrome/common/string_matching/fuzzy_tokenized_string_match.h"
535
536 -+#include <memory>
537 -+
538 - namespace mojo {
539 - class BinderMap;
540 - }
541 + #include <algorithm>
542 ++#include <cmath>
543 + #include <iterator>
544 +
545 + #include "base/i18n/case_conversion.h"