chromium-browser-stable 74.0.3729.131-1 (x86_64;i586) 2019-5352
3

Status published
Submitter cris [@T] beebgames.com
Platform 3.0
Repository main
URL https://abf.openmandriva.org/build_lists/501458
Packages
chromedriver-74.0.3729.131-1.x86_64.binary
chromium-browser-1:74.0.3729.131-1.x86_64.binary
chromium-browser-stable-74.0.3729.131-1.x86_64.source
chromium-browser-stable-74.0.3729.131-1.x86_64.binary
chromedriver-74.0.3729.131-1.i586.binary
chromium-browser-1:74.0.3729.131-1.i586.binary
chromium-browser-stable-74.0.3729.131-1.i586.source
chromium-browser-stable-74.0.3729.131-1.i586.binary
Build Date 2019-05-03 02:28:43 +0000 UTC
Last Updated 2019-05-10 06:02:17.165316864 +0000 UTC
$ git diff --patch-with-stat --summary 0fc3d1e55fc164498b0800c91069801d0c6f50cb..2cf48cb834866a87c2d83baeb89cce73b7e1d606

 .abf.yml                                   |   7 +-
 arm_use_right_compiler.patch               |   2 +-
 chromium-40-sorenson-spark.patch           | 270 +++++++++++++++++++++++
 chromium-50-system-ffmpeg-3.patch          |   2 +-
 chromium-69-extra-media.patch              | 342 +++++++++++++++++++----------
 chromium-69-no-static-libstdc++.patch      |   2 +-
 chromium-69-wmvflvmpg.patch                | 143 ++++--------
 chromium-69.0.3497.81-norar.patch          |  79 -------
 chromium-70.0.3538.77-gcc7.patch           |  36 +--
 chromium-73.0.3683.75-norar.patch          |  81 +++++++
 chromium-74.0.3729.108-revert_values.patch | 329 +++++++++++++++++++++++++++
 chromium-browser-stable.spec               |  29 ++-
 move-required.patch                        | 124 +++++++++++
 not-constexpr.patch                        | 184 ++++++++++++++++
 quic.patch                                 | 154 +++++++++++++
 trace_fix.patch                            |  55 +++++
 16 files changed, 1514 insertions(+), 325 deletions(-)
 create mode 100644 chromium-40-sorenson-spark.patch
 delete mode 100644 chromium-69.0.3497.81-norar.patch
 create mode 100644 chromium-73.0.3683.75-norar.patch
 create mode 100644 chromium-74.0.3729.108-revert_values.patch
 create mode 100644 move-required.patch
 create mode 100644 not-constexpr.patch
 create mode 100644 quic.patch
 create mode 100644 trace_fix.patch

diff --git a/.abf.yml b/.abf.yml
index a3f8bb9..67c2cda 100644
--- a/.abf.yml
+++ b/.abf.yml
@@ -1,6 +1,5 @@
 removed_sources:
-  chromium-69.0.3497.100.tar.xz: 79c8fb089e8f344dce40c6495a006a172d4fc4ac
-  chromium-70.0.3538.77.tar.xz: d57862224568adb6a379592431cf5ce3c5bf757a
-  chromium-71.0.3578.98.tar.xz: 5de8e48fc1f277afb16a7a484dfa0360e568632c
+  chromium-72.0.3626.121.tar.xz: bff8b4a24dda164695646f930cb95d47c4fcc246
+  chromium-74.0.3729.108.tar.xz: 561b51ac98c6e8b81c1d9a14e9f544a966dc3a2f
 sources:
-  chromium-72.0.3626.81.tar.xz: 16836d6f211aad133d184d1d0e347f47ea024336
+  chromium-74.0.3729.131.tar.xz: d5cf7bd3d119a692819e0135070906a62b3cdc9d
diff --git a/arm_use_right_compiler.patch b/arm_use_right_compiler.patch
index 08211ef..1530258 100644
--- a/arm_use_right_compiler.patch
+++ b/arm_use_right_compiler.patch
@@ -1,7 +1,7 @@
 --- chromium-54.0.2840.59/build/toolchain/linux/BUILD.gn        2016-08-25 12:19:55.634174140 +0200
 +++ chromium-54.0.2840.59/build/toolchain/linux/BUILD.gn        2016-08-25 12:19:55.634174140 +0200
 @@ -6,7 +6,7 @@
- import("//build/toolchain/gcc_toolchain.gni")
+ }
 
  clang_toolchain("clang_arm") {
 -  toolprefix = "arm-linux-gnueabihf-"
diff --git a/chromium-40-sorenson-spark.patch b/chromium-40-sorenson-spark.patch
new file mode 100644
index 0000000..655106a
--- /dev/null
+++ b/chromium-40-sorenson-spark.patch
@@ -0,0 +1,270 @@
+diff -up chromium-62.0.3192.0/media/base/mime_util_internal.h.wmvflvmpg chromium-62.0.3192.0/media/base/mime_util_internal.h
+--- chromium-62.0.3192.0/media/base/mime_util_internal.h.wmvflvmpg	2017-08-30 15:52:00.602204610 +0200
++++ chromium-62.0.3192.0/media/base/mime_util_internal.h	2017-08-30 15:52:00.616204356 +0200
+@@ -48,7 +48,19 @@ class MEDIA_EXPORT MimeUtil {
+     MP2,
+     MPEG4_SP,
+     MPEG4_ASP,
+-    LAST_CODEC = MPEG4_ASP
++    MSMPEG4v1,
++    MSMPEG4v2,
++    MSMPEG4v3,
++    WMV7,
++    WMV8,
++    WMV9,
++    VC1,
++    WMA,
++    VP6,
++    MPEG1,
++    MPEG2,
++    FLV1,
++    LAST_CODEC = FLV1
+   };
+ 
+   // Platform configuration structure.  Controls which codecs are supported at
+diff -up chromium-51.0.2687.0/media/ffmpeg/ffmpeg_common.cc.flv1 chromium-51.0.2687.0/media/ffmpeg/ffmpeg_common.cc
+--- chromium-51.0.2687.0/media/ffmpeg/ffmpeg_common.cc.flv1	2016-03-23 18:22:20.227596097 +0100
++++ chromium-51.0.2687.0/media/ffmpeg/ffmpeg_common.cc	2016-03-23 18:22:20.245595771 +0100
+@@ -197,6 +197,28 @@
+       return kCodecVP9;
+     case AV_CODEC_ID_AV1:
+       return kCodecAV1;
++    case AV_CODEC_ID_MSMPEG4V1:
++      return kCodecMSMPEG4V1;
++    case AV_CODEC_ID_MSMPEG4V2:
++      return kCodecMSMPEG4V2;
++    case AV_CODEC_ID_MSMPEG4V3:
++      return kCodecMSMPEG4V3;
++    case AV_CODEC_ID_WMV1:
++      return kCodecWMV7;
++    case AV_CODEC_ID_WMV2:
++      return kCodecWMV8;
++    case AV_CODEC_ID_WMV3:
++      return kCodecWMV9;
++    case AV_CODEC_ID_VC1:
++      return kCodecVC1;
++    case AV_CODEC_ID_VP6:
++      return kCodecVP6;
++    case AV_CODEC_ID_MPEG1VIDEO:
++      return kCodecMPEG1;
++    case AV_CODEC_ID_MPEG2VIDEO:
++      return kCodecMPEG2;
++    case AV_CODEC_ID_FLV1:
++      return kCodecSorensonSpark;
+     default:
+       DVLOG(1) << "Unknown video CodecID: " << codec_id;
+   }
+@@ -221,6 +223,28 @@
+       return AV_CODEC_ID_VP9;
+     case kCodecAV1:
+       return AV_CODEC_ID_AV1;
++    case kCodecMSMPEG4V1:
++      return AV_CODEC_ID_MSMPEG4V1;
++    case kCodecMSMPEG4V2:
++      return AV_CODEC_ID_MSMPEG4V2;
++    case kCodecMSMPEG4V3:
++      return AV_CODEC_ID_MSMPEG4V3;
++    case kCodecWMV7:
++      return AV_CODEC_ID_WMV1;
++    case kCodecWMV8:
++      return AV_CODEC_ID_WMV2;
++    case kCodecWMV9:
++      return AV_CODEC_ID_WMV3;
++    case kCodecVC1:
++      return AV_CODEC_ID_VC1;
++    case kCodecVP6:
++      return AV_CODEC_ID_VP6;
++    case kCodecMPEG1:
++      return AV_CODEC_ID_MPEG1VIDEO;
++    case kCodecMPEG2:
++      return AV_CODEC_ID_MPEG2VIDEO;
++    case kCodecSorensonSpark:
++      return AV_CODEC_ID_FLV1;
+     default:
+       DVLOG(1) << "Unknown VideoCodec: " << video_codec;
+   }
+--- chromium-56.0.2924.10/media/remoting/proto_enum_utils.cc.bak.2	2016-12-01 23:42:15.717317808 +0100
++++ chromium-56.0.2924.10/media/remoting/proto_enum_utils.cc	2016-12-01 23:44:59.695754038 +0100
+@@ -227,6 +227,15 @@
+     CASE_RETURN_OTHER(kCodecHEVC);
+     CASE_RETURN_OTHER(kCodecDolbyVision);
+     CASE_RETURN_OTHER(kCodecAV1);
++    CASE_RETURN_OTHER(kCodecMSMPEG4V1);
++    CASE_RETURN_OTHER(kCodecMSMPEG4V2);
++    CASE_RETURN_OTHER(kCodecMSMPEG4V3);
++    CASE_RETURN_OTHER(kCodecWMV7);
++    CASE_RETURN_OTHER(kCodecWMV8);
++    CASE_RETURN_OTHER(kCodecWMV9);
++    CASE_RETURN_OTHER(kCodecVP6);
++    CASE_RETURN_OTHER(kCodecMPEG1);
++    CASE_RETURN_OTHER(kCodecSorensonSpark);
+   }
+   return base::nullopt;  // Not a 'default' to ensure compile-time checks.
+ }
+@@ -247,6 +248,15 @@
+     CASE_RETURN_OTHER(kCodecHEVC);
+     CASE_RETURN_OTHER(kCodecDolbyVision);
+     CASE_RETURN_OTHER(kCodecAV1);
++    CASE_RETURN_OTHER(kCodecMSMPEG4V1);
++    CASE_RETURN_OTHER(kCodecMSMPEG4V2);
++    CASE_RETURN_OTHER(kCodecMSMPEG4V3);
++    CASE_RETURN_OTHER(kCodecWMV7);
++    CASE_RETURN_OTHER(kCodecWMV8);
++    CASE_RETURN_OTHER(kCodecWMV9);
++    CASE_RETURN_OTHER(kCodecVP6);
++    CASE_RETURN_OTHER(kCodecMPEG1);
++    CASE_RETURN_OTHER(kCodecSorensonSpark);
+   }
+   return base::nullopt;  // Not a 'default' to ensure compile-time checks.
+ }
+--- chromium-56.0.2924.10/media/remoting/media_remoting_rpc.proto.bak.2	2016-12-02 02:15:05.660562641 +0100
++++ chromium-56.0.2924.10/media/remoting/media_remoting_rpc.proto	2016-12-02 02:15:48.885796867 +0100
+@@ -154,6 +154,15 @@
+     kCodecHEVC = 8;
+     kCodecDolbyVision = 9;
+     kCodecAV1 = 10;
++    kCodecMSMPEG4V1 = 11;
++    kCodecMSMPEG4V2 = 12;
++    kCodecMSMPEG4V3 = 13;
++    kCodecWMV7 = 14;
++    kCodecWMV8 = 15;
++    kCodecWMV9 = 16;
++    kCodecVP6 = 17;
++    kCodecMPEG1 = 18;
++    kCodecSorensonSpark = 19;
+   }
+ 
+   // Proto version of media::VideoCodecProfile.
+--- chromium-56.0.2924.10/media/base/video_codecs.h.bak	2016-12-05 00:29:39.341097040 +0100
++++ chromium-56.0.2924.10/media/base/video_codecs.h	2016-12-05 00:30:04.352645151 +0100
+@@ -31,12 +31,21 @@
+   kCodecHEVC,
+   kCodecDolbyVision,
+   kCodecAV1,
++  kCodecMSMPEG4V1,
++  kCodecMSMPEG4V2,
++  kCodecMSMPEG4V3,
++  kCodecWMV7,
++  kCodecWMV8,
++  kCodecWMV9,
++  kCodecVP6,
++  kCodecMPEG1,
++  kCodecSorensonSpark,
+   // DO NOT ADD RANDOM VIDEO CODECS!
+   //
+   // The only acceptable time to add a new codec is if there is production code
+   // that uses said codec in the same CL.
+ 
+-  kVideoCodecMax = kCodecAV1,  // Must equal the last "real" codec above.
++  kVideoCodecMax = kCodecSorensonSpark,  // Must equal the last "real" codec above.
+ };
+ 
+ // Video codec profiles. Keep in sync with mojo::VideoCodecProfile (see
+--- chromium-56.0.2924.10/media/base/video_codecs.cc.bak	2016-11-29 21:04:19.000000000 +0100
++++ chromium-56.0.2924.10/media/base/video_codecs.cc	2016-12-05 00:32:51.625621718 +0100
+@@ -37,6 +37,24 @@
+       return "vp9";
+     case kCodecAV1:
+       return "av1";
++    case kCodecMSMPEG4V1:
++      return "msmpeg4v1";
++    case kCodecMSMPEG4V2:
++      return "msmpeg4v2";
++    case kCodecMSMPEG4V3:
++      return "msmpeg4v2";
++    case kCodecWMV7:
++      return "wmv1";
++    case kCodecWMV8:
++      return "wmv2";
++    case kCodecWMV9:
++      return "wmv3";
++    case kCodecVP6:
++      return "vp6";
++    case kCodecMPEG1:
++      return "mpeg1video";
++    case kCodecSorensonSpark:
++      return "flv1";
+   }
+   NOTREACHED();
+   return "";
+@@ -638,6 +640,28 @@
+   if (ParseDolbyVisionCodecId(codec_id, &profile, &level))
+     return kCodecDolbyVision;
+ #endif
++  if (codec_id == "msmpeg4v1")
++    return kCodecMSMPEG4V1;
++  if (codec_id == "msmpeg4v2")
++    return kCodecMSMPEG4V2;
++  if (codec_id == "msmpeg4v2")
++    return kCodecMSMPEG4V3;
++  if (codec_id == "wmv1")
++    return kCodecWMV7;
++  if (codec_id == "wmv2")
++    return kCodecWMV8;
++  if (codec_id == "wmv3")
++    return kCodecWMV9;
++  if (codec_id == "vc1")
++    return kCodecVC1;
++  if (codec_id == "vp6")
++    return kCodecVP6;
++  if (codec_id == "mpeg1video")
++    return kCodecMPEG1;
++  if (codec_id == "mpeg2video")
++    return kCodecMPEG2;
++  if (codec_id == "flv1")
++    return kCodecSorensonSpark;
+   return kUnknownVideoCodec;
+ }
+ 
+--- chromium-56.0.2924.21/media/filters/ffmpeg_video_decoder.cc.flv	2016-12-10 20:33:18.005427356 +0100
++++ chromium-56.0.2924.21/media/filters/ffmpeg_video_decoder.cc	2016-12-10 20:34:28.610202853 +0100
+@@ -46,6 +46,15 @@
+ 
+     case kCodecTheora:
+     case kCodecMPEG4:
++    case kCodecMSMPEG4V1:
++    case kCodecMSMPEG4V2:
++    case kCodecMSMPEG4V3:
++    case kCodecWMV7:
++    case kCodecWMV8:
++    case kCodecWMV9:
++    case kCodecVP6:
++    case kCodecMPEG1:
++    case kCodecSorensonSpark:
+       // No extra threads for these codecs.
+       break;
+ 
+--- chromium-73.0.3683.75/media/base/supported_types.cc.flv	2019-03-17 18:44:45.934825471 +0100
++++ chromium-73.0.3683.75/media/base/supported_types.cc	2019-03-17 18:44:50.562746764 +0100
+@@ -217,6 +217,15 @@ bool IsVideoCodecProprietary(VideoCodec
+     case kCodecMPEG4:
+     case kCodecHEVC:
+     case kCodecDolbyVision:
++    case kCodecMSMPEG4V1:
++    case kCodecMSMPEG4V2:
++    case kCodecMSMPEG4V3:
++    case kCodecWMV7:
++    case kCodecWMV8:
++    case kCodecWMV9:
++    case kCodecVP6:
++    case kCodecMPEG1:
++    case kCodecSorensonSpark:
+       return true;
+     case kUnknownVideoCodec:
+     case kCodecTheora:
+@@ -264,6 +263,15 @@ bool IsDefaultSupportedVideoType(const V
+     case media::kCodecVC1:
+     case media::kCodecMPEG2:
+     case media::kCodecHEVC:
++    case media::kCodecMSMPEG4V1:
++    case media::kCodecMSMPEG4V2:
++    case media::kCodecMSMPEG4V3:
++    case media::kCodecWMV7:
++    case media::kCodecWMV8:
++    case media::kCodecWMV9:
++    case media::kCodecVP6:
++    case media::kCodecMPEG1:
++    case media::kCodecSorensonSpark:
+       return true;
+
+     case media::kUnknownVideoCodec:
diff --git a/chromium-50-system-ffmpeg-3.patch b/chromium-50-system-ffmpeg-3.patch
index 10ba33c..5ecc59f 100644
--- a/chromium-50-system-ffmpeg-3.patch
+++ b/chromium-50-system-ffmpeg-3.patch
@@ -13,7 +13,7 @@ diff -up chromium-51.0.2687.0/third_party/webrtc/modules/video_coding/codecs/h26
 +#include <libavutil/imgutils.h>
  }  // extern "C"
  
- #include "api/video/color_space.h"
+ #include "absl/memory/memory.h"
 diff -up chromium-51.0.2687.0/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.h.system-ffmpeg-3 chromium-51.0.2687.0/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.h
 --- chromium-51.0.2687.0/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.h.system-ffmpeg-3	2016-03-23 18:55:39.080894319 +0100
 +++ chromium-51.0.2687.0/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.h	2016-03-23 18:54:32.178123691 +0100
diff --git a/chromium-69-extra-media.patch b/chromium-69-extra-media.patch
index bfba3fb..ede39f3 100644
--- a/chromium-69-extra-media.patch
+++ b/chromium-69-extra-media.patch
@@ -1,32 +1,37 @@
-diff -up chromium-69.0.3497.100/media/base/audio_codecs.cc.37~ chromium-69.0.3497.100/media/base/audio_codecs.cc
---- chromium-69.0.3497.100/media/base/audio_codecs.cc.37~	2018-09-17 21:10:16.000000000 +0200
-+++ chromium-69.0.3497.100/media/base/audio_codecs.cc	2018-10-02 22:30:05.030093084 +0200
-@@ -46,6 +46,8 @@ std::string GetCodecName(AudioCodec code
+diff -up chromium-62.0.3192.0/media/base/audio_codecs.cc.extra-media chromium-62.0.3192.0/media/base/audio_codecs.cc
+--- chromium-62.0.3192.0/media/base/audio_codecs.cc.extra-media	2017-08-22 21:04:45.000000000 +0200
++++ chromium-62.0.3192.0/media/base/audio_codecs.cc	2017-08-30 15:39:09.735186077 +0200
+@@ -46,6 +46,10 @@ std::string GetCodecName(AudioCodec code
        return "ac3";
      case kCodecMpegHAudio:
        return "mpeg-h-audio";
++    case kCodecMP2:
++      return "mp2";
 +    case kCodecDTS:
 +      return "dts";
    }
    NOTREACHED();
    return "";
-@@ -72,6 +74,8 @@ AudioCodec StringToAudioCodec(const std:
+@@ -72,6 +74,10 @@ AudioCodec StringToAudioCodec(const std:
      return kCodecVorbis;
    if (base::StartsWith(codec_id, "mp4a.40.", base::CompareCase::SENSITIVE))
      return kCodecAAC;
++  if (codec_id == "mp2")
++    return kCodecMP2;
 +  if (codec_id == "dts")
 +    return kCodecDTS;
    return kUnknownAudioCodec;
  }
  
-diff -up chromium-69.0.3497.100/media/base/audio_codecs.h.37~ chromium-69.0.3497.100/media/base/audio_codecs.h
---- chromium-69.0.3497.100/media/base/audio_codecs.h.37~	2018-09-17 21:10:16.000000000 +0200
-+++ chromium-69.0.3497.100/media/base/audio_codecs.h	2018-10-02 22:30:05.030093084 +0200
-@@ -33,13 +33,14 @@ enum AudioCodec {
+diff -up chromium-62.0.3192.0/media/base/audio_codecs.h.extra-media chromium-62.0.3192.0/media/base/audio_codecs.h
+--- chromium-62.0.3192.0/media/base/audio_codecs.h.extra-media	2017-08-22 21:04:45.000000000 +0200
++++ chromium-62.0.3192.0/media/base/audio_codecs.h	2017-08-30 15:39:09.735186077 +0200
+@@ -33,13 +33,15 @@
    kCodecALAC = 15,
    kCodecAC3 = 16,
    kCodecMpegHAudio = 17,
-+  kCodecDTS = 18,
++  kCodecMP2 = 18,
++  kCodecDTS = 19,
    // DO NOT ADD RANDOM AUDIO CODECS!
    //
    // The only acceptable time to add a new codec is if there is production code
@@ -38,29 +43,9 @@ diff -up chromium-69.0.3497.100/media/base/audio_codecs.h.37~ chromium-69.0.3497
  };
  
  std::string MEDIA_EXPORT GetCodecName(AudioCodec codec);
-diff -up chromium-69.0.3497.100/media/base/decode_capabilities.cc.37~ chromium-69.0.3497.100/media/base/decode_capabilities.cc
---- chromium-69.0.3497.100/media/base/decode_capabilities.cc.37~	2018-09-17 21:10:16.000000000 +0200
-+++ chromium-69.0.3497.100/media/base/decode_capabilities.cc	2018-10-02 22:30:05.031093090 +0200
-@@ -176,13 +176,13 @@ bool IsSupportedVideoConfig(const VideoC
-     case media::kCodecH264:
-     case media::kCodecVP8:
-     case media::kCodecTheora:
--      return true;
--
--    case media::kUnknownVideoCodec:
-     case media::kCodecVC1:
-     case media::kCodecMPEG2:
-     case media::kCodecMPEG4:
-     case media::kCodecHEVC:
-+      return true;
-+
-+    case media::kUnknownVideoCodec:
-     case media::kCodecDolbyVision:
-       return false;
-   }
-diff -up chromium-69.0.3497.100/media/base/mime_util_internal.cc.37~ chromium-69.0.3497.100/media/base/mime_util_internal.cc
---- chromium-69.0.3497.100/media/base/mime_util_internal.cc.37~	2018-09-17 21:10:16.000000000 +0200
-+++ chromium-69.0.3497.100/media/base/mime_util_internal.cc	2018-10-02 22:31:21.254548374 +0200
+diff -up chromium-62.0.3192.0/media/base/mime_util_internal.cc.extra-media chromium-62.0.3192.0/media/base/mime_util_internal.cc
+--- chromium-62.0.3192.0/media/base/mime_util_internal.cc.extra-media	2017-08-22 21:04:45.000000000 +0200
++++ chromium-62.0.3192.0/media/base/mime_util_internal.cc	2017-08-30 15:44:46.519076991 +0200
 @@ -87,6 +87,10 @@
        {"vp8", MimeUtil::VP8},
        {"vp8.0", MimeUtil::VP8},
@@ -72,7 +57,18 @@ diff -up chromium-69.0.3497.100/media/base/mime_util_internal.cc.37~ chromium-69
    });
  
    return *kStringToCodecMap;
-@@ -172,6 +174,9 @@ VideoCodec MimeUtilToVideoCodec(MimeUtil
+@@ -162,6 +166,10 @@
+       return kCodecOpus;
+     case MimeUtil::FLAC:
+       return kCodecFLAC;
++    case MimeUtil::DTS:
++      return kCodecDTS;
++    case MimeUtil::MP2:
++      return kCodecMP2;
+     default:
+       break;
+   }
+@@ -184,6 +192,9 @@
        return kCodecTheora;
      case MimeUtil::DOLBY_VISION:
        return kCodecDolbyVision;
@@ -82,31 +78,35 @@ diff -up chromium-69.0.3497.100/media/base/mime_util_internal.cc.37~ chromium-69
      default:
        break;
    }
