Hello community,

here is the log from the commit of package chromium for openSUSE:Leap:15.2 
checked in at 2020-02-17 17:35:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/chromium (Old)
 and      /work/SRC/openSUSE:Leap:15.2/.chromium.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "chromium"

Mon Feb 17 17:35:04 2020 rev:99 rq:772411 version:80.0.3987.87

Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/chromium/chromium.changes      2020-01-30 
06:08:02.850452557 +0100
+++ /work/SRC/openSUSE:Leap:15.2/.chromium.new.26092/chromium.changes   
2020-02-17 17:35:38.820384140 +0100
@@ -1,0 +2,65 @@
+Wed Feb  5 13:04:03 UTC 2020 - Tomáš Chvátal <tchva...@suse.com>
+
+- Update to 80.0.3987.87 bsc#1162833:
+  * CVE-2020-6381: Integer overflow in JavaScript
+  * CVE-2020-6382: Type Confusion in JavaScript
+  * CVE-2019-18197: Multiple vulnerabilities in XML
+  * CVE-2019-19926: Inappropriate implementation in SQLite
+  * CVE-2020-6385: Insufficient policy enforcement in storage
+  * CVE-2019-19880, CVE-2019-19925: Multiple vulnerabilities in SQLite
+  * CVE-2020-6387: Out of bounds write in WebRTC
+  * CVE-2020-6388: Out of bounds memory access in WebAudio
+  * CVE-2020-6389: Out of bounds write in WebRTC
+  * CVE-2020-6390: Out of bounds memory access in streams
+  * CVE-2020-6391: Insufficient validation of untrusted input in Blink
+  * CVE-2020-6392: Insufficient policy enforcement in extensions
+  * CVE-2020-6393: Insufficient policy enforcement in Blink
+  * CVE-2020-6394: Insufficient policy enforcement in Blink
+  * CVE-2020-6395: Out of bounds read in JavaScript
+  * CVE-2020-6396: Inappropriate implementation in Skia
+  * CVE-2020-6397: Incorrect security UI in sharing
+  * CVE-2020-6398: Uninitialized use in PDFium
+  * CVE-2020-6399: Insufficient policy enforcement in AppCache
+  * CVE-2020-6400: Inappropriate implementation in CORS
+  * CVE-2020-6401: Insufficient validation of untrusted input in Omnibox
+  * CVE-2020-6402: Insufficient policy enforcement in downloads
+  * CVE-2020-6403: Incorrect security UI in Omnibox
+  * CVE-2020-6404: Inappropriate implementation in Blink
+  * CVE-2020-6405: Out of bounds read in SQLite
+  * CVE-2020-6406: Use after free in audio
+  * CVE-2019-19923: Out of bounds memory access in SQLite
+  * CVE-2020-6408: Insufficient policy enforcement in CORS
+  * CVE-2020-6409: Inappropriate implementation in Omnibox
+  * CVE-2020-6410: Insufficient policy enforcement in navigation
+  * CVE-2020-6411: Insufficient validation of untrusted input in Omnibox
+  * CVE-2020-6412: Insufficient validation of untrusted input in Omnibox
+  * CVE-2020-6413: Inappropriate implementation in Blink
+  * CVE-2020-6414: Insufficient policy enforcement in Safe Browsing
+  * CVE-2020-6415: Inappropriate implementation in JavaScript
+  * CVE-2020-6416: Insufficient data validation in streams
+  * CVE-2020-6417: Inappropriate implementation in installer
+- Disable lto for now as it consumes >16GB ram
+- Added patches:
+  * chromium-80-gcc-abstract.patch
+  * chromium-80-gcc-blink.patch
+  * chromium-80-gcc-incomplete-type.patch
+  * chromium-80-gcc-permissive.patch
+  * chromium-80-gcc-quiche.patch
+  * chromium-80-include.patch
+  * chromium-80-unbundle-libxml.patch
+  * chromium-80.0.3987.87.tar.xz
+  * chromium-fix-char_traits.patch
+  * gpu-timeout.patch
+- Removed patches:
+  * chromium-79-gcc-ambiguous-nodestructor.patch
+  * chromium-79-gcc-name-clash.patch
+  * chromium-79-gcc-permissive.patch
+  * chromium-79-icu-65.patch
+  * chromium-79-include.patch
+  * chromium-79-system-hb.patch
+- Rebased patches:
+  * chromium-old-glibc-noexcept.patch
+  * chromium-vaapi-fix.patch
+  * chromium-vaapi.patch
+
+-------------------------------------------------------------------

Old:
----
  chromium-79-gcc-ambiguous-nodestructor.patch
  chromium-79-gcc-name-clash.patch
  chromium-79-gcc-permissive.patch
  chromium-79-icu-65.patch
  chromium-79-include.patch
  chromium-79-system-hb.patch
  chromium-79.0.3945.130.tar.xz

New:
----
  chromium-80-gcc-abstract.patch
  chromium-80-gcc-blink.patch
  chromium-80-gcc-incomplete-type.patch
  chromium-80-gcc-permissive.patch
  chromium-80-gcc-quiche.patch
  chromium-80-include.patch
  chromium-80-unbundle-libxml.patch
  chromium-80.0.3987.87.tar.xz
  chromium-fix-char_traits.patch
  gpu-timeout.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ chromium.spec ++++++
--- /var/tmp/diff_new_pack.G5YGuL/_old  2020-02-17 17:35:49.124407514 +0100
+++ /var/tmp/diff_new_pack.G5YGuL/_new  2020-02-17 17:35:49.128407523 +0100
@@ -46,7 +46,7 @@
 %endif
 %ifarch x86_64
 %if %{?suse_version} > 1500
-%bcond_without lto
+%bcond_with lto
 %else
 %bcond_with lto
 %endif
@@ -57,7 +57,7 @@
 %bcond_with clang
 %bcond_with wayland
 Name:           chromium
-Version:        79.0.3945.130
+Version:        80.0.3987.87
 Release:        0
 Summary:        Google's open source browser project
 License:        BSD-3-Clause AND LGPL-2.1-or-later
@@ -86,12 +86,15 @@
 Patch11:        chromium-unbundle-zlib.patch
 Patch12:        chromium-old-glibc-noexcept.patch
 Patch13:        chromium-79-gcc-alignas.patch
-Patch14:        chromium-79-gcc-ambiguous-nodestructor.patch
-Patch15:        chromium-79-gcc-name-clash.patch
-Patch16:        chromium-79-gcc-permissive.patch
-Patch17:        chromium-79-icu-65.patch
-Patch18:        chromium-79-include.patch
-Patch19:        chromium-79-system-hb.patch
+Patch14:        chromium-80-gcc-abstract.patch
+Patch15:        chromium-80-gcc-blink.patch
+Patch16:        chromium-80-gcc-incomplete-type.patch
+Patch17:        chromium-80-gcc-permissive.patch
+Patch18:        chromium-80-gcc-quiche.patch
+Patch19:        chromium-80-include.patch
+Patch20:        chromium-80-unbundle-libxml.patch
+Patch21:        chromium-fix-char_traits.patch
+Patch22:        gpu-timeout.patch
 # Google seem not too keen on merging this but GPU accel is quite important
 #  https://chromium-review.googlesource.com/c/chromium/src/+/532294
 #  
https://github.com/saiarcot895/chromium-ubuntu-build/tree/master/debian/patches
@@ -174,7 +177,6 @@
 BuildRequires:  pkgconfig(nss) >= 3.26
 BuildRequires:  pkgconfig(ogg)
 BuildRequires:  pkgconfig(openssl)
-BuildRequires:  pkgconfig(opus)
 BuildRequires:  pkgconfig(python)
 BuildRequires:  pkgconfig(re2)
 BuildRequires:  pkgconfig(schroedinger-1.0)
@@ -245,6 +247,7 @@
 BuildRequires:  python-xml
 BuildRequires:  yasm-devel
 BuildRequires:  pkgconfig(libwebp)
+BuildRequires:  pkgconfig(opus) >= 1.3.1
 BuildRequires:  pkgconfig(zlib)
 %endif
 %if %{with system_icu}
@@ -330,9 +333,6 @@
     third_party/blink
     third_party/boringssl
     third_party/boringssl/src/third_party/fiat
-    third_party/boringssl/src/third_party/sike
-    third_party/boringssl/linux-aarch64/crypto/third_party/sike
-    third_party/boringssl/linux-x86_64/crypto/third_party/sike
     third_party/breakpad
     third_party/breakpad/breakpad/src/third_party/curl
     third_party/brotli
@@ -366,10 +366,12 @@
     third_party/depot_tools
     third_party/depot_tools/third_party/six
     third_party/devscripts
+    third_party/devtools-frontend
+    third_party/devtools-frontend/src/third_party
     third_party/dom_distiller_js
     third_party/emoji-segmenter
     third_party/flatbuffers
-    third_party/flot
+    third_party/libgifcodec
     third_party/glslang
     third_party/google_input_tools
     third_party/google_input_tools/third_party/closure_library
@@ -438,7 +440,6 @@
     third_party/sfntly
     third_party/simplejson
     third_party/skia
-    third_party/skia/third_party/gif
     third_party/skia/third_party/skcms
     third_party/skia/third_party/vulkan
     third_party/skia/include/third_party/vulkan/
@@ -471,6 +472,7 @@
     third_party/webrtc/rtc_base/third_party/sigslot
     third_party/widevine
     third_party/woff2
+    third_party/wuffs
     third_party/zlib/google
     tools/grit/third_party/six
     url/third_party/mozilla
