We truncated the diff of some files because they were too big.
If you want to see the full diff for every file, click here.
Overview
Submit package home:Kiel...es:Extra / chromium-...eg-extra to package Extra / chromium-ffmpeg-extra
chromium-ffmpeg-extra.changes
Changed
x
1
2
-------------------------------------------------------------------
3
+Thu Jul 14 16:38:50 UTC 2022 - Carsten Ziepke <kieltux@gmail.com>
4
+
5
+- Rebase chromium 103.0.5060.114 for use as chromium-ffmpeg-extra
6
+ - Fixes problems with audio and youtube video playback
7
+
8
+-------------------------------------------------------------------
9
+Sat Jul 9 12:52:33 UTC 2022 - Andreas Stieger <andreas.stieger@gmx.de>
10
+
11
+- Chromium 103.0.5060.114 (boo#1201216)
12
+ * CVE-2022-2294: Heap buffer overflow in WebRTC
13
+ * CVE-2022-2295: Type Confusion in V8
14
+ * CVE-2022-2296: Use after free in Chrome OS Shell
15
+
16
+-------------------------------------------------------------------
17
+Thu Jul 7 18:07:43 UTC 2022 - Andreas Stieger <andreas.stieger@gmx.de>
18
+
19
+- Chromium 103.0.5060.66
20
+ * no upstream release notes
21
+
22
+-------------------------------------------------------------------
23
+Sat Jun 25 10:43:48 UTC 2022 - Callum Farmer <gmbr3@opensuse.org>
24
+
25
+- Chromium 103.0.5060.53 (boo#1200783)
26
+ * CVE-2022-2156: Use after free in Base
27
+ * CVE-2022-2157: Use after free in Interest groups
28
+ * CVE-2022-2158: Type Confusion in V8
29
+ * CVE-2022-2160: Insufficient policy enforcement in DevTools
30
+ * CVE-2022-2161: Use after free in WebApp Provider
31
+ * CVE-2022-2162: Insufficient policy enforcement in File System API
32
+ * CVE-2022-2163: Use after free in Cast UI and Toolbar
33
+ * CVE-2022-2164: Inappropriate implementation in Extensions API
34
+ * CVE-2022-2165: Insufficient data validation in URL formatting
35
+- Added patches:
36
+ * chromium-103-FrameLoadRequest-type.patch
37
+ * chromium-103-SubstringSetMatcher-packed.patch
38
+ * chromium-103-VirtualCursor-std-layout.patch
39
+ * chromium-103-compiler.patch
40
+- Removed patches:
41
+ * chromium-102-compiler.patch
42
+ * chromium-91-sql-standard-layout-type.patch
43
+ * chromium-101-libxml-unbundle.patch
44
+ * chromium-102-fenced_frame_utils-include.patch
45
+ * chromium-102-swiftshader-template-instantiation.patch
46
+ * chromium-102-symbolize-include.patch
47
+ * chromium-97-arm-tflite-cast.patch
48
+ * chromium-97-ScrollView-reference.patch
49
+
50
+-------------------------------------------------------------------
51
+Fri Jun 10 15:35:20 UTC 2022 - Andreas Stieger <andreas.stieger@gmx.de>
52
+
53
+- Chromium 102.0.5005.115 (boo#1200423)
54
+ * CVE-2022-2007: Use after free in WebGPU
55
+ * CVE-2022-2008: Out of bounds memory access in WebGL
56
+ * CVE-2022-2010: Out of bounds read in compositing
57
+ * CVE-2022-2011: Use after free in ANGLE
58
+
59
+-------------------------------------------------------------------
60
+Wed Jun 8 13:40:43 UTC 2022 - Callum Farmer <gmbr3@opensuse.org>
61
+
62
+- Switch to GTK4 on TW and Leap 15.4+ (boo#1200139)
63
+
64
+-------------------------------------------------------------------
65
+Wed Jun 1 09:43:54 UTC 2022 - Callum Farmer <gmbr3@opensuse.org>
66
+
67
+- Disable ARM control flow integrity, it causes build issues
68
+ at the moment
69
+- Try a different SVG (black logo on GNOME)
70
+- Removed patches:
71
+ * chromium-third_party-symbolize-missing-include.patch
72
+ (replaced by chromium-102-symbolize-include.patch)
73
+
74
+-------------------------------------------------------------------
75
+Fri May 27 19:40:42 UTC 2022 - Callum Farmer <gmbr3@opensuse.org>
76
+
77
+- Chromium 102.0.5001.61 (boo#1199893)
78
+ * CVE-2022-1853: Use after free in Indexed DB
79
+ * CVE-2022-1854: Use after free in ANGLE
80
+ * CVE-2022-1855: Use after free in Messaging
81
+ * CVE-2022-1856: Use after free in User Education
82
+ * CVE-2022-1857: Insufficient policy enforcement in File System API
83
+ * CVE-2022-1858: Out of bounds read in DevTools
84
+ * CVE-2022-1859: Use after free in Performance Manager
85
+ * CVE-2022-1860: Use after free in UI Foundations
86
+ * CVE-2022-1861: Use after free in Sharing
87
+ * CVE-2022-1862: Inappropriate implementation in Extensions
88
+ * CVE-2022-1863: Use after free in Tab Groups
89
+ * CVE-2022-1864: Use after free in WebApp Installs
90
+ * CVE-2022-1865: Use after free in Bookmarks
91
+ * CVE-2022-1866: Use after free in Tablet Mode
92
+ * CVE-2022-1867: Insufficient validation of untrusted input in Data Transfer
93
+ * CVE-2022-1868: Inappropriate implementation in Extensions API
94
+ * CVE-2022-1869: Type Confusion in V8
95
+ * CVE-2022-1870: Use after free in App Service
96
+ * CVE-2022-1871: Insufficient policy enforcement in File System API
97
+ * CVE-2022-1872: Insufficient policy enforcement in Extensions API
98
+ * CVE-2022-1873: Insufficient policy enforcement in COOP
99
+ * CVE-2022-1874: Insufficient policy enforcement in Safe Browsing
100
+ * CVE-2022-1875: Inappropriate implementation in PDF
101
+ * CVE-2022-1876: Heap buffer overflow in DevTools
102
+- Added patches:
103
+ * chromium-102-compiler.patch
104
+ * chromium-102-fenced_frame_utils-include.patch
105
+ * chromium-102-regex_pattern-array.patch
106
+ * chromium-102-swiftshader-template-instantiation.patch
107
+ * chromium-102-symbolize-include.patch
108
+ * ffmpeg-new-channel-layout.patch
109
+- Removed patches:
110
+ * chromium-100-compiler.patch
111
+ * chromium-80-QuicStreamSendBuffer-deleted-move-constructor.patch
112
+ * chromium-95-quiche-include.patch
113
+ * chromium-fix-swiftshader-template.patch
114
+ * chromium-missing-include-tuple.patch
115
+ * chromium-webrtc-stats-missing-vector.patch
116
+ * chromium-101-segmentation_platform-type.patch
117
+
118
+-------------------------------------------------------------------
119
+Sun May 15 09:03:28 UTC 2022 - Andreas Stieger <andreas.stieger@gmx.de>
120
+
121
+- Chromium 101.0.4951.67
122
+ * fixes for other platforms
123
+
124
+-------------------------------------------------------------------
125
+Wed May 11 06:33:01 UTC 2022 - Andreas Stieger <andreas.stieger@gmx.de>
126
+
127
+- Chromium 101.0.4951.64 (boo#1199409)
128
+ * CVE-2022-1633: Use after free in Sharesheet
129
+ * CVE-2022-1634: Use after free in Browser UI
130
+ * CVE-2022-1635: Use after free in Permission Prompts
131
+ * CVE-2022-1636: Use after free in Performance APIs
132
+ * CVE-2022-1637: Inappropriate implementation in Web Contents
133
+ * CVE-2022-1638: Heap buffer overflow in V8 Internationalization
134
+ * CVE-2022-1639: Use after free in ANGLE
135
+ * CVE-2022-1640: Use after free in Sharing
136
+ * CVE-2022-1641: Use after free in Web UI Diagnostics
137
+
138
+-------------------------------------------------------------------
139
+Wed May 4 09:34:58 UTC 2022 - Callum Farmer <gmbr3@opensuse.org>
140
+
141
+- Chromium 101.0.4951.54 (boo#1199118)
142
+- Chromium 101.0.4951.41 (boo#1198917)
143
+ * CVE-2022-1477: Use after free in Vulkan
144
+ * CVE-2022-1478: Use after free in SwiftShader
145
+ * CVE-2022-1479: Use after free in ANGLE
146
+ * CVE-2022-1480: Use after free in Device API
147
+ * CVE-2022-1481: Use after free in Sharing
148
+ * CVE-2022-1482: Inappropriate implementation in WebGL
149
+ * CVE-2022-1483: Heap buffer overflow in WebGPU
150
+ * CVE-2022-1484: Heap buffer overflow in Web UI Settings
151
+ * CVE-2022-1485: Use after free in File System API
152
+ * CVE-2022-1486: Type Confusion in V8
153
+ * CVE-2022-1487: Use after free in Ozone
154
+ * CVE-2022-1488: Inappropriate implementation in Extensions API
155
+ * CVE-2022-1489: Out of bounds memory access in UI Shelf
156
+ * CVE-2022-1490: Use after free in Browser Switcher
157
+ * CVE-2022-1491: Use after free in Bookmarks
158
+ * CVE-2022-1492: Insufficient data validation in Blink Editing
159
+ * CVE-2022-1493: Use after free in Dev Tools
160
+ * CVE-2022-1494: Insufficient data validation in Trusted Types
161
+ * CVE-2022-1495: Incorrect security UI in Downloads
162
+ * CVE-2022-1496: Use after free in File Manager
163
+ * CVE-2022-1497: Inappropriate implementation in Input
164
+ * CVE-2022-1498: Inappropriate implementation in HTML Parser
165
+ * CVE-2022-1499: Inappropriate implementation in WebAuthentication
166
+ * CVE-2022-1500: Insufficient data validation in Dev Tools
167
+ * CVE-2022-1501: Inappropriate implementation in iframe
168
+- Added patches:
169
+ * chromium-101-libxml-unbundle.patch
170
+ * chromium-101-segmentation_platform-type.patch
171
+- Removed patches:
172
+ * chromium-100-SCTHashdanceMetadata-move.patch
173
+ * chromium-100-GLImplementationParts-constexpr.patch
174
+ * chromium-100-macro-typo.patch
175
+
176
+-------------------------------------------------------------------
177
Sun Apr 24 05:23:26 UTC 2022 - Carsten Ziepke <kieltux@gmail.com>
178
179
- Rebase chromium 100.0.4896.127 for use as chromium-ffmpeg-extra
180
181
-------------------------------------------------------------------
182
+Thu Apr 21 10:04:22 UTC 2022 - Callum Farmer <gmbr3@opensuse.org>
183
+
184
+- Fixes for go 1.18
185
+
186
+-------------------------------------------------------------------
187
Fri Apr 15 07:29:35 UTC 2022 - Andreas Stieger <andreas.stieger@gmx.de>
188
189
- Chromium 100.0.4896.127 (boo#1198509)
190
chromium-ffmpeg-extra.spec
Changed
230
1
2
%define outputdir out
3
# bsc#1108175
4
%define __provides_exclude ^lib.*\\.so.*$
5
-%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150400
6
+%if 0%{?suse_version} >= 1550
7
%bcond_without system_icu
8
%else
9
%bcond_with system_icu
10
%endif
11
+%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150400
12
+%bcond_without gtk4
13
+%else
14
+%bcond_with gtk4
15
+%endif
16
%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150200
17
%bcond_without pipewire
18
%else
19
20
# Chromium built with GCC 11 and LTO enabled crashes (boo#1194055)
21
%bcond_with lto
22
Name: chromium-ffmpeg-extra
23
-Version: 100.0.4896.127
24
+Version: 103.0.5060.114
25
Release: 0
26
Summary: Google's open source browser project
27
License: BSD-3-Clause AND LGPL-2.1-or-later
28
29
Source0: https://commondatastorage.googleapis.com/chromium-browser-official/%{rname}-%{version}.tar.xz
30
Source1: esbuild.tar.gz
31
Source3: README.SUSE
32
+Source4: ffmpeg-new-channel-layout.patch
33
# Toolchain definitions
34
Source30: master_preferences
35
Source104: chromium-symbolic.svg
36
37
Patch11: chromium-lp151-old-drm.patch
38
# gentoo/fedora/arch patchset
39
Patch12: chromium-78-protobuf-RepeatedPtrField-export.patch
40
-Patch13: chromium-80-QuicStreamSendBuffer-deleted-move-constructor.patch
41
-Patch15: chromium-100-compiler.patch
42
+Patch15: chromium-103-compiler.patch
43
Patch17: chromium-86-ImageMemoryBarrierData-init.patch
44
Patch21: chromium-gcc11.patch
45
Patch40: chromium-91-java-only-allowed-in-android-builds.patch
46
-Patch46: chromium-91-sql-standard-layout-type.patch
47
Patch50: chromium-clang-nomerge.patch
48
Patch62: chromium-93-ffmpeg-4.4.patch
49
Patch63: chromium-ffmpeg-lp152.patch
50
Patch65: chromium-94-sql-no-assert.patch
51
+Patch68: chromium-94-ffmpeg-roll.patch
52
Patch69: chromium-93-InkDropHost-crash.patch
53
-Patch72: chromium-95-quiche-include.patch
54
Patch78: chromium-98-EnumTable-crash.patch
55
-Patch80: chromium-97-ScrollView-reference.patch
56
-Patch84: chromium-third_party-symbolize-missing-include.patch
57
-Patch85: chromium-fix-swiftshader-template.patch
58
-Patch86: chromium-97-arm-tflite-cast.patch
59
Patch87: chromium-98-gtk4-build.patch
60
-Patch89: chromium-100-GLImplementationParts-constexpr.patch
61
Patch90: chromium-100-InMilliseconds-constexpr.patch
62
-Patch91: chromium-100-SCTHashdanceMetadata-move.patch
63
-Patch92: chromium-100-macro-typo.patch
64
-Patch93: chromium-missing-include-tuple.patch
65
-Patch94: chromium-webrtc-stats-missing-vector.patch
66
-Patch101: chromium-86-fix-vaapi-on-intel.patch
67
+Patch98: chromium-102-regex_pattern-array.patch
68
+Patch101: chromium-103-FrameLoadRequest-type.patch
69
+Patch102: chromium-103-SubstringSetMatcher-packed.patch
70
+Patch103: chromium-103-VirtualCursor-std-layout.patch
71
+Patch201: chromium-86-fix-vaapi-on-intel.patch
72
# PATCH-FIX-SUSE: allow prop codecs to be set with chromium branding
73
-Patch102: chromium-prop-codecs.patch
74
+Patch202: chromium-prop-codecs.patch
75
BuildRequires: SDL-devel
76
BuildRequires: bison
77
BuildRequires: cups-devel
78
79
BuildRequires: elfutils
80
BuildRequires: fdupes
81
BuildRequires: flex
82
+BuildRequires: git
83
BuildRequires: gn >= 0.1807
84
BuildRequires: gperf
85
BuildRequires: hicolor-icon-theme
86
87
BuildRequires: pkgconfig(flac++)
88
BuildRequires: pkgconfig(gbm)
89
BuildRequires: pkgconfig(glib-2.0)
90
-BuildRequires: pkgconfig(gtk+-2.0)
91
-BuildRequires: pkgconfig(gtk+-3.0)
92
BuildRequires: pkgconfig(hunspell)
93
BuildRequires: pkgconfig(imlib2)
94
BuildRequires: pkgconfig(jack)
95
96
%if %{with system_zlib}
97
BuildRequires: pkgconfig(zlib)
98
%endif
99
+%if %{with gtk4}
100
+BuildRequires: pkgconfig(atk-bridge-2.0)
101
+BuildRequires: pkgconfig(gtk4)
102
+%else
103
+BuildRequires: pkgconfig(gtk+-3.0)
104
+%endif
105
%if %{with clang}
106
%if %{?suse_version} < 1550
107
BuildRequires: clang12
108
109
%prep
110
%setup -q -n %{rname}-%{version}
111
%autopatch -p1
112
+%if 0%{?suse_version} >= 1550
113
+patch -R -p1 < %{PATCH68}
114
+%endif
115
+patch -R -p1 < %{SOURCE4}
116
117
%build
118
# esbuild
119
120
ln -s %{_bindir}/eu-strip buildtools/third_party/eu-strip/bin/eu-strip
121
122
# python3
123
-mkdir $HOME/bin
124
+mkdir -p $HOME/bin
125
export PYTHON=python3
126
ln -sfn %{_bindir}/$PYTHON $HOME/bin/python
127
export PATH="$HOME/bin/:$PATH"
128
129
third_party/ced
130
third_party/cld_3
131
third_party/closure_compiler
132
+ third_party/cpuinfo
133
third_party/crashpad
134
third_party/crashpad/crashpad/third_party/lss
135
third_party/crashpad/crashpad/third_party/zlib
136
137
third_party/dav1d
138
third_party/dawn
139
third_party/dawn/third_party
140
- third_party/dawn/third_party/tint/src/ast
141
third_party/depot_tools
142
third_party/depot_tools/third_party/six
143
third_party/devscripts
144
145
third_party/fdlibm
146
third_party/fft2d
147
third_party/flatbuffers
148
+ third_party/fp16
149
third_party/fusejs/dist
150
+ third_party/fxdiv
151
third_party/gemmlowp
152
third_party/google_input_tools
153
third_party/google_input_tools/third_party/closure_library
154
155
third_party/libx11/src
156
third_party/libxcb-keysyms/keysyms
157
third_party/libxml/chromium
158
- third_party/libXNVCtrl
159
third_party/libyuv
160
third_party/libzip
161
third_party/lottie
162
163
third_party/node
164
third_party/node/node_modules/polymer-bundler/lib/third_party/UglifyJS2
165
third_party/one_euro_filter
166
- third_party/opencv
167
third_party/openscreen
168
third_party/openscreen/src/third_party/mozilla
169
third_party/openscreen/src/third_party/tinycbor/src/src
170
171
third_party/private_membership
172
third_party/protobuf
173
third_party/protobuf/third_party/six
174
+ third_party/pthreadpool
175
third_party/pyjson5
176
third_party/qcms
177
third_party/rnnoise
178
179
third_party/swiftshader/third_party/llvm-10.0
180
third_party/swiftshader/third_party/llvm-subzero
181
third_party/swiftshader/third_party/marl
182
- third_party/swiftshader/third_party/SPIRV-Headers/include/spirv/unified1
183
+ third_party/swiftshader/third_party/SPIRV-Headers
184
+ third_party/swiftshader/third_party/SPIRV-Tools
185
third_party/swiftshader/third_party/subzero
186
third_party/tensorflow-text
187
third_party/tflite
188
third_party/tflite/src/third_party/eigen3
189
third_party/tflite/src/third_party/fft2d
190
third_party/ukey2
191
- third_party/usrsctp
192
third_party/utf
193
third_party/vulkan
194
third_party/wayland
195
196
third_party/wuffs
197
third_party/x11proto
198
third_party/xcbproto
199
+ third_party/xnnpack
200
third_party/zlib/google
201
third_party/zxcvbn-cpp
202
url/third_party/mozilla
203
204
%endif
205
%ifarch aarch64
206
%if %{without clang}
207
-export CXXFLAGS="${CXXFLAGS} -flax-vector-conversions"
208
+export CXXFLAGS="${CXXFLAGS} -flax-vector-conversions -fno-omit-frame-pointer"
209
%else
210
%if 0%{?sle_version} == 150200
211
export CXXFLAGS="${CXXFLAGS} -flax-vector-conversions"
212
213
myconf_gn+=" rtc_use_h264=false"
214
myconf_gn+=" use_v8_context_snapshot=true"
215
myconf_gn+=" v8_use_external_startup_data=true"
216
+%if %{with gtk4}
217
+myconf_gn+=" gtk_version=4"
218
+%endif
219
# See dependency logic in third_party/BUILD.gn
220
%if %{with system_harfbuzz}
221
myconf_gn+=" use_system_harfbuzz=true"
222
223
224
%ifarch aarch64
225
myconf_gn+=" host_cpu=\"arm64\""
226
+myconf_gn+=" arm_control_flow_integrity=\"none\""
227
%endif
228
229
# GN does not support passing cflags:
230
chromium-100-GLImplementationParts-constexpr.patch
Deleted
94
1
2
-From d32156fd3773330eca99e9cba5e18db57aaa1a53 Mon Sep 17 00:00:00 2001
3
-From: Stephan Hartmann <stha09@googlemail.com>
4
-Date: Sat, 19 Feb 2022 10:14:24 +0000
5
-Subject: PATCH GCC: make GLImplementationParts constructors constexpr
6
-
7
-Fix build error in GCC, as the constexpr operator== requires its
8
-invocations to be also constexpr.
9
----
10
- ui/gl/gl_implementation.cc | 23 -----------------------
11
- ui/gl/gl_implementation.h | 25 +++++++++++++++++++++++--
12
- 2 files changed, 23 insertions(+), 25 deletions(-)
13
-
14
-diff --git a/ui/gl/gl_implementation.cc b/ui/gl/gl_implementation.cc
15
-index e4e5456..3e4a47c 100644
16
---- a/ui/gl/gl_implementation.cc
17
-+++ b/ui/gl/gl_implementation.cc
18
-@@ -26,29 +26,6 @@
19
-
20
- namespace gl {
21
-
22
--ANGLEImplementation MakeANGLEImplementation(
23
-- const GLImplementation gl_impl,
24
-- const ANGLEImplementation angle_impl) {
25
-- if (gl_impl == kGLImplementationEGLANGLE) {
26
-- if (angle_impl == ANGLEImplementation::kNone) {
27
-- return ANGLEImplementation::kDefault;
28
-- } else {
29
-- return angle_impl;
30
-- }
31
-- } else {
32
-- return ANGLEImplementation::kNone;
33
-- }
34
--}
35
--
36
--GLImplementationParts::GLImplementationParts(
37
-- const ANGLEImplementation angle_impl)
38
-- : gl(kGLImplementationEGLANGLE),
39
-- angle(MakeANGLEImplementation(kGLImplementationEGLANGLE, angle_impl)) {}
40
--
41
--GLImplementationParts::GLImplementationParts(const GLImplementation gl_impl)
42
-- : gl(gl_impl),
43
-- angle(MakeANGLEImplementation(gl_impl, ANGLEImplementation::kDefault)) {}
44
--
45
- bool GLImplementationParts::IsValid() const {
46
- if (angle == ANGLEImplementation::kNone) {
47
- return (gl != kGLImplementationEGLANGLE);
48
-diff --git a/ui/gl/gl_implementation.h b/ui/gl/gl_implementation.h
49
-index 376ed58..a2513ea 100644
50
---- a/ui/gl/gl_implementation.h
51
-+++ b/ui/gl/gl_implementation.h
52
-@@ -59,8 +59,14 @@ enum class ANGLEImplementation {
53
- };
54
-
55
- struct GL_EXPORT GLImplementationParts {
56
-- explicit GLImplementationParts(const ANGLEImplementation angle_impl);
57
-- explicit GLImplementationParts(const GLImplementation gl_impl);
58
-+ constexpr explicit GLImplementationParts(const ANGLEImplementation angle_impl)
59
-+ : gl(kGLImplementationEGLANGLE),
60
-+ angle(MakeANGLEImplementation(kGLImplementationEGLANGLE, angle_impl)) {}
61
-+
62
-+ constexpr explicit GLImplementationParts(const GLImplementation gl_impl)
63
-+ : gl(gl_impl),
64
-+ angle(MakeANGLEImplementation(gl_impl, ANGLEImplementation::kDefault)) {
65
-+ }
66
-
67
- GLImplementation gl = kGLImplementationNone;
68
- ANGLEImplementation angle = ANGLEImplementation::kNone;
69
-@@ -80,6 +86,21 @@ struct GL_EXPORT GLImplementationParts {
70
- bool IsValid() const;
71
- bool IsAllowed(const std::vector<GLImplementationParts>& allowed_impls) const;
72
- std::string ToString() const;
73
-+
74
-+ private:
75
-+ constexpr ANGLEImplementation MakeANGLEImplementation(
76
-+ const GLImplementation gl_impl,
77
-+ const ANGLEImplementation angle_impl) {
78
-+ if (gl_impl == kGLImplementationEGLANGLE) {
79
-+ if (angle_impl == ANGLEImplementation::kNone) {
80
-+ return ANGLEImplementation::kDefault;
81
-+ } else {
82
-+ return angle_impl;
83
-+ }
84
-+ } else {
85
-+ return ANGLEImplementation::kNone;
86
-+ }
87
-+ }
88
- };
89
-
90
- struct GL_EXPORT GLWindowSystemBindingInfo {
91
---
92
-2.34.1
93
-
94
chromium-100-SCTHashdanceMetadata-move.patch
Deleted
37
1
2
-From 364dc0067d1c20c7a2d21277a7ec0c4419d9bc11 Mon Sep 17 00:00:00 2001
3
-From: Jose Dapena Paz <jdapena@igalia.com>
4
-Date: Wed, 23 Feb 2022 12:18:57 +0100
5
-Subject: PATCH GCC: explicitely move return value of SCTHashdanceMetadata::ToValue
6
-
7
-GCC rejects to do Return Value Optimization in
8
-SCTHashdanceMetadata::ToValue, because the copy constructor is
9
-deleted, and in that scenario RVO is rejected in GCC:
10
- ../../services/network/sct_auditing/sct_auditing_reporter.cc: In member function ‘base::Value network::SCTAuditingReporter::SCTHashdanceMetadata::ToValue() const’:
11
- ../../services/network/sct_auditing/sct_auditing_reporter.cc:191:10: error: use of deleted function ‘base::Value::Value(const base::Value&)’
12
- 191 | return value;
13
- | ^~~~~
14
- In file included from ../../services/network/sct_auditing/sct_auditing_reporter.h:14,
15
- from ../../services/network/sct_auditing/sct_auditing_reporter.cc:5:
16
- ../../base/values.h:254:3: note: declared here
17
- 254 | Value(const Value&) = delete;
18
- | ^~~~~
19
-
20
-Bug: 819294
21
-Change-Id: I111e51dd10eee7b909d4ac3c0911aac18a589166
22
----
23
-
24
-diff --git a/services/network/sct_auditing/sct_auditing_reporter.cc b/services/network/sct_auditing/sct_auditing_reporter.cc
25
-index a057e8e..365527b 100644
26
---- a/services/network/sct_auditing/sct_auditing_reporter.cc
27
-+++ b/services/network/sct_auditing/sct_auditing_reporter.cc
28
-@@ -188,7 +188,7 @@
29
- kLogIdKey, base::Base64Encode(base::as_bytes(base::make_span(log_id))));
30
- value.SetKey(kLogMMDKey, base::TimeDeltaToValue(log_mmd));
31
- value.SetKey(kCertificateExpiry, base::TimeToValue(certificate_expiry));
32
-- return value;
33
-+ return std::move(value);
34
- }
35
-
36
- // static
37
chromium-100-compiler.patch
Deleted
222
1
2
-From 307a0f63dd9b118f4b8470ed3d7567e81fdb7a6d Mon Sep 17 00:00:00 2001
3
-From: Mike Gilbert <floppym@gentoo.org>
4
-Date: Thu, 3 Feb 2022 16:26:20 +0000
5
-Subject: PATCH Disable various compiler configs
6
-
7
----
8
- build/config/compiler/BUILD.gn | 105 ++++++---------------------------
9
- 1 file changed, 17 insertions(+), 88 deletions(-)
10
-
11
-diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
12
-index 61ceb0d..7392018 100644
13
---- a/build/config/compiler/BUILD.gn
14
-+++ b/build/config/compiler/BUILD.gn
15
-@@ -291,9 +291,7 @@ config("compiler") {
16
-
17
- configs +=
18
- # See the definitions below.
19
-- ":clang_revision",
20
- ":rustc_revision",
21
-- ":compiler_cpu_abi",
22
- ":compiler_codegen",
23
- ":compiler_deterministic",
24
-
25
-@@ -534,31 +532,6 @@ config("compiler") {
26
- ldflags += "-Wl,-z,keep-text-section-prefix"
27
- }
28
-
29
-- if (is_clang && !is_nacl && current_os != "zos") {
30
-- cflags += "-fcrash-diagnostics-dir=" + clang_diagnostic_dir
31
--
32
-- # TODO(hans): Remove this once Clang generates better optimized debug info
33
-- # by default. https://crbug.com/765793
34
-- cflags +=
35
-- "-mllvm",
36
-- "-instcombine-lower-dbg-declare=0",
37
--
38
-- if (!is_debug && use_thin_lto && is_a_target_toolchain) {
39
-- if (is_win) {
40
-- ldflags += "-mllvm:-instcombine-lower-dbg-declare=0"
41
-- } else {
42
-- ldflags += "-Wl,-mllvm,-instcombine-lower-dbg-declare=0"
43
-- }
44
-- }
45
--
46
-- # TODO(crbug.com/1235145): Investigate why/if this should be needed.
47
-- if (is_win) {
48
-- cflags += "/clang:-ffp-contract=off"
49
-- } else {
50
-- cflags += "-ffp-contract=off"
51
-- }
52
-- }
53
--
54
- # Rust compiler setup (for either clang or rustc).
55
- if (enable_rust) {
56
- defines += "RUST_ENABLED"
57
-@@ -1235,45 +1208,6 @@ config("compiler_deterministic") {
58
- }
59
- }
60
-
61
-- # Makes builds independent of absolute file path.
62
-- if (is_clang && strip_absolute_paths_from_debug_symbols) {
63
-- # If debug option is given, clang includes $cwd in debug info by default.
64
-- # For such build, this flag generates reproducible obj files even we use
65
-- # different build directory like "out/feature_a" and "out/feature_b" if
66
-- # we build same files with same compile flag.
67
-- # Other paths are already given in relative, no need to normalize them.
68
-- if (is_nacl) {
69
-- # TODO(https://crbug.com/1231236): Use -ffile-compilation-dir= here.
70
-- cflags +=
71
-- "-Xclang",
72
-- "-fdebug-compilation-dir",
73
-- "-Xclang",
74
-- ".",
75
--
76
-- } else {
77
-- # -ffile-compilation-dir is an alias for both -fdebug-compilation-dir=
78
-- # and -fcoverage-compilation-dir=.
79
-- cflags += "-ffile-compilation-dir=."
80
-- }
81
-- if (!is_win) {
82
-- # We don't use clang -cc1as on Windows (yet? https://crbug.com/762167)
83
-- asmflags = "-Wa,-fdebug-compilation-dir,."
84
-- }
85
--
86
-- if (is_win && use_lld) {
87
-- if (symbol_level == 2 || (is_clang && using_sanitizer)) {
88
-- # Absolutize source file paths for PDB. Pass the real build directory
89
-- # if the pdb contains source-level debug information and if linker
90
-- # reproducibility is not critical.
91
-- ldflags += "/PDBSourcePath:" + rebase_path(root_build_dir)
92
-- } else {
93
-- # Use a fake fixed base directory for paths in the pdb to make the pdb
94
-- # output fully deterministic and independent of the build directory.
95
-- ldflags += "/PDBSourcePath:o:\fake\prefix"
96
-- }
97
-- }
98
-- }
99
--
100
- # Tells the compiler not to use absolute paths when passing the default
101
- # paths to the tools it invokes. We don't want this because we don't
102
- # really need it and it can mess up the goma cache entries.
103
-@@ -1594,7 +1528,7 @@ config("chromium_code") {
104
- defines = "_HAS_NODISCARD"
105
- }
106
- } else {
107
-- cflags = "-Wall"
108
-+ cflags =
109
- if (treat_warnings_as_errors) {
110
- cflags += "-Werror"
111
-
112
-@@ -1603,10 +1537,6 @@ config("chromium_code") {
113
- # well.
114
- ldflags = "-Werror"
115
- }
116
-- if (is_clang) {
117
-- # Enable extra warnings for chromium_code when we control the compiler.
118
-- cflags += "-Wextra"
119
-- }
120
-
121
- # In Chromium code, we define __STDC_foo_MACROS in order to get the
122
- # C99 macros on Mac and Linux.
123
-@@ -1615,15 +1545,6 @@ config("chromium_code") {
124
- "__STDC_FORMAT_MACROS",
125
-
126
-
127
-- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
128
-- current_cpu != "s390" && current_cpu != "ppc64" &&
129
-- current_cpu != "mips" && current_cpu != "mips64") {
130
-- # Non-chromium code is not guaranteed to compile cleanly with
131
-- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
132
-- # disabled, so only do that for Release build.
133
-- defines += "_FORTIFY_SOURCE=2"
134
-- }
135
--
136
- if (is_mac) {
137
- cflags_objc = "-Wobjc-missing-property-synthesis"
138
- cflags_objcc = "-Wobjc-missing-property-synthesis"
139
-@@ -2026,7 +1947,8 @@ config("default_stack_frames") {
140
- }
141
-
142
- # Default "optimization on" config.
143
--config("optimize") {
144
-+config("optimize") { }
145
-+config("xoptimize") {
146
- if (is_win) {
147
- if (chrome_pgo_phase != 2) {
148
- # Favor size over speed, /O1 must be before the common flags.
149
-@@ -2064,7 +1986,8 @@ config("optimize") {
150
- }
151
-
152
- # Turn off optimizations.
153
--config("no_optimize") {
154
-+config("no_optimize") { }
155
-+config("xno_optimize") {
156
- if (is_win) {
157
- cflags =
158
- "/Od", # Disable optimization.
159
-@@ -2104,7 +2027,8 @@ config("no_optimize") {
160
- # Turns up the optimization level. On Windows, this implies whole program
161
- # optimization and link-time code generation which is very expensive and should
162
- # be used sparingly.
163
--config("optimize_max") {
164
-+config("optimize_max") { }
165
-+config("xoptimize_max") {
166
- if (is_nacl && is_nacl_irt) {
167
- # The NaCl IRT is a special case and always wants its own config.
168
- # Various components do:
169
-@@ -2137,7 +2061,8 @@ config("optimize_max") {
170
- #
171
- # TODO(crbug.com/621335) - rework how all of these configs are related
172
- # so that we don't need this disclaimer.
173
--config("optimize_speed") {
174
-+config("optimize_speed") { }
175
-+config("xoptimize_speed") {
176
- if (is_nacl && is_nacl_irt) {
177
- # The NaCl IRT is a special case and always wants its own config.
178
- # Various components do:
179
-@@ -2163,7 +2088,8 @@ config("optimize_speed") {
180
- }
181
- }
182
-
183
--config("optimize_fuzzing") {
184
-+config("optimize_fuzzing") { }
185
-+config("xoptimize_fuzzing") {
186
- cflags = "-O1" + common_optimize_on_cflags
187
- rustflags = "-Copt-level=1"
188
- ldflags = common_optimize_on_ldflags
189
-@@ -2283,7 +2209,8 @@ config("win_pdbaltpath") {
190
- }
191
-
192
- # Full symbols.
193
--config("symbols") {
194
-+config("symbols") { }
195
-+config("xsymbols") {
196
- if (is_win) {
197
- if (is_clang) {
198
- cflags = "/Z7" # Debug information in the .obj files.
199
-@@ -2411,7 +2338,8 @@ config("symbols") {
200
- # Minimal symbols.
201
- # This config guarantees to hold symbol for stack trace which are shown to user
202
- # when crash happens in unittests running on buildbot.
203
--config("minimal_symbols") {
204
-+config("minimal_symbols") { }
205
-+config("xminimal_symbols") {
206
- if (is_win) {
207
- # Functions, files, and line tables only.
208
- cflags =
209
-@@ -2480,7 +2408,8 @@ config("minimal_symbols") {
210
- # This configuration contains function names only. That is, the compiler is
211
- # told to not generate debug information and the linker then just puts function
212
- # names in the final debug information.
213
--config("no_symbols") {
214
-+config("no_symbols") { }
215
-+config("xno_symbols") {
216
- if (is_win) {
217
- ldflags = "/DEBUG"
218
-
219
---
220
-2.34.1
221
-
222
chromium-100-macro-typo.patch
Deleted
31
1
2
-From 1183b14db8bd08d731ff3433c436887de00be3aa Mon Sep 17 00:00:00 2001
3
-From: Jose Dapena Paz <jdapena@igalia.com>
4
-Date: Fri, 18 Feb 2022 16:28:25 +0000
5
-Subject: PATCH Fix typo in non-clang GSL_OWNER macro
6
-
7
-GCC build fails because GSL_OWNER is not defined (GSL_OWNER_ was
8
-the one actually declared).
9
-
10
-Bug: 819294
11
-Change-Id: I1c3d17cb1c08b9bc0e8a888452da9868c308ddb5
12
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3472080
13
-Reviewed-by: Daniel Cheng <dcheng@chromium.org>
14
-Commit-Queue: Daniel Cheng <dcheng@chromium.org>
15
-Cr-Commit-Position: refs/heads/main@{#972974}
16
----
17
-
18
-diff --git a/base/compiler_specific.h b/base/compiler_specific.h
19
-index eec5810..1ee8074 100644
20
---- a/base/compiler_specific.h
21
-+++ b/base/compiler_specific.h
22
-@@ -386,7 +386,7 @@
23
- #define GSL_OWNER gsl::Owner
24
- #define GSL_POINTER gsl::Pointer
25
- #else
26
--#define GSL_OWNER_
27
-+#define GSL_OWNER
28
- #define GSL_POINTER
29
- #endif
30
-
31
chromium-102-regex_pattern-array.patch
Added
16
1
2
+--- a/components/autofill/core/browser/BUILD.gn
3
++++ b/components/autofill/core/browser/BUILD.gn
4
+@@ -54,6 +54,11 @@ action("regex_patterns_inl_h") {
5
+ }
6
+
7
+ static_library("browser") {
8
++ if (is_clang) {
9
++ cflags =
10
++ "-fbracket-depth=1000",
11
++
12
++ }
13
+ sources =
14
+ "address_normalization_manager.cc",
15
+ "address_normalization_manager.h",
16
chromium-103-FrameLoadRequest-type.patch
Added
28
1
2
+From 491bf840da4f76fa3591cc0aa2f4c19cdbe57ec4 Mon Sep 17 00:00:00 2001
3
+From: Stephan Hartmann <stha09@googlemail.com>
4
+Date: Thu, 12 May 2022 11:58:29 +0000
5
+Subject: PATCH GCC: fix ambiguous references in blink::FrameLoadRequest
6
+
7
+Add namespace to avoid confusion.
8
+---
9
+ third_party/blink/renderer/core/loader/frame_load_request.h | 2 +-
10
+ 1 file changed, 1 insertion(+), 1 deletion(-)
11
+
12
+diff --git a/third_party/blink/renderer/core/loader/frame_load_request.h b/third_party/blink/renderer/core/loader/frame_load_request.h
13
+index 444b25c..a86814d 100644
14
+--- a/third_party/blink/renderer/core/loader/frame_load_request.h
15
++++ b/third_party/blink/renderer/core/loader/frame_load_request.h
16
+@@ -179,7 +179,7 @@ struct CORE_EXPORT FrameLoadRequest {
17
+ impression_ = impression;
18
+ }
19
+
20
+- const absl::optional<Impression>& Impression() const { return impression_; }
21
++ const absl::optional<blink::Impression>& Impression() const { return impression_; }
22
+
23
+ bool CanDisplay(const KURL&) const;
24
+
25
+--
26
+2.35.1
27
+
28
chromium-103-SubstringSetMatcher-packed.patch
Added
72
1
2
+From 3d274856e792a361336eb4ae1670bc9c1905f0cb Mon Sep 17 00:00:00 2001
3
+From: Steinar H. Gunderson <sesse@chromium.org>
4
+Date: Thu, 12 May 2022 16:42:40 +0200
5
+Subject: PATCH Make AhoCorasickNode 4-aligned.
6
+
7
+This should fix an issue where std::vector could allocate unaligned
8
+memory for AhoCorasickNode, and we'd then return a pointer to
9
+inline_edges, where a caller would expect the pointer to be aligned
10
+but it wasn't.
11
+
12
+Change-Id: Id9dff044c61f8e46062c63b8480b18ebc68c4862
13
+---
14
+
15
+diff --git a/base/substring_set_matcher/substring_set_matcher.cc b/base/substring_set_matcher/substring_set_matcher.cc
16
+index e110047..ef0b750 100644
17
+--- a/base/substring_set_matcher/substring_set_matcher.cc
18
++++ b/base/substring_set_matcher/substring_set_matcher.cc
19
+@@ -424,7 +424,12 @@
20
+ edges_.inline_edgesnum_edges() = AhoCorasickEdge{label, node};
21
+ if (label == kFailureNodeLabel) {
22
+ // Make sure that kFailureNodeLabel is first.
23
+- std::swap(edges_.inline_edges0, edges_.inline_edgesnum_edges());
24
++ // NOTE: We don't use std::swap here, because GCC
25
++ // doesn't understand that inline_edges is 4-aligned
26
++ // and gives a warning.
27
++ AhoCorasickEdge temp = edges_.inline_edges0;
28
++ edges_.inline_edges0 = edges_.inline_edgesnum_edges();
29
++ edges_.inline_edgesnum_edges() = temp;
30
+ }
31
+ --num_free_edges_;
32
+ return;
33
+diff --git a/base/substring_set_matcher/substring_set_matcher.cc b/base/substring_set_matcher/substring_set_matcher.cc
34
+index e110047..ef0b750 100644
35
+--- a/base/substring_set_matcher/substring_set_matcher.h
36
++++ b/base/substring_set_matcher/substring_set_matcher.h
37
+@@ -154,8 +154,9 @@
38
+ static constexpr uint32_t kEmptyLabel = 0x103;
39
+
40
+ // A node in the trie, packed tightly together so that it occupies 12 bytes
41
+- // (both on 32- and 64-bit platforms).
42
+- class AhoCorasickNode {
43
++ // (both on 32- and 64-bit platforms), but aligned to at least 4 (see the
44
++ // comment on edges_).
45
++ class alignas(AhoCorasickEdge) AhoCorasickNode {
46
+ public:
47
+ AhoCorasickNode();
48
+ ~AhoCorasickNode();
49
+@@ -178,6 +179,10 @@
50
+ NodeID GetEdgeNoInline(uint32_t label) const;
51
+ void SetEdge(uint32_t label, NodeID node);
52
+ const AhoCorasickEdge* edges() const {
53
++ // NOTE: Returning edges_.inline_edges here is fine, because it's
54
++ // the first thing in the struct (see the comment on edges_).
55
++ DCHECK_EQ(0u, reinterpret_cast<uintptr_t>(edges_.inline_edges) %
56
++ alignof(AhoCorasickEdge));
57
+ return edges_capacity_ == 0 ? edges_.inline_edges : edges_.edges;
58
+ }
59
+
60
+@@ -258,6 +263,11 @@
61
+ // in the first slot if it exists (ie., is not equal to kRootID), since we
62
+ // need to access that label during every single node we look at during
63
+ // traversal.
64
++ //
65
++ // NOTE: Keep this the first member in the struct, so that inline_edges gets
66
++ // 4-aligned (since the class is marked as such, despite being packed.
67
++ // Otherwise, edges() can return an unaligned pointer marked as aligned
68
++ // (the unalignedness gets lost).
69
+ static constexpr int kNumInlineEdges = 2;
70
+ union {
71
+ // Out-of-line edge storage, having room for edges_capacity_ elements.
72
chromium-103-VirtualCursor-std-layout.patch
Added
233
1
2
+From 144479ad7b4287bee4067f95e4218f614798a865 Mon Sep 17 00:00:00 2001
3
+From: Stephan Hartmann <stha09@googlemail.com>
4
+Date: Sun, 16 Jan 2022 19:15:26 +0000
5
+Subject: PATCH sql: make VirtualCursor standard layout type
6
+
7
+sql::recover::VirtualCursor needs to be a standard layout type, but
8
+has members of type std::unique_ptr. However, std::unique_ptr is not
9
+guaranteed to be standard layout. Compiling with clang combined with
10
+gcc-11 libstdc++ fails because of this.
11
+
12
+Bug: 1189788
13
+Change-Id: Ia6dc388cc5ef1c0f2afc75f8ca45b9f12687ca9c
14
+---
15
+
16
+diff --git a/sql/recover_module/btree.cc b/sql/recover_module/btree.cc
17
+index cc9420e5..f12d8fa 100644
18
+--- a/sql/recover_module/btree.cc
19
++++ b/sql/recover_module/btree.cc
20
+@@ -136,16 +136,22 @@
21
+ "Move the destructor to the .cc file if it's non-trival");
22
+ #endif // !DCHECK_IS_ON()
23
+
24
+-LeafPageDecoder::LeafPageDecoder(DatabasePageReader* db_reader) noexcept
25
+- : page_id_(db_reader->page_id()),
26
+- db_reader_(db_reader),
27
+- cell_count_(ComputeCellCount(db_reader)),
28
+- next_read_index_(0),
29
+- last_record_size_(0) {
30
++LeafPageDecoder::LeafPageDecoder() noexcept = default;
31
++
32
++void LeafPageDecoder::Initialize(DatabasePageReader* db_reader) {
33
++ page_id_ = db_reader->page_id();
34
++ db_reader_ = db_reader;
35
++ cell_count_ = ComputeCellCount(db_reader);
36
++ next_read_index_ = 0;
37
++ last_record_size_ = 0;
38
+ DCHECK(IsOnValidPage(db_reader));
39
+ DCHECK(DatabasePageReader::IsValidPageId(page_id_));
40
+ }
41
+
42
++void LeafPageDecoder::Reset() {
43
++ db_reader_ = nullptr;
44
++}
45
++
46
+ bool LeafPageDecoder::TryAdvance() {
47
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
48
+ DCHECK(CanAdvance());
49
+diff --git a/sql/recover_module/btree.h b/sql/recover_module/btree.h
50
+index eaa087a5..df0e0c9 100644
51
+--- a/sql/recover_module/btree.h
52
++++ b/sql/recover_module/btree.h
53
+@@ -101,9 +101,7 @@
54
+ public:
55
+ // Creates a decoder for a DatabasePageReader's last read page.
56
+ //
57
+- // |db_reader| must have been used to read an inner page of a table B-tree.
58
+- // |db_reader| must outlive this instance.
59
+- explicit LeafPageDecoder(DatabasePageReader* db_reader) noexcept;
60
++ LeafPageDecoder() noexcept;
61
+ ~LeafPageDecoder() noexcept = default;
62
+
63
+ LeafPageDecoder(const LeafPageDecoder&) = delete;
64
+@@ -151,6 +149,17 @@
65
+ // read as long as CanAdvance() returns true.
66
+ bool TryAdvance();
67
+
68
++ // Initialize with DatabasePageReader
69
++ // |db_reader| must have been used to read an inner page of a table B-tree.
70
++ // |db_reader| must outlive this instance.
71
++ void Initialize(DatabasePageReader* db_reader);
72
++
73
++ // Reset internal DatabasePageReader
74
++ void Reset();
75
++
76
++ // True if DatabasePageReader is valid
77
++ bool IsValid() { return (db_reader_ != nullptr); }
78
++
79
+ // True if the given reader may point to an inner page in a table B-tree.
80
+ //
81
+ // The last ReadPage() call on |db_reader| must have succeeded.
82
+@@ -164,14 +173,14 @@
83
+ static int ComputeCellCount(DatabasePageReader* db_reader);
84
+
85
+ // The number of the B-tree page this reader is reading.
86
+- const int64_t page_id_;
87
++ int64_t page_id_;
88
+ // Used to read the tree page.
89
+ //
90
+ // Raw pointer usage is acceptable because this instance's owner is expected
91
+ // to ensure that the DatabasePageReader outlives this.
92
+- DatabasePageReader* const db_reader_;
93
++ DatabasePageReader* db_reader_;
94
+ // Caches the ComputeCellCount() value for this reader's page.
95
+- const int cell_count_ = ComputeCellCount(db_reader_);
96
++ int cell_count_;
97
+
98
+ // The reader's cursor state.
99
+ //
100
+diff --git a/sql/recover_module/cursor.cc b/sql/recover_module/cursor.cc
101
+index 4f827ed..240de499 100644
102
+--- a/sql/recover_module/cursor.cc
103
++++ b/sql/recover_module/cursor.cc
104
+@@ -28,7 +28,7 @@
105
+ int VirtualCursor::First() {
106
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
107
+ inner_decoders_.clear();
108
+- leaf_decoder_ = nullptr;
109
++ leaf_decoder_.Reset();
110
+
111
+ AppendPageDecoder(table_->root_page_id());
112
+ return Next();
113
+@@ -38,18 +38,18 @@
114
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
115
+ record_reader_.Reset();
116
+
117
+- while (!inner_decoders_.empty() || leaf_decoder_.get()) {
118
+- if (leaf_decoder_.get()) {
119
+- if (!leaf_decoder_->CanAdvance()) {
120
++ while (!inner_decoders_.empty() || leaf_decoder_.IsValid()) {
121
++ if (leaf_decoder_.IsValid()) {
122
++ if (!leaf_decoder_.CanAdvance()) {
123
+ // The leaf has been exhausted. Remove it from the DFS stack.
124
+- leaf_decoder_ = nullptr;
125
++ leaf_decoder_.Reset();
126
+ continue;
127
+ }
128
+- if (!leaf_decoder_->TryAdvance())
129
++ if (!leaf_decoder_.TryAdvance())
130
+ continue;
131
+
132
+- if (!payload_reader_.Initialize(leaf_decoder_->last_record_size(),
133
+- leaf_decoder_->last_record_offset())) {
134
++ if (!payload_reader_.Initialize(leaf_decoder_.last_record_size(),
135
++ leaf_decoder_.last_record_offset())) {
136
+ continue;
137
+ }
138
+ if (!record_reader_.Initialize())
139
+@@ -101,13 +101,13 @@
140
+ int64_t VirtualCursor::RowId() {
141
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
142
+ DCHECK(record_reader_.IsInitialized());
143
+- DCHECK(leaf_decoder_.get());
144
+- return leaf_decoder_->last_record_rowid();
145
++ DCHECK(leaf_decoder_.IsValid());
146
++ return leaf_decoder_.last_record_rowid();
147
+ }
148
+
149
+ void VirtualCursor::AppendPageDecoder(int page_id) {
150
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
151
+- DCHECK(leaf_decoder_.get() == nullptr)
152
++ DCHECK(!leaf_decoder_.IsValid())
153
+ << __func__
154
+ << " must only be called when the current path has no leaf decoder";
155
+
156
+@@ -115,7 +115,7 @@
157
+ return;
158
+
159
+ if (LeafPageDecoder::IsOnValidPage(&db_reader_)) {
160
+- leaf_decoder_ = std::make_unique<LeafPageDecoder>(&db_reader_);
161
++ leaf_decoder_.Initialize(&db_reader_);
162
+ return;
163
+ }
164
+
165
+diff --git a/sql/recover_module/cursor.h b/sql/recover_module/cursor.h
166
+index 845b785..cc4e85f8 100644
167
+--- a/sql/recover_module/cursor.h
168
++++ b/sql/recover_module/cursor.h
169
+@@ -130,7 +130,7 @@
170
+ std::vector<std::unique_ptr<InnerPageDecoder>> inner_decoders_;
171
+
172
+ // Decodes the leaf page containing records.
173
+- std::unique_ptr<LeafPageDecoder> leaf_decoder_;
174
++ LeafPageDecoder leaf_decoder_;
175
+
176
+ SEQUENCE_CHECKER(sequence_checker_);
177
+ };
178
+diff --git a/sql/recover_module/pager.cc b/sql/recover_module/pager.cc
179
+index 58e75de..69d98cef 100644
180
+--- a/sql/recover_module/pager.cc
181
++++ b/sql/recover_module/pager.cc
182
+@@ -23,8 +23,7 @@
183
+ "ints are not appropriate for representing page IDs");
184
+
185
+ DatabasePageReader::DatabasePageReader(VirtualTable* table)
186
+- : page_data_(std::make_unique<uint8_t>(table->page_size())),
187
+- table_(table) {
188
++ : page_data_(table->page_size()), table_(table) {
189
+ DCHECK(table != nullptr);
190
+ DCHECK(IsValidPageSize(table->page_size()));
191
+ }
192
+@@ -58,7 +57,7 @@
193
+ "The |read_offset| computation above may overflow");
194
+
195
+ int sqlite_status =
196
+- RawRead(sqlite_file, read_size, read_offset, page_data_.get());
197
++ RawRead(sqlite_file, read_size, read_offset, page_data_.data());
198
+
199
+ // |page_id_| needs to be set to kInvalidPageId if the read failed.
200
+ // Otherwise, future ReadPage() calls with the previous |page_id_| value
201
+diff --git a/sql/recover_module/pager.h b/sql/recover_module/pager.h
202
+index 07cac3cb..d08f093 100644
203
+--- a/sql/recover_module/pager.h
204
++++ b/sql/recover_module/pager.h
205
+@@ -6,8 +6,8 @@
206
+ #define SQL_RECOVER_MODULE_PAGER_H_
207
+
208
+ #include <cstdint>
209
+-#include <memory>
210
+ #include <ostream>
211
++#include <vector>
212
+
213
+ #include "base/check_op.h"
214
+ #include "base/memory/raw_ptr.h"
215
+@@ -72,7 +72,7 @@
216
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
217
+ DCHECK_NE(page_id_, kInvalidPageId)
218
+ << "Successful ReadPage() required before accessing pager state";
219
+- return page_data_.get();
220
++ return page_data_.data();
221
+ }
222
+
223
+ // The number of bytes in the page read by the last ReadPage() call.
224
+@@ -139,7 +139,7 @@
225
+ int page_id_ = kInvalidPageId;
226
+ // Stores the bytes of the last page successfully read by ReadPage().
227
+ // The content is undefined if the last call to ReadPage() did not succeed.
228
+- const std::unique_ptr<uint8_t> page_data_;
229
++ std::vector<uint8_t> page_data_;
230
+ // Raw pointer usage is acceptable because this instance's owner is expected
231
+ // to ensure that the VirtualTable outlives this.
232
+ const raw_ptr<VirtualTable> table_;
233
chromium-103-compiler.patch
Added
237
1
2
+From 307a0f63dd9b118f4b8470ed3d7567e81fdb7a6d Mon Sep 17 00:00:00 2001
3
+From: Mike Gilbert <floppym@gentoo.org>
4
+Date: Tue, 3 May 2022 10:51:55 +0000
5
+Subject: PATCH Disable various compiler configs
6
+
7
+---
8
+ build/config/compiler/BUILD.gn | 114 +++++----------------------------
9
+ 1 file changed, 17 insertions(+), 97 deletions(-)
10
+
11
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
12
+index f378b95..cb2aeb3 100644
13
+--- a/build/config/compiler/BUILD.gn
14
++++ b/build/config/compiler/BUILD.gn
15
+@@ -286,9 +286,7 @@ config("compiler") {
16
+
17
+ configs +=
18
+ # See the definitions below.
19
+- ":clang_revision",
20
+ ":rustc_revision",
21
+- ":compiler_cpu_abi",
22
+ ":compiler_codegen",
23
+ ":compiler_deterministic",
24
+
25
+@@ -522,31 +520,6 @@ config("compiler") {
26
+ ldflags += "-Wl,-z,keep-text-section-prefix"
27
+ }
28
+
29
+- if (is_clang && !is_nacl && current_os != "zos") {
30
+- cflags += "-fcrash-diagnostics-dir=" + clang_diagnostic_dir
31
+-
32
+- # TODO(hans): Remove this once Clang generates better optimized debug info
33
+- # by default. https://crbug.com/765793
34
+- cflags +=
35
+- "-mllvm",
36
+- "-instcombine-lower-dbg-declare=0",
37
+-
38
+- if (!is_debug && use_thin_lto && is_a_target_toolchain) {
39
+- if (is_win) {
40
+- ldflags += "-mllvm:-instcombine-lower-dbg-declare=0"
41
+- } else {
42
+- ldflags += "-Wl,-mllvm,-instcombine-lower-dbg-declare=0"
43
+- }
44
+- }
45
+-
46
+- # TODO(crbug.com/1235145): Investigate why/if this should be needed.
47
+- if (is_win) {
48
+- cflags += "/clang:-ffp-contract=off"
49
+- } else {
50
+- cflags += "-ffp-contract=off"
51
+- }
52
+- }
53
+-
54
+ # Rust compiler setup (for either clang or rustc).
55
+ if (enable_rust) {
56
+ defines += "RUST_ENABLED"
57
+@@ -1231,45 +1204,6 @@ config("compiler_deterministic") {
58
+ }
59
+ }
60
+
61
+- # Makes builds independent of absolute file path.
62
+- if (is_clang && strip_absolute_paths_from_debug_symbols) {
63
+- # If debug option is given, clang includes $cwd in debug info by default.
64
+- # For such build, this flag generates reproducible obj files even we use
65
+- # different build directory like "out/feature_a" and "out/feature_b" if
66
+- # we build same files with same compile flag.
67
+- # Other paths are already given in relative, no need to normalize them.
68
+- if (is_nacl) {
69
+- # TODO(https://crbug.com/1231236): Use -ffile-compilation-dir= here.
70
+- cflags +=
71
+- "-Xclang",
72
+- "-fdebug-compilation-dir",
73
+- "-Xclang",
74
+- ".",
75
+-
76
+- } else {
77
+- # -ffile-compilation-dir is an alias for both -fdebug-compilation-dir=
78
+- # and -fcoverage-compilation-dir=.
79
+- cflags += "-ffile-compilation-dir=."
80
+- }
81
+- if (!is_win) {
82
+- # We don't use clang -cc1as on Windows (yet? https://crbug.com/762167)
83
+- asmflags = "-Wa,-fdebug-compilation-dir,."
84
+- }
85
+-
86
+- if (is_win && use_lld) {
87
+- if (symbol_level == 2 || (is_clang && using_sanitizer)) {
88
+- # Absolutize source file paths for PDB. Pass the real build directory
89
+- # if the pdb contains source-level debug information and if linker
90
+- # reproducibility is not critical.
91
+- ldflags += "/PDBSourcePath:" + rebase_path(root_build_dir)
92
+- } else {
93
+- # Use a fake fixed base directory for paths in the pdb to make the pdb
94
+- # output fully deterministic and independent of the build directory.
95
+- ldflags += "/PDBSourcePath:o:\fake\prefix"
96
+- }
97
+- }
98
+- }
99
+-
100
+ # Tells the compiler not to use absolute paths when passing the default
101
+ # paths to the tools it invokes. We don't want this because we don't
102
+ # really need it and it can mess up the goma cache entries.
103
+@@ -1534,15 +1468,6 @@ config("default_warnings") {
104
+ cflags += "-Wno-unqualified-std-cast-call"
105
+ }
106
+
107
+- if (!is_nacl && !(is_chromeos ||
108
+- default_toolchain == "//build/toolchain/cros:target")) {
109
+- # TODO(https://crbug.com/1316298): Re-enable once test failure is figured out
110
+- cflags +=
111
+- "-Xclang",
112
+- "-no-opaque-pointers",
113
+-
114
+- }
115
+-
116
+ if (is_fuchsia) {
117
+ # TODO(https://bugs.chromium.org/p/fuchsia/issues/detail?id=77383)
118
+ cflags += "-Wno-deprecated-copy"
119
+@@ -1611,7 +1536,7 @@ config("chromium_code") {
120
+ defines = "_HAS_NODISCARD"
121
+ }
122
+ } else {
123
+- cflags = "-Wall"
124
++ cflags =
125
+ if (treat_warnings_as_errors) {
126
+ cflags += "-Werror"
127
+
128
+@@ -1620,10 +1545,6 @@ config("chromium_code") {
129
+ # well.
130
+ ldflags = "-Werror"
131
+ }
132
+- if (is_clang) {
133
+- # Enable extra warnings for chromium_code when we control the compiler.
134
+- cflags += "-Wextra"
135
+- }
136
+
137
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
138
+ # C99 macros on Mac and Linux.
139
+@@ -1632,15 +1553,6 @@ config("chromium_code") {
140
+ "__STDC_FORMAT_MACROS",
141
+
142
+
143
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
144
+- current_cpu != "s390" && current_cpu != "ppc64" &&
145
+- current_cpu != "mips" && current_cpu != "mips64") {
146
+- # Non-chromium code is not guaranteed to compile cleanly with
147
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
148
+- # disabled, so only do that for Release build.
149
+- defines += "_FORTIFY_SOURCE=2"
150
+- }
151
+-
152
+ if (is_mac) {
153
+ cflags_objc = "-Wobjc-missing-property-synthesis"
154
+ cflags_objcc = "-Wobjc-missing-property-synthesis"
155
+@@ -2031,7 +1943,8 @@ config("default_stack_frames") {
156
+ }
157
+
158
+ # Default "optimization on" config.
159
+-config("optimize") {
160
++config("optimize") { }
161
++config("xoptimize") {
162
+ if (is_win) {
163
+ if (chrome_pgo_phase != 2) {
164
+ # Favor size over speed, /O1 must be before the common flags.
165
+@@ -2069,7 +1982,8 @@ config("optimize") {
166
+ }
167
+
168
+ # Turn off optimizations.
169
+-config("no_optimize") {
170
++config("no_optimize") { }
171
++config("xno_optimize") {
172
+ if (is_win) {
173
+ cflags =
174
+ "/Od", # Disable optimization.
175
+@@ -2109,7 +2023,8 @@ config("no_optimize") {
176
+ # Turns up the optimization level. On Windows, this implies whole program
177
+ # optimization and link-time code generation which is very expensive and should
178
+ # be used sparingly.
179
+-config("optimize_max") {
180
++config("optimize_max") { }
181
++config("xoptimize_max") {
182
+ if (is_nacl && is_nacl_irt) {
183
+ # The NaCl IRT is a special case and always wants its own config.
184
+ # Various components do:
185
+@@ -2142,7 +2057,8 @@ config("optimize_max") {
186
+ #
187
+ # TODO(crbug.com/621335) - rework how all of these configs are related
188
+ # so that we don't need this disclaimer.
189
+-config("optimize_speed") {
190
++config("optimize_speed") { }
191
++config("xoptimize_speed") {
192
+ if (is_nacl && is_nacl_irt) {
193
+ # The NaCl IRT is a special case and always wants its own config.
194
+ # Various components do:
195
+@@ -2168,7 +2084,8 @@ config("optimize_speed") {
196
+ }
197
+ }
198
+
199
+-config("optimize_fuzzing") {
200
++config("optimize_fuzzing") { }
201
++config("xoptimize_fuzzing") {
202
+ cflags = "-O1" + common_optimize_on_cflags
203
+ rustflags = "-Copt-level=1"
204
+ ldflags = common_optimize_on_ldflags
205
+@@ -2287,7 +2204,8 @@ config("win_pdbaltpath") {
206
+ }
207
+
208
+ # Full symbols.
209
+-config("symbols") {
210
++config("symbols") { }
211
++config("xsymbols") {
212
+ if (is_win) {
213
+ if (is_clang) {
214
+ cflags = "/Z7" # Debug information in the .obj files.
215
+@@ -2415,7 +2333,8 @@ config("symbols") {
216
+ # Minimal symbols.
217
+ # This config guarantees to hold symbol for stack trace which are shown to user
218
+ # when crash happens in unittests running on buildbot.
219
+-config("minimal_symbols") {
220
++config("minimal_symbols") { }
221
++config("xminimal_symbols") {
222
+ if (is_win) {
223
+ # Functions, files, and line tables only.
224
+ cflags =
225
+@@ -2488,7 +2407,8 @@ config("minimal_symbols") {
226
+ # This configuration contains function names only. That is, the compiler is
227
+ # told to not generate debug information and the linker then just puts function
228
+ # names in the final debug information.
229
+-config("no_symbols") {
230
++config("no_symbols") { }
231
++config("xno_symbols") {
232
+ if (is_win) {
233
+ ldflags = "/DEBUG"
234
+
235
+--
236
+2.35.1
237
chromium-80-QuicStreamSendBuffer-deleted-move-constructor.patch
Deleted
32
1
2
-From 00f47df999c9b19e80fdc01db0ae9ca1b6a12b3a Mon Sep 17 00:00:00 2001
3
-From: vasilvv <vasilvv@google.com>
4
-Date: Wed, 03 Apr 2019 13:58:53 -0700
5
-Subject: PATCH GCC: do not delete move constructor of QuicStreamSendBuffer
6
-
7
-QuicStreamSendBuffer constructor is implicitely required in the
8
-initialization of the vector of substreams in QuicCryptoStream.
9
-Though clang apparently ignores that, GCC fails to build.
10
-
11
-BUG=chromium:819294
12
-
13
-Originally submitted by José Dapena Paz <jose.dapena@lge.com> at https://quiche-review.googlesource.com/c/quiche/+/2420
14
-
15
-PiperOrigin-RevId: 241800134
16
-Change-Id: I4e3c97d6e5895d85340e8c1b740e6196d9104066
17
----
18
-
19
-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
20
-index e34514b..74e9d0d 100644
21
---- a/net/third_party/quiche/src/quic/core/quic_stream_send_buffer.h
22
-+++ b/net/third_party/quiche/src/quic/core/quic_stream_send_buffer.h
23
-@@ -62,7 +62,7 @@
24
- public:
25
- explicit QuicStreamSendBuffer(QuicBufferAllocator* allocator);
26
- QuicStreamSendBuffer(const QuicStreamSendBuffer& other) = delete;
27
-- QuicStreamSendBuffer(QuicStreamSendBuffer&& other) = delete;
28
-+ QuicStreamSendBuffer(QuicStreamSendBuffer&& other) = default;
29
- ~QuicStreamSendBuffer();
30
-
31
- // Save |data_length| of data starts at |iov_offset| in |iov| to send buffer.
32
chromium-91-sql-standard-layout-type.patch
Deleted
240
1
2
-From 80368f8ba7a8bab13440463a254888311efe3986 Mon Sep 17 00:00:00 2001
3
-From: Stephan Hartmann <stha09@googlemail.com>
4
-Date: Tue, 4 May 2021 15:00:19 +0000
5
-Subject: PATCH sql: make VirtualCursor standard layout type
6
-
7
-sql::recover::VirtualCursor needs to be a standard layout type, but
8
-has members of type std::unique_ptr. However, std::unique_ptr is not
9
-guaranteed to be standard layout. Compiling with clang combined with
10
-gcc-11 libstdc++ fails because of this. Replace std::unique_ptr with
11
-raw pointers.
12
-
13
-Bug: 1189788
14
-Change-Id: Ia6dc388cc5ef1c0f2afc75f8ca45b9f12687ca9c
15
----
16
- sql/recover_module/btree.cc | 21 +++++++++++++++------
17
- sql/recover_module/btree.h | 17 +++++++++++++----
18
- sql/recover_module/cursor.cc | 24 ++++++++++++------------
19
- sql/recover_module/cursor.h | 2 +-
20
- sql/recover_module/pager.cc | 7 +++----
21
- sql/recover_module/pager.h | 5 +++--
22
- 6 files changed, 47 insertions(+), 29 deletions(-)
23
-
24
-Index: chromium-98.0.4758.80/sql/recover_module/btree.cc
25
-===================================================================
26
---- chromium-98.0.4758.80.orig/sql/recover_module/btree.cc
27
-+++ chromium-98.0.4758.80/sql/recover_module/btree.cc
28
-@@ -136,16 +136,25 @@ static_assert(std::is_trivially_destruct
29
- "Move the destructor to the .cc file if it's non-trival");
30
- #endif // !DCHECK_IS_ON()
31
-
32
--LeafPageDecoder::LeafPageDecoder(DatabasePageReader* db_reader) noexcept
33
-- : page_id_(db_reader->page_id()),
34
-- db_reader_(db_reader),
35
-- cell_count_(ComputeCellCount(db_reader)),
36
-- next_read_index_(0),
37
-- last_record_size_(0) {
38
-+void LeafPageDecoder::Initialize(DatabasePageReader* db_reader) {
39
-+ DCHECK(db_reader);
40
- DCHECK(IsOnValidPage(db_reader));
41
-+ page_id_ = db_reader->page_id();
42
-+ db_reader_ = db_reader;
43
-+ cell_count_ = ComputeCellCount(db_reader);
44
-+ next_read_index_ = 0;
45
-+ last_record_size_ = 0;
46
- DCHECK(DatabasePageReader::IsValidPageId(page_id_));
47
- }
48
-
49
-+void LeafPageDecoder::Reset() {
50
-+ db_reader_ = nullptr;
51
-+ page_id_ = 0;
52
-+ cell_count_ = 0;
53
-+ next_read_index_ = 0;
54
-+ last_record_size_ = 0;
55
-+}
56
-+
57
- bool LeafPageDecoder::TryAdvance() {
58
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
59
- DCHECK(CanAdvance());
60
-Index: chromium-98.0.4758.80/sql/recover_module/btree.h
61
-===================================================================
62
---- chromium-98.0.4758.80.orig/sql/recover_module/btree.h
63
-+++ chromium-98.0.4758.80/sql/recover_module/btree.h
64
-@@ -103,7 +103,7 @@ class LeafPageDecoder {
65
- //
66
- // |db_reader| must have been used to read an inner page of a table B-tree.
67
- // |db_reader| must outlive this instance.
68
-- explicit LeafPageDecoder(DatabasePageReader* db_reader) noexcept;
69
-+ explicit LeafPageDecoder() noexcept = default;
70
- ~LeafPageDecoder() noexcept = default;
71
-
72
- LeafPageDecoder(const LeafPageDecoder&) = delete;
73
-@@ -151,6 +151,15 @@ class LeafPageDecoder {
74
- // read as long as CanAdvance() returns true.
75
- bool TryAdvance();
76
-
77
-+ // Initialize with DatabasePageReader
78
-+ void Initialize(DatabasePageReader* db_reader);
79
-+
80
-+ // Reset internal DatabasePageReader
81
-+ void Reset();
82
-+
83
-+ // True if DatabasePageReader is valid
84
-+ bool IsValid() { return (db_reader_ != nullptr); }
85
-+
86
- // True if the given reader may point to an inner page in a table B-tree.
87
- //
88
- // The last ReadPage() call on |db_reader| must have succeeded.
89
-@@ -164,14 +173,14 @@ class LeafPageDecoder {
90
- static int ComputeCellCount(DatabasePageReader* db_reader);
91
-
92
- // The number of the B-tree page this reader is reading.
93
-- const int64_t page_id_;
94
-+ int64_t page_id_;
95
- // Used to read the tree page.
96
- //
97
- // Raw pointer usage is acceptable because this instance's owner is expected
98
- // to ensure that the DatabasePageReader outlives this.
99
-- DatabasePageReader* const db_reader_;
100
-+ DatabasePageReader* db_reader_;
101
- // Caches the ComputeCellCount() value for this reader's page.
102
-- const int cell_count_ = ComputeCellCount(db_reader_);
103
-+ int cell_count_;
104
-
105
- // The reader's cursor state.
106
- //
107
-Index: chromium-98.0.4758.80/sql/recover_module/cursor.cc
108
-===================================================================
109
---- chromium-98.0.4758.80.orig/sql/recover_module/cursor.cc
110
-+++ chromium-98.0.4758.80/sql/recover_module/cursor.cc
111
-@@ -28,7 +28,7 @@ VirtualCursor::~VirtualCursor() {
112
- int VirtualCursor::First() {
113
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
114
- inner_decoders_.clear();
115
-- leaf_decoder_ = nullptr;
116
-+ leaf_decoder_.Reset();
117
-
118
- AppendPageDecoder(table_->root_page_id());
119
- return Next();
120
-@@ -38,18 +38,18 @@ int VirtualCursor::Next() {
121
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
122
- record_reader_.Reset();
123
-
124
-- while (!inner_decoders_.empty() || leaf_decoder_.get()) {
125
-- if (leaf_decoder_.get()) {
126
-- if (!leaf_decoder_->CanAdvance()) {
127
-+ while (!inner_decoders_.empty() || leaf_decoder_.IsValid()) {
128
-+ if (leaf_decoder_.IsValid()) {
129
-+ if (!leaf_decoder_.CanAdvance()) {
130
- // The leaf has been exhausted. Remove it from the DFS stack.
131
-- leaf_decoder_ = nullptr;
132
-+ leaf_decoder_.Reset();
133
- continue;
134
- }
135
-- if (!leaf_decoder_->TryAdvance())
136
-+ if (!leaf_decoder_.TryAdvance())
137
- continue;
138
-
139
-- if (!payload_reader_.Initialize(leaf_decoder_->last_record_size(),
140
-- leaf_decoder_->last_record_offset())) {
141
-+ if (!payload_reader_.Initialize(leaf_decoder_.last_record_size(),
142
-+ leaf_decoder_.last_record_offset())) {
143
- continue;
144
- }
145
- if (!record_reader_.Initialize())
146
-@@ -101,13 +101,13 @@ int VirtualCursor::ReadColumn(int column
147
- int64_t VirtualCursor::RowId() {
148
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
149
- DCHECK(record_reader_.IsInitialized());
150
-- DCHECK(leaf_decoder_.get());
151
-- return leaf_decoder_->last_record_rowid();
152
-+ DCHECK(leaf_decoder_.IsValid());
153
-+ return leaf_decoder_.last_record_rowid();
154
- }
155
-
156
- void VirtualCursor::AppendPageDecoder(int page_id) {
157
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
158
-- DCHECK(leaf_decoder_.get() == nullptr)
159
-+ DCHECK(!leaf_decoder_.IsValid())
160
- << __func__
161
- << " must only be called when the current path has no leaf decoder";
162
-
163
-@@ -115,7 +115,7 @@ void VirtualCursor::AppendPageDecoder(in
164
- return;
165
-
166
- if (LeafPageDecoder::IsOnValidPage(&db_reader_)) {
167
-- leaf_decoder_ = std::make_unique<LeafPageDecoder>(&db_reader_);
168
-+ leaf_decoder_.Initialize(&db_reader_);
169
- return;
170
- }
171
-
172
-Index: chromium-98.0.4758.80/sql/recover_module/cursor.h
173
-===================================================================
174
---- chromium-98.0.4758.80.orig/sql/recover_module/cursor.h
175
-+++ chromium-98.0.4758.80/sql/recover_module/cursor.h
176
-@@ -130,7 +130,7 @@ class VirtualCursor {
177
- std::vector<std::unique_ptr<InnerPageDecoder>> inner_decoders_;
178
-
179
- // Decodes the leaf page containing records.
180
-- std::unique_ptr<LeafPageDecoder> leaf_decoder_;
181
-+ LeafPageDecoder leaf_decoder_;
182
-
183
- SEQUENCE_CHECKER(sequence_checker_);
184
- };
185
-Index: chromium-98.0.4758.80/sql/recover_module/pager.cc
186
-===================================================================
187
---- chromium-98.0.4758.80.orig/sql/recover_module/pager.cc
188
-+++ chromium-98.0.4758.80/sql/recover_module/pager.cc
189
-@@ -23,8 +23,7 @@ static_assert(DatabasePageReader::kMaxPa
190
- "ints are not appropriate for representing page IDs");
191
-
192
- DatabasePageReader::DatabasePageReader(VirtualTable* table)
193
-- : page_data_(std::make_unique<uint8_t>(table->page_size())),
194
-- table_(table) {
195
-+ : page_data_(), table_(table) {
196
- DCHECK(table != nullptr);
197
- DCHECK(IsValidPageSize(table->page_size()));
198
- }
199
-@@ -57,8 +56,8 @@ int DatabasePageReader::ReadPage(int pag
200
- std::numeric_limits<int64_t>::max(),
201
- "The |read_offset| computation above may overflow");
202
-
203
-- int sqlite_status =
204
-- RawRead(sqlite_file, read_size, read_offset, page_data_.get());
205
-+ int sqlite_status = RawRead(sqlite_file, read_size, read_offset,
206
-+ const_cast<uint8_t*>(page_data_.data()));
207
-
208
- // |page_id_| needs to be set to kInvalidPageId if the read failed.
209
- // Otherwise, future ReadPage() calls with the previous |page_id_| value
210
-Index: chromium-98.0.4758.80/sql/recover_module/pager.h
211
-===================================================================
212
---- chromium-98.0.4758.80.orig/sql/recover_module/pager.h
213
-+++ chromium-98.0.4758.80/sql/recover_module/pager.h
214
-@@ -5,6 +5,7 @@
215
- #ifndef SQL_RECOVER_MODULE_PAGER_H_
216
- #define SQL_RECOVER_MODULE_PAGER_H_
217
-
218
-+#include <array>
219
- #include <cstdint>
220
- #include <memory>
221
- #include <ostream>
222
-@@ -72,7 +73,7 @@ class DatabasePageReader {
223
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
224
- DCHECK_NE(page_id_, kInvalidPageId)
225
- << "Successful ReadPage() required before accessing pager state";
226
-- return page_data_.get();
227
-+ return page_data_.data();
228
- }
229
-
230
- // The number of bytes in the page read by the last ReadPage() call.
231
-@@ -139,7 +140,7 @@ class DatabasePageReader {
232
- int page_id_ = kInvalidPageId;
233
- // Stores the bytes of the last page successfully read by ReadPage().
234
- // The content is undefined if the last call to ReadPage() did not succeed.
235
-- const std::unique_ptr<uint8_t> page_data_;
236
-+ const std::array<uint8_t, kMaxPageSize> page_data_;
237
- // Raw pointer usage is acceptable because this instance's owner is expected
238
- // to ensure that the VirtualTable outlives this.
239
- const raw_ptr<VirtualTable> table_;
240
chromium-95-quiche-include.patch
Deleted
24
1
2
-From a9d986203bcfbaab84f270c1dc6c3abb4c450ee1 Mon Sep 17 00:00:00 2001
3
-From: Stephan Hartmann <stha09@googlemail.com>
4
-Date: Fri, 17 Sep 2021 14:57:33 +0000
5
-Subject: PATCH IWYU: add stddef.h for size_t in WindowManager
6
-
7
----
8
- net/third_party/quiche/src/http2/adapter/window_manager.h | 2 ++
9
- 1 file changed, 2 insertions(+)
10
-
11
-Index: chromium-96.0.4664.45/net/third_party/quiche/src/http2/adapter/window_manager.h
12
-===================================================================
13
---- chromium-96.0.4664.45.orig/net/third_party/quiche/src/http2/adapter/window_manager.h
14
-+++ chromium-96.0.4664.45/net/third_party/quiche/src/http2/adapter/window_manager.h
15
-@@ -3,6 +3,8 @@
16
-
17
- #include <stddef.h>
18
-
19
-+#include <stddef.h>
20
-+
21
- #include <functional>
22
-
23
- #include "common/platform/api/quiche_export.h"
24
chromium-97-ScrollView-reference.patch
Deleted
25
1
2
-From ce58517e546f3f3433931609683b5b4e455bbb7f Mon Sep 17 00:00:00 2001
3
-From: Stephan Hartmann <stha09@googlemail.com>
4
-Date: Fri, 5 Nov 2021 15:48:05 +0000
5
-Subject: PATCH GCC: fix undefined reference to ScrollView::SetContents()
6
-
7
----
8
- ui/views/controls/scroll_view.h | 3 +++
9
- 1 file changed, 3 insertions(+)
10
-
11
-Index: chromium-98.0.4758.80/ui/views/controls/scroll_view.h
12
-===================================================================
13
---- chromium-98.0.4758.80.orig/ui/views/controls/scroll_view.h
14
-+++ chromium-98.0.4758.80/ui/views/controls/scroll_view.h
15
-@@ -389,6 +389,9 @@ class VIEWS_EXPORT ScrollView : public V
16
- // ScrollView::SetContents<View> template is available with which to link.
17
- template View* ScrollView::SetContents<View>(std::unique_ptr<View> a_view);
18
-
19
-+// Required for WebAppUrlHandlerIntentPickerView
20
-+template View* ScrollView::SetContents<View>(std::unique_ptr<View> a_view);
21
-+
22
- BEGIN_VIEW_BUILDER(VIEWS_EXPORT, ScrollView, View)
23
- VIEW_BUILDER_VIEW_TYPE_PROPERTY(View, Contents)
24
- VIEW_BUILDER_PROPERTY(ui::LayerType, ContentsLayerType)
25
chromium-97-arm-tflite-cast.patch
Deleted
28
1
2
-vreinterpret_s32_s8() casts int8x8_t to int32x2_t. However, third argument
3
-of vdotq_lane_s32() is of type int8x8_t.
4
-
5
---- a/third_party/tflite/src/tensorflow/lite/kernels/internal/optimized/depthwiseconv_3x3_filter_common.h
6
-+++ b/third_party/tflite/src/tensorflow/lite/kernels/internal/optimized/depthwiseconv_3x3_filter_common.h
7
-@@ -129,16 +129,14 @@ inline int32x4_t vdotq_four_lane_s32(int32x4_t acc, int8x16_t lhs,
8
- int8x16_t rhs, const int lane) {
9
- switch (lane) {
10
- case 0:
11
-- return vdotq_lane_s32(acc, lhs, vreinterpret_s32_s8(vget_low_s8(rhs)), 0);
12
-+ return vdotq_lane_s32(acc, lhs, vget_low_s8(rhs), 0);
13
- case 1:
14
-- return vdotq_lane_s32(acc, lhs, vreinterpret_s32_s8(vget_low_s8(rhs)), 1);
15
-+ return vdotq_lane_s32(acc, lhs, vget_low_s8(rhs), 1);
16
- case 2:
17
-- return vdotq_lane_s32(acc, lhs, vreinterpret_s32_s8(vget_high_s8(rhs)),
18
-- 0);
19
-+ return vdotq_lane_s32(acc, lhs, vget_high_s8(rhs), 0);
20
- case 3:
21
- default:
22
-- return vdotq_lane_s32(acc, lhs, vreinterpret_s32_s8(vget_high_s8(rhs)),
23
-- 1);
24
-+ return vdotq_lane_s32(acc, lhs, vget_high_s8(rhs), 1);
25
- }
26
- }
27
-
28
chromium-clang-nomerge.patch
Changed
13
1
2
#endif // defined(__clang_analyzer__)
3
4
// Use nomerge attribute to disable optimization of merging multiple same calls.
5
--#if defined(__clang__) && __has_attribute(nomerge)
6
+-#if defined(__clang__) && HAS_ATTRIBUTE(nomerge)
7
+#if defined(__clang__) && (__clang_major__ >= 12) && \
8
-+ __has_attribute(nomerge) && !defined(OS_CHROMEOS)
9
++ HAS_ATTRIBUTE(nomerge) && !defined(OS_CHROMEOS)
10
#define NOMERGE clang::nomerge
11
#else
12
#define NOMERGE
13
chromium-fix-swiftshader-template.patch
Deleted
72
1
2
-Index: electron-16.0.9/third_party/swiftshader/third_party/subzero/src/IceInstX8664.cpp
3
-===================================================================
4
---- electron-16.0.9.orig/third_party/swiftshader/third_party/subzero/src/IceInstX8664.cpp 2022-02-16 18:11:13.517899468 +0100
5
-+++ electron-16.0.9/third_party/swiftshader/third_party/subzero/src/IceInstX8664.cpp 2022-02-24 14:35:08.328190810 +0100
6
-@@ -659,6 +659,7 @@ void emitIASOpTyGPR(const Cfg *Func, Typ
7
- }
8
- }
9
-
10
-+#if 0
11
- template <bool VarCanBeByte, bool SrcCanBeByte>
12
- void emitIASRegOpTyGPR(const Cfg *Func, Type Ty, const Variable *Var,
13
- const Operand *Src, const GPREmitterRegOp &Emitter) {
14
-@@ -697,6 +698,7 @@ void emitIASRegOpTyGPR(const Cfg *Func,
15
- llvm_unreachable("Unexpected operand type");
16
- }
17
- }
18
-+#endif
19
-
20
- void emitIASAddrOpTyGPR(const Cfg *Func, Type Ty, const AsmAddress &Addr,
21
- const Operand *Src, const GPREmitterAddrOp &Emitter) {
22
-Index: electron-16.0.9/third_party/swiftshader/third_party/subzero/src/IceInstX8664.h
23
-===================================================================
24
---- electron-16.0.9.orig/third_party/swiftshader/third_party/subzero/src/IceInstX8664.h 2022-02-16 18:11:13.517899468 +0100
25
-+++ electron-16.0.9/third_party/swiftshader/third_party/subzero/src/IceInstX8664.h 2022-02-24 15:14:53.316809270 +0100
26
-@@ -576,8 +576,43 @@ void emitIASXmmShift(const Cfg *Func, Ty
27
- /// Emit a two-operand (GPR) instruction, where the dest operand is a Variable
28
- /// that's guaranteed to be a register.
29
- template <bool VarCanBeByte = true, bool SrcCanBeByte = true>
30
--void emitIASRegOpTyGPR(const Cfg *Func, Type Ty, const Variable *Dst,
31
-- const Operand *Src, const GPREmitterRegOp &Emitter);
32
-+void emitIASRegOpTyGPR(const Cfg *Func, Type Ty, const Variable *Var,
33
-+ const Operand *Src, const GPREmitterRegOp &Emitter) {
34
-+ auto *Target = InstX86Base::getTarget(Func);
35
-+ Assembler *Asm = Func->getAssembler<Assembler>();
36
-+ assert(Var->hasReg());
37
-+ // We cheat a little and use GPRRegister even for byte operations.
38
-+ GPRRegister VarReg = VarCanBeByte ? RegX8664::getEncodedGPR(Var->getRegNum())
39
-+ : RegX8664::getEncodedGPR(Var->getRegNum());
40
-+ if (const auto *SrcVar = llvm::dyn_cast<Variable>(Src)) {
41
-+ if (SrcVar->hasReg()) {
42
-+ GPRRegister SrcReg = SrcCanBeByte
43
-+ ? RegX8664::getEncodedGPR(SrcVar->getRegNum())
44
-+ : RegX8664::getEncodedGPR(SrcVar->getRegNum());
45
-+ (Asm->*(Emitter.GPRGPR))(Ty, VarReg, SrcReg);
46
-+ } else {
47
-+ AsmAddress SrcStackAddr = AsmAddress(SrcVar, Target);
48
-+ (Asm->*(Emitter.GPRAddr))(Ty, VarReg, SrcStackAddr);
49
-+ }
50
-+ } else if (const auto *Mem = llvm::dyn_cast<X86OperandMem>(Src)) {
51
-+ Mem->emitSegmentOverride(Asm);
52
-+ (Asm->*(Emitter.GPRAddr))(Ty, VarReg, AsmAddress(Mem, Asm, Target));
53
-+ } else if (const auto *Imm = llvm::dyn_cast<ConstantInteger32>(Src)) {
54
-+ (Asm->*(Emitter.GPRImm))(Ty, VarReg, AssemblerImmediate(Imm->getValue()));
55
-+ } else if (const auto *Imm = llvm::dyn_cast<ConstantInteger64>(Src)) {
56
-+ assert(Utils::IsInt(32, Imm->getValue()));
57
-+ (Asm->*(Emitter.GPRImm))(Ty, VarReg, AssemblerImmediate(Imm->getValue()));
58
-+ } else if (const auto *Reloc = llvm::dyn_cast<ConstantRelocatable>(Src)) {
59
-+ const auto FixupKind = (Reloc->getName().hasStdString() &&
60
-+ Reloc->getName().toString() == GlobalOffsetTable)
61
-+ ? FK_GotPC
62
-+ : FK_Abs;
63
-+ AssemblerFixup *Fixup = Asm->createFixup(FixupKind, Reloc);
64
-+ (Asm->*(Emitter.GPRImm))(Ty, VarReg, AssemblerImmediate(Fixup));
65
-+ } else {
66
-+ llvm_unreachable("Unexpected operand type");
67
-+ }
68
-+}
69
-
70
- /// Instructions of the form x := op(x).
71
- template <typename InstX86Base::InstKindX86 K>
72
chromium-missing-include-tuple.patch
Deleted
13
1
2
-diff -up chromium-100.0.4896.75/net/base/address_list.h.missing-include-tuple chromium-100.0.4896.75/net/base/address_list.h
3
---- chromium-100.0.4896.75/net/base/address_list.h.missing-include-tuple 2022-04-08 10:03:31.950894611 -0400
4
-+++ chromium-100.0.4896.75/net/base/address_list.h 2022-04-08 10:03:43.926970267 -0400
5
-@@ -8,6 +8,7 @@
6
- #include <stdint.h>
7
-
8
- #include <string>
9
-+#include <tuple>
10
- #include <utility>
11
- #include <vector>
12
-
13
chromium-third_party-symbolize-missing-include.patch
Deleted
13
1
2
---- a/base/third_party/symbolize/symbolize.h
3
-+++ b/base/third_party/symbolize/symbolize.h
4
-@@ -54,6 +54,8 @@
5
- #ifndef BASE_SYMBOLIZE_H_
6
- #define BASE_SYMBOLIZE_H_
7
-
8
-+#include <utility>
9
-+
10
- #include "utilities.h"
11
- #include "config.h"
12
- #include "glog/logging.h"
13
chromium-webrtc-stats-missing-vector.patch
Deleted
12
1
2
---- a/media/capabilities/webrtc_video_stats_db.h
3
-+++ b/media/capabilities/webrtc_video_stats_db.h
4
-@@ -7,6 +7,7 @@
5
-
6
- #include <memory>
7
- #include <string>
8
-+#include <vector>
9
-
10
- #include "base/callback_forward.h"
11
- #include "base/check.h"
12
ffmpeg-new-channel-layout.patch
Added
335
1
2
+From 6e554a30893150793c2638e3689cf208ffc8e375 Mon Sep 17 00:00:00 2001
3
+From: Dale Curtis <dalecurtis@chromium.org>
4
+Date: Sat, 2 Apr 2022 05:13:53 +0000
5
+Subject: PATCH Roll src/third_party/ffmpeg/ 574c39cce..32b2d1d526 (1125
6
+ commits)
7
+
8
+https://chromium.googlesource.com/chromium/third_party/ffmpeg.git/+log/574c39cce323..32b2d1d526
9
+
10
+Created with:
11
+ roll-dep src/third_party/ffmpeg
12
+
13
+Fixed: 1293918
14
+Cq-Include-Trybots: luci.chromium.try:mac_chromium_asan_rel_ng,linux_chromium_asan_rel_ng,linux_chromium_chromeos_asan_rel_ng
15
+Change-Id: I41945d0f963e3d1f65940067bac22f63b68e37d2
16
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3565647
17
+Auto-Submit: Dale Curtis <dalecurtis@chromium.org>
18
+Reviewed-by: Dan Sanders <sandersd@chromium.org>
19
+Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
20
+Cr-Commit-Position: refs/heads/main@{#988253}
21
+---
22
+ .../clear_key_cdm/ffmpeg_cdm_audio_decoder.cc | 29 ++++++++++---------
23
+ media/ffmpeg/ffmpeg_common.cc | 11 +++----
24
+ media/filters/audio_file_reader.cc | 9 +++---
25
+ media/filters/audio_file_reader_unittest.cc | 6 ++--
26
+ .../filters/audio_video_metadata_extractor.cc | 11 +++++--
27
+ .../filters/ffmpeg_aac_bitstream_converter.cc | 7 +++--
28
+ ...ffmpeg_aac_bitstream_converter_unittest.cc | 2 +-
29
+ media/filters/ffmpeg_audio_decoder.cc | 13 +++++----
30
+ 8 files changed, 51 insertions(+), 37 deletions(-)
31
+
32
+diff --git a/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc b/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc
33
+index e4fc3f460e2..9b1ad9f7675 100644
34
+--- a/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc
35
++++ b/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc
36
+@@ -74,7 +74,7 @@ void CdmAudioDecoderConfigToAVCodecContext(
37
+ codec_context->sample_fmt = AV_SAMPLE_FMT_NONE;
38
+ }
39
+
40
+- codec_context->channels = config.channel_count;
41
++ codec_context->ch_layout.nb_channels = config.channel_count;
42
+ codec_context->sample_rate = config.samples_per_second;
43
+
44
+ if (config.extra_data) {
45
+@@ -124,8 +124,8 @@ void CopySamples(cdm::AudioFormat cdm_format,
46
+ case cdm::kAudioFormatPlanarS16:
47
+ case cdm::kAudioFormatPlanarF32: {
48
+ const int decoded_size_per_channel =
49
+- decoded_audio_size / av_frame.channels;
50
+- for (int i = 0; i < av_frame.channels; ++i) {
51
++ decoded_audio_size / av_frame.ch_layout.nb_channels;
52
++ for (int i = 0; i < av_frame.ch_layout.nb_channels; ++i) {
53
+ memcpy(output_buffer, av_frame.extended_datai,
54
+ decoded_size_per_channel);
55
+ output_buffer += decoded_size_per_channel;
56
+@@ -185,13 +185,14 @@ bool FFmpegCdmAudioDecoder::Initialize(
57
+ // Success!
58
+ decoding_loop_ = std::make_unique<FFmpegDecodingLoop>(codec_context_.get());
59
+ samples_per_second_ = config.samples_per_second;
60
+- bytes_per_frame_ = codec_context_->channels * config.bits_per_channel / 8;
61
++ bytes_per_frame_ =
62
++ codec_context_->ch_layout.nb_channels * config.bits_per_channel / 8;
63
+ output_timestamp_helper_ =
64
+ std::make_unique<AudioTimestampHelper>(config.samples_per_second);
65
+ is_initialized_ = true;
66
+
67
+ // Store initial values to guard against midstream configuration changes.
68
+- channels_ = codec_context_->channels;
69
++ channels_ = codec_context_->ch_layout.nb_channels;
70
+ av_sample_format_ = codec_context_->sample_fmt;
71
+
72
+ return true;
73
+@@ -291,17 +292,19 @@ cdm::Status FFmpegCdmAudioDecoder::DecodeBuffer(
74
+ for (auto& frame : audio_frames) {
75
+ int decoded_audio_size = 0;
76
+ if (frame->sample_rate != samples_per_second_ ||
77
+- frame->channels != channels_ || frame->format != av_sample_format_) {
78
++ frame->ch_layout.nb_channels != channels_ ||
79
++ frame->format != av_sample_format_) {
80
+ DLOG(ERROR) << "Unsupported midstream configuration change!"
81
+ << " Sample Rate: " << frame->sample_rate << " vs "
82
+- << samples_per_second_ << ", Channels: " << frame->channels
83
+- << " vs " << channels_ << ", Sample Format: " << frame->format
84
+- << " vs " << av_sample_format_;
85
++ << samples_per_second_
86
++ << ", Channels: " << frame->ch_layout.nb_channels << " vs "
87
++ << channels_ << ", Sample Format: " << frame->format << " vs "
88
++ << av_sample_format_;
89
+ return cdm::kDecodeError;
90
+ }
91
+
92
+ decoded_audio_size = av_samples_get_buffer_size(
93
+- nullptr, codec_context_->channels, frame->nb_samples,
94
++ nullptr, codec_context_->ch_layout.nb_channels, frame->nb_samples,
95
+ codec_context_->sample_fmt, 1);
96
+ if (!decoded_audio_size)
97
+ continue;
98
+@@ -320,9 +323,9 @@ bool FFmpegCdmAudioDecoder::OnNewFrame(
99
+ size_t* total_size,
100
+ std::vector<std::unique_ptr<AVFrame, ScopedPtrAVFreeFrame>>* audio_frames,
101
+ AVFrame* frame) {
102
+- *total_size += av_samples_get_buffer_size(nullptr, codec_context_->channels,
103
+- frame->nb_samples,
104
+- codec_context_->sample_fmt, 1);
105
++ *total_size += av_samples_get_buffer_size(
106
++ nullptr, codec_context_->ch_layout.nb_channels, frame->nb_samples,
107
++ codec_context_->sample_fmt, 1);
108
+ audio_frames->emplace_back(av_frame_clone(frame));
109
+ return true;
110
+ }
111
+diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc
112
+index 87ca8969626..76f03d6608e 100644
113
+--- a/media/ffmpeg/ffmpeg_common.cc
114
++++ b/media/ffmpeg/ffmpeg_common.cc
115
+@@ -345,10 +345,11 @@ bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context,
116
+ codec_context->sample_fmt, codec_context->codec_id);
117
+
118
+ ChannelLayout channel_layout =
119
+- codec_context->channels > 8
120
++ codec_context->ch_layout.nb_channels > 8
121
+ ? CHANNEL_LAYOUT_DISCRETE
122
+- : ChannelLayoutToChromeChannelLayout(codec_context->channel_layout,
123
+- codec_context->channels);
124
++ : ChannelLayoutToChromeChannelLayout(
125
++ codec_context->ch_layout.u.mask,
126
++ codec_context->ch_layout.nb_channels);
127
+
128
+ int sample_rate = codec_context->sample_rate;
129
+ switch (codec) {
130
+@@ -401,7 +402,7 @@ bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context,
131
+ extra_data, encryption_scheme, seek_preroll,
132
+ codec_context->delay);
133
+ if (channel_layout == CHANNEL_LAYOUT_DISCRETE)
134
+- config->SetChannelsForDiscrete(codec_context->channels);
135
++ config->SetChannelsForDiscrete(codec_context->ch_layout.nb_channels);
136
+
137
+ #if BUILDFLAG(ENABLE_PLATFORM_AC3_EAC3_AUDIO)
138
+ // These are bitstream formats unknown to ffmpeg, so they don't have
139
+@@ -470,7 +471,7 @@ void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config,
140
+
141
+ // TODO(scherkus): should we set |channel_layout|? I'm not sure if FFmpeg uses
142
+ // said information to decode.
143
+- codec_context->channels = config.channels();
144
++ codec_context->ch_layout.nb_channels = config.channels();
145
+ codec_context->sample_rate = config.samples_per_second();
146
+
147
+ if (config.extra_data().empty()) {
148
+diff --git a/media/filters/audio_file_reader.cc b/media/filters/audio_file_reader.cc
149
+index 5f257bdfaa6..e1be5aa9a5b 100644
150
+--- a/media/filters/audio_file_reader.cc
151
++++ b/media/filters/audio_file_reader.cc
152
+@@ -113,14 +113,15 @@ bool AudioFileReader::OpenDecoder() {
153
+
154
+ // Verify the channel layout is supported by Chrome. Acts as a sanity check
155
+ // against invalid files. See http://crbug.com/171962
156
+- if (ChannelLayoutToChromeChannelLayout(codec_context_->channel_layout,
157
+- codec_context_->channels) ==
158
++ if (ChannelLayoutToChromeChannelLayout(
159
++ codec_context_->ch_layout.u.mask,
160
++ codec_context_->ch_layout.nb_channels) ==
161
+ CHANNEL_LAYOUT_UNSUPPORTED) {
162
+ return false;
163
+ }
164
+
165
+ // Store initial values to guard against midstream configuration changes.
166
+- channels_ = codec_context_->channels;
167
++ channels_ = codec_context_->ch_layout.nb_channels;
168
+ audio_codec_ = CodecIDToAudioCodec(codec_context_->codec_id);
169
+ sample_rate_ = codec_context_->sample_rate;
170
+ av_sample_format_ = codec_context_->sample_fmt;
171
+@@ -223,7 +224,7 @@ bool AudioFileReader::OnNewFrame(
172
+ if (frames_read < 0)
173
+ return false;
174
+
175
+- const int channels = frame->channels;
176
++ const int channels = frame->ch_layout.nb_channels;
177
+ if (frame->sample_rate != sample_rate_ || channels != channels_ ||
178
+ frame->format != av_sample_format_) {
179
+ DLOG(ERROR) << "Unsupported midstream configuration change!"
180
+diff --git a/media/filters/audio_file_reader_unittest.cc b/media/filters/audio_file_reader_unittest.cc
181
+index 2aba7927a31..1f45a50cace 100644
182
+--- a/media/filters/audio_file_reader_unittest.cc
183
++++ b/media/filters/audio_file_reader_unittest.cc
184
+@@ -121,11 +121,11 @@ class AudioFileReaderTest : public testing::Test {
185
+ EXPECT_FALSE(reader_->Open());
186
+ }
187
+
188
+- void RunTestFailingDecode(const char* fn) {
189
++ void RunTestFailingDecode(const char* fn, int expect_read = 0) {
190
+ Initialize(fn);
191
+ EXPECT_TRUE(reader_->Open());
192
+ std::vector<std::unique_ptr<AudioBus>> decoded_audio_packets;
193
+- EXPECT_EQ(reader_->Read(&decoded_audio_packets), 0);
194
++ EXPECT_EQ(reader_->Read(&decoded_audio_packets), expect_read);
195
+ }
196
+
197
+ void RunTestPartialDecode(const char* fn) {
198
+@@ -219,7 +219,7 @@ TEST_F(AudioFileReaderTest, AAC_ADTS) {
199
+ }
200
+
201
+ TEST_F(AudioFileReaderTest, MidStreamConfigChangesFail) {
202
+- RunTestFailingDecode("midstream_config_change.mp3");
203
++ RunTestFailingDecode("midstream_config_change.mp3", 42624);
204
+ }
205
+ #endif
206
+
207
+diff --git a/media/filters/audio_video_metadata_extractor.cc b/media/filters/audio_video_metadata_extractor.cc
208
+index 185819eb936..69ff508c221 100644
209
+--- a/media/filters/audio_video_metadata_extractor.cc
210
++++ b/media/filters/audio_video_metadata_extractor.cc
211
+@@ -113,6 +113,15 @@ bool AudioVideoMetadataExtractor::Extract(DataSource* source,
212
+ if (!stream)
213
+ continue;
214
+
215
++ void* display_matrix =
216
++ av_stream_get_side_data(stream, AV_PKT_DATA_DISPLAYMATRIX, nullptr);
217
++ if (display_matrix) {
218
++ rotation_ = VideoTransformation::FromFFmpegDisplayMatrix(
219
++ static_cast<int32_t*>(display_matrix))
220
++ .rotation;
221
++ info.tags"rotate" = base::NumberToString(rotation_);
222
++ }
223
++
224
+ // Extract dictionary from streams also. Needed for containers that attach
225
+ // metadata to contained streams instead the container itself, like OGG.
226
+ ExtractDictionary(stream->metadata, &info.tags);
227
+@@ -255,8 +264,6 @@ void AudioVideoMetadataExtractor::ExtractDictionary(AVDictionary* metadata,
228
+ if (raw_tags->find(tag->key) == raw_tags->end())
229
+ (*raw_tags)tag->key = tag->value;
230
+
231
+- if (ExtractInt(tag, "rotate", &rotation_))
232
+- continue;
233
+ if (ExtractString(tag, "album", &album_))
234
+ continue;
235
+ if (ExtractString(tag, "artist", &artist_))
236
+diff --git a/media/filters/ffmpeg_aac_bitstream_converter.cc b/media/filters/ffmpeg_aac_bitstream_converter.cc
237
+index 6f231c85729..ca5e5fb927d 100644
238
+--- a/media/filters/ffmpeg_aac_bitstream_converter.cc
239
++++ b/media/filters/ffmpeg_aac_bitstream_converter.cc
240
+@@ -195,14 +195,15 @@ bool FFmpegAACBitstreamConverter::ConvertPacket(AVPacket* packet) {
241
+ if (!header_generated_ || codec_ != stream_codec_parameters_->codec_id ||
242
+ audio_profile_ != stream_codec_parameters_->profile ||
243
+ sample_rate_index_ != sample_rate_index ||
244
+- channel_configuration_ != stream_codec_parameters_->channels ||
245
++ channel_configuration_ !=
246
++ stream_codec_parameters_->ch_layout.nb_channels ||
247
+ frame_length_ != header_plus_packet_size) {
248
+ header_generated_ =
249
+ GenerateAdtsHeader(stream_codec_parameters_->codec_id,
250
+ 0, // layer
251
+ stream_codec_parameters_->profile, sample_rate_index,
252
+ 0, // private stream
253
+- stream_codec_parameters_->channels,
254
++ stream_codec_parameters_->ch_layout.nb_channels,
255
+ 0, // originality
256
+ 0, // home
257
+ 0, // copyrighted_stream
258
+@@ -214,7 +215,7 @@ bool FFmpegAACBitstreamConverter::ConvertPacket(AVPacket* packet) {
259
+ codec_ = stream_codec_parameters_->codec_id;
260
+ audio_profile_ = stream_codec_parameters_->profile;
261
+ sample_rate_index_ = sample_rate_index;
262
+- channel_configuration_ = stream_codec_parameters_->channels;
263
++ channel_configuration_ = stream_codec_parameters_->ch_layout.nb_channels;
264
+ frame_length_ = header_plus_packet_size;
265
+ }
266
+
267
+diff --git a/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc b/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc
268
+index 1fd4c5ccd7d..f59bcd8fdaf 100644
269
+--- a/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc
270
++++ b/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc
271
+@@ -34,7 +34,7 @@ class FFmpegAACBitstreamConverterTest : public testing::Test {
272
+ memset(&test_parameters_, 0, sizeof(AVCodecParameters));
273
+ test_parameters_.codec_id = AV_CODEC_ID_AAC;
274
+ test_parameters_.profile = FF_PROFILE_AAC_MAIN;
275
+- test_parameters_.channels = 2;
276
++ test_parameters_.ch_layout.nb_channels = 2;
277
+ test_parameters_.extradata = extradata_header_;
278
+ test_parameters_.extradata_size = sizeof(extradata_header_);
279
+ }
280
+diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc
281
+index 6a56c675f7d..4615fdeb3fb 100644
282
+--- a/media/filters/ffmpeg_audio_decoder.cc
283
++++ b/media/filters/ffmpeg_audio_decoder.cc
284
+@@ -28,7 +28,7 @@ namespace media {
285
+
286
+ // Return the number of channels from the data in |frame|.
287
+ static inline int DetermineChannels(AVFrame* frame) {
288
+- return frame->channels;
289
++ return frame->ch_layout.nb_channels;
290
+ }
291
+
292
+ // Called by FFmpeg's allocation routine to allocate a buffer. Uses
293
+@@ -231,7 +231,7 @@ bool FFmpegAudioDecoder::OnNewFrame(const DecoderBuffer& buffer,
294
+ // Translate unsupported into discrete layouts for discrete configurations;
295
+ // ffmpeg does not have a labeled discrete configuration internally.
296
+ ChannelLayout channel_layout = ChannelLayoutToChromeChannelLayout(
297
+- codec_context_->channel_layout, codec_context_->channels);
298
++ codec_context_->ch_layout.u.mask, codec_context_->ch_layout.nb_channels);
299
+ if (channel_layout == CHANNEL_LAYOUT_UNSUPPORTED &&
300
+ config_.channel_layout() == CHANNEL_LAYOUT_DISCRETE) {
301
+ channel_layout = CHANNEL_LAYOUT_DISCRETE;
302
+@@ -348,11 +348,11 @@ bool FFmpegAudioDecoder::ConfigureDecoder(const AudioDecoderConfig& config) {
303
+ // Success!
304
+ av_sample_format_ = codec_context_->sample_fmt;
305
+
306
+- if (codec_context_->channels != config.channels()) {
307
++ if (codec_context_->ch_layout.nb_channels != config.channels()) {
308
+ MEDIA_LOG(ERROR, media_log_)
309
+ << "Audio configuration specified " << config.channels()
310
+ << " channels, but FFmpeg thinks the file contains "
311
+- << codec_context_->channels << " channels";
312
++ << codec_context_->ch_layout.nb_channels << " channels";
313
+ ReleaseFFmpegResources();
314
+ state_ = DecoderState::kUninitialized;
315
+ return false;
316
+@@ -403,7 +403,7 @@ int FFmpegAudioDecoder::GetAudioBuffer(struct AVCodecContext* s,
317
+ if (frame->nb_samples <= 0)
318
+ return AVERROR(EINVAL);
319
+
320
+- if (s->channels != channels) {
321
++ if (s->ch_layout.nb_channels != channels) {
322
+ DLOG(ERROR) << "AVCodecContext and AVFrame disagree on channel count.";
323
+ return AVERROR(EINVAL);
324
+ }
325
+@@ -436,7 +436,8 @@ int FFmpegAudioDecoder::GetAudioBuffer(struct AVCodecContext* s,
326
+ ChannelLayout channel_layout =
327
+ config_.channel_layout() == CHANNEL_LAYOUT_DISCRETE
328
+ ? CHANNEL_LAYOUT_DISCRETE
329
+- : ChannelLayoutToChromeChannelLayout(s->channel_layout, s->channels);
330
++ : ChannelLayoutToChromeChannelLayout(s->ch_layout.u.mask,
331
++ s->ch_layout.nb_channels);
332
+
333
+ if (channel_layout == CHANNEL_LAYOUT_UNSUPPORTED) {
334
+ DLOG(ERROR) << "Unsupported channel layout.";
335
gcc-enable-lto.patch
Changed
23
1
2
--- a/base/BUILD.gn
3
+++ b/base/BUILD.gn
4
@@ -1986,6 +1986,10 @@
5
-
6
- }
7
+ }
8
+ }
9
10
-+ if (gcc_lto) {
11
-+ configs -= "//build/config/compiler:gcc_lto"
12
-+ }
13
++ if (gcc_lto) {
14
++ configs -= "//build/config/compiler:gcc_lto"
15
++ }
16
+
17
- if (current_cpu == "x64") {
18
- defines += "PA_PCSCAN_STACK_SUPPORTED"
19
- sources += "allocator/partition_allocator/starscan/stack/asm/x64/push_registers_asm.cc"
20
+ if (use_partition_alloc) {
21
+ sources +=
22
+ "allocator/partition_allocator/address_pool_manager_unittest.cc",
23
chromium-100.0.4896.127.tar.xz -> chromium-103.0.5060.114.tar.xz
Changed
chromium-symbolic.svg
Changed
555
1
2
-<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
3
- <g transform="translate(0 -292.77)" fill-rule="evenodd">
4
- <path transform="translate(0 292.77)" d="m8 0c-2.9688 0-5.5431 1.6049-6.9238 3.9941l3.4629 5.998 0.0058594-0.0039063c-0.33743-0.587-0.54492-1.2599-0.54492-1.9883 0-2.216 1.784-4 4-4h6.918l0.007812-0.0039062c-1.3803-2.3906-3.956-3.9961-6.9258-3.9961zm-6.9238 3.9941c-0.16618 0.28757-0.31369 0.58593-0.44336 0.89453 0.12852-0.30638 0.27614-0.60523 0.44336-0.89453zm-0.81445 2.002c-0.063348 0.24696-0.11637 0.49818-0.15625 0.75391 0.040321-0.25396 0.09178-0.50523 0.15625-0.75391zm-0.19336 1.002c-0.031547 0.25414-0.049317 0.51231-0.056641 0.77344 0.0074787-0.25874 0.024224-0.51758 0.056641-0.77344zm-0.066406 0.96289c-6.3137e-5 0.013175-0.0019531 0.025872-0.0019531 0.039062 0 0.31231 0.022151 0.61909 0.056641 0.92188-0.037536-0.3208-0.05629-0.64074-0.054688-0.96094zm0.076172 1.1016c0.038415 0.29125 0.093448 0.5771 0.16211 0.85742-0.070883-0.28406-0.12335-0.57082-0.16211-0.85742zm0.19727 0.99805c0.091086 0.3385 0.20625 0.67364 0.34375 1.0039-0.13429-0.32476-0.25247-0.65856-0.34375-1.0039zm0.34375 1.0039c0.093646 0.22647 0.20902 0.4391 0.32227 0.6543-0.11418-0.21652-0.22997-0.43262-0.32227-0.6543zm0.32227 0.6543c0.047723 0.090496 0.083121 0.18399 0.13477 0.27344 0.0068955 0.011943 0.016491 0.021308 0.023438 0.033203-0.057828-0.099177-0.10459-0.20477-0.1582-0.30664zm0.1582 0.30664c0.18369 0.31503 0.38946 0.61488 0.61328 0.90039-0.22081-0.2833-0.42705-0.5815-0.61328-0.90039zm0.67383 0.98828c0.24745 0.30711 0.51472 0.59779 0.80469 0.86523-0.286-0.26475-0.5556-0.55416-0.80469-0.86523zm1.4141 1.373c0.19915 0.15005 0.40407 0.29066 0.61719 0.42188-0.21156-0.1305-0.41738-0.27099-0.61719-0.42188zm0.64844 0.44141c0.20201 0.12309 0.40966 0.23664 0.62305 0.3418-0.21134-0.10449-0.42088-0.21838-0.62305-0.3418zm0.71484 0.38672c0.19014 0.090687 0.38386 0.17422 0.58203 0.25-0.1972-0.075792-0.39101-0.15859-0.58203-0.25zm0.74609 0.30859c0.18385 0.065711 0.36872 0.12728 0.55859 0.17969-0.18849-0.052523-0.37433-0.11344-0.55859-0.17969zm0.75586 0.23047c0.17137 0.042615 0.34392 0.081857 0.51953 0.11328-0.1743-0.031708-0.34783-0.070112-0.51953-0.11328zm0.84375 0.16211c0.14048 0.019266 0.28107 0.038852 0.42383 0.050781-0.1422-0.012166-0.28272-0.031057-0.42383-0.050781zm0.85156 0.072265c0.084408 0.00261 0.16689 0.011719 0.25195 0.011719v-0.007812c-0.084073-4e-6 -0.16806-0.001251-0.25195-0.003907z"/>
5
- <path transform="translate(0 292.77)" d="m8.2051-0.0039062c-0.067876-0.0018334-0.13533 0.0040042-0.20312 0.0039062 0.36876 8.8644e-5 0.73088 0.02619 1.0859 0.074219-0.29424-0.041037-0.58844-0.070174-0.88281-0.078125zm-0.21289 0.0039062c-0.26615-5.8021e-5 -0.53129 0.014666-0.79492 0.041016 0.26143-0.025824 0.52654-0.040759 0.79492-0.041016zm-0.85156 0.046875c-0.23605 0.025293-0.47073 0.061354-0.70312 0.10742 0.23076-0.045338 0.46557-0.082259 0.70312-0.10742zm1.9727 0.03125c0.29658 0.042337 0.59114 0.10493 0.88477 0.18164-0.28938-0.074218-0.58339-0.13988-0.88477-0.18164zm-2.8145 0.10547c-0.20793 0.045059-0.41353 0.096739-0.61719 0.1582 0.20238-0.060783 0.4083-0.11329 0.61719-0.1582zm4.0117 0.16406c0.17588 0.052879 0.34712 0.11527 0.51758 0.17969-0.17171-0.065602-0.3437-0.12659-0.51758-0.17969zm-4.7949 0.048828c-0.18254 0.059478-0.363 0.12276-0.54102 0.19531 0.17733-0.072143 0.35752-0.13576 0.54102-0.19531zm-0.75195 0.28711c-0.16297 0.071956-0.32421 0.14754-0.48242 0.23047 0.15724-0.082363 0.31917-0.15847 0.48242-0.23047zm6.4824 0.0078125c0.11114 0.049754 0.22028 0.11078 0.33008 0.16602-0.11024-0.055265-0.21697-0.11578-0.33008-0.16602zm-7.1875 0.3457c-0.15224 0.086105-0.30238 0.17512-0.44922 0.27148 0.14627-0.09592 0.29643-0.18512 0.44922-0.27148zm8.332 0.29102c0.12847 0.084776 0.25775 0.1679 0.38086 0.25977-0.12261-0.090957-0.2518-0.17494-0.38086-0.25977zm-8.9746 0.11328c-0.14122 0.098764-0.2788 0.20216-0.41406 0.31055 0.13477-0.10781 0.27232-0.21151 0.41406-0.31055zm9.6836 0.4082c0.14161 0.11775 0.281 0.2381 0.41406 0.36523-0.13289-0.12624-0.27123-0.24721-0.41406-0.36523zm-10.328 0.095703c-0.10925 0.094548-0.21767 0.18998-0.32227 0.29102 0.10418-0.10034 0.21274-0.19643 0.32227-0.29102zm11.002 0.52539c0.18123 0.18967 0.35359 0.38691 0.51562 0.59375-0.16146-0.20541-0.33262-0.40324-0.51562-0.59375zm-11.592 0.039062c-0.087652 0.093206-0.17413 0.18711-0.25781 0.28516 0.083362-0.097301 0.16992-0.19202 0.25781-0.28516zm-0.5332 0.62891c-0.066279 0.086893-0.13213 0.17344-0.19531 0.26367 0.062985-0.089711 0.12878-0.17674 0.19531-0.26367zm12.717 0.015625c0.19435 0.25492 0.36841 0.52294 0.5293 0.79688-0.16178-0.27581-0.3368-0.54357-0.5293-0.79688zm-13.176 0.6543c-0.040114 0.065194-0.086473 0.12468-0.125 0.19141l0.0058594 0.0039062c0.038163-0.06626 0.07915-0.13028 0.11914-0.19531zm6.8105 0.19141c2.216 0 4 1.784 4 4 0 0.73147-0.2087 1.4074-0.54883 1.9961l0.005859 0.0039062-0.13867 0.24023-3.3184 5.75v0.009766c2.7599-0.001023 5.4372-1.4285 6.9219-4 1.4856-2.5731 1.3819-5.6088 0-8h-6.9219z" opacity=".55"/>
6
- <path transform="translate(0 292.77)" d="m7.9922 0c-0.26839 2e-4 -0.53349 0.015216-0.79492 0.041016 0.26363-0.0263 0.52877-0.041076 0.79492-0.041016zm-0.85156 0.046875c-0.23755 0.02512-0.47236 0.062122-0.70312 0.10742 0.2324-0.04602 0.46708-0.082122 0.70312-0.10742zm-0.8418 0.13672c-0.20888 0.04491-0.41481 0.097403-0.61719 0.1582 0.20366-0.0615 0.40926-0.1131 0.61719-0.1582zm4.0117 0.16406c0.17388 0.0531 0.34587 0.11409 0.51758 0.17969-0.17045-0.06442-0.3417-0.12679-0.51758-0.17969zm-4.7949 0.048828c-0.18349 0.05955-0.36369 0.12321-0.54102 0.19531 0.17802-0.07256 0.35848-0.13581 0.54102-0.19531zm-0.75195 0.28711c-0.16325 0.07199-0.32518 0.14807-0.48242 0.23047 0.15821-0.08294 0.31945-0.15847 0.48242-0.23047zm-0.70508 0.35352c-0.15279 0.08637-0.30295 0.17558-0.44922 0.27148 0.14684-0.09637 0.29698-0.18538 0.44922-0.27148zm8.332 0.29102c0.12906 0.08482 0.25825 0.16877 0.38086 0.25977-0.12311-0.09186-0.25239-0.17497-0.38086-0.25977zm-8.9746 0.11328c-0.14174 0.09904-0.2793 0.20274-0.41406 0.31055 0.13527-0.10839 0.27284-0.21175 0.41406-0.31055zm9.6836 0.4082c0.14284 0.11803 0.28117 0.23899 0.41406 0.36523-0.13307-0.12714-0.27246-0.24748-0.41406-0.36523zm-10.328 0.095703c-0.10952 0.09459-0.21808 0.19069-0.32227 0.29102 0.1046-0.10103 0.21302-0.19652 0.32227-0.29102zm11.002 0.52539c0.18301 0.1905 0.35417 0.38834 0.51562 0.59375-0.16203-0.20684-0.3344-0.40409-0.51562-0.59375zm-11.592 0.039062c-0.08789 0.09314-0.17445 0.18786-0.25781 0.28516 0.083679-0.09804 0.17016-0.19196 0.25781-0.28516zm-0.5332 0.62891c-0.066533 0.08694-0.13233 0.17397-0.19531 0.26367 0.063183-0.09023 0.12903-0.17677 0.19531-0.26367zm13.283 0.85352-0.013672 0.0078125h0.003906c1.0361 1.7929 1.3524 3.9472 0.82031 5.998 0.51081-1.9573 0.28609-4.1064-0.81055-6.0059zm-13.855 0.0019531c-0.0019132 0.0032892-0.0039597 0.0064654-0.0058594 0.0097656-1.3768 2.3898-1.4778 5.4185 0.0058594 7.9883 1.4849 2.572 4.1633 3.9999 6.9238 4v-0.001954l3.3184-5.75c-0.71742 1.0637-1.9334 1.7598-3.3184 1.7598-1.4877 0-2.7659-0.81274-3.4551-2.0117l-0.0058594 0.0039063-3.4629-5.998zm10.242 6.2461 0.13867-0.24023-0.005859-0.0039062c-0.046283 0.080108-0.081254 0.1677-0.13281 0.24414zm4.4238-0.23828c-0.17464 0.67175-0.44309 1.3319-0.80469 1.9648 0.3561-0.6189 0.62541-1.2792 0.80469-1.9648zm-0.80469 1.9648c-0.008878 0.01543-0.016406 0.031498-0.025391 0.046875 0.002853-0.004915 0.006923-0.008748 0.009766-0.013672 0.006215-0.010765 0.009465-0.022422 0.015625-0.033203zm-0.025391 0.046875c-0.16138 0.27807-0.34026 0.53954-0.5293 0.78906 0.19208-0.25377 0.37016-0.51671 0.5293-0.78906zm-0.5293 0.78906c-0.034882 0.046087-0.07147 0.09131-0.10742 0.13672 0.036023-0.045459 0.072258-0.090304 0.10742-0.13672zm-0.10742 0.13672c-0.19263 0.24309-0.39299 0.47669-0.60742 0.69336 0.21926-0.21926 0.4175-0.45347 0.60742-0.69336zm-0.75977 0.84375c-0.16802 0.16083-0.34574 0.30905-0.52539 0.45312 0.18255-0.14513 0.35845-0.29493 0.52539-0.45312zm-0.79492 0.66992c-0.19636 0.14387-0.40011 0.27399-0.60742 0.39844 0.20953-0.12546 0.41362-0.25756 0.60742-0.39844zm-1.1328 0.68164c-0.13759 0.069106-0.27496 0.1383-0.41602 0.19922 0.14014-0.060811 0.27798-0.12975 0.41602-0.19922zm-0.8125 0.35547c-0.17664 0.065328-0.35449 0.127-0.53516 0.17969 0.17969-0.052782 0.3577-0.11362 0.53516-0.17969zm-0.86914 0.27148c-0.23843 0.058475-0.47953 0.1042-0.72266 0.14062 0.2417-0.036415 0.48287-0.081371 0.72266-0.14062zm-0.90625 0.17383c-0.30489 0.038433-0.61309 0.055452-0.92188 0.058594 0.30718-0.003008 0.61446-0.019611 0.92188-0.058594z" opacity=".7"/>
7
- <rect x="5" y="297.77" width="6" height="6" ry="3" opacity=".85"/>
8
- </g>
9
-</svg>
10
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
11
+<svg
12
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
13
+ xmlns:cc="http://creativecommons.org/ns#"
14
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
15
+ xmlns:svg="http://www.w3.org/2000/svg"
16
+ xmlns="http://www.w3.org/2000/svg"
17
+ xmlns:xlink="http://www.w3.org/1999/xlink"
18
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
19
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
20
+ version="1.1"
21
+ id="svg2"
22
+ xml:space="preserve"
23
+ width="1056"
24
+ height="816"
25
+ viewBox="0 0 1056 816"
26
+ sodipodi:docname="chromium.ai"><metadata
27
+ id="metadata8"><rdf:RDF><cc:Work
28
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
29
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
30
+ id="defs6"><clipPath
31
+ clipPathUnits="userSpaceOnUse"
32
+ id="clipPath18"><path
33
+ d="m 332.315,306.427 c 0,-35.346 28.656,-64.001 64,-64.001 v 0 c 35.348,0 64.001,28.655 64.001,64.001 v 0 c 0,35.348 -28.653,64.003 -64.001,64.003 v 0 c -35.344,0 -64,-28.655 -64,-64.003"
34
+ id="path16" /></clipPath><clipPath
35
+ clipPathUnits="userSpaceOnUse"
36
+ id="clipPath26"><path
37
+ d="m 356.24,344.208 h 80.16 v -80.16 h -80.16 z"
38
+ id="path24" /></clipPath><clipPath
39
+ clipPathUnits="userSpaceOnUse"
40
+ id="clipPath30"><path
41
+ d="m 356.24,344.208 h 80.16 v -80.16 h -80.16 z"
42
+ id="path28" /></clipPath><mask
43
+ maskUnits="userSpaceOnUse"
44
+ x="0"
45
+ y="0"
46
+ width="1"
47
+ height="1"
48
+ id="mask32"><g
49
+ id="g42"><g
50
+ clip-path="url(#clipPath30)"
51
+ id="g40"><g
52
+ id="g38"><g
53
+ transform="matrix(80.160004,0,0,80.160004,356.24023,264.048)"
54
+ id="g36"><image
55
+ width="1"
56
+ height="1"
57
+ style="image-rendering:optimizeSpeed"
58
+ preserveAspectRatio="none"
59
+ transform="matrix(1,0,0,-1,0,1)"
60
+ xlink:href="data:image/png;base64,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"
61
+ id="image34" /></g></g></g></g></mask><mask
62
+ maskUnits="userSpaceOnUse"
63
+ x="0"
64
+ y="0"
65
+ width="1"
66
+ height="1"
67
+ id="mask44"><image
68
+ width="1"
69
+ height="1"
70
+ style="image-rendering:optimizeSpeed"
71
+ preserveAspectRatio="none"
72
+ xlink:href="data:image/png;base64,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"
73
+ id="image46" /></mask><radialGradient
74
+ fx="0"
75
+ fy="0"
76
+ cx="0"
77
+ cy="0"
78
+ r="1"
79
+ gradientUnits="userSpaceOnUse"
80
+ gradientTransform="matrix(0,-79.311325,-79.311325,0,396.99658,321.95068)"
81
+ spreadMethod="pad"
82
+ id="radialGradient90"><stop
83
+ style="stop-opacity:1;stop-color:#89b7e1"
84
+ offset="0"
85
+ id="stop82" /><stop
86
+ style="stop-opacity:1;stop-color:#89b7e1"
87
+ offset="0.662109"
88
+ id="stop84" /><stop
89
+ style="stop-opacity:1;stop-color:#89b7e1"
90
+ offset="0.69573897"
91
+ id="stop86" /><stop
92
+ style="stop-opacity:1;stop-color:#659ad1"
93
+ offset="1"
94
+ id="stop88" /></radialGradient><radialGradient
95
+ fx="0"
96
+ fy="0"
97
+ cx="0"
98
+ cy="0"
99
+ r="1"
100
+ gradientUnits="userSpaceOnUse"
101
+ gradientTransform="matrix(0,-81.499085,-81.499085,0,395.0874,324.18262)"
102
+ spreadMethod="pad"
103
+ id="radialGradient114"><stop
104
+ style="stop-opacity:1;stop-color:#d0e2f1"
105
+ offset="0"
106
+ id="stop106" /><stop
107
+ style="stop-opacity:1;stop-color:#d0e2f1"
108
+ offset="0.662109"
109
+ id="stop108" /><stop
110
+ style="stop-opacity:1;stop-color:#d0e2f1"
111
+ offset="0.85976252"
112
+ id="stop110" /><stop
113
+ style="stop-opacity:1;stop-color:#89b7e1"
114
+ offset="1"
115
+ id="stop112" /></radialGradient><clipPath
116
+ clipPathUnits="userSpaceOnUse"
117
+ id="clipPath124"><path
118
+ d="m 332.315,306.427 c 0,-35.346 28.656,-64.001 64,-64.001 v 0 c 35.348,0 64.001,28.655 64.001,64.001 v 0 c 0,35.348 -28.653,64.003 -64.001,64.003 v 0 c -35.344,0 -64,-28.655 -64,-64.003"
119
+ id="path122" /></clipPath><clipPath
120
+ clipPathUnits="userSpaceOnUse"
121
+ id="clipPath132"><path
122
+ d="m 389.898,294.508 h 30.623 V 242.58 h -30.623 z"
123
+ id="path130" /></clipPath><clipPath
124
+ clipPathUnits="userSpaceOnUse"
125
+ id="clipPath136"><path
126
+ d="m 404.76,294.508 -14.862,-51.73 2.016,-0.198 28.607,49.551"
127
+ id="path134" /></clipPath><linearGradient
128
+ x1="0"
129
+ y1="0"
130
+ x2="1"
131
+ y2="0"
132
+ gradientUnits="userSpaceOnUse"
133
+ gradientTransform="matrix(-15.160248,-30.32016,-30.32016,15.160248,403.08984,274.21582)"
134
+ spreadMethod="pad"
135
+ id="linearGradient146"><stop
136
+ style="stop-opacity:0.77000076;stop-color:#ffffff"
137
+ offset="0"
138
+ id="stop142" /><stop
139
+ style="stop-opacity:0.25000381;stop-color:#ffffff"
140
+ offset="1"
141
+ id="stop144" /></linearGradient><mask
142
+ maskUnits="userSpaceOnUse"
143
+ x="0"
144
+ y="0"
145
+ width="1"
146
+ height="1"
147
+ id="mask148"><g
148
+ id="g158"><g
149
+ id="g156"><g
150
+ id="g154"><g
151
+ id="g152"><path
152
+ d="M -32768,32767 H 32767 V -32767 H -32768 Z"
153
+ style="fill:url(#linearGradient146);stroke:none"
154
+ id="path150" /></g></g></g></g></mask><linearGradient
155
+ x1="0"
156
+ y1="0"
157
+ x2="1"
158
+ y2="0"
159
+ gradientUnits="userSpaceOnUse"
160
+ gradientTransform="matrix(-15.160248,-30.32016,-30.32016,15.160248,403.08984,274.21582)"
161
+ spreadMethod="pad"
162
+ id="linearGradient164"><stop
163
+ style="stop-opacity:1;stop-color:#3770b7"
164
+ offset="0"
165
+ id="stop160" /><stop
166
+ style="stop-opacity:1;stop-color:#3770b7"
167
+ offset="1"
168
+ id="stop162" /></linearGradient><clipPath
169
+ clipPathUnits="userSpaceOnUse"
170
+ id="clipPath190"><path
171
+ d="m 396.297,334.547 h 58.057 v -14.84 h -58.057 z"
172
+ id="path188" /></clipPath><clipPath
173
+ clipPathUnits="userSpaceOnUse"
174
+ id="clipPath194"><path
175
+ d="m 402.123,319.707 52.231,12.993 -0.837,1.847 h -57.22"
176
+ id="path192" /></clipPath><linearGradient
177
+ x1="0"
178
+ y1="0"
179
+ x2="1"
180
+ y2="0"
181
+ gradientUnits="userSpaceOnUse"
182
+ gradientTransform="matrix(32.638824,0,0,-32.638824,421.62012,327.12695)"
183
+ spreadMethod="pad"
184
+ id="linearGradient204"><stop
185
+ style="stop-opacity:0.8;stop-color:#ffffff"
186
+ offset="0"
187
+ id="stop200" /><stop
188
+ style="stop-opacity:0.25000381;stop-color:#ffffff"
189
+ offset="1"
190
+ id="stop202" /></linearGradient><mask
191
+ maskUnits="userSpaceOnUse"
192
+ x="0"
193
+ y="0"
194
+ width="1"
195
+ height="1"
196
+ id="mask206"><g
197
+ id="g216"><g
198
+ id="g214"><g
199
+ id="g212"><g
200
+ id="g210"><path
201
+ d="M -32768,32767 H 32767 V -32767 H -32768 Z"
202
+ style="fill:url(#linearGradient204);stroke:none"
203
+ id="path208" /></g></g></g></g></mask><linearGradient
204
+ x1="0"
205
+ y1="0"
206
+ x2="1"
207
+ y2="0"
208
+ gradientUnits="userSpaceOnUse"
209
+ gradientTransform="matrix(32.638824,0,0,-32.638824,421.62012,327.12695)"
210
+ spreadMethod="pad"
211
+ id="linearGradient222"><stop
212
+ style="stop-opacity:1;stop-color:#7caada"
213
+ offset="0"
214
+ id="stop218" /><stop
215
+ style="stop-opacity:1;stop-color:#89b7e1"
216
+ offset="1"
217
+ id="stop220" /></linearGradient><clipPath
218
+ clipPathUnits="userSpaceOnUse"
219
+ id="clipPath248"><path
220
+ d="M 0,612 H 792 V 0 H 0 Z"
221
+ id="path246" /></clipPath><clipPath
222
+ clipPathUnits="userSpaceOnUse"
223
+ id="clipPath256"><path
224
+ d="m 343.211,343.807 h 38.546 v -51.201 h -38.546 z"
225
+ id="path254" /></clipPath><clipPath
226
+ clipPathUnits="userSpaceOnUse"
227
+ id="clipPath260"><path
228
+ d="m 381.757,305.075 -37.365,38.732 -1.181,-1.642 28.612,-49.559"
229
+ id="path258" /></clipPath><linearGradient
230
+ x1="0"
231
+ y1="0"
232
+ x2="1"
233
+ y2="0"
234
+ gradientUnits="userSpaceOnUse"
235
+ gradientTransform="matrix(-19.271973,29.807495,29.807495,19.271988,366.20312,315.21533)"
236
+ spreadMethod="pad"
237
+ id="linearGradient270"><stop
238
+ style="stop-opacity:1;stop-color:#ffffff"
239
+ offset="0"
240
+ id="stop266" /><stop
241
+ style="stop-opacity:0.25000381;stop-color:#ffffff"
242
+ offset="1"
243
+ id="stop268" /></linearGradient><mask
244
+ maskUnits="userSpaceOnUse"
245
+ x="0"
246
+ y="0"
247
+ width="1"
248
+ height="1"
249
+ id="mask272"><g
250
+ id="g282"><g
251
+ id="g280"><g
252
+ id="g278"><g
253
+ id="g276"><path
254
+ d="M -32768,32767 H 32767 V -32767 H -32768 Z"
255
+ style="fill:url(#linearGradient270);stroke:none"
256
+ id="path274" /></g></g></g></g></mask><linearGradient
257
+ x1="0"
258
+ y1="0"
259
+ x2="1"
260
+ y2="0"
261
+ gradientUnits="userSpaceOnUse"
262
+ gradientTransform="matrix(-19.271973,29.807495,29.807495,19.271988,366.20312,315.21533)"
263
+ spreadMethod="pad"
264
+ id="linearGradient288"><stop
265
+ style="stop-opacity:1;stop-color:#0b63af"
266
+ offset="0"
267
+ id="stop284" /><stop
268
+ style="stop-opacity:1;stop-color:#3770b7"
269
+ offset="1"
270
+ id="stop286" /></linearGradient><radialGradient
271
+ fx="0"
272
+ fy="0"
273
+ cx="0"
274
+ cy="0"
275
+ r="1"
276
+ gradientUnits="userSpaceOnUse"
277
+ gradientTransform="matrix(-29.73175,-62.539185,-62.539185,29.73175,412.90723,310.08984)"
278
+ spreadMethod="pad"
279
+ id="radialGradient326"><stop
280
+ style="stop-opacity:1;stop-color:#d2deed"
281
+ offset="0"
282
+ id="stop320" /><stop
283
+ style="stop-opacity:1;stop-color:#d2deed"
284
+ offset="0.25885849"
285
+ id="stop322" /><stop
286
+ style="stop-opacity:1;stop-color:#d0e2f1"
287
+ offset="1"
288
+ id="stop324" /></radialGradient><radialGradient
289
+ fx="0"
290
+ fy="0"
291
+ cx="0"
292
+ cy="0"
293
+ r="1"
294
+ gradientUnits="userSpaceOnUse"
295
+ gradientTransform="matrix(12.815323,-64.076599,-64.076599,-12.815323,391.37793,336.23291)"
296
+ spreadMethod="pad"
297
+ id="radialGradient348"><stop
298
+ style="stop-opacity:1;stop-color:#ffffff"
299
+ offset="0"
300
+ id="stop342" /><stop
301
+ style="stop-opacity:1;stop-color:#ffffff"
302
+ offset="0.25885849"
303
+ id="stop344" /><stop
304
+ style="stop-opacity:1;stop-color:#d9e8f1"
305
+ offset="1"
306
+ id="stop346" /></radialGradient><radialGradient
307
+ fx="0"
308
+ fy="0"
309
+ cx="0"
310
+ cy="0"
311
+ r="1"
312
+ gradientUnits="userSpaceOnUse"
313
+ gradientTransform="matrix(0,-49.928345,-60.051315,0,396.47559,332.3208)"
314
+ spreadMethod="pad"
315
+ id="radialGradient372"><stop
316
+ style="stop-opacity:1;stop-color:#a0c2e6"
317
+ offset="0"
318
+ id="stop364" /><stop
319
+ style="stop-opacity:1;stop-color:#729ad0"
320
+ offset="0.552155"
321
+ id="stop366" /><stop
322
+ style="stop-opacity:1;stop-color:#729ad0"
323
+ offset="0.57266698"
324
+ id="stop368" /><stop
325
+ style="stop-opacity:1;stop-color:#3777bb"
326
+ offset="1"
327
+ id="stop370" /></radialGradient><clipPath
328
+ clipPathUnits="userSpaceOnUse"
329
+ id="clipPath382"><path
330
+ d="m 332.315,306.427 c 0,-35.346 28.656,-64.001 64,-64.001 v 0 c 35.348,0 64.001,28.655 64.001,64.001 v 0 c 0,35.348 -28.653,64.003 -64.001,64.003 v 0 c -35.344,0 -64,-28.655 -64,-64.003"
331
+ id="path380" /></clipPath><clipPath
332
+ clipPathUnits="userSpaceOnUse"
333
+ id="clipPath390"><path
334
+ d="M 326.792,421.854 H 462.467 V 336.595 H 326.792 Z"
335
+ id="path388" /></clipPath><clipPath
336
+ clipPathUnits="userSpaceOnUse"
337
+ id="clipPath394"><path
338
+ d="m 462.447,381.78 c 0.886,-23.494 -28.755,-43.697 -66.214,-45.108 -37.452,-1.408 -68.538,16.505 -69.422,39.997 -0.886,23.506 28.757,43.694 66.212,45.107 37.459,1.413 68.541,-16.488 69.424,-39.996"
339
+ id="path392" /></clipPath><radialGradient
340
+ fx="0"
341
+ fy="0"
342
+ cx="0"
343
+ cy="0"
344
+ r="1"
345
+ gradientUnits="userSpaceOnUse"
346
+ gradientTransform="matrix(67.818146,2.5594788,1.6003418,-42.551941,394.62842,379.22559)"
347
+ spreadMethod="pad"
348
+ id="radialGradient408"><stop
349
+ style="stop-opacity:1;stop-color:#ffffff"
350
+ offset="0"
351
+ id="stop400" /><stop
352
+ style="stop-opacity:1;stop-color:#ffffff"
353
+ offset="0.159515"
354
+ id="stop402" /><stop
355
+ style="stop-opacity:0;stop-color:#ffffff"
356
+ offset="0.89889041"
357
+ id="stop404" /><stop
358
+ style="stop-opacity:0;stop-color:#ffffff"
359
+ offset="1"
360
+ id="stop406" /></radialGradient><mask
361
+ maskUnits="userSpaceOnUse"
362
+ x="0"
363
+ y="0"
364
+ width="1"
365
+ height="1"
366
+ id="mask410"><g
367
+ id="g420"><g
368
+ id="g418"><g
369
+ id="g416"><g
370
+ id="g414"><path
371
+ d="M -32767,32767 H 32767 V -32767 H -32767 Z"
372
+ style="fill:url(#radialGradient408);stroke:none"
373
+ id="path412" /></g></g></g></g></mask><radialGradient
374
+ fx="0"
375
+ fy="0"
376
+ cx="0"
377
+ cy="0"
378
+ r="1"
379
+ gradientUnits="userSpaceOnUse"
380
+ gradientTransform="matrix(67.818146,2.5594788,1.6003418,-42.551941,394.62842,379.22559)"
381
+ spreadMethod="pad"
382
+ id="radialGradient430"><stop
383
+ style="stop-opacity:1;stop-color:#729ad0"
384
+ offset="0"
385
+ id="stop422" /><stop
386
+ style="stop-opacity:1;stop-color:#729ad0"
387
+ offset="0.159515"
388
+ id="stop424" /><stop
389
+ style="stop-opacity:1;stop-color:#ffffff"
390
+ offset="0.89889041"
391
+ id="stop426" /><stop
392
+ style="stop-opacity:1;stop-color:#ffffff"
393
+ offset="1"
394
+ id="stop428" /></radialGradient></defs><sodipodi:namedview
395
+ pagecolor="#ffffff"
396
+ bordercolor="#666666"
397
+ borderopacity="1"
398
+ objecttolerance="10"
399
+ gridtolerance="10"
400
+ guidetolerance="10"
401
+ inkscape:pageopacity="0"
402
+ inkscape:pageshadow="2"
403
+ inkscape:window-width="640"
404
+ inkscape:window-height="480"
405
+ id="namedview4" /><g
406
+ id="g10"
407
+ inkscape:groupmode="layer"
408
+ inkscape:label="chromium"
409
+ transform="matrix(1.3333333,0,0,-1.3333333,0,816)"><g
410
+ id="g12"><g
411
+ id="g14"
412
+ clip-path="url(#clipPath18)"><g
413
+ id="g20"><g
414
+ id="g22" /><g
415
+ id="g60"><g
416
+ clip-path="url(#clipPath26)"
417
+ opacity="0.699997"
418
+ id="g58"><g
419
+ id="g56"><g
420
+ id="g48" /><g
421
+ mask="url(#mask32)"
422
+ id="g54"><g
423
+ transform="matrix(80.160004,0,0,80.160004,356.24023,264.048)"
424
+ id="g52"><image
425
+ width="1"
426
+ height="1"
427
+ style="image-rendering:optimizeSpeed"
428
+ preserveAspectRatio="none"
429
+ transform="matrix(1,0,0,-1,0,1)"
430
+ xlink:href="data:image/png;base64,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"
431
+ mask="url(#mask44)"
432
+ id="image50" /></g></g></g></g></g></g><g
433
+ id="g62"
434
+ transform="translate(427.584,306.3408)"><path
435
+ d="m 0,0 c 0,-17.277 -14.009,-31.284 -31.287,-31.284 -17.279,0 -31.286,14.007 -31.286,31.284 0,17.282 14.007,31.289 31.286,31.289 C -14.009,31.289 0,17.282 0,0"
436
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
437
+ id="path64" /></g><g
438
+ id="g66"
439
+ transform="translate(396.2974,393.4492)"><path
440
+ d="m 0,0 c -26.13,0 -49.567,-11.518 -65.516,-29.759 l 41.173,-71.312 0.003,0.007 c -2.39,4.134 -3.765,8.929 -3.765,14.049 0,15.525 12.582,28.113 28.105,28.113 H 82.371 C 70.682,-24.644 38.222,0 0,0"
441
+ style="fill:#4072a1;fill-opacity:1;fill-rule:nonzero;stroke:none"
442
+ id="path68" /></g></g></g><g
443
+ id="g70"><g
444
+ id="g72"><g
445
+ id="g78"><g
446
+ id="g80"><path
447
+ d="m 332.315,306.427 c 0,-33.866 26.305,-61.59 59.596,-63.852 v 0 l 28.743,49.786 h -0.006 c -2.387,-4.141 -5.851,-7.732 -10.285,-10.291 v 0 c -13.442,-7.764 -30.636,-3.153 -38.398,10.291 v 0 l -28.753,49.8 c -6.881,-10.205 -10.897,-22.5 -10.897,-35.734"
448
+ style="fill:url(#radialGradient90);stroke:none"
449
+ id="path92" /></g></g></g></g><g
450
+ id="g94"><g
451
+ id="g96"><g
452
+ id="g102"><g
453
+ id="g104"><path
454
+ d="m 396.324,334.547 v -0.01 c 4.777,0.007 9.62,-1.2 14.052,-3.765 v 0 c 13.446,-7.752 18.05,-24.948 10.284,-38.389 v 0 l -28.751,-49.808 c 1.457,-0.099 2.924,-0.149 4.406,-0.149 v 0 c 35.348,0 64.001,28.655 64.001,64.001 v 0 c 0,10.089 -2.335,19.633 -6.492,28.12 v 0 z"
455
+ style="fill:url(#radialGradient114);stroke:none"
456
+ id="path116" /></g></g></g></g><g
457
+ id="g118"><g
458
+ id="g120"
459
+ clip-path="url(#clipPath124)"><g
460
+ id="g126"><g
461
+ id="g128" /><g
462
+ id="g182"><g
463
+ clip-path="url(#clipPath132)"
464
+ opacity="0.130005"
465
+ id="g180"><g
466
+ id="g178"><g
467
+ clip-path="url(#clipPath136)"
468
+ id="g176"><g
469
+ id="g174"><g
470
+ id="g166" /><g
471
+ mask="url(#mask148)"
472
+ id="g172"><g
473
+ id="g170"><path
474
+ d="m 404.76,294.508 -14.862,-51.73 2.016,-0.198 28.607,49.551"
475
+ style="fill:url(#linearGradient164);stroke:none"
476
+ id="path168" /></g></g></g></g></g></g></g></g><g
477
+ id="g184"><g
478
+ id="g186" /><g
479
+ id="g240"><g
480
+ clip-path="url(#clipPath190)"
481
+ opacity="0.300003"
482
+ id="g238"><g
483
+ id="g236"><g
484
+ clip-path="url(#clipPath194)"
485
+ id="g234"><g
486
+ id="g232"><g
487
+ id="g224" /><g
488
+ mask="url(#mask206)"
489
+ id="g230"><g
490
+ id="g228"><path
491
+ d="m 402.123,319.707 52.231,12.993 -0.837,1.847 h -57.22"
492
+ style="fill:url(#linearGradient222);stroke:none"
493
+ id="path226" /></g></g></g></g></g></g></g></g></g></g><g
494
+ id="g242"><g
495
+ id="g244"
496
+ clip-path="url(#clipPath248)"><g
497
+ id="g250"><g
498
+ id="g252" /><g
499
+ id="g306"><g
500
+ clip-path="url(#clipPath256)"
501
+ opacity="0.199997"
502
+ id="g304"><g
503
+ id="g302"><g
504
+ clip-path="url(#clipPath260)"
505
+ id="g300"><g
506
+ id="g298"><g
507
+ id="g290" /><g
508
+ mask="url(#mask272)"
509
+ id="g296"><g
510
+ id="g294"><path
511
+ d="m 381.757,305.075 -37.365,38.732 -1.181,-1.642 28.612,-49.559"
512
+ style="fill:url(#linearGradient288);stroke:none"
513
+ id="path292" /></g></g></g></g></g></g></g></g></g></g><g
514
+ id="g308"><g
515
+ id="g310"><g
516
+ id="g316"><g
517
+ id="g318"><path
518
+ d="m 367.97,306.341 c 0,-15.64 12.685,-28.324 28.327,-28.324 v 0 c 15.639,0 28.323,12.684 28.323,28.324 v 0 c 0,15.641 -12.684,28.324 -28.323,28.324 v 0 c -15.642,0 -28.327,-12.683 -28.327,-28.324"
519
+ style="fill:url(#radialGradient326);stroke:none"
520
+ id="path328" /></g></g></g></g><g
521
+ id="g330"><g
522
+ id="g332"><g
523
+ id="g338"><g
524
+ id="g340"><path
525
+ d="m 367.97,306.341 c 0,-15.64 12.685,-28.324 28.327,-28.324 v 0 c 15.639,0 28.323,12.684 28.323,28.324 v 0 c 0,15.641 -12.684,28.324 -28.323,28.324 v 0 c -15.642,0 -28.327,-12.683 -28.327,-28.324"
526
+ style="fill:url(#radialGradient348);stroke:none"
527
+ id="path350" /></g></g></g></g><g
528
+ id="g352"><g
529
+ id="g354"><g
530
+ id="g360"><g
531
+ id="g362"><path
532
+ d="m 372.155,306.247 c 0,-13.316 10.796,-24.114 24.111,-24.114 v 0 c 13.319,0 24.113,10.798 24.113,24.114 v 0 c 0,13.313 -10.794,24.109 -24.113,24.109 v 0 c -13.315,0 -24.111,-10.796 -24.111,-24.109"
533
+ style="fill:url(#radialGradient372);stroke:none"
534
+ id="path374" /></g></g></g></g><g
535
+ id="g376"><g
536
+ id="g378"
537
+ clip-path="url(#clipPath382)"><g
538
+ id="g384"><g
539
+ id="g386" /><g
540
+ id="g448"><g
541
+ clip-path="url(#clipPath390)"
542
+ opacity="0.5"
543
+ id="g446"><g
544
+ id="g444"><g
545
+ clip-path="url(#clipPath394)"
546
+ id="g442"><g
547
+ id="g440"><g
548
+ id="g432" /><g
549
+ mask="url(#mask410)"
550
+ id="g438"><g
551
+ id="g436"><path
552
+ d="m 462.447,381.78 c 0.886,-23.494 -28.755,-43.697 -66.214,-45.108 -37.452,-1.408 -68.538,16.505 -69.422,39.997 -0.886,23.506 28.757,43.694 66.212,45.107 37.459,1.413 68.541,-16.488 69.424,-39.996"
553
+ style="fill:url(#radialGradient430);stroke:none"
554
+ id="path434" /></g></g></g></g></g></g></g></g></g></g></g></svg>
555
Refresh
No build results available
Refresh
No rpmlint results available
Mentioned Issues (82)
Login required, please
login
or
signup
in order to comment
Request History
Kieltux created request almost 3 years ago
- Rebase chromium 103.0.5060.114 for use as chromium-ffmpeg-extra
- Fixes problems with audio and youtube video playback
Kieltux accepted request almost 3 years ago