-@@ -266,6 +271,31 @@ void MimeUtil::AddSupportedMediaFormats(
+@@ -274,6 +285,35 @@
    CodecSet ogg_codecs(ogg_audio_codecs);
    ogg_codecs.insert(ogg_video_codecs.begin(), ogg_video_codecs.end());
  
 +  CodecSet matroska_audio_codecs;
-+  matroska_audio_codecs.insert(OPUS);
-+  matroska_audio_codecs.insert(VORBIS);
-+  matroska_audio_codecs.insert(AC3);
-+  matroska_audio_codecs.insert(EAC3);
-+  matroska_audio_codecs.insert(DTS);
-+  matroska_audio_codecs.insert(MP3);
-+  matroska_audio_codecs.insert(MP2);
-+  matroska_audio_codecs.insert(MPEG2_AAC);
-+  matroska_audio_codecs.insert(MPEG4_AAC);
-+  matroska_audio_codecs.insert(PCM);
-+  
++  matroska_audio_codecs.emplace(OPUS);
++  matroska_audio_codecs.emplace(VORBIS);
++  matroska_audio_codecs.emplace(AC3);
++  matroska_audio_codecs.emplace(EAC3);
++  matroska_audio_codecs.emplace(DTS);
++  matroska_audio_codecs.emplace(MP3);
++  matroska_audio_codecs.emplace(MP2);
++  matroska_audio_codecs.emplace(MPEG2_AAC);
++  matroska_audio_codecs.emplace(MPEG4_AAC);
++  matroska_audio_codecs.emplace(PCM);
++  matroska_audio_codecs.emplace(FLAC);
++
 +  CodecSet matroska_video_codecs;
-+  matroska_video_codecs.insert(THEORA);
-+  matroska_video_codecs.insert(VP8);
-+  matroska_video_codecs.insert(VP9);
-+  matroska_video_codecs.insert(H264);
-+  matroska_video_codecs.insert(MPEG4_SP);
-+  matroska_video_codecs.insert(MPEG4_ASP);
++  matroska_video_codecs.emplace(THEORA);
++  matroska_video_codecs.emplace(VP8);
++  matroska_video_codecs.emplace(VP9);
++  matroska_video_codecs.emplace(H264);
++  matroska_video_codecs.emplace(MPEG4_SP);
++  matroska_video_codecs.emplace(MPEG4_ASP);
++#if BUILDFLAG(ENABLE_AV1_DECODER)
++  matroska_video_codecs.emplace(AV1);
++#endif
 +#if BUILDFLAG(ENABLE_HEVC_DEMUXING)
-+  matroska_video_codecs.insert(HEVC);
++  matroska_video_codecs.emplace(HEVC);
 +#endif  // BUILDFLAG(ENABLE_HEVC_DEMUXING)
 +  CodecSet matroska_codecs(matroska_audio_codecs);
 +  matroska_codecs.insert(matroska_video_codecs.begin(), matroska_video_codecs.end());
@@ -114,49 +114,41 @@ diff -up chromium-69.0.3497.100/media/base/mime_util_internal.cc.37~ chromium-69
    const CodecSet webm_audio_codecs{OPUS, VORBIS};
    CodecSet webm_video_codecs{VP8, VP9};
  #if BUILDFLAG(ENABLE_AV1_DECODER)
-@@ -307,6 +337,8 @@ void MimeUtil::AddSupportedMediaFormats(
+@@ -283,9 +323,9 @@
+   CodecSet webm_codecs(webm_audio_codecs);
+   webm_codecs.insert(webm_video_codecs.begin(), webm_video_codecs.end());
+ 
+-  const CodecSet mp3_codecs{MP3};
++  const CodecSet mp3_codecs{MP3, MP2};
+ 
+-  CodecSet mp4_audio_codecs{FLAC, MP3, OPUS};
++  CodecSet mp4_audio_codecs{FLAC, MP3, OPUS, MP2, DTS, AC3, EAC3};
+ 
+   // Only VP9 with valid codec string vp09.xx.xx.xx.xx.xx.xx.xx is supported.
+   // See ParseVp9CodecID for details.
+@@ -309,6 +349,8 @@
+ #endif  // BUILDFLAG(ENABLE_MPEG_H_AUDIO_DEMUXING)
+ 
+   mp4_video_codecs.emplace(H264);
++  mp4_video_codecs.emplace(MPEG4_SP);
++  mp4_video_codecs.emplace(MPEG4_ASP);
  #if BUILDFLAG(ENABLE_HEVC_DEMUXING)
    mp4_video_codecs.emplace(HEVC);
  #endif  // BUILDFLAG(ENABLE_HEVC_DEMUXING)
-+  mp4_video_codecs.emplace(MPEG4_SP);
-+  mp4_video_codecs.emplace(MPEG4_ASP);
- 
- #if BUILDFLAG(ENABLE_DOLBY_VISION_DEMUXING)
-   mp4_video_codecs.emplace(DOLBY_VISION);
-@@ -341,12 +373,16 @@ void MimeUtil::AddSupportedMediaFormats(
+@@ -345,6 +387,10 @@
    DCHECK(!mp4_video_codecs.empty());
-   AddContainerWithCodecs("video/mp4", mp4_codecs, false);
+   AddContainerWithCodecs("video/mp4", mp4_codecs);
  
-+  AddContainerWithCodecs("audio/x-matroska", matroska_audio_codecs, false);
-+  AddContainerWithCodecs("video/x-matroska", matroska_video_codecs, false);
++  AddContainerWithCodecs("audio/x-matroska", matroska_audio_codecs);
++  AddContainerWithCodecs("video/x-matroska", matroska_codecs);
++  AddContainerWithCodecs("video/x-msvideo", matroska_codecs);
 +
  #if BUILDFLAG(USE_PROPRIETARY_CODECS)
-   AddContainerWithCodecs("audio/aac", implicit_codec, true);  // AAC / ADTS.
+   AddContainerWithCodecs("audio/aac", implicit_codec);  // AAC / ADTS.
    // These strings are supported for backwards compatibility only and thus only
-   // support the codecs needed for compatibility.
-   AddContainerWithCodecs("audio/x-m4a", aac, true);
-   AddContainerWithCodecs("video/x-m4v", avc_and_aac, true);
-+  AddContainerWithCodecs("video/x-msvideo", matroska_codecs, true);
- 
- #if BUILDFLAG(ENABLE_MSE_MPEG2TS_STREAM_PARSER)
-   CodecSet mp2t_codecs{H264, MPEG2_AAC, MPEG4_AAC, MP3};
-@@ -968,9 +1004,13 @@ bool MimeUtil::IsCodecProprietary(Codec
-     case H264:
-     case HEVC:
-     case DOLBY_VISION:
-+    case DTS:
-+    case MPEG4_SP:
-+    case MPEG4_ASP:
-       return true;
- 
-     case MP3:
-+    case MP2:
-     case PCM:
-     case VORBIS:
-     case OPUS:
-diff -up chromium-69.0.3497.100/media/base/mime_util_internal.h.37~ chromium-69.0.3497.100/media/base/mime_util_internal.h
---- chromium-69.0.3497.100/media/base/mime_util_internal.h.37~	2018-09-17 21:10:16.000000000 +0200
-+++ chromium-69.0.3497.100/media/base/mime_util_internal.h	2018-10-02 22:30:05.031093090 +0200
+diff -up chromium-62.0.3192.0/media/base/mime_util_internal.h.extra-media chromium-62.0.3192.0/media/base/mime_util_internal.h
+--- chromium-62.0.3192.0/media/base/mime_util_internal.h.extra-media	2017-08-22 21:04:45.000000000 +0200
++++ chromium-62.0.3192.0/media/base/mime_util_internal.h	2017-08-30 15:39:09.734186095 +0200
 @@ -46,7 +46,11 @@ class MEDIA_EXPORT MimeUtil {
      DOLBY_VISION,
      AV1,
@@ -170,33 +162,77 @@ diff -up chromium-69.0.3497.100/media/base/mime_util_internal.h.37~ chromium-69.
    };
  
    // Platform configuration structure.  Controls which codecs are supported at
-diff -up chromium-69.0.3497.100/media/ffmpeg/ffmpeg_common.cc.37~ chromium-69.0.3497.100/media/ffmpeg/ffmpeg_common.cc
---- chromium-69.0.3497.100/media/ffmpeg/ffmpeg_common.cc.37~	2018-09-17 21:10:16.000000000 +0200
-+++ chromium-69.0.3497.100/media/ffmpeg/ffmpeg_common.cc	2018-10-02 22:30:05.031093090 +0200
-@@ -115,6 +115,8 @@ AudioCodec CodecIDToAudioCodec(AVCodecID
+diff -up chromium-62.0.3192.0/media/ffmpeg/ffmpeg_common.cc.extra-media chromium-62.0.3192.0/media/ffmpeg/ffmpeg_common.cc
+--- chromium-62.0.3192.0/media/ffmpeg/ffmpeg_common.cc.extra-media	2017-08-22 21:04:45.000000000 +0200
++++ chromium-62.0.3192.0/media/ffmpeg/ffmpeg_common.cc	2017-08-30 15:39:09.735186077 +0200
+@@ -115,6 +115,10 @@ AudioCodec CodecIDToAudioCodec(AVCodecID
        return kCodecOpus;
      case AV_CODEC_ID_ALAC:
        return kCodecALAC;
++    case AV_CODEC_ID_MP2:
++      return kCodecMP2;
 +    case AV_CODEC_ID_DTS:
 +      return kCodecDTS;
      default:
        DVLOG(1) << "Unknown audio CodecID: " << codec_id;
    }
-@@ -166,6 +168,10 @@ AVCodecID AudioCodecToCodecID(AudioCodec
+@@ -166,6 +168,14 @@ AVCodecID AudioCodecToCodecID(AudioCodec
        return AV_CODEC_ID_PCM_MULAW;
      case kCodecOpus:
        return AV_CODEC_ID_OPUS;
 +    case kCodecAC3:
 +      return AV_CODEC_ID_AC3;
++    case kCodecEAC3:
++      return AV_CODEC_ID_EAC3;
++    case kCodecMP2:
++      return AV_CODEC_ID_MP2;
 +    case kCodecDTS:
 +      return AV_CODEC_ID_DTS;
      default:
        DVLOG(1) << "Unknown AudioCodec: " << audio_codec;
    }
-diff -up chromium-69.0.3497.100/media/filters/ffmpeg_video_decoder.cc.37~ chromium-69.0.3497.100/media/filters/ffmpeg_video_decoder.cc
---- chromium-69.0.3497.100/media/filters/ffmpeg_video_decoder.cc.37~	2018-09-17 21:10:16.000000000 +0200
-+++ chromium-69.0.3497.100/media/filters/ffmpeg_video_decoder.cc	2018-10-02 22:30:05.031093090 +0200
-@@ -58,7 +58,6 @@ static int GetThreadCount(const VideoDec
+@@ -389,23 +389,6 @@ bool AVCodecContextToAudioDecoderConfig(
+                                                codec_context->channels);
+ 
+   int sample_rate = codec_context->sample_rate;
+-  switch (codec) {
+-    // For AC3/EAC3 we enable only demuxing, but not decoding, so FFmpeg does
+-    // not fill |sample_fmt|.
+-    case kCodecAC3:
+-    case kCodecEAC3:
+-#if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
+-      // The spec for AC3/EAC3 audio is ETSI TS 102 366. According to sections
+-      // F.3.1 and F.5.1 in that spec the sample_format for AC3/EAC3 must be 16.
+-      sample_format = kSampleFormatS16;
+-#else
+-      NOTREACHED();
+-#endif
+-      break;
+-
+-    default:
+-      break;
+-  }
+ 
+   base::TimeDelta seek_preroll;
+   if (codec_context->seek_preroll > 0) {
+@@ -435,13 +418,6 @@ bool AVCodecContextToAudioDecoderConfig(
+   if (channel_layout == CHANNEL_LAYOUT_DISCRETE)
+     config->SetChannelsForDiscrete(codec_context->channels);
+ 
+-#if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
+-  // These are bitstream formats unknown to ffmpeg, so they don't have
+-  // a known sample format size.
+-  if (codec == kCodecAC3 || codec == kCodecEAC3)
+-    return true;
+-#endif
+-
+   // Verify that AudioConfig.bits_per_channel was calculated correctly for
+   // codecs that have |sample_fmt| set by FFmpeg.
+   DCHECK_EQ(av_get_bytes_per_sample(codec_context->sample_fmt) * 8,
+diff -up chromium-62.0.3192.0/media/filters/ffmpeg_video_decoder.cc.extra-media chromium-62.0.3192.0/media/filters/ffmpeg_video_decoder.cc
+--- chromium-62.0.3192.0/media/filters/ffmpeg_video_decoder.cc.extra-media	2017-08-22 21:04:45.000000000 +0200
++++ chromium-62.0.3192.0/media/filters/ffmpeg_video_decoder.cc	2017-08-30 15:39:09.736186059 +0200
+@@ -38,7 +38,6 @@
      case kUnknownVideoCodec:
      case kCodecVC1:
      case kCodecMPEG2:
@@ -204,7 +240,7 @@ diff -up chromium-69.0.3497.100/media/filters/ffmpeg_video_decoder.cc.37~ chromi
      case kCodecVP9:
      case kCodecAV1:
      case kCodecDolbyVision:
-@@ -72,6 +71,7 @@ static int GetThreadCount(const VideoDec
+@@ -52,6 +51,7 @@
  
      case kCodecH264:
      case kCodecVP8:
@@ -212,50 +248,53 @@ diff -up chromium-69.0.3497.100/media/filters/ffmpeg_video_decoder.cc.37~ chromi
        // Normalize to three threads for 1080p content, then scale linearly
        // with number of pixels.
        // Examples:
-diff -up chromium-69.0.3497.100/media/remoting/proto_enum_utils.cc.37~ chromium-69.0.3497.100/media/remoting/proto_enum_utils.cc
---- chromium-69.0.3497.100/media/remoting/proto_enum_utils.cc.37~	2018-09-17 21:10:16.000000000 +0200
-+++ chromium-69.0.3497.100/media/remoting/proto_enum_utils.cc	2018-10-02 22:30:05.031093090 +0200
-@@ -58,6 +58,7 @@ base::Optional<AudioCodec> ToMediaAudioC
+diff -up chromium-62.0.3192.0/media/remoting/proto_enum_utils.cc.extra-media chromium-62.0.3192.0/media/remoting/proto_enum_utils.cc
+--- chromium-62.0.3192.0/media/remoting/proto_enum_utils.cc.extra-media	2017-08-22 21:04:45.000000000 +0200
++++ chromium-62.0.3192.0/media/remoting/proto_enum_utils.cc	2017-08-30 15:39:09.736186059 +0200
+@@ -58,6 +58,8 @@ base::Optional<AudioCodec> ToMediaAudioC
      CASE_RETURN_OTHER(kCodecALAC);
      CASE_RETURN_OTHER(kCodecAC3);
      CASE_RETURN_OTHER(kCodecMpegHAudio);
++    CASE_RETURN_OTHER(kCodecMP2);
 +    CASE_RETURN_OTHER(kCodecDTS);
    }
    return base::nullopt;  // Not a 'default' to ensure compile-time checks.
  }
-@@ -85,6 +86,7 @@ base::Optional<pb::AudioDecoderConfig::C
+@@ -85,6 +86,8 @@ base::Optional<pb::AudioDecoderConfig::C
      CASE_RETURN_OTHER(kCodecALAC);
      CASE_RETURN_OTHER(kCodecAC3);
      CASE_RETURN_OTHER(kCodecMpegHAudio);
++    CASE_RETURN_OTHER(kCodecMP2);
 +    CASE_RETURN_OTHER(kCodecDTS);
    }
    return base::nullopt;  // Not a 'default' to ensure compile-time checks.
  }
-diff -up chromium-69.0.3497.100/media/remoting/rpc.proto.37~ chromium-69.0.3497.100/media/remoting/rpc.proto
---- chromium-69.0.3497.100/media/remoting/media_remoting_rpc.proto.37~	2018-09-17 21:10:16.000000000 +0200
-+++ chromium-69.0.3497.100/media/remoting/media_remoting_rpc.proto	2018-10-02 22:30:05.031093090 +0200
-@@ -67,6 +67,7 @@ message AudioDecoderConfig {
+diff -up chromium-62.0.3192.0/media/remoting/media_remoting_rpc.proto.extra-media chromium-62.0.3192.0/media/remoting/media_remoting_rpc.proto
+--- chromium-62.0.3192.0/media/remoting/media_remoting_rpc.proto.extra-media	2017-08-22 21:04:45.000000000 +0200
++++ chromium-62.0.3192.0/media/remoting/media_remoting_rpc.proto	2017-08-30 15:39:09.736186059 +0200
+@@ -67,6 +67,8 @@ message AudioDecoderConfig {
      kCodecALAC = 15;
      kCodecAC3 = 16;
      kCodecMpegHAudio = 17;
-+    kCodecDTS = 18;
++    kCodecMP2 = 18;
++    kCodecDTS = 19;
    }
  
    // Proto version of media::SampleFormat.
-diff -up chromium-69.0.3497.100/net/base/mime_util.cc.37~ chromium-69.0.3497.100/net/base/mime_util.cc
---- chromium-69.0.3497.100/net/base/mime_util.cc.37~	2018-09-17 21:10:18.000000000 +0200
-+++ chromium-69.0.3497.100/net/base/mime_util.cc	2018-10-02 22:30:05.031093090 +0200
-@@ -101,6 +101,9 @@ static const MimeInfo kPrimaryMappings[]
-     {"text/xml", "xml"},
-     {"video/mp4", "mp4,m4v"},
-     {"video/ogg", "ogv,ogm"},
+diff -up chromium-62.0.3192.0/net/base/mime_util.cc.extra-media chromium-62.0.3192.0/net/base/mime_util.cc
+--- chromium-62.0.3192.0/net/base/mime_util.cc.extra-media	2017-08-22 21:04:46.000000000 +0200
++++ chromium-62.0.3192.0/net/base/mime_util.cc	2017-08-30 15:47:23.952221630 +0200
+@@ -94,6 +94,9 @@
+     {"image/png", "png"},
+     {"image/apng", "png"},
+     {"image/webp", "webp"},
 +    {"video/x-matroska", "mkv"},
 +    {"audio/x-matroska", "mkv"},
 +    {"video/x-msvideo", "avi"},
- };
- 
- // See comments above for details on how this list is used.
-@@ -490,6 +493,7 @@ static const char* const kStandardAudioT
+     {"multipart/related", "mht,mhtml"},
+     {"text/css", "css"},
+     {"text/html", "html,htm,shtml,shtm"},
+@@ -495,6 +498,7 @@
    "audio/vorbis",
    "audio/wav",
    "audio/webm",
@@ -263,7 +302,7 @@ diff -up chromium-69.0.3497.100/net/base/mime_util.cc.37~ chromium-69.0.3497.100
    "audio/x-m4a",
    "audio/x-ms-wma",
    "audio/vnd.rn-realaudio",
-@@ -507,8 +511,10 @@ static const char* const kStandardVideoT
+@@ -512,8 +516,10 @@
    "video/webm",
    "video/x-dv",
    "video/x-m4v",
@@ -274,3 +313,66 @@ diff -up chromium-69.0.3497.100/net/base/mime_util.cc.37~ chromium-69.0.3497.100
    "video/x-ms-wmv"
  };
  
+--- chromium-73.0.3683.75/media/base/supported_types.cc.extra-media	2019-03-11 23:00:59.000000000 +0100
++++ chromium-73.0.3683.75/media/base/supported_types.cc	2019-03-17 18:40:07.610556592 +0100
+@@ -144,6 +144,7 @@ bool IsAudioCodecProprietary(AudioCodec
+     case media::kCodecAAC:
+     case media::kCodecAC3:
+     case media::kCodecEAC3:
++    case media::kCodecDTS:
+     case media::kCodecAMR_NB:
+     case media::kCodecAMR_WB:
+     case media::kCodecGSM_MS:
+@@ -152,6 +153,7 @@ bool IsAudioCodecProprietary(AudioCodec
+       return true;
+ 
+     case media::kCodecFLAC:
++    case media::kCodecMP2:
+     case media::kCodecMP3:
+     case media::kCodecOpus:
+     case media::kCodecVorbis:
+@@ -174,6 +176,7 @@ bool IsDefaultSupportedAudioType(const A
+   switch (type.codec) {
+     case media::kCodecAAC:
+     case media::kCodecFLAC:
++    case media::kCodecMP2:
+     case media::kCodecMP3:
+     case media::kCodecOpus:
+     case media::kCodecPCM:
+@@ -182,6 +185,10 @@ bool IsDefaultSupportedAudioType(const A
+     case media::kCodecPCM_S24BE:
+     case media::kCodecPCM_ALAW:
+     case media::kCodecVorbis:
++    case media::kCodecEAC3:
++    case media::kCodecALAC:
++    case media::kCodecAC3:
++    case media::kCodecDTS:
+       return true;
+ 
+     case media::kCodecAMR_NB:
+@@ -193,9 +200,6 @@ bool IsDefaultSupportedAudioType(const A
+       return false;
+ #endif
+ 
+-    case media::kCodecEAC3:
+-    case media::kCodecALAC:
+-    case media::kCodecAC3:
+     case media::kCodecMpegHAudio:
+     case media::kUnknownAudioCodec:
+       return false;
+@@ -250,12 +251,12 @@ bool IsDefaultSupportedVideoType(const V
+     case media::kCodecH264:
+     case media::kCodecVP8:
+     case media::kCodecTheora:
+-      return true;
+-
+-    case media::kUnknownVideoCodec:
+     case media::kCodecVC1:
+     case media::kCodecMPEG2:
+     case media::kCodecHEVC:
++      return true;
++
++    case media::kUnknownVideoCodec:
+     case media::kCodecDolbyVision:
+       return false;
+ 
diff --git a/chromium-69-no-static-libstdc++.patch b/chromium-69-no-static-libstdc++.patch
index c2f9ea9..e3fceeb 100644
--- a/chromium-69-no-static-libstdc++.patch
+++ b/chromium-69-no-static-libstdc++.patch
@@ -8,4 +8,4 @@ diff -up chromium-69.0.3497.100/tools/gn/build/gen.py.omv~ chromium-69.0.3497.10
 -          '-static-libstdc++',
            '-Wl,--as-needed',
        ])
-       libs.extend([
+       # This is needed by libc++.
diff --git a/chromium-69-wmvflvmpg.patch b/chromium-69-wmvflvmpg.patch
index 9190351..25470c3 100644
--- a/chromium-69-wmvflvmpg.patch
+++ b/chromium-69-wmvflvmpg.patch
@@ -1,6 +1,6 @@
-diff -up chromium-69.0.3497.100/media/base/mime_util_internal.cc.38~ chromium-69.0.3497.100/media/base/mime_util_internal.cc
---- chromium-69.0.3497.100/media/base/mime_util_internal.cc.38~	2018-10-02 22:33:23.202267666 +0200
-+++ chromium-69.0.3497.100/media/base/mime_util_internal.cc	2018-10-02 22:35:18.081936900 +0200
+diff -up chromium-62.0.3192.0/media/base/mime_util_internal.cc.wmvflvmpg chromium-62.0.3192.0/media/base/mime_util_internal.cc
+--- chromium-62.0.3192.0/media/base/mime_util_internal.cc.wmvflvmpg	2017-08-30 15:52:00.602204610 +0200
++++ chromium-62.0.3192.0/media/base/mime_util_internal.cc	2017-08-30 16:08:19.855437935 +0200
 @@ -91,6 +91,16 @@
        {"mp2", MimeUtil::MP2},
        {"mp4v.20.8", MimeUtil::MPEG4_SP},
@@ -14,123 +14,74 @@ diff -up chromium-69.0.3497.100/media/base/mime_util_internal.cc.38~ chromium-69
 +      {"vc-1", MimeUtil::VC1},
 +      {"wma", MimeUtil::WMA},
 +      {"vp6", MimeUtil::VP6},
-+      {"mpeg1", MimeUtil::MPEG1}
++      {"mpeg1", MimeUtil::MPEG1},
    });
  
    return *kStringToCodecMap;
-@@ -306,6 +311,9 @@ void MimeUtil::AddSupportedMediaFormats(
+@@ -323,6 +333,7 @@
    CodecSet webm_codecs(webm_audio_codecs);
    webm_codecs.insert(webm_video_codecs.begin(), webm_video_codecs.end());
  
-+  CodecSet mp1_codecs;
-+  mp1_codecs.insert(MPEG1);
-+
-   const CodecSet mp3_codecs{MP3};
++  const CodecSet mp1_codecs{MPEG1};
+   const CodecSet mp3_codecs{MP3, MP2};
  
-   CodecSet mp4_audio_codecs{FLAC, MP3, OPUS};
-@@ -352,6 +360,29 @@ void MimeUtil::AddSupportedMediaFormats(
+   CodecSet mp4_audio_codecs{FLAC, MP3, OPUS, MP2, DTS, AC3, EAC3};
+@@ -366,6 +377,28 @@
    CodecSet mp4_codecs(mp4_audio_codecs);
    mp4_codecs.insert(mp4_video_codecs.begin(), mp4_video_codecs.end());
  
-+  CodecSet wma_codecs;
-+  wma_codecs.insert(WMA);
++  const CodecSet wma_codecs{WMA};
 +
 +  CodecSet wmv_codecs(wma_codecs);
-+  wmv_codecs.insert(MSMPEG4v1);
-+  wmv_codecs.insert(MSMPEG4v2);
-+  wmv_codecs.insert(MSMPEG4v3);
-+  wmv_codecs.insert(MPEG4_SP);
-+  wmv_codecs.insert(MPEG4_ASP);
-+  wmv_codecs.insert(WMV7);
-+  wmv_codecs.insert(WMV8);
-+  wmv_codecs.insert(WMV9);
-+  wmv_codecs.insert(VC1);
++  wmv_codecs.emplace(MSMPEG4v1);
++  wmv_codecs.emplace(MSMPEG4v2);
++  wmv_codecs.emplace(MSMPEG4v3);
++  wmv_codecs.emplace(MPEG4_SP);
++  wmv_codecs.emplace(MPEG4_ASP);
++  wmv_codecs.emplace(WMV7);
++  wmv_codecs.emplace(WMV8);
++  wmv_codecs.emplace(WMV9);
++  wmv_codecs.emplace(VC1);
 +
-+  matroska_codecs.insert(MSMPEG4v1);
-+  matroska_codecs.insert(MSMPEG4v2);
-+  matroska_codecs.insert(MSMPEG4v3);
++  matroska_codecs.emplace(MSMPEG4v1);
++  matroska_codecs.emplace(MSMPEG4v2);
++  matroska_codecs.emplace(MSMPEG4v3);
 +
-+  CodecSet flv_codecs;
-+  flv_codecs.insert(VP6);
-+  flv_codecs.insert(mp4_codecs.begin(), mp4_codecs.end());
-+  flv_codecs.insert(MP3);
++  CodecSet flv_codecs(mp4_codecs);
++  flv_codecs.emplace(VP6);
++  flv_codecs.emplace(MP3);
++  flv_codecs.emplace(FLV1);
 +
    const CodecSet implicit_codec;
-   AddContainerWithCodecs("audio/wav", wav_codecs, false);
-   AddContainerWithCodecs("audio/x-wav", wav_codecs, false);
-@@ -375,6 +406,11 @@ void MimeUtil::AddSupportedMediaFormats(
- 
-   AddContainerWithCodecs("audio/x-matroska", matroska_audio_codecs, false);
-   AddContainerWithCodecs("video/x-matroska", matroska_video_codecs, false);
-+  AddContainerWithCodecs("video/x-ms-wmv", wmv_codecs, true);
-+  AddContainerWithCodecs("video/x-ms-wma", wma_codecs, true);
-+  AddContainerWithCodecs("video/x-ms-asf", wmv_codecs, true);
-+  AddContainerWithCodecs("video/x-flv", flv_codecs, true);
-+  AddContainerWithCodecs("video/mpeg", mp1_codecs, true);
+   AddContainerWithCodecs("audio/wav", wav_codecs);
+   AddContainerWithCodecs("audio/x-wav", wav_codecs);
+@@ -389,6 +421,11 @@
+   AddContainerWithCodecs("audio/x-matroska", matroska_audio_codecs);
+   AddContainerWithCodecs("video/x-matroska", matroska_codecs);
+   AddContainerWithCodecs("video/x-msvideo", matroska_codecs);
++  AddContainerWithCodecs("video/x-ms-wmv", wmv_codecs);
++  AddContainerWithCodecs("audio/x-ms-wma", wma_codecs);
++  AddContainerWithCodecs("video/x-ms-asf", wmv_codecs);
++  AddContainerWithCodecs("video/x-flv", flv_codecs);
++  AddContainerWithCodecs("video/mpeg", mp1_codecs);
  
  #if BUILDFLAG(USE_PROPRIETARY_CODECS)
-   AddContainerWithCodecs("audio/aac", implicit_codec, true);  // AAC / ADTS.
-@@ -1007,6 +1043,15 @@ bool MimeUtil::IsCodecProprietary(Codec
-     case DTS:
-     case MPEG4_SP:
-     case MPEG4_ASP:
-+    case MSMPEG4v1:
-+    case MSMPEG4v2:
-+    case MSMPEG4v3:
-+    case WMV7:
-+    case WMV8:
-+    case WMV9:
-+    case VC1:
-+    case WMA:
-+    case VP6:
-       return true;
- 
-     case MP3:
-@@ -1018,6 +1063,7 @@ bool MimeUtil::IsCodecProprietary(Codec
-     case VP8:
-     case VP9:
-     case THEORA:
-+    case MPEG1:
-     case AV1:
-       return false;
-   }
-diff -up chromium-69.0.3497.100/media/base/mime_util_internal.h.38~ chromium-69.0.3497.100/media/base/mime_util_internal.h
---- chromium-69.0.3497.100/media/base/mime_util_internal.h.38~	2018-10-02 22:33:23.202267666 +0200
-+++ chromium-69.0.3497.100/media/base/mime_util_internal.h	2018-10-02 22:33:23.205267683 +0200
-@@ -50,7 +50,17 @@ class MEDIA_EXPORT MimeUtil {
-     MP2,
-     MPEG4_SP,
-     MPEG4_ASP,
--    LAST_CODEC = MPEG4_ASP
-+    MSMPEG4v1,
-+    MSMPEG4v2,
-+    MSMPEG4v3,
-+    WMV7,
-+    WMV8,
-+    WMV9,
-+    VC1,
-+    WMA,
-+    VP6,
-+    MPEG1,
-+    LAST_CODEC = MPEG1
-   };
- 
-   // Platform configuration structure.  Controls which codecs are supported at
-diff -up chromium-69.0.3497.100/net/base/mime_util.cc.38~ chromium-69.0.3497.100/net/base/mime_util.cc
---- chromium-69.0.3497.100/net/base/mime_util.cc.38~	2018-10-02 22:33:23.203267672 +0200
-+++ chromium-69.0.3497.100/net/base/mime_util.cc	2018-10-02 22:33:23.205267683 +0200
-@@ -104,6 +104,10 @@ static const MimeInfo kPrimaryMappings[]
+   AddContainerWithCodecs("audio/aac", implicit_codec);  // AAC / ADTS.
+diff -up chromium-62.0.3192.0/net/base/mime_util.cc.wmvflvmpg chromium-62.0.3192.0/net/base/mime_util.cc
+--- chromium-62.0.3192.0/net/base/mime_util.cc.wmvflvmpg	2017-08-30 15:52:00.604204573 +0200
++++ chromium-62.0.3192.0/net/base/mime_util.cc	2017-08-30 16:08:50.210885222 +0200
+@@ -94,6 +94,10 @@ static const MimeInfo kPrimaryMappings[]
      {"video/x-matroska", "mkv"},
      {"audio/x-matroska", "mkv"},
      {"video/x-msvideo", "avi"},
 +    {"video/x-ms-wmv", "wmv"},
 +    {"audio/x-ms-wma", "wma"},
 +    {"video/x-flv", "flv"},
-+    {"video/mpeg", "mpg,mpeg"}
- };
- 
- // See comments above for details on how this list is used.
-@@ -510,6 +514,7 @@ static const char* const kStandardVideoT
++    {"video/mpeg", "mpg,mpeg"},
+     {"multipart/related", "mht,mhtml"},
+     {"text/css", "css"},
+     {"text/html", "html,htm,shtml,shtm"},
+@@ -512,6 +516,7 @@ static const char* const kStandardVideoT
    "video/sd-video",
    "video/webm",
    "video/x-dv",
diff --git a/chromium-69.0.3497.81-norar.patch b/chromium-69.0.3497.81-norar.patch
deleted file mode 100644
index d0cb8e2..0000000
--- a/chromium-69.0.3497.81-norar.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-diff -up chromium-69.0.3497.81/chrome/common/safe_browsing/BUILD.gn.nounrar chromium-69.0.3497.81/chrome/common/safe_browsing/BUILD.gn
---- chromium-69.0.3497.81/chrome/common/safe_browsing/BUILD.gn.nounrar	2018-09-06 13:29:47.114511569 -0400
-+++ chromium-69.0.3497.81/chrome/common/safe_browsing/BUILD.gn	2018-09-06 13:29:47.120511452 -0400
-@@ -55,40 +55,6 @@ if (safe_browsing_mode == 1) {
-       "//components/safe_browsing:csd_proto",
-     ]
-   }
--
--  source_set("rar_analyzer") {
--    sources = [
--      "rar_analyzer.cc",
--      "rar_analyzer.h",
--    ]
--
--    deps = [
--      ":archive_analyzer_results",
--      ":download_type_util",
--      ":file_type_policies",
--      "//base",
--      "//base:i18n",
--      "//third_party/unrar:unrar",
--    ]
--
--    defines = [
--      "_FILE_OFFSET_BITS=64",
--      "LARGEFILE_SOURCE",
--      "RAR_SMP",
--      "SILENT",
--
--      # The following is set to disable certain macro definitions in the unrar
--      # source code.
--      "CHROMIUM_UNRAR",
--
--      # Disables exceptions in unrar, replaces them with process termination.
--      "UNRAR_NO_EXCEPTIONS",
--    ]
--
--    public_deps = [
--      "//components/safe_browsing:csd_proto",
--    ]
--  }
- 
-   source_set("disk_image_type_sniffer_mac") {
-     sources = [
-@@ -121,7 +87,6 @@ source_set("safe_browsing") {
-     deps += [
-       ":archive_analyzer_results",
-       ":download_type_util",
--      ":rar_analyzer",
-       "//components/safe_browsing:features",
-     ]
- 
-diff -up chromium-69.0.3497.81/chrome/common/safe_browsing/DEPS.nounrar chromium-69.0.3497.81/chrome/common/safe_browsing/DEPS
---- chromium-69.0.3497.81/chrome/common/safe_browsing/DEPS.nounrar	2018-09-06 13:29:47.119511472 -0400
-+++ chromium-69.0.3497.81/chrome/common/safe_browsing/DEPS	2018-09-06 13:29:47.116511530 -0400
-@@ -1,6 +1,5 @@
- include_rules = [
-   "+components/safe_browsing",
-   "+third_party/protobuf",
--  "+third_party/unrar",
-   "+third_party/zlib",
- ]
-diff -up chromium-69.0.3497.81/chrome/services/file_util/safe_archive_analyzer.cc.nounrar chromium-69.0.3497.81/chrome/services/file_util/safe_archive_analyzer.cc
---- chromium-69.0.3497.81/chrome/services/file_util/safe_archive_analyzer.cc.nounrar	2018-09-07 10:10:42.286041744 -0400
-+++ chromium-69.0.3497.81/chrome/services/file_util/safe_archive_analyzer.cc	2018-09-07 10:11:14.934308285 -0400
-@@ -47,9 +47,13 @@ void SafeArchiveAnalyzer::AnalyzeDmgFile
- 
- void SafeArchiveAnalyzer::AnalyzeRarFile(base::File rar_file,
-                                          AnalyzeRarFileCallback callback) {
-+#if 0
-   DCHECK(rar_file.IsValid());
- 
-   safe_browsing::ArchiveAnalyzerResults results;
-   safe_browsing::rar_analyzer::AnalyzeRarFile(std::move(rar_file), &results);
-   std::move(callback).Run(results);
-+#else
-+  NOTREACHED();
-+#endif
- }
diff --git a/chromium-70.0.3538.77-gcc7.patch b/chromium-70.0.3538.77-gcc7.patch
index 537e1bd..3b62aae 100644
--- a/chromium-70.0.3538.77-gcc7.patch
+++ b/chromium-70.0.3538.77-gcc7.patch
@@ -62,15 +62,21 @@
    const MediaSink::Id& id() const { return sink_id_; }
 --- chromium-70.0.3538.77/chrome/common/media_router/media_sink.cc.orig	2018-11-08 23:17:22.962379907 +0000
 +++ chromium-70.0.3538.77/chrome/common/media_router/media_sink.cc	2018-11-08 23:17:36.625379033 +0000
-@@ -24,7 +24,7 @@
+@@ -19,12 +19,12 @@ MediaSink::MediaSink(const MediaSink::Id
+       provider_id_(provider_id) {}
+ 
+ MediaSink::MediaSink(const MediaSink& other) = default;
+-MediaSink::MediaSink(MediaSink&& other) noexcept = default;
++MediaSink::MediaSink(MediaSink&& other) = default;
+ MediaSink::MediaSink() = default;
  MediaSink::~MediaSink() = default;
  
  MediaSink& MediaSink::operator=(const MediaSink& other) = default;
 -MediaSink& MediaSink::operator=(MediaSink&& other) noexcept = default;
 +MediaSink& MediaSink::operator=(MediaSink&& other) = default;
  
- bool MediaSink::Equals(const MediaSink& other) const {
-   return sink_id_ == other.sink_id_;
+ bool MediaSink::IsMaybeCloudSink() const {
+   switch (icon_type_) {
 --- chromium-70.0.3538.77/components/policy/core/common/policy_map.cc.orig	2018-11-08 23:55:51.325232293 +0000
 +++ chromium-70.0.3538.77/components/policy/core/common/policy_map.cc	2018-11-08 23:56:17.654230610 +0000
 @@ -18,7 +18,7 @@
@@ -93,20 +99,18 @@
  
      // Returns a copy of |this|.
      Entry DeepCopy() const;
---- chromium-70.0.3538.77/components/signin/core/browser/account_info.h.orig	2018-11-09 00:03:20.709203557 +0000
-+++ chromium-70.0.3538.77/components/signin/core/browser/account_info.h	2018-11-09 00:03:59.284201090 +0000
-@@ -20,7 +20,7 @@
-   AccountInfo(AccountInfo&& other) noexcept;
- 
-   AccountInfo& operator=(const AccountInfo& other);
--  AccountInfo& operator=(AccountInfo&& other) noexcept;
-+  AccountInfo& operator=(AccountInfo&& other);
- 
-   std::string account_id;  // The account ID used by OAuth2TokenService.
-   std::string gaia;
 --- chromium-70.0.3538.77/components/signin/core/browser/account_info.cc.orig	2018-11-09 00:03:15.789203871 +0000
 +++ chromium-70.0.3538.77/components/signin/core/browser/account_info.cc	2018-11-09 00:03:52.644201514 +0000
-@@ -32,7 +32,7 @@
+@@ -51,7 +51,7 @@
+ CoreAccountInfo& CoreAccountInfo::operator=(const CoreAccountInfo& other) =
+     default;
+ 
+-CoreAccountInfo& CoreAccountInfo::operator=(CoreAccountInfo&& other) noexcept =
++CoreAccountInfo& CoreAccountInfo::operator=(CoreAccountInfo&& other) =
+     default;
+ 
+ bool CoreAccountInfo::IsEmpty() const {
+@@ -64,7 +64,7 @@ AccountInfo::AccountInfo(AccountInfo&& o
  
  AccountInfo& AccountInfo::operator=(const AccountInfo& other) = default;
  
@@ -114,4 +118,4 @@
 +AccountInfo& AccountInfo::operator=(AccountInfo&& other) = default;
  
  bool AccountInfo::IsEmpty() const {
-   return account_id.empty() && email.empty() && gaia.empty() &&
+   return CoreAccountInfo::IsEmpty() && hosted_domain.empty() &&
diff --git a/chromium-73.0.3683.75-norar.patch b/chromium-73.0.3683.75-norar.patch
new file mode 100644
index 0000000..d61fd9c
--- /dev/null
+++ b/chromium-73.0.3683.75-norar.patch
@@ -0,0 +1,81 @@
+diff -up chromium-73.0.3683.75/chrome/common/safe_browsing/BUILD.gn.nounrar chromium-73.0.3683.75/chrome/common/safe_browsing/BUILD.gn
+--- chromium-73.0.3683.75/chrome/common/safe_browsing/BUILD.gn.nounrar	2019-03-13 08:59:45.988801102 -0400
++++ chromium-73.0.3683.75/chrome/common/safe_browsing/BUILD.gn	2019-03-13 09:00:20.244977448 -0400
+@@ -64,41 +64,6 @@ if (safe_browsing_mode == 1) {
+     ]
+   }
+ 
+-  source_set("rar_analyzer") {
+-    sources = [
+-      "rar_analyzer.cc",
+-      "rar_analyzer.h",
+-    ]
+-
+-    deps = [
+-      ":archive_analyzer_results",
+-      ":download_type_util",
+-      ":file_type_policies",
+-      "//base",
+-      "//base:i18n",
+-      "//components/safe_browsing:features",
+-      "//third_party/unrar:unrar",
+-    ]
+-
+-    defines = [
+-      "_FILE_OFFSET_BITS=64",
+-      "LARGEFILE_SOURCE",
+-      "RAR_SMP",
+-      "SILENT",
+-
+-      # The following is set to disable certain macro definitions in the unrar
+-      # source code.
+-      "CHROMIUM_UNRAR",
+-
+-      # Disables exceptions in unrar, replaces them with process termination.
+-      "UNRAR_NO_EXCEPTIONS",
+-    ]
+-
+-    public_deps = [
+-      "//components/safe_browsing:csd_proto",
+-    ]
+-  }
+-
+   source_set("disk_image_type_sniffer_mac") {
+     sources = [
+       "disk_image_type_sniffer_mac.cc",
+@@ -167,7 +132,6 @@ source_set("safe_browsing") {
+       ":archive_analyzer_results",
+       ":binary_feature_extractor",
+       ":download_type_util",
+-      ":rar_analyzer",
+       "//components/safe_browsing:features",
+     ]
+ 
+diff -up chromium-73.0.3683.75/chrome/common/safe_browsing/DEPS.nounrar chromium-73.0.3683.75/chrome/common/safe_browsing/DEPS
+--- chromium-73.0.3683.75/chrome/common/safe_browsing/DEPS.nounrar	2019-03-11 18:00:54.000000000 -0400
++++ chromium-73.0.3683.75/chrome/common/safe_browsing/DEPS	2019-03-13 08:59:26.513282690 -0400
+@@ -1,6 +1,5 @@
+ include_rules = [
+   "+components/safe_browsing",
+   "+third_party/protobuf",
+-  "+third_party/unrar",
+   "+third_party/zlib",
+ ]
+diff -up chromium-73.0.3683.75/chrome/services/file_util/safe_archive_analyzer.cc.nounrar chromium-73.0.3683.75/chrome/services/file_util/safe_archive_analyzer.cc
+--- chromium-73.0.3683.75/chrome/services/file_util/safe_archive_analyzer.cc.nounrar	2019-03-13 08:59:26.518282566 -0400
++++ chromium-73.0.3683.75/chrome/services/file_util/safe_archive_analyzer.cc	2019-03-13 09:01:03.885935483 -0400
+@@ -48,10 +48,14 @@ void SafeArchiveAnalyzer::AnalyzeDmgFile
+ void SafeArchiveAnalyzer::AnalyzeRarFile(base::File rar_file,
+                                          base::File temporary_file,
+                                          AnalyzeRarFileCallback callback) {
++#if 0
+   DCHECK(rar_file.IsValid());
+ 
+   safe_browsing::ArchiveAnalyzerResults results;
+   safe_browsing::rar_analyzer::AnalyzeRarFile(
+       std::move(rar_file), std::move(temporary_file), &results);
+   std::move(callback).Run(results);
++#else
++  NOTREACHED();
++#endif
+ }
diff --git a/chromium-74.0.3729.108-revert_values.patch b/chromium-74.0.3729.108-revert_values.patch
new file mode 100644
index 0000000..447b207
--- /dev/null
+++ b/chromium-74.0.3729.108-revert_values.patch
@@ -0,0 +1,329 @@
+--- b/base/values.cc
++++ a/base/values.cc
+@@ -22,20 +22,6 @@
+ 
+ namespace base {
+ 
+-// base::Value must be standard layout to guarantee that writing to
+-// |bool_type_| then reading |type_| is defined behaviour. See:
+-//
+-// [class.union]:
+-//   If a standard-layout union contains several standard-layout structs that
+-//   share a common initial sequence (9.2), and if an object of this
+-//   standard-layout union type contains one of the standard-layout structs,
+-//   it is permitted to inspect the common initial sequence of any of
+-//   standard-layout struct members;
+-//
+-static_assert(std::is_standard_layout<Value>::value,
+-              "base::Value should be a standard-layout C++ class in order "
+-              "to avoid undefined behaviour in its implementation!");
+-
+ namespace {
+ 
+ const char* const kTypeNames[] = {"null",   "boolean", "integer",    "double",
+@@ -90,7 +76,7 @@
+ 
+ }  // namespace
+ 
++constexpr uint32_t Value::kMagicIsAlive;
+-constexpr uint16_t Value::kMagicIsAlive;
+ 
+ // static
+ std::unique_ptr<Value> Value::CreateWithCopiedBuffer(const char* buffer,
+@@ -112,9 +98,9 @@
+   InternalMoveConstructFrom(std::move(that));
+ }
+ 
++Value::Value() noexcept : type_(Type::NONE) {}
+-Value::Value() noexcept : type_(Type::NONE), is_alive_(kMagicIsAlive) {}
+ 
++Value::Value(Type type) : type_(type) {
+-Value::Value(Type type) : type_(type), is_alive_(kMagicIsAlive) {
+   // Initialize with the default value.
+   switch (type_) {
+     case Type::NONE:
+@@ -144,20 +130,11 @@
+   }
+ }
+ 
++Value::Value(bool in_bool) : type_(Type::BOOLEAN), bool_value_(in_bool) {}
+-Value::Value(bool in_bool)
+-    : bool_type_(Type::BOOLEAN),
+-      bool_is_alive_(kMagicIsAlive),
+-      bool_value_(in_bool) {}
+ 
++Value::Value(int in_int) : type_(Type::INTEGER), int_value_(in_int) {}
+-Value::Value(int in_int)
+-    : int_type_(Type::INTEGER),
+-      int_is_alive_(kMagicIsAlive),
+-      int_value_(in_int) {}
+ 
++Value::Value(double in_double) : type_(Type::DOUBLE), double_value_(in_double) {
+-Value::Value(double in_double)
+-    : double_type_(Type::DOUBLE),
+-      double_is_alive_(kMagicIsAlive),
+-      double_value_(in_double) {
+   if (!std::isfinite(double_value_)) {
+     NOTREACHED() << "Non-finite (i.e. NaN or positive/negative infinity) "
+                  << "values cannot be represented in JSON";
+@@ -170,9 +147,7 @@
+ Value::Value(StringPiece in_string) : Value(std::string(in_string)) {}
+ 
+ Value::Value(std::string&& in_string) noexcept
++    : type_(Type::STRING), string_value_(std::move(in_string)) {
+-    : string_type_(Type::STRING),
+-      string_is_alive_(kMagicIsAlive),
+-      string_value_(std::move(in_string)) {
+   DCHECK(IsStringUTF8(string_value_));
+ }
+ 
+@@ -181,22 +156,15 @@
+ Value::Value(StringPiece16 in_string16) : Value(UTF16ToUTF8(in_string16)) {}
+ 
+ Value::Value(const std::vector<char>& in_blob)
++    : type_(Type::BINARY), binary_value_(in_blob.begin(), in_blob.end()) {}
+-    : binary_type_(Type::BINARY),
+-      binary_is_alive_(kMagicIsAlive),
+-      binary_value_(in_blob.begin(), in_blob.end()) {}
+ 
+ Value::Value(base::span<const uint8_t> in_blob)
++    : type_(Type::BINARY), binary_value_(in_blob.begin(), in_blob.end()) {}
+-    : binary_type_(Type::BINARY),
+-      binary_is_alive_(kMagicIsAlive),
+-      binary_value_(in_blob.begin(), in_blob.end()) {}
+ 
+ Value::Value(BlobStorage&& in_blob) noexcept
++    : type_(Type::BINARY), binary_value_(std::move(in_blob)) {}
+-    : binary_type_(Type::BINARY),
+-      binary_is_alive_(kMagicIsAlive),
+-      binary_value_(std::move(in_blob)) {}
+ 
++Value::Value(const DictStorage& in_dict) : type_(Type::DICTIONARY), dict_() {
+-Value::Value(const DictStorage& in_dict)
+-    : dict_type_(Type::DICTIONARY), dict_is_alive_(kMagicIsAlive), dict_() {
+   dict_.reserve(in_dict.size());
+   for (const auto& it : in_dict) {
+     dict_.try_emplace(dict_.end(), it.first,
+@@ -205,21 +173,16 @@
+ }
+ 
+ Value::Value(DictStorage&& in_dict) noexcept
++    : type_(Type::DICTIONARY), dict_(std::move(in_dict)) {}
+-    : dict_type_(Type::DICTIONARY),
+-      dict_is_alive_(kMagicIsAlive),
+-      dict_(std::move(in_dict)) {}
+ 
++Value::Value(const ListStorage& in_list) : type_(Type::LIST), list_() {
+-Value::Value(const ListStorage& in_list)
+-    : list_type_(Type::LIST), list_is_alive_(kMagicIsAlive), list_() {
+   list_.reserve(in_list.size());
+   for (const auto& val : in_list)
+     list_.emplace_back(val.Clone());
+ }
+ 
+ Value::Value(ListStorage&& in_list) noexcept
++    : type_(Type::LIST), list_(std::move(in_list)) {}
+-    : list_type_(Type::LIST),
+-      list_is_alive_(kMagicIsAlive),
+-      list_(std::move(in_list)) {}
+ 
+ Value& Value::operator=(Value&& that) noexcept {
+   InternalCleanup();
+@@ -733,7 +696,6 @@
+ 
+ void Value::InternalMoveConstructFrom(Value&& that) {
+   type_ = that.type_;
+-  is_alive_ = that.is_alive_;
+ 
+   switch (type_) {
+     case Type::NONE:
+--- b/base/values.h
++++ a/base/values.h
+@@ -96,6 +96,10 @@
+     // Note: Do not add more types. See the file-level comment above for why.
+   };
+ 
++  // Magic IsAlive signature to debug double frees.
++  // TODO(crbug.com/859477): Remove once root cause is found.
++  static constexpr uint32_t kMagicIsAlive = 0x15272f19;
++
+   // For situations where you want to keep ownership of your buffer, this
+   // factory method creates a new BinaryValue by copying the contents of the
+   // buffer that's passed in.
+@@ -375,100 +379,28 @@
+   size_t EstimateMemoryUsage() const;
+ 
+  protected:
++  // TODO(crbug.com/646113): Make these private once DictionaryValue and
++  // ListValue are properly inlined.
++  Type type_;
+-  // Magic IsAlive signature to debug double frees.
+-  // TODO(crbug.com/859477): Remove once root cause is found.
+-  static constexpr uint16_t kMagicIsAlive = 0x2f19;
+ 
+-  // Technical note:
+-  // The naive way to implement a tagged union leads to wasted bytes
+-  // in the object on CPUs like ARM ones, which impose an 8-byte alignment
+-  // for double values. I.e. if one does something like:
+-  //
+-  //    struct TaggedValue {
+-  //      int type_;                    // size = 1, align = 4
+-  //      union {
+-  //        bool bool_value_;           // size = 1, align = 1
+-  //        int int_value_;             // size = 4, align = 4
+-  //        double double_value_;       // size = 8, align = 8
+-  //        std::string string_value_;  // size = 12, align = 4  (32-bit)
+-  //      };
+-  //    };
+-  //
+-  // The end result is that the union will have an alignment of 8, and a size
+-  // of 16, due to 4 extra padding bytes following |string_value_| to respect
+-  // the alignment requirement.
+-  //
+-  // As a consequence, the struct TaggedValue will have a size of 24 bytes,
+-  // due to the size of the union (16), the size of |type_| (4) and 4 bytes
+-  // of padding between |type_| and the union to respect its alignment.
+-  //
+-  // This means 8 bytes of unused memory per instance on 32-bit ARM!
+-  //
+-  // To reclaim these, a union of structs is used instead, in order to ensure
+-  // that |double_value_| below is always located at an offset that is a
+-  // multiple of 8, relative to the start of the overall data structure.
+-  //
+-  // Each struct must declare its own |type_| and |is_alive_| field, which
+-  // must have a different name, to appease the C++ compiler.
+-  //
+-  // Using this technique sizeof(base::Value) == 16 on 32-bit ARM instead
+-  // of 24, without losing any information. Results are unchanged for x86,
+-  // x86_64 and arm64 (16, 32 and 32 bytes respectively).
+   union {
++    bool bool_value_;
++    int int_value_;
++    double double_value_;
++    std::string string_value_;
++    BlobStorage binary_value_;
++    DictStorage dict_;
++    ListStorage list_;
+-    struct {
+-      // TODO(crbug.com/646113): Make these private once DictionaryValue and
+-      // ListValue are properly inlined.
+-      Type type_ : 8;
+-
+-      // IsAlive member to debug double frees.
+-      // TODO(crbug.com/859477): Remove once root cause is found.
+-      uint16_t is_alive_ = kMagicIsAlive;
+-    };
+-    struct {
+-      Type bool_type_ : 8;
+-      uint16_t bool_is_alive_;
+-      bool bool_value_;
+-    };
+-    struct {
+-      Type int_type_ : 8;
+-      uint16_t int_is_alive_;
+-      int int_value_;
+-    };
+-    struct {
+-      Type double_type_ : 8;
+-      uint16_t double_is_alive_;
+-      // Subtle: On architectures that require it, the compiler will ensure
+-      // that |double_value_|'s offset is a multiple of 8 (e.g. 32-bit ARM).
+-      // See technical note above to understand why it is important.
+-      double double_value_;
+-    };
+-    struct {
+-      Type string_type_ : 8;
+-      uint16_t string_is_alive_;
+-      std::string string_value_;
+-    };
+-    struct {
+-      Type binary_type_ : 8;
+-      uint16_t binary_is_alive_;
+-      BlobStorage binary_value_;
+-    };
+-    struct {
+-      Type dict_type_ : 8;
+-      uint16_t dict_is_alive_;
+-      DictStorage dict_;
+-    };
+-    struct {
+-      Type list_type_ : 8;
+-      uint16_t list_is_alive_;
+-      ListStorage list_;
+-    };
+   };
+ 
+  private:
+-  friend class ValuesTest_SizeOfValue_Test;
+   void InternalMoveConstructFrom(Value&& that);
+   void InternalCleanup();
+ 
++  // IsAlive member to debug double frees.
++  // TODO(crbug.com/859477): Remove once root cause is found.
++  uint32_t is_alive_ = kMagicIsAlive;
++
+   DISALLOW_COPY_AND_ASSIGN(Value);
+ };
+ 
+--- b/base/values_unittest.cc
++++ a/base/values_unittest.cc
+@@ -6,7 +6,6 @@
+ 
+ #include <stddef.h>
+ 
+-#include <algorithm>
+ #include <functional>
+ #include <limits>
+ #include <memory>
+@@ -16,7 +15,6 @@
+ #include <vector>
+ 
+ #include "base/containers/adapters.h"
+-#include "base/logging.h"
+ #include "base/strings/string16.h"
+ #include "base/strings/string_piece.h"
+ #include "base/strings/utf_string_conversions.h"
+@@ -25,43 +23,6 @@
+ 
+ namespace base {
+ 
+-TEST(ValuesTest, SizeOfValue) {
+-  // Ensure that base::Value is as small as possible, i.e. that there is
+-  // no wasted space after the inner value due to alignment constraints.
+-  // Distinguish between the 'header' that includes |type_| and |is_alive_|
+-  // and the inner value that follows it, which can be a bool, int, double,
+-  // string, blob, list or dict.
+-#define INNER_TYPES_LIST(X)            \
+-  X(bool, bool_value_)                 \
+-  X(int, int_value_)                   \
+-  X(double, double_value_)             \
+-  X(std::string, string_value_)        \
+-  X(Value::BlobStorage, binary_value_) \
+-  X(Value::ListStorage, list_)         \
+-  X(Value::DictStorage, dict_)
+-
+-#define INNER_STRUCT_LIMIT(type, value) offsetof(Value, value) + sizeof(type),
+-
+-  // Return the maximum size in bytes of each inner struct inside base::Value
+-  size_t max_inner_struct_limit =
+-      std::max({INNER_TYPES_LIST(INNER_STRUCT_LIMIT)});
+-
+-  // Ensure that base::Value is not larger than necessary, i.e. that there is
+-  // no un-necessary padding afte the structs due to alignment constraints of
+-  // one of the inner fields.
+-  EXPECT_EQ(max_inner_struct_limit, sizeof(Value));
+-  if (max_inner_struct_limit != sizeof(Value)) {
+-    // The following are useful to understand what's wrong when the EXPECT_EQ()
+-    // above actually fails.
+-#define PRINT_INNER_FIELD_INFO(x, y) \
+-  LOG(INFO) << #y " type=" #x " size=" << sizeof(x) << " align=" << alignof(x);
+-
+-    LOG(INFO) << "Value size=" << sizeof(Value) << " align=" << alignof(Value);
+-    INNER_TYPES_LIST(PRINT_INNER_FIELD_INFO)
+-    LOG(INFO) << "max_inner_struct_limit=" << max_inner_struct_limit;
+-  }
+-}
+-
+ TEST(ValuesTest, TestNothrow) {
+   static_assert(std::is_nothrow_move_constructible<Value>::value,
+                 "IsNothrowMoveConstructible");
diff --git a/chromium-browser-stable.spec b/chromium-browser-stable.spec
index 2b9034d..1c99de6 100644
--- a/chromium-browser-stable.spec
+++ b/chromium-browser-stable.spec
@@ -48,7 +48,7 @@
 Name: 		chromium-browser-%{channel}
 # Working version numbers can be found at
 # http://omahaproxy.appspot.com/
-Version: 	72.0.3626.81
+Version: 	74.0.3729.131
 Release: 	1%{?extrarelsuffix}
 Summary: 	A fast webkit-based web browser
 Group: 		Networking/WWW
@@ -92,7 +92,7 @@ Patch24:        https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromiu
 Patch25:        https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromium-54.0.2840.59-jpeg-include-dir.patch
 # On i686, pass --no-keep-memory --reduce-memory-overheads to ld.
 Patch26:        https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromium-59.0.3071.86-i686-ld-memory-tricks.patch
-Patch32:	https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromium-69.0.3497.81-norar.patch
+Patch32:	https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromium-73.0.3683.75-norar.patch
 Patch33:	chromium-50-system-ffmpeg-3.patch
 Patch36:	https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromium-58.0.3029.96-revert-b794998819088f76b4cf44c8db6940240c563cf4.patch
 # Correctly compile the stdatomic.h in ffmpeg with gcc 4.8
@@ -126,7 +126,7 @@ Patch67:	https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromium-65.0.
 # From Debian
 Patch86:	https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromium-67.0.3396.62-skia-aarch64-buildfix.patch
 # Use lstdc++ on EPEL7 only
-Patch87:	https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromium-65.0.3325.162-epel7-stdc++.patch
+#Patch87:	https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromium-65.0.3325.162-epel7-stdc++.patch
 # Missing files in tarball
 Patch88:	https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromium-66.0.3359.117-missing-files.patch
 # https://chromium.googlesource.com/chromium/src/+/ba4141e451f4e0b1b19410b1b503bd32e150df06%5E%21/#F0
@@ -147,6 +147,11 @@ Patch94:	https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromium-66.0.
 Patch98:	https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromium-69.0.3497.81-gcc8-alignof.patch
 # Don't build in a Debian chroot
 Patch99:	https://src.fedoraproject.org/rpms/chromium/raw/master/f/chromium-69.0.3497.81-build-sanely-please.patch
+# Debian fix gcc failure
+Patch100:	quic.patch
+# debian - constexpr fixes
+Patch101:	not-constexpr.patch
+Patch102:	move-required.patch
 
 ### Chromium Tests Patches ###
 # suse, system libs
@@ -159,7 +164,8 @@ Patch202:	https://raw.githubusercontent.com/archlinuxarm/PKGBUILDs/master/extra/
 # mga
 Patch300:	chromium-69-extra-media.patch
 Patch301:	chromium-69-wmvflvmpg.patch
-Patch302:	chromium-55-flac.patch
+Patch302:	chromium-40-sorenson-spark.patch
+#Patch302:	chromium-55-flac.patch
 
 # omv
 Patch500:	chromium-59-clang-workaround.patch
@@ -167,12 +173,14 @@ Patch501:	chromium-64-system-curl.patch
 Patch502:	chromium-69-no-static-libstdc++.patch
 Patch503:	revert-Xclang-instcombine-lower-dbg-declare.patch
 Patch504:	chromium-70.0.3538.77-gcc7.patch
-Patch505:	chromium-72.0.3626.81-memset.patch
 
 # stop so many build warnings
 Patch506:	chromium-71.0.3578.94-quieten.patch
 Patch507:	chromium-trace.patch
 
+Patch508:	chromium-74.0.3729.108-revert_values.patch
+Patch509:	trace_fix.patch
+
 Provides: 	%{crname}
 Obsoletes: 	chromium-browser-unstable < 26.0.1410.51
 Obsoletes: 	chromium-browser-beta < 26.0.1410.51
@@ -336,11 +344,9 @@ python2 build/linux/unbundle/remove_bundled_libraries.py \
 	'base/third_party/xdg_user_dirs' \
 	'chrome/third_party/mozilla_security_manager' \
 	'courgette/third_party' \
-	'net/third_party/http2' \
 	'net/third_party/mozilla_security_manager' \
 	'net/third_party/nss' \
 	'net/third_party/quic' \
-	'net/third_party/spdy' \
         'net/third_party/uri_template' \
 	'third_party/abseil-cpp' \
 	'third_party/adobe' \
@@ -387,8 +393,10 @@ python2 build/linux/unbundle/remove_bundled_libraries.py \
 	'third_party/crashpad/crashpad/third_party/zlib/' \
 	'third_party/crc32c' \
 	'third_party/cros_system_api' \
+        'third_party/dav1d' \
 	'third_party/devscripts' \
 	'third_party/dom_distiller_js' \
+        'third_party/emoji-segmenter' \
 	'third_party/expat' \
 	'third_party/ffmpeg' \
 	'third_party/fips181' \
@@ -397,6 +405,7 @@ python2 build/linux/unbundle/remove_bundled_libraries.py \
 	'third_party/flot' \
 	'third_party/fontconfig' \
 	'third_party/freetype' \
+        'third_party/glslang' \
 	'third_party/google_input_tools' \
 	'third_party/google_input_tools/third_party/closure_library' \
 	'third_party/google_input_tools/third_party/closure_library/third_party/closure' \
@@ -441,6 +450,7 @@ python2 build/linux/unbundle/remove_bundled_libraries.py \
 	'third_party/mesa' \
 	'third_party/metrics_proto' \
 	'third_party/modp_b64' \
+        'third_party/nasm' \
 	'third_party/node' \
 	'third_party/node/node_modules/polymer-bundler/lib/third_party/UglifyJS2' \
 	'third_party/openh264' \
@@ -472,6 +482,7 @@ python2 build/linux/unbundle/remove_bundled_libraries.py \
 	'third_party/simplejson' \
 	'third_party/sinonjs' \
 	'third_party/skia' \
+        'third_party/skia/include/third_party/vulkan' \
 	'third_party/skia/third_party/gif' \
 	'third_party/skia/third_party/skcms' \
 	'third_party/skia/third_party/vulkan' \
@@ -508,6 +519,7 @@ python2 build/linux/unbundle/remove_bundled_libraries.py \
 	'third_party/zlib/google' \
 	'tools/gn/base/third_party/icu' \
 	'url/third_party/mozilla' \
+        'v8/src/third_party/siphash' \
 	'v8/src/third_party/utf8-decoder' \
 	'v8/src/third_party/valgrind' \
 	'v8/third_party/v8' \
@@ -535,6 +547,9 @@ export PATH=$PWD/bfd:$PATH
 %global ldflags %{ldflags} -fuse-ld=bfd -Wl,--no-keep-memory -Wl,--reduce-memory-overheads
 %endif
 
+# cb chromium 74 fails with malformed archive at link stage if ulimit not increased
+ulimit -n 4096
+
 export CC=gcc
 export CXX=g++
 
diff --git a/move-required.patch b/move-required.patch
new file mode 100644
index 0000000..3814c72
--- /dev/null
+++ b/move-required.patch
@@ -0,0 +1,124 @@
+description: gcc 6 needs an explicit hint that these objects should be moved
+author: Michael Gilbert <mgilbert@debian.org>
+
+--- a/extensions/browser/api/declarative_webrequest/webrequest_action.cc
++++ b/extensions/browser/api/declarative_webrequest/webrequest_action.cc
+@@ -578,7 +578,7 @@ base::Optional<EventResponseDelta> WebRe
+   CHECK(request_data.stage & stages());
+   EventResponseDelta result(extension_id, extension_install_time);
+   result.cancel = true;
+-  return result;
++  return std::move(result);
+ }
+ 
+ //
+@@ -613,7 +613,7 @@ base::Optional<EventResponseDelta> WebRe
+     return base::nullopt;
+   EventResponseDelta result(extension_id, extension_install_time);
+   result.new_url = redirect_url_;
+-  return result;
++  return std::move(result);
+ }
+ 
+ //
+@@ -642,7 +642,7 @@ WebRequestRedirectToTransparentImageActi
+   CHECK(request_data.stage & stages());
+   EventResponseDelta result(extension_id, extension_install_time);
+   result.new_url = GURL(kTransparentImageUrl);
+-  return result;
++  return std::move(result);
+ }
+ 
+ //
+@@ -671,7 +671,7 @@ WebRequestRedirectToEmptyDocumentAction:
+   CHECK(request_data.stage & stages());
+   EventResponseDelta result(extension_id, extension_install_time);
+   result.new_url = GURL(kEmptyDocumentUrl);
+-  return result;
++  return std::move(result);
+ }
+ 
+ //
+@@ -773,7 +773,7 @@ base::Optional<EventResponseDelta> WebRe
+ 
+   EventResponseDelta result(extension_id, extension_install_time);
+   result.new_url = GURL(new_url);
+-  return result;
++  return std::move(result);
+ }
+ 
+ //
+@@ -813,7 +813,7 @@ WebRequestSetRequestHeaderAction::Create
+   CHECK(request_data.stage & stages());
+   EventResponseDelta result(extension_id, extension_install_time);
+   result.modified_request_headers.SetHeader(name_, value_);
+-  return result;
++  return std::move(result);
+ }
+ 
+ //
+@@ -851,7 +851,7 @@ WebRequestRemoveRequestHeaderAction::Cre
+   CHECK(request_data.stage & stages());
+   EventResponseDelta result(extension_id, extension_install_time);
+   result.deleted_request_headers.push_back(name_);
+-  return result;
++  return std::move(result);
+ }
+ 
+ //
+@@ -900,7 +900,7 @@ WebRequestAddResponseHeaderAction::Creat
+ 
+   EventResponseDelta result(extension_id, extension_install_time);
+   result.added_response_headers.push_back(make_pair(name_, value_));
+-  return result;
++  return std::move(result);
+ }
+ 
+ //
+@@ -954,7 +954,7 @@ WebRequestRemoveResponseHeaderAction::Cr
+       continue;
+     result.deleted_response_headers.push_back(make_pair(name_, current_value));
+   }
+-  return result;
++  return std::move(result);
+ }
+ 
+ //
+@@ -1039,7 +1039,7 @@ base::Optional<EventResponseDelta> WebRe
+   EventResponseDelta result(extension_id, extension_install_time);
+   result.request_cookie_modifications.push_back(
+       request_cookie_modification_.Clone());
+-  return result;
++  return std::move(result);
+ }
+ 
+ //
+@@ -1087,7 +1087,7 @@ base::Optional<EventResponseDelta> WebRe
+   EventResponseDelta result(extension_id, extension_install_time);
+   result.response_cookie_modifications.push_back(
+       response_cookie_modification_.Clone());
+-  return result;
++  return std::move(result);
+ }
+ 
+ //
+@@ -1127,7 +1127,7 @@ WebRequestSendMessageToExtensionAction::
+   CHECK(request_data.stage & stages());
+   EventResponseDelta result(extension_id, extension_install_time);
+   result.messages_to_extension.insert(message_);
+-  return result;
++  return std::move(result);
+ }
+ 
+ }  // namespace extensions
+--- a/device/fido/pin.cc
++++ b/device/fido/pin.cc
+@@ -129,7 +129,7 @@ base::Optional<bssl::UniquePtr<EC_POINT>
+     return base::nullopt;
+   }
+ 
+-  return ret;
++  return std::move(ret);
+ }
+ 
+ // static
diff --git a/not-constexpr.patch b/not-constexpr.patch
new file mode 100644
index 0000000..66f8189
--- /dev/null
+++ b/not-constexpr.patch
@@ -0,0 +1,184 @@
+description: remove constexpr from methods where it is not supported by gcc 6
+author: Michael Gilbert <mgilbert@debian.org>
+
+--- a/base/test/scoped_task_environment.h
++++ b/base/test/scoped_task_environment.h
+@@ -211,11 +211,11 @@ class ScopedTaskEnvironment {
+  protected:
+   explicit ScopedTaskEnvironment(ScopedTaskEnvironment&& other);
+ 
+-  constexpr MainThreadType main_thread_type() const {
++  const MainThreadType main_thread_type() const {
+     return main_thread_type_;
+   }
+ 
+-  constexpr ExecutionMode execution_control_mode() const {
++  const ExecutionMode execution_control_mode() const {
+     return execution_control_mode_;
+   }
+ 
+--- a/gpu/command_buffer/client/transfer_buffer_cmd_copy_helpers.h
++++ b/gpu/command_buffer/client/transfer_buffer_cmd_copy_helpers.h
+@@ -13,7 +13,7 @@ namespace gpu {
+ 
+ // Sum the sizes of the types in Ts as CheckedNumeric<T>.
+ template <typename T, typename... Ts>
+-constexpr base::CheckedNumeric<T> CheckedSizeOfPackedTypes() {
++base::CheckedNumeric<T> CheckedSizeOfPackedTypes() {
+   static_assert(sizeof...(Ts) > 0, "");
+   base::CheckedNumeric<T> checked_elements_size = 0;
+   for (size_t s : {sizeof(Ts)...}) {
+@@ -87,10 +87,9 @@ auto CopyArraysToBuffer(uint32_t count,
+ // Sum the sizes of the types in Ts. This will fail to compile if the result
+ // does not fit in T.
+ template <typename T, typename... Ts>
+-constexpr T SizeOfPackedTypes() {
+-  constexpr base::CheckedNumeric<T> checked_elements_size =
++T SizeOfPackedTypes() {
++  base::CheckedNumeric<T> checked_elements_size =
+       CheckedSizeOfPackedTypes<T, Ts...>();
+-  static_assert(checked_elements_size.IsValid(), "");
+   return checked_elements_size.ValueOrDie();
+ }
+ 
+@@ -113,7 +112,7 @@ template <typename... Ts>
+ constexpr uint32_t ComputeMaxCopyCount(uint32_t buffer_size) {
+   // Start by tightly packing the elements and decrease copy_count until
+   // the total aligned copy size fits
+-  constexpr uint32_t elements_size = SizeOfPackedTypes<uint32_t, Ts...>();
++  uint32_t elements_size = SizeOfPackedTypes<uint32_t, Ts...>();
+   uint32_t copy_count = buffer_size / elements_size;
+ 
+   while (copy_count > 0) {
+--- a/media/filters/jpeg_parser.cc
++++ b/media/filters/jpeg_parser.cc
+@@ -91,13 +91,13 @@ const JpegHuffmanTable kDefaultAcTable[k
+     },
+ };
+ 
+-constexpr uint8_t kZigZag8x8[64] = {
++const uint8_t kZigZag8x8[64] = {
+     0,  1,  8,  16, 9,  2,  3,  10, 17, 24, 32, 25, 18, 11, 4,  5,
+     12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6,  7,  14, 21, 28,
+     35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51,
+     58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63};
+ 
+-constexpr JpegQuantizationTable kDefaultQuantTable[2] = {
++const JpegQuantizationTable kDefaultQuantTable[2] = {
+     // Table K.1 Luminance quantization table values.
+     {
+         true,
+--- a/media/gpu/vaapi/vaapi_jpeg_encoder.cc
++++ b/media/gpu/vaapi/vaapi_jpeg_encoder.cc
+@@ -51,7 +51,7 @@ void FillQMatrix(VAQMatrixBufferJPEG* q_
+   // Fill the raw, unscaled quantization tables for libva. The VAAPI driver is
+   // responsible for scaling the quantization tables based on picture
+   // parameter quality.
+-  const JpegQuantizationTable& luminance = kDefaultQuantTable[0];
++  const JpegQuantizationTable luminance = kDefaultQuantTable[0];
+   static_assert(std::extent<decltype(luminance.value)>() ==
+                     std::extent<decltype(q_matrix->lum_quantiser_matrix)>(),
+                 "Luminance quantization table size mismatch.");
+@@ -62,7 +62,7 @@ void FillQMatrix(VAQMatrixBufferJPEG* q_
+     q_matrix->lum_quantiser_matrix[i] = luminance.value[kZigZag8x8[i]];
+   }
+ 
+-  const JpegQuantizationTable& chrominance = kDefaultQuantTable[1];
++  const JpegQuantizationTable chrominance = kDefaultQuantTable[1];
+   static_assert(std::extent<decltype(chrominance.value)>() ==
+                     std::extent<decltype(q_matrix->chroma_quantiser_matrix)>(),
+                 "Chrominance quantization table size mismatch.");
+--- a/content/public/test/test_browser_thread_bundle.h
++++ b/content/public/test/test_browser_thread_bundle.h
+@@ -175,7 +175,7 @@ class TestBrowserThreadBundle : public b
+     return *options == Options::REAL_IO_THREAD;
+   }
+ 
+-  constexpr bool HasIOMainLoop() const {
++  const bool HasIOMainLoop() const {
+     return main_thread_type() == MainThreadType::IO ||
+            main_thread_type() == MainThreadType::IO_MOCK_TIME;
+   }
+--- a/base/trace_event/trace_arguments.h
++++ b/base/trace_event/trace_arguments.h
+@@ -490,21 +490,21 @@ class BASE_EXPORT StringStorage {
+   void Reset(size_t alloc_size = 0);
+ 
+   // Accessors.
+-  constexpr size_t size() const { return data_ ? data_->size : 0u; }
+-  constexpr const char* data() const { return data_ ? data_->chars : nullptr; }
+-  constexpr char* data() { return data_ ? data_->chars : nullptr; }
++  size_t size() const { return data_ ? data_->size : 0u; }
++  const char* data() const { return data_ ? data_->chars : nullptr; }
++  char* data() { return data_ ? data_->chars : nullptr; }
+ 
+-  constexpr const char* begin() const { return data(); }
+-  constexpr const char* end() const { return data() + size(); }
++  const char* begin() const { return data(); }
++  const char* end() const { return data() + size(); }
+   inline char* begin() { return data(); }
+   inline char* end() { return data() + size(); }
+ 
+   // True iff storage is empty.
+-  constexpr bool empty() const { return size() == 0; }
++  bool empty() const { return size() == 0; }
+ 
+   // Returns true if |ptr| is inside the storage area, false otherwise.
+   // Used during unit-testing.
+-  constexpr bool Contains(const void* ptr) const {
++  bool Contains(const void* ptr) const {
+     const char* char_ptr = static_cast<const char*>(ptr);
+     return (char_ptr >= begin() && char_ptr < end());
+   }
+@@ -515,7 +515,7 @@ class BASE_EXPORT StringStorage {
+ 
+   // Return an estimate of the memory overhead of this instance. This doesn't
+   // count the size of |data_| itself.
+-  constexpr size_t EstimateTraceMemoryOverhead() const {
++  size_t EstimateTraceMemoryOverhead() const {
+     return data_ ? sizeof(size_t) + data_->size : 0u;
+   }
+ 
+--- a/content/public/browser/desktop_media_id.h
++++ b/content/public/browser/desktop_media_id.h
+@@ -37,16 +37,16 @@ struct CONTENT_EXPORT DesktopMediaID {
+   static gfx::NativeWindow GetNativeWindowById(const DesktopMediaID& id);
+ #endif  // USE_AURA
+ 
+-  constexpr DesktopMediaID() = default;
++  DesktopMediaID() = default;
+ 
+-  constexpr DesktopMediaID(Type type, Id id) : type(type), id(id) {}
++  DesktopMediaID(Type type, Id id) : type(type), id(id) {}
+ 
+-  constexpr DesktopMediaID(Type type,
++  DesktopMediaID(Type type,
+                            Id id,
+                            WebContentsMediaCaptureId web_contents_id)
+       : type(type), id(id), web_contents_id(web_contents_id) {}
+ 
+-  constexpr DesktopMediaID(Type type, Id id, bool audio_share)
++  DesktopMediaID(Type type, Id id, bool audio_share)
+       : type(type), id(id), audio_share(audio_share) {}
+ 
+   // Operators so that DesktopMediaID can be used with STL containers.
+--- a/base/containers/any_internal.h
++++ b/base/containers/any_internal.h
+@@ -45,7 +45,7 @@ class BASE_EXPORT AnyInternal {
+     type_ops_ = other.type_ops_;
+   }
+ 
+-  constexpr bool has_value() const noexcept { return !!type_ops_; }
++  const bool has_value() const noexcept { return !!type_ops_; }
+ 
+   TypeId type() const noexcept {
+     if (!type_ops_)
+@@ -160,7 +160,7 @@ class BASE_EXPORT AnyInternal {
+ 
+ // static
+ template <typename T>
+-const AnyInternal::TypeOps AnyInternal::TypeOpsHelper<T>::type_ops;
++constexpr AnyInternal::TypeOps AnyInternal::TypeOpsHelper<T>::type_ops;
+ 
+ template <typename T>
+ struct AnyInternal::ConstructHelper<T, /* UseInlineStorage */ true> {
diff --git a/quic.patch b/quic.patch
new file mode 100644
index 0000000..03b314b
--- /dev/null
+++ b/quic.patch
@@ -0,0 +1,154 @@
+description: fix gcc compile error with substreams_ initializer list
+author: Michael Gilbert <mgilbert@debian.org>
+
+--- a/net/third_party/quic/core/quic_crypto_stream.cc
++++ b/net/third_party/quic/core/quic_crypto_stream.cc
+@@ -28,9 +28,9 @@ QuicCryptoStream::QuicCryptoStream(QuicS
+                  session,
+                  /*is_static=*/true,
+                  BIDIRECTIONAL),
+-      substreams_{{this, ENCRYPTION_NONE},
+-                  {this, ENCRYPTION_ZERO_RTT},
+-                  {this, ENCRYPTION_FORWARD_SECURE}} {
++     substreams_{std::make_unique<CryptoSubstream>(this, ENCRYPTION_NONE),
++                 std::make_unique<CryptoSubstream>(this, ENCRYPTION_ZERO_RTT),
++                 std::make_unique<CryptoSubstream>(this, ENCRYPTION_FORWARD_SECURE)} {
+   // The crypto stream is exempt from connection level flow control.
+   DisableConnectionFlowControlForThisStream();
+ }
+@@ -57,7 +57,7 @@ void QuicCryptoStream::OnCryptoFrame(con
+   QUIC_BUG_IF(session()->connection()->transport_version() < QUIC_VERSION_47)
+       << "Versions less than 47 shouldn't receive CRYPTO frames";
+   EncryptionLevel level = session()->connection()->last_decrypted_level();
+-  substreams_[level].sequencer.OnCryptoFrame(frame);
++  substreams_[level]->sequencer.OnCryptoFrame(frame);
+ }
+ 
+ void QuicCryptoStream::OnStreamFrame(const QuicStreamFrame& frame) {
+@@ -79,7 +79,7 @@ void QuicCryptoStream::OnDataAvailable()
+     OnDataAvailableInSequencer(sequencer(), level);
+     return;
+   }
+-  OnDataAvailableInSequencer(&substreams_[level].sequencer, level);
++  OnDataAvailableInSequencer(&substreams_[level]->sequencer, level);
+ }
+ 
+ void QuicCryptoStream::OnDataAvailableInSequencer(
+@@ -133,7 +133,7 @@ void QuicCryptoStream::WriteCryptoData(E
+   }
+   // Append |data| to the send buffer for this encryption level.
+   struct iovec iov(QuicUtils::MakeIovec(data));
+-  QuicStreamSendBuffer* send_buffer = &substreams_[level].send_buffer;
++  QuicStreamSendBuffer* send_buffer = &substreams_[level]->send_buffer;
+   QuicStreamOffset offset = send_buffer->stream_offset();
+   send_buffer->SaveStreamData(&iov, /*iov_count=*/1, /*iov_offset=*/0,
+                               data.length());
+@@ -160,7 +160,7 @@ void QuicCryptoStream::OnSuccessfulVersi
+ bool QuicCryptoStream::OnCryptoFrameAcked(const QuicCryptoFrame& frame,
+                                           QuicTime::Delta ack_delay_time) {
+   QuicByteCount newly_acked_length = 0;
+-  if (!substreams_[frame.level].send_buffer.OnStreamDataAcked(
++  if (!substreams_[frame.level]->send_buffer.OnStreamDataAcked(
+           frame.offset, frame.data_length, &newly_acked_length)) {
+     CloseConnectionWithDetails(QUIC_INTERNAL_ERROR,
+                                "Trying to ack unsent crypto data.");
+@@ -178,7 +178,7 @@ void QuicCryptoStream::NeuterUnencrypted
+     }
+     return;
+   }
+-  QuicStreamSendBuffer* send_buffer = &substreams_[ENCRYPTION_NONE].send_buffer;
++  QuicStreamSendBuffer* send_buffer = &substreams_[ENCRYPTION_NONE]->send_buffer;
+   // TODO(nharper): Consider adding a Clear() method to QuicStreamSendBuffer to
+   // replace the following code.
+   QuicIntervalSet<QuicStreamOffset> to_ack = send_buffer->bytes_acked();
+@@ -207,7 +207,7 @@ bool QuicCryptoStream::HasPendingCryptoR
+   }
+   for (EncryptionLevel level :
+        {ENCRYPTION_NONE, ENCRYPTION_ZERO_RTT, ENCRYPTION_FORWARD_SECURE}) {
+-    if (substreams_[level].send_buffer.HasPendingRetransmission()) {
++    if (substreams_[level]->send_buffer.HasPendingRetransmission()) {
+       return true;
+     }
+   }
+@@ -221,7 +221,7 @@ void QuicCryptoStream::WritePendingCrypt
+       session()->connection()->encryption_level();
+   for (EncryptionLevel level :
+        {ENCRYPTION_NONE, ENCRYPTION_ZERO_RTT, ENCRYPTION_FORWARD_SECURE}) {
+-    QuicStreamSendBuffer* send_buffer = &substreams_[level].send_buffer;
++    QuicStreamSendBuffer* send_buffer = &substreams_[level]->send_buffer;
+     session()->connection()->SetDefaultEncryptionLevel(level);
+     while (send_buffer->HasPendingRetransmission()) {
+       auto pending = send_buffer->NextPendingRetransmission();
+@@ -326,13 +326,13 @@ uint64_t QuicCryptoStream::crypto_bytes_
+   if (session()->connection()->transport_version() < QUIC_VERSION_47) {
+     return stream_bytes_read();
+   }
+-  return substreams_[ENCRYPTION_NONE].sequencer.NumBytesConsumed() +
+-         substreams_[ENCRYPTION_ZERO_RTT].sequencer.NumBytesConsumed() +
+-         substreams_[ENCRYPTION_FORWARD_SECURE].sequencer.NumBytesConsumed();
++  return substreams_[ENCRYPTION_NONE]->sequencer.NumBytesConsumed() +
++         substreams_[ENCRYPTION_ZERO_RTT]->sequencer.NumBytesConsumed() +
++         substreams_[ENCRYPTION_FORWARD_SECURE]->sequencer.NumBytesConsumed();
+ }
+ 
+ uint64_t QuicCryptoStream::BytesReadOnLevel(EncryptionLevel level) const {
+-  return substreams_[level].sequencer.NumBytesConsumed();
++  return substreams_[level]->sequencer.NumBytesConsumed();
+ }
+ 
+ bool QuicCryptoStream::WriteCryptoFrame(EncryptionLevel level,
+@@ -341,14 +341,14 @@ bool QuicCryptoStream::WriteCryptoFrame(
+                                         QuicDataWriter* writer) {
+   QUIC_BUG_IF(session()->connection()->transport_version() < QUIC_VERSION_47)
+       << "Versions less than 47 don't write CRYPTO frames (2)";
+-  return substreams_[level].send_buffer.WriteStreamData(offset, data_length,
++  return substreams_[level]->send_buffer.WriteStreamData(offset, data_length,
+                                                         writer);
+ }
+ 
+ void QuicCryptoStream::OnCryptoFrameLost(QuicCryptoFrame* crypto_frame) {
+   QUIC_BUG_IF(session()->connection()->transport_version() < QUIC_VERSION_47)
+       << "Versions less than 47 don't lose CRYPTO frames";
+-  substreams_[crypto_frame->level].send_buffer.OnStreamDataLost(
++  substreams_[crypto_frame->level]->send_buffer.OnStreamDataLost(
+       crypto_frame->offset, crypto_frame->data_length);
+ }
+ 
+@@ -358,7 +358,7 @@ void QuicCryptoStream::RetransmitData(Qu
+   QuicIntervalSet<QuicStreamOffset> retransmission(
+       crypto_frame->offset, crypto_frame->offset + crypto_frame->data_length);
+   QuicStreamSendBuffer* send_buffer =
+-      &substreams_[crypto_frame->level].send_buffer;
++      &substreams_[crypto_frame->level]->send_buffer;
+   retransmission.Difference(send_buffer->bytes_acked());
+   if (retransmission.Empty()) {
+     return;
+@@ -389,7 +389,7 @@ bool QuicCryptoStream::IsFrameOutstandin
+     // the wrong transport version.
+     return false;
+   }
+-  return substreams_[level].send_buffer.IsStreamDataOutstanding(offset, length);
++  return substreams_[level]->send_buffer.IsStreamDataOutstanding(offset, length);
+ }
+ 
+ bool QuicCryptoStream::IsWaitingForAcks() const {
+@@ -398,7 +398,7 @@ bool QuicCryptoStream::IsWaitingForAcks(
+   }
+   for (EncryptionLevel level :
+        {ENCRYPTION_NONE, ENCRYPTION_ZERO_RTT, ENCRYPTION_FORWARD_SECURE}) {
+-    if (substreams_[level].send_buffer.stream_bytes_outstanding()) {
++    if (substreams_[level]->send_buffer.stream_bytes_outstanding()) {
+       return true;
+     }
+   }
+--- a/net/third_party/quic/core/quic_crypto_stream.h
++++ b/net/third_party/quic/core/quic_crypto_stream.h
+@@ -166,7 +166,7 @@ class QUIC_EXPORT_PRIVATE QuicCryptoStre
+ 
+   // Keeps state for data sent/received in CRYPTO frames at each encryption
+   // level.
+-  CryptoSubstream substreams_[NUM_ENCRYPTION_LEVELS];
++  std::unique_ptr<CryptoSubstream> substreams_[NUM_ENCRYPTION_LEVELS];
+ };
+ 
+ }  // namespace quic
diff --git a/trace_fix.patch b/trace_fix.patch
new file mode 100644
index 0000000..3e5f24a
--- /dev/null
+++ b/trace_fix.patch
@@ -0,0 +1,55 @@
+--- chromium-74.0.3729.108/chrome/browser/tracing/trace_event_system_stats_monitor.cc.orig	2019-04-29 23:28:08.069667734 +0100
++++ chromium-74.0.3729.108/chrome/browser/tracing/trace_event_system_stats_monitor.cc	2019-04-29 23:32:49.165649758 +0100
+@@ -84,8 +84,10 @@
+   is_profiling_ = true;
+   DCHECK(performance_monitor::SystemMonitor::Get());
+   performance_monitor::SystemMonitor::Get()->AddOrUpdateObserver(
+-      this, {.system_metrics_sampling_frequency =
+-                 SamplingFrequency::kDefaultFrequency});
++      this, {.free_phys_memory_mb_frequency = SamplingFrequency::kNoSampling,
++             .disk_idle_time_percent_frequency = SamplingFrequency::kNoSampling,
++             .system_metrics_sampling_frequency =
++                 SamplingFrequency::kDefaultFrequency });
+ }
+ 
+ void TraceEventSystemStatsMonitor::OnSystemMetricsStruct(
+--- chromium-74.0.3729.108/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc.orig	2019-04-30 20:59:43.952010258 +0100
++++ chromium-74.0.3729.108/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc	2019-04-30 21:04:19.495197612 +0100
+@@ -21,7 +21,10 @@
+     std::unique_ptr<base::MessagePump> message_pump,
+     base::Optional<base::Time> initial_virtual_time) {
+   auto settings = base::sequence_manager::SequenceManager::Settings{
+-      .randomised_sampling_enabled = true};
++      .message_loop_type = base::MessageLoop::Type::TYPE_DEFAULT,
++      .randomised_sampling_enabled = true,
++      .clock = base::DefaultTickClock::GetInstance()
++  };
+   auto sequence_manager =
+       message_pump
+           ? base::sequence_manager::
+--- chromium-74.0.3729.108/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.cc.orig	2019-04-30 22:38:11.355427414 +0100
++++ chromium-74.0.3729.108/third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.cc	2019-04-30 22:39:02.667424133 +0100
+@@ -28,7 +28,9 @@
+       thread_type,
+       base::sequence_manager::CreateSequenceManagerOnCurrentThread(
+           base::sequence_manager::SequenceManager::Settings{
+-              .randomised_sampling_enabled = true}),
++              .message_loop_type = base::MessageLoop::Type::TYPE_DEFAULT,
++              .randomised_sampling_enabled = true,
++              .clock = base::DefaultTickClock::GetInstance()}),
+       proxy);
+ }
+ 
+--- chromium-74.0.3729.108/third_party/blink/renderer/platform/scheduler/worker/compositor_thread.cc.orig	2019-04-30 22:48:34.180387586 +0100
++++ chromium-74.0.3729.108/third_party/blink/renderer/platform/scheduler/worker/compositor_thread.cc	2019-04-30 22:49:39.043383438 +0100
+@@ -20,7 +20,9 @@
+   return std::make_unique<CompositorThreadScheduler>(
+       base::sequence_manager::CreateSequenceManagerOnCurrentThread(
+           base::sequence_manager::SequenceManager::Settings{
+-              .randomised_sampling_enabled = true}));
++              .message_loop_type = base::MessageLoop::Type::TYPE_DEFAULT,
++              .randomised_sampling_enabled = true,
++              .clock = base::DefaultTickClock::GetInstance()}));
+ }
+ 
+ }  // namespace scheduler
Not Available

cris [@T] beebgames.comNo Comment.1806d 05hrs
cris [@T] beebgames.comNo Comment.1806d 05hrs