@@ -483,6 +485,7 @@
 %if %{with sle_bundles}
 keeplibs+=(
     third_party/libwebp
+    third_party/opus
     third_party/yasm
     third_party/simplejson
     third_party/catapult/third_party/beautifulsoup4
@@ -561,9 +564,11 @@
 %endif
 # do not eat all memory
 %limit_build -m 2600
-
 %if %{with lto}
-export LDFLAGS="-flto=%{jobs} --param lto-max-streaming-parallelism=1"
+# reduce the threads for linking even more due to LTO eating ton of memory
+_link_threads=$(((%{jobs} - 2)))
+test "$_link_threads" -le 0 && _link_threads=1
+export LDFLAGS="-flto=$_link_threads --param lto-max-streaming-parallelism=1"
 %endif
 
 # Set system libraries to be used
@@ -576,7 +581,6 @@
     libpng
     libxslt
     libusb
-    opus
     re2
     snappy
 )
@@ -589,6 +593,7 @@
 %if !%{with sle_bundles}
 gn_system_libraries+=(
     libwebp
+    opus
     yasm
     zlib
 )
@@ -619,13 +624,6 @@
 myconf_gn+=" is_component_ffmpeg=true"
 myconf_gn+=" use_cups=true"
 myconf_gn+=" use_aura=true"
-myconf_gn+=" use_jumbo_build=true"
-%ifarch %{arm} aarch64
-# Limit number to avoid OOM errors
-myconf_gn+=" jumbo_file_merge_limit=5"
-%else
-myconf_gn+=" jumbo_file_merge_limit=8"
-%endif
 myconf_gn+=" concurrent_links=1"
 myconf_gn+=" symbol_level=1"
 myconf_gn+=" blink_symbol_level=0"

++++++ chromium-80-gcc-abstract.patch ++++++
In file included from 
../../third_party/blink/renderer/platform/heap/persistent.h:18,
                 from 
../../third_party/blink/public/platform/web_private_ptr.h:40,
                 from 
../../third_party/blink/public/platform/web_media_stream_track.h:33,
                 from 
../../third_party/blink/public/platform/web_media_stream_source.h:37,
                 from 
../../third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h:19,
                 from 
../../third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc:5:
../../third_party/blink/renderer/platform/wtf/cross_thread_copier.h: In 
instantiation of 'struct 
WTF::CrossThreadCopierPassThrough<webrtc::VideoTrackInterface>':
../../third_party/blink/renderer/modules/peerconnection/adapters/web_rtc_cross_thread_copier.h:169:14:
   required from here
../../third_party/blink/renderer/platform/wtf/cross_thread_copier.h:80:15: 
error: invalid abstract return type 'webrtc::VideoTrackInterface'
   80 |   static Type Copy(const T& parameter) { return parameter; }
      |               ^~~~
In file included from 
../../third_party/webrtc/api/peer_connection_interface.h:88,
                 from 
../../third_party/blink/public/platform/web_rtc_peer_connection_handler.h:39,
                 from 
../../third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h:20,
                 from 
../../third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc:5:
../../third_party/webrtc/api/media_stream_interface.h:174:18: note:   because 
the following virtual functions are pure within 'webrtc::VideoTrackInterface':
  174 | class RTC_EXPORT VideoTrackInterface
      |                  ^~~~~~~~~~~~~~~~~~~
../../third_party/webrtc/api/media_stream_interface.h:48:16: note:      
'virtual void 
webrtc::NotifierInterface::RegisterObserver(webrtc::ObserverInterface*)'
   48 |   virtual void RegisterObserver(ObserverInterface* observer) = 0;
      |                ^~~~~~~~~~~~~~~~
../../third_party/webrtc/api/media_stream_interface.h:49:16: note:      
'virtual void 
webrtc::NotifierInterface::UnregisterObserver(webrtc::ObserverInterface*)'
   49 |   virtual void UnregisterObserver(ObserverInterface* observer) = 0;
      |                ^~~~~~~~~~~~~~~~~~

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
index 54cb7d1..0d6c40f 100644
--- 
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
@@ -165,8 +165,9 @@ struct CrossThreadCopier<blink::MediaStreamVideoTrack>
 };
 
 template <>
-struct CrossThreadCopier<webrtc::VideoTrackInterface>
-    : public CrossThreadCopierPassThrough<webrtc::VideoTrackInterface> {
+struct CrossThreadCopier<rtc::scoped_refptr<webrtc::VideoTrackInterface>>
+    : public CrossThreadCopierPassThrough<
+          rtc::scoped_refptr<webrtc::VideoTrackInterface>> {
   STATIC_ONLY(CrossThreadCopier);
 };
 
++++++ chromium-80-gcc-blink.patch ++++++
../../third_party/blink/renderer/core/editing/commands/delete_selection_command.cc:
 In member function 'void 
blink::DeleteSelectionCommand::InitializePositionData(blink::EditingState*)':
../../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>)'
  256 |       EnclosingNodeOfType(start, &IsA<HTMLTableRowElement>));
      |                                                           ^
In file included from 
../../third_party/blink/renderer/core/editing/commands/delete_selection_command.cc:34:
../../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)'
  112 | CORE_EXPORT Node* EnclosingNodeOfType(
      |                   ^~~~~~~~~~~~~~~~~~~
../../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*)'
  114 |     bool (*node_is_of_type)(const Node*),
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../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)'
  116 | CORE_EXPORT Node* EnclosingNodeOfType(
      |                   ^~~~~~~~~~~~~~~~~~~
../../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> >&'}
  117 |     const PositionInFlatTree&,
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~

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
index 6ff6906..dd531ae 100644
--- 
a/third_party/blink/renderer/core/editing/commands/delete_selection_command.cc
+++ 
b/third_party/blink/renderer/core/editing/commands/delete_selection_command.cc
@@ -224,6 +224,10 @@ static Position TrailingWhitespacePosition(const Position& 
position,
   return Position();
 }
 
+static bool IsAHTMLTableRowElement(const Node* node) {
+  return IsA<HTMLTableRowElement>(node);
+}
+
 void DeleteSelectionCommand::InitializePositionData(
     EditingState* editing_state) {
   DCHECK(!GetDocument().NeedsLayoutTreeUpdate());
@@ -253,9 +257,9 @@ void DeleteSelectionCommand::InitializePositionData(
   end_root_ = RootEditableElementOf(end);
 
   start_table_row_ = To<HTMLTableRowElement>(
-      EnclosingNodeOfType(start, &IsA<HTMLTableRowElement>));
+      EnclosingNodeOfType(start, &IsAHTMLTableRowElement));
   end_table_row_ = To<HTMLTableRowElement>(
-      EnclosingNodeOfType(end, &IsA<HTMLTableRowElement>));
+      EnclosingNodeOfType(end, &IsAHTMLTableRowElement));
 
   // Don't move content out of a table cell.
   // If the cell is non-editable, enclosingNodeOfType won't return it by
++++++ chromium-80-gcc-incomplete-type.patch ++++++
>From cdf3e81ff49b200213d67d65558f2919222b60ab Mon Sep 17 00:00:00 2001
From: Raphael Kubo da Costa <raphael.kubo.da.co...@intel.com>
Date: Mon, 16 Dec 2019 11:39:11 +0000
Subject: [PATCH] BookmarkModelMerger: Move RemoteTreeNode declaration to header.

This fixes the build with libstdc++ after commit 8f5dad93e58 ("Fix CHECK
failure due to untracked local nodes"):

/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'
      _T2 second;                /// @c second is a copy of the second object
          ^
/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
    : std::aligned_storage<sizeof(_Tp), __alignof__(_Tp)>
                           ^
/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
      __gnu_cxx::__aligned_buffer<_Value> _M_storage;
                                          ^
/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
    struct _Hash_node<_Value, true> : _Hash_node_value_base<_Value>
                                      ^
/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
        rebind_traits<typename __node_type::value_type>;
                               ^
/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> > >
' requested here
      private __detail::_Hashtable_alloc<
              ^
/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
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
il::_Hashtable_traits<true, false, true> >' requested here
      _Hashtable _M_h;
                 ^
../../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
st std::__cxx11::basic_string<char>, 
sync_bookmarks::BookmarkModelMerger::RemoteTreeNode> > >' requested here
  const RemoteForest remote_forest_;
                     ^
../../components/sync_bookmarks/bookmark_model_merger.h:53:9: note: forward 
declaration of 'sync_bookmarks::BookmarkModelMerger::RemoteTreeNode'
  class RemoteTreeNode;
        ^

Essentially, the problem is that libstdc++'s std::unordered_map<T, U>
implementation requires both T and U to be fully declared. I raised the
problem in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92770, and GCC's
position is that we are relying on undefined behavior according to the C++
standard (https://eel.is/c++draft/requirements#res.on.functions-2.5).

Bug: 957519
Change-Id: Ife7e435e516932a795bfbe05b2c910c3272878f0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1960156
Commit-Queue: Raphael Kubo da Costa <raphael.kubo.da.co...@intel.com>
Reviewed-by: Mikel Astiz <mas...@chromium.org>
Auto-Submit: Raphael Kubo da Costa <raphael.kubo.da.co...@intel.com>
Cr-Commit-Position: refs/heads/master@{#725070}
---

diff --git a/components/sync_bookmarks/bookmark_model_merger.cc 
b/components/sync_bookmarks/bookmark_model_merger.cc
index eae153ef..579848e 100644
--- a/components/sync_bookmarks/bookmark_model_merger.cc
+++ b/components/sync_bookmarks/bookmark_model_merger.cc
@@ -5,7 +5,6 @@
 #include "components/sync_bookmarks/bookmark_model_merger.h"
 
 #include <algorithm>
-#include <memory>
 #include <set>
 #include <string>
 #include <utility>
@@ -205,66 +204,44 @@
 
 }  // namespace
 
-class BookmarkModelMerger::RemoteTreeNode final {
- public:
-  // Constructs a tree given |update| as root and recursively all descendants 
by
-  // traversing |*updates_per_parent_id|. |update| and |updates_per_parent_id|
-  // must not be null. All updates |*updates_per_parent_id| must represent 
valid
-  // updates. Updates corresponding from descendant nodes are moved away from
-  // |*updates_per_parent_id|.
-  static RemoteTreeNode BuildTree(
-      std::unique_ptr<syncer::UpdateResponseData> update,
-      UpdatesPerParentId* updates_per_parent_id);
+BookmarkModelMerger::RemoteTreeNode::RemoteTreeNode() = default;
 
-  ~RemoteTreeNode() = default;
+BookmarkModelMerger::RemoteTreeNode::~RemoteTreeNode() = default;
 
-  // Allow moves, useful during construction.
-  RemoteTreeNode(RemoteTreeNode&&) = default;
-  RemoteTreeNode& operator=(RemoteTreeNode&&) = default;
+BookmarkModelMerger::RemoteTreeNode::RemoteTreeNode(
+    BookmarkModelMerger::RemoteTreeNode&&) = default;
+BookmarkModelMerger::RemoteTreeNode& BookmarkModelMerger::RemoteTreeNode::
+operator=(BookmarkModelMerger::RemoteTreeNode&&) = default;
 
-  const syncer::EntityData& entity() const { return *update_->entity; }
-  int64_t response_version() const { return update_->response_version; }
+void BookmarkModelMerger::RemoteTreeNode::EmplaceSelfAndDescendantsByGUID(
+    std::unordered_map<std::string, const RemoteTreeNode*>*
+        guid_to_remote_node_map) const {
+  DCHECK(guid_to_remote_node_map);
 
-  // Direct children nodes, sorted by ascending unique position. These are
-  // guaranteed to be valid updates (e.g. IsValidBookmarkSpecifics()).
-  const std::vector<RemoteTreeNode>& children() const { return children_; }
+  const std::string& guid = entity().specifics.bookmark().guid();
+  if (!guid.empty()) {
+    DCHECK(base::IsValidGUID(guid));
 
-  // Recursively emplaces all GUIDs (this node and descendants) into
-  // |*guid_to_remote_node_map|, which must not be null.
-  void EmplaceSelfAndDescendantsByGUID(
-      std::unordered_map<std::string, const RemoteTreeNode*>*
-          guid_to_remote_node_map) const {
-    DCHECK(guid_to_remote_node_map);
-
-    const std::string& guid = entity().specifics.bookmark().guid();
-    if (!guid.empty()) {
-      DCHECK(base::IsValidGUID(guid));
-
-      // Duplicate GUIDs have been sorted out before.
-      bool success = guid_to_remote_node_map->emplace(guid, this).second;
-      DCHECK(success);
-    }
-
-    for (const RemoteTreeNode& child : children_) {
-      child.EmplaceSelfAndDescendantsByGUID(guid_to_remote_node_map);
-    }
+    // Duplicate GUIDs have been sorted out before.
+    bool success = guid_to_remote_node_map->emplace(guid, this).second;
+    DCHECK(success);
   }
 
- private:
-  static bool UniquePositionLessThan(const RemoteTreeNode& lhs,
-                                     const RemoteTreeNode& rhs) {
-    const syncer::UniquePosition a_pos =
-        syncer::UniquePosition::FromProto(lhs.entity().unique_position);
-    const syncer::UniquePosition b_pos =
-        syncer::UniquePosition::FromProto(rhs.entity().unique_position);
-    return a_pos.LessThan(b_pos);
+  for (const RemoteTreeNode& child : children_) {
+    child.EmplaceSelfAndDescendantsByGUID(guid_to_remote_node_map);
   }
+}
 
-  RemoteTreeNode() = default;
-
-  std::unique_ptr<syncer::UpdateResponseData> update_;
-  std::vector<RemoteTreeNode> children_;
-};
+// static
+bool BookmarkModelMerger::RemoteTreeNode::UniquePositionLessThan(
+    const RemoteTreeNode& lhs,
+    const RemoteTreeNode& rhs) {
+  const syncer::UniquePosition a_pos =
+      syncer::UniquePosition::FromProto(lhs.entity().unique_position);
+  const syncer::UniquePosition b_pos =
+      syncer::UniquePosition::FromProto(rhs.entity().unique_position);
+  return a_pos.LessThan(b_pos);
+}
 
 // static
 BookmarkModelMerger::RemoteTreeNode
diff --git a/components/sync_bookmarks/bookmark_model_merger.h 
b/components/sync_bookmarks/bookmark_model_merger.h
index 9b59200..bf0783ec 100644
--- a/components/sync_bookmarks/bookmark_model_merger.h
+++ b/components/sync_bookmarks/bookmark_model_merger.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_MODEL_MERGER_H_
 #define COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_MODEL_MERGER_H_
 
+#include <memory>
 #include <string>
 #include <unordered_map>
 #include <vector>
@@ -50,7 +51,52 @@
 
  private:
   // Internal representation of a remote tree, composed of nodes.
-  class RemoteTreeNode;
+  class RemoteTreeNode final {
+   private:
+    using UpdatesPerParentId =
+        std::unordered_map<base::StringPiece,
+                           syncer::UpdateResponseDataList,
+                           base::StringPieceHash>;
+
+   public:
+    // Constructs a tree given |update| as root and recursively all descendants
+    // by traversing |*updates_per_parent_id|. |update| and
+    // |updates_per_parent_id| must not be null. All updates
+    // |*updates_per_parent_id| must represent valid updates. Updates
+    // corresponding from descendant nodes are moved away from
+    // |*updates_per_parent_id|.
+    static RemoteTreeNode BuildTree(
+        std::unique_ptr<syncer::UpdateResponseData> update,
+        UpdatesPerParentId* updates_per_parent_id);
+
+    ~RemoteTreeNode();
+
+    // Allow moves, useful during construction.
+    RemoteTreeNode(RemoteTreeNode&&);
+    RemoteTreeNode& operator=(RemoteTreeNode&&);
+
+    const syncer::EntityData& entity() const { return *update_->entity; }
+    int64_t response_version() const { return update_->response_version; }
+
+    // Direct children nodes, sorted by ascending unique position. These are
+    // guaranteed to be valid updates (e.g. IsValidBookmarkSpecifics()).
+    const std::vector<RemoteTreeNode>& children() const { return children_; }
+
+    // Recursively emplaces all GUIDs (this node and descendants) into
+    // |*guid_to_remote_node_map|, which must not be null.
+    void EmplaceSelfAndDescendantsByGUID(
+        std::unordered_map<std::string, const RemoteTreeNode*>*
+            guid_to_remote_node_map) const;
+
+   private:
+    static bool UniquePositionLessThan(const RemoteTreeNode& lhs,
+                                       const RemoteTreeNode& rhs);
+
+    RemoteTreeNode();
+
+    std::unique_ptr<syncer::UpdateResponseData> update_;
+    std::vector<RemoteTreeNode> children_;
+  };
 
   // A forest composed of multiple trees where the root of each tree represents
   // a permanent node, keyed by server-defined unique tag of the root.
++++++ chromium-79-gcc-permissive.patch -> chromium-80-gcc-permissive.patch 
++++++
--- /work/SRC/openSUSE:Leap:15.2/chromium/chromium-79-gcc-permissive.patch      
2020-01-15 14:49:57.857398592 +0100
+++ 
/work/SRC/openSUSE:Leap:15.2/.chromium.new.26092/chromium-80-gcc-permissive.patch
   2020-02-17 17:35:05.224289848 +0100
@@ -1,79 +1,33 @@
-From 528e9a3e1f25bd264549c4c7779748abfd16bb1c Mon Sep 17 00:00:00 2001
-From: Jan Wilken Dörrie <jdoer...@chromium.org>
-Date: Fri, 18 Oct 2019 11:45:24 +0000
-Subject: [PATCH] Reland "GCC: Fix base::internal::InvokeFuncImpl"
+In file included from ../../media/base/media_log_properties.h:13,
+                 from ../../media/base/media_log.h:23,
+                 from ../../media/filters/frame_processor.h:15,
+                 from ../../media/filters/frame_processor.cc:5:
+../../media/base/media_log_properties_helper.h:86:8: error: extra 
qualification not allowed [-fpermissive]
+   86 | struct 
internal::MediaLogPropertyTypeConverter<media::AudioDecoderConfig> {
+      |        ^~~~~~~~
+../../media/base/media_log_properties_helper.h:86:75: error: explicit 
specialization of non-template 'media::internal::<unnamed struct>'
+   86 | struct 
internal::MediaLogPropertyTypeConverter<media::AudioDecoderConfig> {
+      |                                                                        
   ^
 
-This is a reland of 9293d5c86eec1c34fc00716645400b44a14e764e
-
-Original change's description:
-> GCC: Fix base::internal::InvokeFuncImpl
-> 
-> GCC doesn't like that the Value data member has no out-of-line
-> definition. The problem is triggered specifically only when compiling
-> 
->   components/services/leveldb/leveldb_database_impl.cc
-> 
-> which has lambda functions returning locally-defined classes.
-> 
-> The current code works as-is in C++17 mode which introduces the concept
-> of inline variables, but in C++14 we need either an explicit out-of-line
-> definition or a function member instead of a data member.
-> 
-> Use std::integral_constant for defining the value.
-> 
-> Bug: 819294
-> Change-Id: I5c68e14ce3fa9d8b4d8a2cb42d7f9b53938aabf3
-> Reviewed-on: 
https://chromium-review.googlesource.com/c/chromium/src/+/1862451
-> Reviewed-by: Jan Wilken Dörrie <jdoer...@chromium.org>
-> Reviewed-by: Daniel Cheng <dch...@chromium.org>
-> Commit-Queue: Jüri Valdmann <juri.valdm...@qt.io>
-> Cr-Commit-Position: refs/heads/master@{#706384}
-
-Bug: 819294
-Change-Id: I3d5a52ddc6815516e2239f9347c60de06bf765a2
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1865212
-Reviewed-by: Daniel Cheng <dch...@chromium.org>
-Commit-Queue: Jan Wilken Dörrie <jdoer...@chromium.org>
-Cr-Commit-Position: refs/heads/master@{#707329}
----
-
-diff --git a/base/bind.h b/base/bind.h
-index 7a400af..1070ce6 100644
---- a/base/bind.h
-+++ b/base/bind.h
-@@ -187,18 +187,15 @@
- // well-formed. Using `Invoker::Run` with a OnceCallback triggers a
- // static_assert, which is why the ternary expression does not compile.
- // TODO(crbug.com/752720): Remove this indirection once we have `if 
constexpr`.
--template <bool is_once, typename Invoker>
--struct InvokeFuncImpl;
-+template <typename Invoker>
-+constexpr auto GetInvokeFunc(std::true_type) {
-+  return Invoker::RunOnce;
-+}
- 
- template <typename Invoker>
--struct InvokeFuncImpl<true, Invoker> {
--  static constexpr auto Value = &Invoker::RunOnce;
--};
--
--template <typename Invoker>
--struct InvokeFuncImpl<false, Invoker> {
--  static constexpr auto Value = &Invoker::Run;
--};
-+constexpr auto GetInvokeFunc(std::false_type) {
-+  return Invoker::Run;
-+}
+diff --git a/media/base/media_log_properties_helper.h 
b/media/base/media_log_properties_helper.h
+index 95ff70a..549b003 100644
+--- a/media/base/media_log_properties_helper.h
++++ b/media/base/media_log_properties_helper.h
+@@ -83,7 +83,7 @@ struct MediaLogPropertyTypeConverter<std::vector<T>> {
  
- template <template <typename> class CallbackT,
-           typename Functor,
-@@ -229,7 +226,8 @@
-   // InvokeFuncStorage, so that we can ensure its type matches to
-   // PolymorphicInvoke, to which CallbackType will cast back.
-   using PolymorphicInvoke = typename CallbackType::PolymorphicInvoke;
--  PolymorphicInvoke invoke_func = InvokeFuncImpl<kIsOnce, Invoker>::Value;
-+  PolymorphicInvoke invoke_func =
-+      GetInvokeFunc<Invoker>(std::integral_constant<bool, kIsOnce>());
+ // Specializer for sending AudioDecoderConfigs to the media tab in devtools.
+ template <>
+-struct internal::MediaLogPropertyTypeConverter<media::AudioDecoderConfig> {
++struct MediaLogPropertyTypeConverter<media::AudioDecoderConfig> {
+   static base::Value Convert(const AudioDecoderConfig& value) {
+     base::Value result(base::Value::Type::DICTIONARY);
+     result.SetStringKey("codec", GetCodecName(value.codec()));
+@@ -114,7 +114,7 @@ struct 
internal::MediaLogPropertyTypeConverter<media::AudioDecoderConfig> {
  
-   using InvokeFuncStorage = internal::BindStateBase::InvokeFuncStorage;
-   return CallbackType(BindState::Create(
+ // Specializer for sending VideoDecoderConfigs to the media tab in devtools.
+ template <>
+-struct internal::MediaLogPropertyTypeConverter<VideoDecoderConfig> {
++struct MediaLogPropertyTypeConverter<VideoDecoderConfig> {
+   static base::Value Convert(const VideoDecoderConfig& value) {
+     base::Value result(base::Value::Type::DICTIONARY);
+     result.SetStringKey("codec", GetCodecName(value.codec()));

++++++ chromium-80-gcc-quiche.patch ++++++
>From 00f47df999c9b19e80fdc01db0ae9ca1b6a12b3a Mon Sep 17 00:00:00 2001
From: vasilvv <vasi...@google.com>
Date: Wed, 03 Apr 2019 13:58:53 -0700
Subject: [PATCH] GCC: do not delete move constructor of QuicStreamSendBuffer

QuicStreamSendBuffer constructor is implicitely required in the
initialization of the vector of substreams in QuicCryptoStream.
Though clang apparently ignores that, GCC fails to build.

BUG=chromium:819294

Originally submitted by José Dapena Paz <jose.dap...@lge.com> at 
https://quiche-review.googlesource.com/c/quiche/+/2420

PiperOrigin-RevId: 241800134
Change-Id: I4e3c97d6e5895d85340e8c1b740e6196d9104066
---

diff --git a/net/third_party/quiche/src/quic/core/quic_stream_send_buffer.h 
b/net/third_party/quiche/src/quic/core/quic_stream_send_buffer.h
index e34514b..74e9d0d 100644
--- a/net/third_party/quiche/src/quic/core/quic_stream_send_buffer.h
+++ b/net/third_party/quiche/src/quic/core/quic_stream_send_buffer.h
@@ -62,7 +62,7 @@
  public:
   explicit QuicStreamSendBuffer(QuicBufferAllocator* allocator);
   QuicStreamSendBuffer(const QuicStreamSendBuffer& other) = delete;
-  QuicStreamSendBuffer(QuicStreamSendBuffer&& other) = delete;
+  QuicStreamSendBuffer(QuicStreamSendBuffer&& other) = default;
   ~QuicStreamSendBuffer();
 
   // Save |data_length| of data starts at |iov_offset| in |iov| to send buffer.
++++++ chromium-79-include.patch -> chromium-80-include.patch ++++++
--- /work/SRC/openSUSE:Leap:15.2/chromium/chromium-79-include.patch     
2020-01-15 14:49:57.893398614 +0100
+++ /work/SRC/openSUSE:Leap:15.2/.chromium.new.26092/chromium-80-include.patch  
2020-02-17 17:35:05.268289986 +0100
@@ -1,131 +1,33 @@
-From f7c177d35242311ea7a2cf49a0980c61664f27ba Mon Sep 17 00:00:00 2001
-From: Jose Dapena Paz <jose.dap...@lge.com>
-Date: Fri, 25 Oct 2019 15:07:09 +0000
-Subject: [PATCH] IWYU: include algorithm to use std::lower_bound in 
ui/gfx/font.cc
-
-Fix GCC build because of missing include:
-../../ui/gfx/font.cc: In function ‘gfx::Font::Weight 
gfx::FontWeightFromInt(int)’:
-../../ui/gfx/font.cc:114:8: error: no matching function for call to 
‘lower_bound(const gfx::Font::Weight*, const gfx::Font::Weight*, int&, 
gfx::FontWeightFromInt(int)::<lambda(const gfx::Font::Weight&, const int&)>)’
-       });
-        ^
-In file included from /usr/include/c++/8/bits/char_traits.h:39,
-                 from /usr/include/c++/8/string:40,
-                 from ../../ui/gfx/font.h:8,
-                 from ../../ui/gfx/font.cc:5:
-/usr/include/c++/8/bits/stl_algobase.h:984:5: note: candidate: ‘template<class 
_ForwardIterator, class _Tp> _ForwardIterator 
std::lower_bound(_ForwardIterator, _ForwardIterator, const _Tp&)’
-     lower_bound(_ForwardIterator __first, _ForwardIterator __last,
-     ^~~~~~~~~~~
-/usr/include/c++/8/bits/stl_algobase.h:984:5: note:   template argument 
deduction/substitution failed:
-../../ui/gfx/font.cc:114:8: note:   candidate expects 3 arguments, 4 provided
-       });
-        ^
-
-Bug: 819294
-Change-Id: Ic59dcf3a06bdd54d1d426c08a61624873a0ff30c
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1879909
-Commit-Queue: Alexei Svitkine <asvitk...@chromium.org>
-Reviewed-by: Alexei Svitkine <asvitk...@chromium.org>
-Cr-Commit-Position: refs/heads/master@{#709472}
----
-
-diff --git a/ui/gfx/font.cc b/ui/gfx/font.cc
-index 21367fd7..92b159e 100644
---- a/ui/gfx/font.cc
-+++ b/ui/gfx/font.cc
-@@ -4,6 +4,8 @@
- 
- #include "ui/gfx/font.h"
- 
-+#include <algorithm>
-+
- #include "base/strings/utf_string_conversions.h"
- #include "build/build_config.h"
- #include "ui/gfx/platform_font.h"
-
-From 97eb905ba262382bc3583078761c68f4452aea71 Mon Sep 17 00:00:00 2001
-From: Jose Dapena Paz <jose.dap...@lge.com>
-Date: Fri, 25 Oct 2019 09:27:53 +0000
-Subject: [PATCH] IWYU: launch_manager.h uses std::vector
-
-Add #include <vector> for using std::vector. This fixes GCC build.
-
-./../chrome/browser/apps/launch_service/launch_manager.h:46:15: error: 
‘vector’ in namespace ‘std’ does not name a template type
-   static std::vector<base::FilePath> GetLaunchFilesFromCommandLine(
-               ^~~~~~
-
-Bug: 819294
-Change-Id: I02ec3a2914a8fbe3aa0041017a0228f4b0ca1ec9
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1879289
-Reviewed-by: Alexey Baskakov <lo...@chromium.org>
-Commit-Queue: José Dapena Paz <jose.dap...@lge.com>
-Cr-Commit-Position: refs/heads/master@{#709411}
+From 8273f4d3130e06fd8b6bef87b07c936304b971d9 Mon Sep 17 00:00:00 2001
+From: Raphael Kubo da Costa <raphael.kubo.da.co...@intel.com>
+Date: Tue, 10 Dec 2019 20:59:57 +0000
+Subject: [PATCH] [cros search service]: Include <cmath> for std::pow()
+
+IWYU. Follow up to commit 2b2ea3c09b ("[cros search service] Move shared
+string matching functions to //chrome"), which broke the libstdc++ build:
+
+    
../../chrome/common/string_matching/fuzzy_tokenized_string_match.cc:199:14: 
error: no member named 'pow' in namespace 'std'
+            std::pow(partial_match_penalty_rate, long_start - current - 1);
+            ~~~~~^
+
+Bug: 957519
+Change-Id: I66f61cb4f93cfa0bfa3d1b00ba391ddd8f31a7fb
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1960310
+Auto-Submit: Raphael Kubo da Costa <raphael.kubo.da.co...@intel.com>
+Reviewed-by: Jia Meng <jiam...@chromium.org>
+Commit-Queue: Raphael Kubo da Costa <raphael.kubo.da.co...@intel.com>
+Cr-Commit-Position: refs/heads/master@{#723499}
 ---
 
-diff --git a/chrome/browser/apps/launch_service/launch_manager.h 
b/chrome/browser/apps/launch_service/launch_manager.h
-index 00aeb9d..76570ea 100644
---- a/chrome/browser/apps/launch_service/launch_manager.h
-+++ b/chrome/browser/apps/launch_service/launch_manager.h
-@@ -6,6 +6,7 @@
- #define CHROME_BROWSER_APPS_LAUNCH_SERVICE_LAUNCH_MANAGER_H_
- 
- #include <string>
-+#include <vector>
- 
- #include "base/macros.h"
- 
-From e7407ce7fa262e9fd1a19dd0957e5a950520ee3a Mon Sep 17 00:00:00 2001
-From: Jose Dapena Paz <jose.dap...@lge.com>
-Date: Fri, 25 Oct 2019 08:25:45 +0000
-Subject: [PATCH] IWYU: include cstdint in register_context.h as it uses 
uintptr_t
-
-GCC build fix as build fails with this:
-../../base/profiler/register_context.h:31:1: error: ‘uintptr_t’ does not name 
a type; did you mean ‘intptr_t’?
- uintptr_t& AsUintPtr(T* value) {
- ^~~~~~~~~
- intptr_t
-../../base/profiler/register_context.h:110:3: error: ‘uintptr_t’ does not name 
a type; did you mean ‘intptr_t’?
-   uintptr_t stack_pointer;
-   ^~~~~~~~~
-   intptr_t
-../../base/profiler/register_context.h:111:3: error: ‘uintptr_t’ does not name 
a type; did you mean ‘intptr_t’?
-   uintptr_t frame_pointer;
-   ^~~~~~~~~
-   intptr_t
-../../base/profiler/register_context.h:112:3: error: ‘uintptr_t’ does not name 
a type; did you mean ‘intptr_t’?
-   uintptr_t instruction_pointer;
-   ^~~~~~~~~
-   intptr_t
-../../base/profiler/register_context.h:115:8: error: ‘uintptr_t’ does not name 
a type; did you mean ‘intptr_t’?
- inline uintptr_t& RegisterContextStackPointer(RegisterContext* context) {
-        ^~~~~~~~~
-        intptr_t
-../../base/profiler/register_context.h:119:8: error: ‘uintptr_t’ does not name 
a type; did you mean ‘intptr_t’?
- inline uintptr_t& RegisterContextFramePointer(RegisterContext* context) {
-        ^~~~~~~~~
-        intptr_t
-../../base/profiler/register_context.h:123:8: error: ‘uintptr_t’ does not name 
a type; did you mean ‘intptr_t’?
- inline uintptr_t& RegisterContextInstructionPointer(RegisterContext* context) 
{
-        ^~~~~~~~~
-        intptr_t
-
-
-Bug: 819294
-Change-Id: I49567b00a6f021686c52053a22fb9c502c84f1bc
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1879908
-Reviewed-by: Mike Wittman <witt...@chromium.org>
-Commit-Queue: José Dapena Paz <jose.dap...@lge.com>
-Cr-Commit-Position: refs/heads/master@{#709398}
----
-
-diff --git a/base/profiler/register_context.h 
b/base/profiler/register_context.h
-index 46c4250..7dd86ff 100644
---- a/base/profiler/register_context.h
-+++ b/base/profiler/register_context.h
-@@ -9,6 +9,7 @@
- #ifndef BASE_PROFILER_REGISTER_CONTEXT_H_
- #define BASE_PROFILER_REGISTER_CONTEXT_H_
- 
-+#include <cstdint>
- #include <type_traits>
+diff --git a/chrome/common/string_matching/fuzzy_tokenized_string_match.cc 
b/chrome/common/string_matching/fuzzy_tokenized_string_match.cc
+index 8351fa7..884ef63 100644
+--- a/chrome/common/string_matching/fuzzy_tokenized_string_match.cc
++++ b/chrome/common/string_matching/fuzzy_tokenized_string_match.cc
+@@ -5,6 +5,7 @@
+ #include "chrome/common/string_matching/fuzzy_tokenized_string_match.h"
+ 
+ #include <algorithm>
++#include <cmath>
+ #include <iterator>
  
- #include "build/build_config.h"
+ #include "base/i18n/case_conversion.h"

++++++ chromium-80-unbundle-libxml.patch ++++++
diff --git a/build/linux/unbundle/libxml.gn b/build/linux/unbundle/libxml.gn
index c481bd3..3aaa1a4 100644
--- a/build/linux/unbundle/libxml.gn
+++ b/build/linux/unbundle/libxml.gn
@@ -8,11 +8,52 @@ pkg_config("system_libxml") {
   packages = [ "libxml-2.0" ]
 }
 
-static_library("libxml") {
+source_set("libxml") {
+  public_configs = [ ":system_libxml" ]
+}
+
+static_library("libxml_utils") {
+  # Do not expand this visibility list without first consulting with the
+  # Security Team.
+  visibility = [
+    ":xml_reader",
+    ":xml_writer",
+    "//base/test:test_support",
+    "//services/data_decoder:xml_parser_fuzzer",
+  ]
   sources = [
     "chromium/libxml_utils.cc",
     "chromium/libxml_utils.h",
   ]
-
   public_configs = [ ":system_libxml" ]
 }
+
+static_library("xml_reader") {
+  # Do not expand this visibility list without first consulting with the
+  # Security Team.
+  visibility = [
+    "//base/test:test_support",
+    "//components/policy/core/common:unit_tests",
+    "//services/data_decoder:*",
+    "//tools/traffic_annotation/auditor:auditor_sources",
+  ]
+  sources = [
+    "chromium/xml_reader.cc",
+    "chromium/xml_reader.h",
+  ]
+  deps = [
+    ":libxml_utils",
+  ]
+}
+
+static_library("xml_writer") {
+  # The XmlWriter is considered safe to use from any target.
+  visibility = [ "*" ]
+  sources = [
+    "chromium/xml_writer.cc",
+    "chromium/xml_writer.h",
+  ]
+  deps = [
+    ":libxml_utils",
+  ]
+}
diff --git a/third_party/libxml/chromium/libxml_utils.h 
b/third_party/libxml/chromium/libxml_utils.h
index ff969fa..e0f3ecd 100644
--- a/third_party/libxml/chromium/libxml_utils.h
+++ b/third_party/libxml/chromium/libxml_utils.h
@@ -6,8 +6,7 @@
 #define THIRD_PARTY_LIBXML_CHROMIUM_LIBXML_UTILS_H_
 
 #include <string>
-
-#include "third_party/libxml/src/include/libxml/xmlreader.h"
+#include <libxml/xmlreader.h>
 
 // libxml uses a global error function pointer for reporting errors.
 // A ScopedXmlErrorFunc object lets you change the global error pointer
diff --git a/third_party/libxml/chromium/xml_reader.cc 
b/third_party/libxml/chromium/xml_reader.cc
index 92464f4..4779290 100644
--- a/third_party/libxml/chromium/xml_reader.cc
+++ b/third_party/libxml/chromium/xml_reader.cc
@@ -7,7 +7,8 @@
 #include <vector>
 
 #include "third_party/libxml/chromium/libxml_utils.h"
-#include "third_party/libxml/src/include/libxml/xmlreader.h"
+
+#include <libxml/xmlreader.h>
 
 using internal::XmlStringToStdString;
 
diff --git a/third_party/libxml/chromium/xml_writer.cc 
b/third_party/libxml/chromium/xml_writer.cc
index 51fce8e..aa3a34f 100644
--- a/third_party/libxml/chromium/xml_writer.cc
+++ b/third_party/libxml/chromium/xml_writer.cc
@@ -5,7 +5,8 @@
 #include "third_party/libxml/chromium/xml_writer.h"
 
 #include "third_party/libxml/chromium/libxml_utils.h"
-#include "third_party/libxml/src/include/libxml/xmlwriter.h"
+
+#include <libxml/xmlwriter.h>
 
 XmlWriter::XmlWriter() : writer_(nullptr), buffer_(nullptr) {}
 
++++++ chromium-79.0.3945.130.tar.xz -> chromium-80.0.3987.87.tar.xz ++++++
/work/SRC/openSUSE:Leap:15.2/chromium/chromium-79.0.3945.130.tar.xz 
/work/SRC/openSUSE:Leap:15.2/.chromium.new.26092/chromium-80.0.3987.87.tar.xz 
differ: char 25, line 1

++++++ chromium-fix-char_traits.patch ++++++
--- a/base/strings/char_traits.h
+++ b/base/strings/char_traits.h
@@ -67,9 +67,9 @@
   return __builtin_memcmp(s1, s2, n);
 #else
   for (; n; --n, ++s1, ++s2) {
-    if (*s1 < *s2)
+    if ((unsigned char)*s1 < (unsigned char)*s2)
       return -1;
-    if (*s1 > *s2)
+    if ((unsigned char)*s1 > (unsigned char)*s2)
       return 1;
   }
   return 0;
++++++ chromium-old-glibc-noexcept.patch ++++++
--- /var/tmp/diff_new_pack.G5YGuL/_old  2020-02-17 17:35:49.292407895 +0100
+++ /var/tmp/diff_new_pack.G5YGuL/_new  2020-02-17 17:35:49.296407904 +0100
@@ -1,7 +1,7 @@
-Index: chromium-79.0.3941.4/chrome/common/media_router/media_sink.cc
+Index: chromium-80.0.3987.16/chrome/common/media_router/media_sink.cc
 ===================================================================
---- chromium-79.0.3941.4.orig/chrome/common/media_router/media_sink.cc
-+++ chromium-79.0.3941.4/chrome/common/media_router/media_sink.cc
+--- chromium-80.0.3987.16.orig/chrome/common/media_router/media_sink.cc
++++ chromium-80.0.3987.16/chrome/common/media_router/media_sink.cc
 @@ -19,12 +19,12 @@ MediaSink::MediaSink(const MediaSink::Id
        provider_id_(provider_id) {}
  
@@ -17,10 +17,10 @@
  
  bool MediaSink::IsMaybeCloudSink() const {
    switch (icon_type_) {
-Index: chromium-79.0.3941.4/components/history/core/browser/history_types.cc
+Index: chromium-80.0.3987.16/components/history/core/browser/history_types.cc
 ===================================================================
---- chromium-79.0.3941.4.orig/components/history/core/browser/history_types.cc
-+++ chromium-79.0.3941.4/components/history/core/browser/history_types.cc
+--- chromium-80.0.3987.16.orig/components/history/core/browser/history_types.cc
++++ chromium-80.0.3987.16/components/history/core/browser/history_types.cc
 @@ -42,7 +42,7 @@ QueryResults::QueryResults(QueryResults&
    Swap(&other);
  }
@@ -39,10 +39,10 @@
  
  // MostVisitedURL 
--------------------------------------------------------------
  
-Index: chromium-79.0.3941.4/components/history/core/browser/history_types.h
+Index: chromium-80.0.3987.16/components/history/core/browser/history_types.h
 ===================================================================
---- chromium-79.0.3941.4.orig/components/history/core/browser/history_types.h
-+++ chromium-79.0.3941.4/components/history/core/browser/history_types.h
+--- chromium-80.0.3987.16.orig/components/history/core/browser/history_types.h
++++ chromium-80.0.3987.16/components/history/core/browser/history_types.h
 @@ -141,7 +141,7 @@ class QueryResults {
    ~QueryResults();
  
@@ -61,10 +61,10 @@
    ~QueryURLResult();
  
    // Indicates whether the call to HistoryBackend::QueryURL was successfull
-Index: chromium-79.0.3941.4/components/history/core/browser/url_row.cc
+Index: chromium-80.0.3987.16/components/history/core/browser/url_row.cc
 ===================================================================
---- chromium-79.0.3941.4.orig/components/history/core/browser/url_row.cc
-+++ chromium-79.0.3941.4/components/history/core/browser/url_row.cc
+--- chromium-80.0.3987.16.orig/components/history/core/browser/url_row.cc
++++ chromium-80.0.3987.16/components/history/core/browser/url_row.cc
 @@ -26,7 +26,7 @@ URLRow::~URLRow() {
  }
  
@@ -74,10 +74,10 @@
  
  void URLRow::Swap(URLRow* other) {
    std::swap(id_, other->id_);
-Index: chromium-79.0.3941.4/components/omnibox/browser/suggestion_answer.cc
+Index: chromium-80.0.3987.16/components/omnibox/browser/suggestion_answer.cc
 ===================================================================
---- chromium-79.0.3941.4.orig/components/omnibox/browser/suggestion_answer.cc
-+++ chromium-79.0.3941.4/components/omnibox/browser/suggestion_answer.cc
+--- chromium-80.0.3987.16.orig/components/omnibox/browser/suggestion_answer.cc
++++ chromium-80.0.3987.16/components/omnibox/browser/suggestion_answer.cc
 @@ -60,7 +60,7 @@ SuggestionAnswer::TextField::TextField(T
  SuggestionAnswer::TextField& SuggestionAnswer::TextField::operator=(
      const TextField&) = default;
@@ -87,10 +87,10 @@
  
  // static
  bool SuggestionAnswer::TextField::ParseTextField(const base::Value& 
field_json,
-Index: chromium-79.0.3941.4/components/policy/core/common/policy_map.cc
+Index: chromium-80.0.3987.16/components/policy/core/common/policy_map.cc
 ===================================================================
---- chromium-79.0.3941.4.orig/components/policy/core/common/policy_map.cc
-+++ chromium-79.0.3941.4/components/policy/core/common/policy_map.cc
+--- chromium-80.0.3987.16.orig/components/policy/core/common/policy_map.cc
++++ chromium-80.0.3987.16/components/policy/core/common/policy_map.cc
 @@ -52,7 +52,7 @@ PolicyMap::Entry::Entry(
  PolicyMap::Entry::~Entry() = default;
  
@@ -100,10 +100,10 @@
  
  PolicyMap::Entry PolicyMap::Entry::DeepCopy() const {
    Entry copy(level, scope, source, value ? value->CreateDeepCopy() : nullptr,
-Index: chromium-79.0.3941.4/components/search_provider_logos/logo_common.cc
+Index: chromium-80.0.3987.16/components/search_provider_logos/logo_common.cc
 ===================================================================
---- chromium-79.0.3941.4.orig/components/search_provider_logos/logo_common.cc
-+++ chromium-79.0.3941.4/components/search_provider_logos/logo_common.cc
+--- chromium-80.0.3987.16.orig/components/search_provider_logos/logo_common.cc
++++ chromium-80.0.3987.16/components/search_provider_logos/logo_common.cc
 @@ -14,14 +14,14 @@ LogoMetadata::LogoMetadata() = default;
  LogoMetadata::LogoMetadata(const LogoMetadata&) = default;
  LogoMetadata::LogoMetadata(LogoMetadata&&) noexcept = default;
@@ -130,10 +130,10 @@
  LogoCallbacks::~LogoCallbacks() = default;
  
  }  // namespace search_provider_logos
-Index: 
chromium-79.0.3941.4/components/signin/public/identity_manager/account_info.cc
+Index: 
chromium-80.0.3987.16/components/signin/public/identity_manager/account_info.cc
 ===================================================================
---- 
chromium-79.0.3941.4.orig/components/signin/public/identity_manager/account_info.cc
-+++ 
chromium-79.0.3941.4/components/signin/public/identity_manager/account_info.cc
+--- 
chromium-80.0.3987.16.orig/components/signin/public/identity_manager/account_info.cc
++++ 
chromium-80.0.3987.16/components/signin/public/identity_manager/account_info.cc
 @@ -58,7 +58,7 @@ CoreAccountInfo::CoreAccountInfo(CoreAcc
  CoreAccountInfo& CoreAccountInfo::operator=(const CoreAccountInfo& other) =
      default;
@@ -152,36 +152,36 @@
  
  bool AccountInfo::IsEmpty() const {
    return CoreAccountInfo::IsEmpty() && hosted_domain.empty() &&
-Index: chromium-79.0.3941.4/google_apis/gaia/core_account_id.cc
+Index: chromium-80.0.3987.16/google_apis/gaia/core_account_id.cc
 ===================================================================
---- chromium-79.0.3941.4.orig/google_apis/gaia/core_account_id.cc
-+++ chromium-79.0.3941.4/google_apis/gaia/core_account_id.cc
-@@ -14,7 +14,7 @@ CoreAccountId::~CoreAccountId() = defaul
+--- chromium-80.0.3987.16.orig/google_apis/gaia/core_account_id.cc
++++ chromium-80.0.3987.16/google_apis/gaia/core_account_id.cc
+@@ -24,7 +24,7 @@ CoreAccountId::~CoreAccountId() = defaul
  
  CoreAccountId& CoreAccountId::operator=(const CoreAccountId&) = default;
  
 -CoreAccountId& CoreAccountId::operator=(CoreAccountId&&) noexcept = default;
 +CoreAccountId& CoreAccountId::operator=(CoreAccountId&&) = default;
  
- CoreAccountId::CoreAccountId(const char* id) : id(id) {}
- 
-Index: chromium-79.0.3941.4/google_apis/gaia/core_account_id.h
+ // static
+ CoreAccountId CoreAccountId::FromGaiaId(const std::string& gaia_id) {
+Index: chromium-80.0.3987.16/google_apis/gaia/core_account_id.h
 ===================================================================
---- chromium-79.0.3941.4.orig/google_apis/gaia/core_account_id.h
-+++ chromium-79.0.3941.4/google_apis/gaia/core_account_id.h
-@@ -20,7 +20,7 @@ struct CoreAccountId {
+--- chromium-80.0.3987.16.orig/google_apis/gaia/core_account_id.h
++++ chromium-80.0.3987.16/google_apis/gaia/core_account_id.h
+@@ -30,7 +30,7 @@ struct CoreAccountId {
    ~CoreAccountId();
  
    CoreAccountId& operator=(const CoreAccountId&);
 -  CoreAccountId& operator=(CoreAccountId&&) noexcept;
 +  CoreAccountId& operator=(CoreAccountId&&);
  
-   // Those implicit constructor and conversion operator allow to
-   // progressively migrate the code to use this struct. Removing
-Index: chromium-79.0.3941.4/gpu/config/gpu_info.cc
+   // Checks if the account is valid or not.
+   bool empty() const;
+Index: chromium-80.0.3987.16/gpu/config/gpu_info.cc
 ===================================================================
---- chromium-79.0.3941.4.orig/gpu/config/gpu_info.cc
-+++ chromium-79.0.3941.4/gpu/config/gpu_info.cc
+--- chromium-80.0.3987.16.orig/gpu/config/gpu_info.cc
++++ chromium-80.0.3987.16/gpu/config/gpu_info.cc
 @@ -173,7 +173,7 @@ GPUInfo::GPUDevice& GPUInfo::GPUDevice::
      const GPUInfo::GPUDevice& other) = default;
  
@@ -191,11 +191,11 @@
  
  GPUInfo::GPUInfo()
      : optimus(false),
-Index: 
chromium-79.0.3941.4/third_party/openscreen/src/osp/public/service_info.h
+Index: 
chromium-80.0.3987.16/third_party/openscreen/src/osp/public/service_info.h
 ===================================================================
---- 
chromium-79.0.3941.4.orig/third_party/openscreen/src/osp/public/service_info.h
-+++ chromium-79.0.3941.4/third_party/openscreen/src/osp/public/service_info.h
-@@ -21,7 +21,7 @@ struct ServiceInfo {
+--- 
chromium-80.0.3987.16.orig/third_party/openscreen/src/osp/public/service_info.h
++++ chromium-80.0.3987.16/third_party/openscreen/src/osp/public/service_info.h
+@@ -22,7 +22,7 @@ struct ServiceInfo {
    ServiceInfo(ServiceInfo&&) MAYBE_NOEXCEPT = default;
    ServiceInfo(const ServiceInfo&) MAYBE_NOEXCEPT = default;
  

++++++ chromium-vaapi-fix.patch ++++++
--- /var/tmp/diff_new_pack.G5YGuL/_old  2020-02-17 17:35:49.320407959 +0100
+++ /var/tmp/diff_new_pack.G5YGuL/_new  2020-02-17 17:35:49.320407959 +0100
@@ -1,151 +1,84 @@
-From fe61d25580bd22d68b20323e7cd684dcba0cd3f4 Mon Sep 17 00:00:00 2001
-From: Akarshan Biswas <akarshanbis...@fedoraproject.org>
-Date: Tue, 9 Jul 2019 18:39:54 +0530
-Subject: [PATCH] Disable VAProfileNone on Linux and fix vaapi drm
+description: fix vaapi with vdpau
+author: Maxim Baz
+origin: chromium-vaapi patches from Arch linux
 
----
- .../gpu_video_decode_accelerator_factory.cc   |  2 ++
- .../vaapi/vaapi_video_decode_accelerator.cc   | 21 ++++++++++++++++
- media/gpu/vaapi/vaapi_wrapper.cc              | 24 +++++++++++++++----
- 3 files changed, 42 insertions(+), 5 deletions(-)
-
-Index: chromium-79.0.3945.36/media/gpu/gpu_video_decode_accelerator_factory.cc
-===================================================================
---- 
chromium-79.0.3945.36.orig/media/gpu/gpu_video_decode_accelerator_factory.cc
-+++ chromium-79.0.3945.36/media/gpu/gpu_video_decode_accelerator_factory.cc
-@@ -185,6 +185,8 @@ GpuVideoDecodeAcceleratorFactory::Create
-     vda = (this->*create_vda_function)(workarounds, gpu_preferences, 
media_log);
-     if (vda && vda->Initialize(config, client))
-       return vda;
-+      else
-+      LOG(ERROR) << "Initialization of one or more VDAs failed.";
-   }
- 
-   return nullptr;
-Index: chromium-79.0.3945.36/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
-===================================================================
---- 
chromium-79.0.3945.36.orig/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
-+++ chromium-79.0.3945.36/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
-@@ -63,6 +63,9 @@ void ReportToUMA(VAVDADecoderFailure fai
-                             VAVDA_DECODER_FAILURES_MAX + 1);
- }
- 
-+// Move this thing to chromeos only as build can fail if treat warnings as 
errors been set to true
-+#if defined(OS_ANDROID) || defined(OS_CHROMEOS)
-+
- // Returns true if the CPU is an Intel Gemini Lake or later (including Kaby
- // Lake) Cpu platform id's are referenced from the following file in kernel
- // source arch/x86/include/asm/intel-family.h
-@@ -76,6 +79,8 @@ bool IsGeminiLakeOrLater() {
-   return is_geminilake_or_later;
- }
- 
-+#endif
-+
- }  // namespace
- 
- #define RETURN_AND_NOTIFY_ON_FAILURE(result, log, error_code, ret) \
-@@ -637,6 +642,13 @@ void VaapiVideoDecodeAccelerator::Assign
-   va_surface_format_ = GetVaFormatForVideoCodecProfile(profile_);
-   std::vector<VASurfaceID> va_surface_ids;
- 
-+  // Nvidia doesn't support VAProfileNone, so don't try to create a temporary
-+  // copy buffer there. It's not needed anyways for hardware video decoding
-+  // to work.
-+  
-+  #if defined(OS_ANDROID) || defined(OS_CHROMEOS)
-+
-+
-   // If we aren't in BufferAllocationMode::kNone, we have to allocate a
+--- a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
++++ b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
+@@ -641,6 +641,7 @@ void VaapiVideoDecodeAccelerator::Assign
    // |vpp_vaapi_wrapper_| for VaapiPicture to DownloadFromSurface() the VA's
    // internal decoded frame.
-@@ -654,6 +666,7 @@ void VaapiVideoDecodeAccelerator::Assign
-                                  "Failed to create Context",
-                                  PLATFORM_FAILURE, );
-   }
-+  #endif
- 
-   for (size_t i = 0; i < buffers.size(); ++i) {
-     // If we aren't in BufferAllocationMode::kNone, this |picture| is
-@@ -665,9 +678,13 @@ void VaapiVideoDecodeAccelerator::Assign
+   if (buffer_allocation_mode_ != BufferAllocationMode::kNone &&
++      buffer_allocation_mode_ != BufferAllocationMode::kWrapVdpau &&
+       !vpp_vaapi_wrapper_) {
+     vpp_vaapi_wrapper_ = VaapiWrapper::Create(
+         VaapiWrapper::kVideoProcess, VAProfileNone,
+@@ -665,7 +666,8 @@ void VaapiVideoDecodeAccelerator::Assign
      PictureBuffer buffer = buffers[i];
      buffer.set_size(requested_pic_size_);
      std::unique_ptr<VaapiPicture> picture = vaapi_picture_factory_->Create(
-+      #if defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
-+           vaapi_wrapper_,
-+        #else
-         (buffer_allocation_mode_ == BufferAllocationMode::kNone)
+-        (buffer_allocation_mode_ == BufferAllocationMode::kNone)
++        ((buffer_allocation_mode_ == BufferAllocationMode::kNone) ||
++         (buffer_allocation_mode_ == BufferAllocationMode::kWrapVdpau))
              ? vaapi_wrapper_
              : vpp_vaapi_wrapper_,
-+        #endif
          make_context_current_cb_, bind_image_cb_, buffer);
-     RETURN_AND_NOTIFY_ON_FAILURE(picture, "Failed creating a VaapiPicture",
-                                  PLATFORM_FAILURE, );
-@@ -1093,6 +1110,9 @@ VaapiVideoDecodeAccelerator::GetSupporte
+@@ -1093,6 +1095,14 @@ VaapiVideoDecodeAccelerator::GetSupporte
  
  VaapiVideoDecodeAccelerator::BufferAllocationMode
  VaapiVideoDecodeAccelerator::DecideBufferAllocationMode() {
-+ #if defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
-+      return BufferAllocationMode::kNormal;
-+ #else
++  // NVIDIA blobs use VDPAU
++  if (base::StartsWith(VaapiWrapper::GetVendorString(),
++              "Splitted-Desktop Systems VDPAU",
++              base::CompareCase::SENSITIVE)) {
++    LOG(INFO) << "VA-API driver on VDPAU backend";
++    return BufferAllocationMode::kWrapVdpau;
++  }
++
    // TODO(crbug.com/912295): Enable a better BufferAllocationMode for IMPORT
    // |output_mode_| as well.
    if (output_mode_ == VideoDecodeAccelerator::Config::OutputMode::IMPORT)
-@@ -1128,6 +1148,7 @@ VaapiVideoDecodeAccelerator::DecideBuffe
-     return BufferAllocationMode::kReduced;
- 
-   return BufferAllocationMode::kSuperReduced;
-+  #endif
- }
- 
- bool 
VaapiVideoDecodeAccelerator::IsBufferAllocationModeReducedOrSuperReduced()
-Index: chromium-79.0.3945.36/media/gpu/vaapi/vaapi_wrapper.cc
-===================================================================
---- chromium-79.0.3945.36.orig/media/gpu/vaapi/vaapi_wrapper.cc
-+++ chromium-79.0.3945.36/media/gpu/vaapi/vaapi_wrapper.cc
-@@ -344,6 +344,10 @@ void VADisplayState::PreSandboxInitializ
-       base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE);
-   if (drm_file.IsValid())
-     VADisplayState::Get()->SetDrmFd(drm_file.GetPlatformFile());
-+    const char kNvidiaPath[] = "/dev/dri/nvidiactl";
-+    base::File nvidia_file = base::File(
-+      base::FilePath::FromUTF8Unsafe(kNvidiaPath),
-+      base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE);
+@@ -1105,7 +1115,7 @@ VaapiVideoDecodeAccelerator::DecideBuffe
+   // depends on the bitstream and sometimes it's not enough to cover the 
amount
+   // of frames needed by the client pipeline (see b/133733739).
+   // TODO(crbug.com/911754): Enable for VP9 Profile 2.
+-  if (IsGeminiLakeOrLater() &&
++  if (false && IsGeminiLakeOrLater() &&
+       (profile_ == VP9PROFILE_PROFILE0 || profile_ == VP8PROFILE_ANY)) {
+     // Add one to the reference frames for the one being currently egressed, 
and
+     // an extra allocation for both |client_| and |decoder_|, see
+--- a/media/gpu/vaapi/vaapi_video_decode_accelerator.h
++++ b/media/gpu/vaapi/vaapi_video_decode_accelerator.h
+@@ -204,6 +204,7 @@ class MEDIA_GPU_EXPORT VaapiVideoDecodeA
+     // Using |client_|s provided PictureBuffers and as many internally
+     // allocated.
+     kNormal,
++    kWrapVdpau,
+   };
+ 
+   // Decides the concrete buffer allocation mode, depending on the hardware
+--- a/media/gpu/vaapi/vaapi_wrapper.cc
++++ b/media/gpu/vaapi/vaapi_wrapper.cc
+@@ -1072,6 +1072,11 @@ VAImplementation VaapiWrapper::GetImplem
  }
  
- VADisplayState::VADisplayState()
-@@ -378,10 +382,11 @@ bool VADisplayState::InitializeOnce() {
-     case gl::kGLImplementationDesktopGL:
- #if defined(USE_X11)
-       va_display_ = vaGetDisplay(gfx::GetXDisplay());
--#else
--      LOG(WARNING) << "VAAPI video acceleration not available without "
--                      "DesktopGL (GLX).";
-+      if (vaDisplayIsValid(va_display_))
-+      break;
+ // static
++const std::string& VaapiWrapper::GetVendorString() {
++  return VADisplayState::Get()->va_vendor_string();
++}
 +
- #endif  // USE_X11
-+      va_display_ = vaGetDisplayDRM(drm_fd_.get());
-       break;
-     // Cannot infer platform from GL, try all available displays
-     case gl::kGLImplementationNone:
-@@ -414,8 +419,17 @@ bool VADisplayState::InitializeOnce() {
-   int major_version, minor_version;
-   VAStatus va_res = vaInitialize(va_display_, &major_version, &minor_version);
-   if (va_res != VA_STATUS_SUCCESS) {
--    LOG(ERROR) << "vaInitialize failed: " << vaErrorStr(va_res);
--    return false;
-+    LOG(ERROR) << "vaInitialize failed (ignore if using Wayland desktop 
environment, refer:(Github)akarshanbiswas/chromium-vaapi/issues/7): " << 
vaErrorStr(va_res);
-+     va_display_ = vaGetDisplayDRM(drm_fd_.get());
-+     if (!vaDisplayIsValid(va_display_)) {
-+      LOG(ERROR) << "Could not get a valid DRM VA display";
-+      return false;
-+     }
-+      va_res = vaInitialize(va_display_, &major_version, &minor_version);
-+      if (va_res != VA_STATUS_SUCCESS) {
-+              LOG(ERROR) << "vaInitialize failed using DRM: " << 
vaErrorStr(va_res);
-+              return false;
-+      }
-   }
++// static
+ scoped_refptr<VaapiWrapper> VaapiWrapper::Create(
+     CodecMode mode,
+     VAProfile va_profile,
+--- a/media/gpu/vaapi/vaapi_wrapper.h
++++ b/media/gpu/vaapi/vaapi_wrapper.h
+@@ -119,6 +119,9 @@ class MEDIA_GPU_EXPORT VaapiWrapper
+   // Returns the type of the underlying VA-API implementation.
+   static VAImplementation GetImplementationType();
  
-   va_initialized_ = true;
++  // Returns the VAAPI vendor string (obtained using vaQueryVendorString()).
++  static const std::string& GetVendorString();
++
+   // Return an instance of VaapiWrapper initialized for |va_profile| and
+   // |mode|. |report_error_to_uma_cb| will be called independently from
+   // reporting errors to clients via method return values.

++++++ chromium-vaapi.patch ++++++
--- /var/tmp/diff_new_pack.G5YGuL/_old  2020-02-17 17:35:49.332407986 +0100
+++ /var/tmp/diff_new_pack.G5YGuL/_new  2020-02-17 17:35:49.332407986 +0100
@@ -1,22 +1,8 @@
-From abc7295ca1653c85472916909f0eb76e28e79a58 Mon Sep 17 00:00:00 2001
-From: Akarshan Biswas <akarshan.bis...@gmail.com>
-Date: Thu, 24 Jan 2019 12:45:29 +0530
-Subject: [PATCH] Enable mojo with VDA2 on Linux
-
----
- chrome/browser/about_flags.cc                |  8 ++++----
- chrome/browser/flag_descriptions.cc          |  9 +++++++--
- chrome/browser/flag_descriptions.h           | 10 ++++++++--
- gpu/config/software_rendering_list.json      |  3 ++-
- media/media_options.gni                      |  9 ++++++---
- media/mojo/services/gpu_mojo_media_client.cc |  4 ++--
- 6 files changed, 29 insertions(+), 14 deletions(-)
-
-Index: chromium-78.0.3904.44/chrome/browser/about_flags.cc
+Index: chromium-80.0.3987.87/chrome/browser/about_flags.cc
 ===================================================================
---- chromium-78.0.3904.44.orig/chrome/browser/about_flags.cc
-+++ chromium-78.0.3904.44/chrome/browser/about_flags.cc
-@@ -1738,14 +1738,14 @@ const FeatureEntry kFeatureEntries[] = {
+--- chromium-80.0.3987.87.orig/chrome/browser/about_flags.cc
++++ chromium-80.0.3987.87/chrome/browser/about_flags.cc
+@@ -1865,7 +1865,7 @@ const FeatureEntry kFeatureEntries[] = {
          "disable-accelerated-video-decode",
          flag_descriptions::kAcceleratedVideoDecodeName,
          flag_descriptions::kAcceleratedVideoDecodeDescription,
@@ -25,15 +11,7 @@
          SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
      },
      {
-         "disable-accelerated-video-encode",
-         flag_descriptions::kAcceleratedVideoEncodeName,
-         flag_descriptions::kAcceleratedVideoEncodeDescription,
--        kOsMac | kOsWin | kOsCrOS | kOsAndroid,
-+        kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux,
-         SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoEncode),
-     },
-     {"enable-history-favicons-google-server-query",
-@@ -2216,10 +2216,10 @@ const FeatureEntry kFeatureEntries[] = {
+@@ -2325,10 +2325,10 @@ const FeatureEntry kFeatureEntries[] = {
       FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)},
  #endif  // !defined(OS_ANDROID)
  #endif  // ENABLE_VR
@@ -46,16 +24,16 @@
       SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
  #endif  // OS_CHROMEOS
      {"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName,
-Index: chromium-78.0.3904.44/chrome/browser/flag_descriptions.cc
+Index: chromium-80.0.3987.87/chrome/browser/flag_descriptions.cc
 ===================================================================
---- chromium-78.0.3904.44.orig/chrome/browser/flag_descriptions.cc
-+++ chromium-78.0.3904.44/chrome/browser/flag_descriptions.cc
-@@ -3064,15 +3064,20 @@ const char kMacSystemMediaPermissionsInf
+--- chromium-80.0.3987.87.orig/chrome/browser/flag_descriptions.cc
++++ chromium-80.0.3987.87/chrome/browser/flag_descriptions.cc
+@@ -3160,15 +3160,20 @@ const char kMetalDescription[] =
  
  #endif
  
 -// Chrome OS 
-------------------------------------------------------------------
-+// Chrome OS 
Linux-------------------------------------------------------------------
++// Chrome OS & 
Linux------------------------------------------------------------
  
 -#if defined(OS_CHROMEOS)
 +#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
@@ -67,17 +45,17 @@
      "available.";
 +#endif
 +
-+// Chrome OS --------------------------------------------------
++// Chrome OS 
-------------------------------------------------------------------
 +
 +#if defined(OS_CHROMEOS)
  
  const char kAggregatedMlAppRankingName[] = "Rank suggested apps with ML.";
  const char kAggregatedMlAppRankingDescription[] =
-Index: chromium-78.0.3904.44/chrome/browser/flag_descriptions.h
+Index: chromium-80.0.3987.87/chrome/browser/flag_descriptions.h
 ===================================================================
---- chromium-78.0.3904.44.orig/chrome/browser/flag_descriptions.h
-+++ chromium-78.0.3904.44/chrome/browser/flag_descriptions.h
-@@ -1821,11 +1821,15 @@ extern const char kPermissionPromptPersi
+--- chromium-80.0.3987.87.orig/chrome/browser/flag_descriptions.h
++++ chromium-80.0.3987.87/chrome/browser/flag_descriptions.h
+@@ -1863,11 +1863,15 @@ extern const char kPermissionPromptPersi
  
  // Chrome OS 
------------------------------------------------------------------
  
@@ -87,17 +65,17 @@
  extern const char kAcceleratedMjpegDecodeName[];
  extern const char kAcceleratedMjpegDecodeDescription[];
  
-+#endif // defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
++#endif
 +
 +#if defined(OS_CHROMEOS)
 +
  extern const char kAggregatedMlAppRankingName[];
  extern const char kAggregatedMlAppRankingDescription[];
  
-Index: chromium-78.0.3904.44/gpu/config/software_rendering_list.json
+Index: chromium-80.0.3987.87/gpu/config/software_rendering_list.json
 ===================================================================
---- chromium-78.0.3904.44.orig/gpu/config/software_rendering_list.json
-+++ chromium-78.0.3904.44/gpu/config/software_rendering_list.json
+--- chromium-80.0.3987.87.orig/gpu/config/software_rendering_list.json
++++ chromium-80.0.3987.87/gpu/config/software_rendering_list.json
 @@ -334,11 +334,12 @@
      },
      {

++++++ gpu-timeout.patch ++++++
description: 10 seconds may not be enough, so don't kill the gpu process until 
20.
author: Chad MILLER <chad.mil...@canonical.com>
bug-debian: http://bugs.debian.org/781940

--- a/gpu/ipc/service/gpu_watchdog_thread.cc
+++ b/gpu/ipc/service/gpu_watchdog_thread.cc
@@ -37,7 +37,7 @@ const int kGpuTimeout = 30000;
 // hangs at context creation during startup. See https://crbug.com/918490.
 const int kGpuTimeout = 15000;
 #else
-const int kGpuTimeout = 10000;
+const int kGpuTimeout = 20000;
 #endif
 
 #if defined(USE_X11)

Reply via email to