75.0.3770.80

This commit is contained in:
Tom Callaway 2019-06-10 14:36:48 -04:00
parent f4a1a5cfc0
commit 43b2c19f2e
19 changed files with 184 additions and 1154 deletions

1
.gitignore vendored
View File

@ -78,3 +78,4 @@
/chromium-73.0.3683.86-clean.tar.xz /chromium-73.0.3683.86-clean.tar.xz
/chromium-73.0.3683.103-clean.tar.xz /chromium-73.0.3683.103-clean.tar.xz
/chromium-74.0.3729.169-clean.tar.xz /chromium-74.0.3729.169-clean.tar.xz
/chromium-75.0.3770.80-clean.tar.xz

View File

@ -1,12 +0,0 @@
diff -up chromium-67.0.3396.99/build/util/version.py.py3fix chromium-67.0.3396.99/build/util/version.py
--- chromium-67.0.3396.99/build/util/version.py.py3fix 2018-07-11 11:39:14.728600503 -0400
+++ chromium-67.0.3396.99/build/util/version.py 2018-07-11 11:39:22.401406816 -0400
@@ -68,7 +68,7 @@ def subst_template(contents, values):
try:
contents = contents.replace('@' + key + '@', val)
except TypeError:
- print repr(key), repr(val)
+ print(repr(key), repr(val))
return contents

View File

@ -1,324 +0,0 @@
diff -up chromium-74.0.3729.169/base/values.cc.2f28731 chromium-74.0.3729.169/base/values.cc
--- chromium-74.0.3729.169/base/values.cc.2f28731 2019-05-31 15:03:32.200591044 -0400
+++ chromium-74.0.3729.169/base/values.cc 2019-05-31 15:13:39.546036829 -0400
@@ -12,6 +12,7 @@
#include <ostream>
#include <utility>
+#include "base/bit_cast.h"
#include "base/json/json_writer.h"
#include "base/logging.h"
#include "base/memory/ptr_util.h"
@@ -36,6 +37,9 @@ static_assert(std::is_standard_layout<Va
"base::Value should be a standard-layout C++ class in order "
"to avoid undefined behaviour in its implementation!");
+static_assert(sizeof(Value::DoubleStorage) == sizeof(double),
+ "The double and DoubleStorage types should have the same size");
+
namespace {
const char* const kTypeNames[] = {"null", "boolean", "integer", "double",
@@ -110,8 +114,6 @@ Value::Value(Value&& that) noexcept {
InternalMoveConstructFrom(std::move(that));
}
-Value::Value() noexcept : type_(Type::NONE) {}
-
Value::Value(Type type) : type_(type) {
// Initialize with the default value.
switch (type_) {
@@ -125,7 +127,7 @@ Value::Value(Type type) : type_(type) {
int_value_ = 0;
return;
case Type::DOUBLE:
- double_value_ = 0.0;
+ double_value_ = bit_cast<DoubleStorage>(0.0);
return;
case Type::STRING:
new (&string_value_) std::string();
@@ -149,21 +151,16 @@ Value::Value(Type type) : type_(type) {
CHECK(false);
}
-Value::Value(bool in_bool)
- : bool_type_(Type::BOOLEAN),
- bool_value_(in_bool) {}
-
-Value::Value(int in_int)
- : int_type_(Type::INTEGER),
- int_value_(in_int) {}
+Value::Value(bool in_bool) : type_(Type::BOOLEAN), bool_value_(in_bool) {}
+
+Value::Value(int in_int) : type_(Type::INTEGER), int_value_(in_int) {}
Value::Value(double in_double)
- : double_type_(Type::DOUBLE),
- double_value_(in_double) {
- if (!std::isfinite(double_value_)) {
+ : type_(Type::DOUBLE), double_value_(bit_cast<DoubleStorage>(in_double)) {
+ if (!std::isfinite(in_double)) {
NOTREACHED() << "Non-finite (i.e. NaN or positive/negative infinity) "
<< "values cannot be represented in JSON";
- double_value_ = 0.0;
+ double_value_ = bit_cast<DoubleStorage>(0.0);
}
}
@@ -172,8 +169,7 @@ Value::Value(const char* in_string) : Va
Value::Value(StringPiece in_string) : Value(std::string(in_string)) {}
Value::Value(std::string&& in_string) noexcept
- : string_type_(Type::STRING),
- string_value_(std::move(in_string)) {
+ : type_(Type::STRING), string_value_(std::move(in_string)) {
DCHECK(IsStringUTF8(string_value_));
}
@@ -182,19 +178,15 @@ Value::Value(const char16* in_string16)
Value::Value(StringPiece16 in_string16) : Value(UTF16ToUTF8(in_string16)) {}
Value::Value(const std::vector<char>& in_blob)
- : binary_type_(Type::BINARY),
- binary_value_(in_blob.begin(), in_blob.end()) {}
+ : type_(Type::BINARY), binary_value_(in_blob.begin(), in_blob.end()) {}
Value::Value(base::span<const uint8_t> in_blob)
- : binary_type_(Type::BINARY),
- binary_value_(in_blob.begin(), in_blob.end()) {}
+ : type_(Type::BINARY), binary_value_(in_blob.begin(), in_blob.end()) {}
Value::Value(BlobStorage&& in_blob) noexcept
- : binary_type_(Type::BINARY),
- binary_value_(std::move(in_blob)) {}
+ : type_(Type::BINARY), binary_value_(std::move(in_blob)) {}
-Value::Value(const DictStorage& in_dict)
- : dict_type_(Type::DICTIONARY), dict_() {
+Value::Value(const DictStorage& in_dict) : type_(Type::DICTIONARY), dict_() {
dict_.reserve(in_dict.size());
for (const auto& it : in_dict) {
dict_.try_emplace(dict_.end(), it.first,
@@ -203,18 +195,16 @@ Value::Value(const DictStorage& in_dict)
}
Value::Value(DictStorage&& in_dict) noexcept
- : dict_type_(Type::DICTIONARY),
- dict_(std::move(in_dict)) {}
+ : type_(Type::DICTIONARY), dict_(std::move(in_dict)) {}
-Value::Value(const ListStorage& in_list) : list_type_(Type::LIST), list_() {
+Value::Value(const ListStorage& in_list) : type_(Type::LIST), list_() {
list_.reserve(in_list.size());
for (const auto& val : in_list)
list_.emplace_back(val.Clone());
}
Value::Value(ListStorage&& in_list) noexcept
- : list_type_(Type::LIST),
- list_(std::move(in_list)) {}
+ : type_(Type::LIST), list_(std::move(in_list)) {}
Value& Value::operator=(Value&& that) noexcept {
InternalCleanup();
@@ -223,6 +213,10 @@ Value& Value::operator=(Value&& that) no
return *this;
}
+double Value::AsDoubleInternal() const {
+ return bit_cast<double>(double_value_);
+}
+
Value Value::Clone() const {
switch (type_) {
case Type::NONE:
@@ -232,7 +226,7 @@ Value Value::Clone() const {
case Type::INTEGER:
return Value(int_value_);
case Type::DOUBLE:
- return Value(double_value_);
+ return Value(AsDoubleInternal());
case Type::STRING:
return Value(string_value_);
case Type::BINARY:
@@ -277,7 +271,7 @@ int Value::GetInt() const {
double Value::GetDouble() const {
if (is_double())
- return double_value_;
+ return AsDoubleInternal();
if (is_int())
return int_value_;
CHECK(false);
@@ -342,9 +336,10 @@ base::Optional<double> Value::FindDouble
const Value* result = FindKey(key);
if (result) {
if (result->is_int())
- return base::make_optional(static_cast<double>(result->int_value_));
- if (result->is_double())
- return base::make_optional(result->double_value_);
+ return static_cast<double>(result->int_value_);
+ if (result->is_double()) {
+ return result->AsDoubleInternal();
+ }
}
return base::nullopt;
}
@@ -548,7 +543,7 @@ bool Value::GetAsInteger(int* out_value)
bool Value::GetAsDouble(double* out_value) const {
if (out_value && is_double()) {
- *out_value = double_value_;
+ *out_value = AsDoubleInternal();
return true;
}
if (out_value && is_int()) {
@@ -643,7 +638,7 @@ bool operator==(const Value& lhs, const
case Value::Type::INTEGER:
return lhs.int_value_ == rhs.int_value_;
case Value::Type::DOUBLE:
- return lhs.double_value_ == rhs.double_value_;
+ return lhs.AsDoubleInternal() == rhs.AsDoubleInternal();
case Value::Type::STRING:
return lhs.string_value_ == rhs.string_value_;
case Value::Type::BINARY:
@@ -688,7 +683,7 @@ bool operator<(const Value& lhs, const V
case Value::Type::INTEGER:
return lhs.int_value_ < rhs.int_value_;
case Value::Type::DOUBLE:
- return lhs.double_value_ < rhs.double_value_;
+ return lhs.AsDoubleInternal() < rhs.AsDoubleInternal();
case Value::Type::STRING:
return lhs.string_value_ < rhs.string_value_;
case Value::Type::BINARY:
diff -up chromium-74.0.3729.169/base/values.h.2f28731 chromium-74.0.3729.169/base/values.h
--- chromium-74.0.3729.169/base/values.h.2f28731 2019-05-31 15:13:48.418868163 -0400
+++ chromium-74.0.3729.169/base/values.h 2019-05-31 15:17:06.015112057 -0400
@@ -77,12 +77,13 @@ class Value;
// base::Value dict(base::Value::Type::DICTIONARY);
// dict.SetKey("mykey", base::Value(foo));
// return dict;
-// }
class BASE_EXPORT Value {
public:
using BlobStorage = std::vector<uint8_t>;
using DictStorage = flat_map<std::string, std::unique_ptr<Value>>;
using ListStorage = std::vector<Value>;
+ // See technical note below explaining why this is used.
+ using DoubleStorage = struct { alignas(4) char v[sizeof(double)]; };
enum class Type : unsigned char {
NONE = 0,
@@ -111,7 +112,10 @@ class BASE_EXPORT Value {
static std::unique_ptr<Value> ToUniquePtrValue(Value val);
Value(Value&& that) noexcept;
- Value() noexcept; // A null value.
+ Value() noexcept {} // A null value
+ // Fun fact: using '= default' above instead of '{}' does not work because
+ // the compiler complains that the default constructor was deleted since
+ // the inner union contains fields with non-default constructors.
// Value's copy constructor and copy assignment operator are deleted. Use this
// to obtain a deep copy explicitly.
@@ -379,82 +383,29 @@ class BASE_EXPORT Value {
size_t EstimateMemoryUsage() const;
protected:
- // 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_| 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).
+ // Special case for doubles, which are aligned to 8 bytes on some
+ // 32-bit architectures. In this case, a simple declaration as a
+ // double member would make the whole union 8 byte-aligned, which
+ // would also force 4 bytes of wasted padding space before it in
+ // the Value layout.
+ //
+ // To override this, store the value as an array of 32-bit integers, and
+ // perform the appropriate bit casts when reading / writing to it.
+ Type type_ = Type::NONE;
+
union {
- struct {
- // TODO(crbug.com/646113): Make these private once DictionaryValue and
- // ListValue are properly inlined.
- Type type_ : 8;
- };
- struct {
- Type bool_type_ : 8;
- bool bool_value_;
- };
- struct {
- Type int_type_ : 8;
- int int_value_;
- };
- struct {
- Type double_type_ : 8;
- // 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;
- std::string string_value_;
- };
- struct {
- Type binary_type_ : 8;
- BlobStorage binary_value_;
- };
- struct {
- Type dict_type_ : 8;
- DictStorage dict_;
- };
- struct {
- Type list_type_ : 8;
- ListStorage list_;
- };
+ bool bool_value_;
+ int int_value_;
+ DoubleStorage double_value_;
+ std::string string_value_;
+ BlobStorage binary_value_;
+ DictStorage dict_;
+ ListStorage list_;
};
private:
friend class ValuesTest_SizeOfValue_Test;
+ double AsDoubleInternal() const;
void InternalMoveConstructFrom(Value&& that);
void InternalCleanup();

View File

@ -1,12 +0,0 @@
diff -up chromium-74.0.3729.169/base/values.h.gentoo3 chromium-74.0.3729.169/base/values.h
--- chromium-74.0.3729.169/base/values.h.gentoo3 2019-05-31 14:02:13.019800039 -0400
+++ chromium-74.0.3729.169/base/values.h 2019-05-31 14:02:32.531380130 -0400
@@ -84,7 +84,7 @@ class BASE_EXPORT Value {
using DictStorage = flat_map<std::string, std::unique_ptr<Value>>;
using ListStorage = std::vector<Value>;
- enum class Type {
+ enum class Type : unsigned char {
NONE = 0,
BOOLEAN,
INTEGER,

View File

@ -1,75 +0,0 @@
From c2c467f69fc00d353879d7add5f2c04a6acabbb1 Mon Sep 17 00:00:00 2001
From: David 'Digit' Turner <digit@google.com>
Date: Wed, 20 Mar 2019 21:41:09 +0000
Subject: [PATCH] base: Value::FindDoubleKey() converts integers to doubles
Ensure that FindDoubleKey() can return the value of an
INTEGER key as a double. This is consistent with the behaviour
of Value::GetDouble() which will auto-convert INTEGER values
to doubles.
BUG=646113
R=dcheng@chromium.org,jdoerrie@chromium.org,sdefresne@chromium.org,hidehiko@chromium.org
Change-Id: I2c08cb91b6cfd5db268a182ffffe16682d848008
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1529017
Reviewed-by: Sylvain Defresne <sdefresne@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: David Turner <digit@chromium.org>
Cr-Commit-Position: refs/heads/master@{#642680}
---
base/values.cc | 10 ++++++++--
base/values.h | 2 ++
base/values_unittest.cc | 2 +-
3 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/base/values.cc b/base/values.cc
index 035aa2350cde..69d66ff8ab00 100644
--- a/base/values.cc
+++ b/base/values.cc
@@ -339,8 +339,14 @@ base::Optional<int> Value::FindIntKey(StringPiece key) const {
}
base::Optional<double> Value::FindDoubleKey(StringPiece key) const {
- const Value* result = FindKeyOfType(key, Type::DOUBLE);
- return result ? base::make_optional(result->double_value_) : base::nullopt;
+ const Value* result = FindKey(key);
+ if (result) {
+ if (result->is_int())
+ return base::make_optional(static_cast<double>(result->int_value_));
+ if (result->is_double())
+ return base::make_optional(result->double_value_);
+ }
+ return base::nullopt;
}
const std::string* Value::FindStringKey(StringPiece key) const {
diff --git a/base/values.h b/base/values.h
index e31cadd83102..6f2cd3cc3d79 100644
--- a/base/values.h
+++ b/base/values.h
@@ -200,6 +200,8 @@ class BASE_EXPORT Value {
// function's name.
base::Optional<bool> FindBoolKey(StringPiece key) const;
base::Optional<int> FindIntKey(StringPiece key) const;
+ // Note FindDoubleKey() will auto-convert INTEGER keys to their double
+ // value, for consistency with GetDouble().
base::Optional<double> FindDoubleKey(StringPiece key) const;
// |FindStringKey| returns |nullptr| if value is not found or not a string.
diff --git a/base/values_unittest.cc b/base/values_unittest.cc
index b23fd8332491..7c545c09d947 100644
--- a/base/values_unittest.cc
+++ b/base/values_unittest.cc
@@ -674,7 +674,7 @@ TEST(ValuesTest, FindDoubleKey) {
const Value dict(std::move(storage));
EXPECT_EQ(base::nullopt, dict.FindDoubleKey("null"));
EXPECT_EQ(base::nullopt, dict.FindDoubleKey("bool"));
- EXPECT_EQ(base::nullopt, dict.FindDoubleKey("int"));
+ EXPECT_NE(base::nullopt, dict.FindDoubleKey("int"));
EXPECT_NE(base::nullopt, dict.FindDoubleKey("double"));
EXPECT_EQ(base::nullopt, dict.FindDoubleKey("string"));
EXPECT_EQ(base::nullopt, dict.FindDoubleKey("blob"));
--
2.21.0

View File

@ -1,587 +0,0 @@
From e1b1f3a5f273c8da533fad495b9de316e2c83c9b Mon Sep 17 00:00:00 2001
From: jdoerrie <jdoerrie@chromium.org>
Date: Sat, 16 Mar 2019 04:08:01 +0000
Subject: [PATCH] [base] Add Dead Type to base::Value
This change adds a temporary DEAD type to base::Value which should help
to track down use-after-free bugs. Furthermore, this change also removes
the now unneeded is_alive_ flag.
Bug: 859477, 941404
Change-Id: I9b7a2f3cbb0b22d7e3ed35b2453537419f3f7e55
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1478897
Reviewed-by: Pavol Marko <pmarko@chromium.org>
Reviewed-by: Tao Bai <michaelbai@chromium.org>
Reviewed-by: Thomas Anderson <thomasanderson@chromium.org>
Reviewed-by: Mike Pinkerton <pinkerton@chromium.org>
Reviewed-by: Bill Budge <bbudge@chromium.org>
Reviewed-by: Ken Rockot <rockot@google.com>
Reviewed-by: Steven Bennetts <stevenjb@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: David Turner <digit@chromium.org>
Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#641404}
---
base/json/json_writer.cc | 5 ++
base/values.cc | 68 ++++++++++++-------
base/values.h | 23 ++-----
base/values_unittest.cc | 10 ++-
.../ui/cocoa/applescript/apple_event_util.mm | 10 +++
chromeos/network/onc/variable_expander.cc | 6 ++
.../core/browser/android/policy_converter.cc | 11 ++-
.../core/common/policy_loader_win_unittest.cc | 8 ++-
.../policy/core/common/policy_test_utils.cc | 5 ++
.../policy/core/common/registry_dict.cc | 4 ++
.../gin_java_script_to_java_types_coercion.cc | 8 ++-
ipc/ipc_message_utils.cc | 11 ++-
mojo/public/cpp/base/values_mojom_traits.h | 7 +-
.../ppb_x509_certificate_private_shared.cc | 2 +
14 files changed, 127 insertions(+), 51 deletions(-)
diff --git a/base/json/json_writer.cc b/base/json/json_writer.cc
index 376a459f9a46..cd020e7fa0c0 100644
--- a/base/json/json_writer.cc
+++ b/base/json/json_writer.cc
@@ -179,6 +179,11 @@ bool JSONWriter::BuildJSONString(const Value& node, size_t depth) {
// Successful only if we're allowed to omit it.
DLOG_IF(ERROR, !omit_binary_values_) << "Cannot serialize binary value.";
return omit_binary_values_;
+
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case Value::Type::DEAD:
+ CHECK(false);
+ return false;
}
// TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
diff --git a/base/values.cc b/base/values.cc
index 0c002551b317..035aa2350cde 100644
--- a/base/values.cc
+++ b/base/values.cc
@@ -90,8 +90,6 @@ std::unique_ptr<Value> CopyWithoutEmptyChildren(const Value& node) {
} // namespace
-constexpr uint16_t Value::kMagicIsAlive;
-
// static
std::unique_ptr<Value> Value::CreateWithCopiedBuffer(const char* buffer,
size_t size) {
@@ -112,9 +110,9 @@ Value::Value(Value&& that) noexcept {
InternalMoveConstructFrom(std::move(that));
}
-Value::Value() noexcept : type_(Type::NONE), is_alive_(kMagicIsAlive) {}
+Value::Value() noexcept : type_(Type::NONE) {}
-Value::Value(Type type) : type_(type), is_alive_(kMagicIsAlive) {
+Value::Value(Type type) : type_(type) {
// Initialize with the default value.
switch (type_) {
case Type::NONE:
@@ -141,22 +139,26 @@ Value::Value(Type type) : type_(type), is_alive_(kMagicIsAlive) {
case Type::LIST:
new (&list_) ListStorage();
return;
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case Type::DEAD:
+ CHECK(false);
+ return;
}
+
+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
+ CHECK(false);
}
Value::Value(bool in_bool)
: bool_type_(Type::BOOLEAN),
- bool_is_alive_(kMagicIsAlive),
bool_value_(in_bool) {}
Value::Value(int in_int)
: int_type_(Type::INTEGER),
- int_is_alive_(kMagicIsAlive),
int_value_(in_int) {}
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) "
@@ -171,7 +173,6 @@ Value::Value(StringPiece in_string) : Value(std::string(in_string)) {}
Value::Value(std::string&& in_string) noexcept
: string_type_(Type::STRING),
- string_is_alive_(kMagicIsAlive),
string_value_(std::move(in_string)) {
DCHECK(IsStringUTF8(string_value_));
}
@@ -182,21 +183,18 @@ Value::Value(StringPiece16 in_string16) : Value(UTF16ToUTF8(in_string16)) {}
Value::Value(const std::vector<char>& in_blob)
: 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)
: binary_type_(Type::BINARY),
- binary_is_alive_(kMagicIsAlive),
binary_value_(in_blob.begin(), in_blob.end()) {}
Value::Value(BlobStorage&& in_blob) noexcept
: binary_type_(Type::BINARY),
- binary_is_alive_(kMagicIsAlive),
binary_value_(std::move(in_blob)) {}
Value::Value(const DictStorage& in_dict)
- : dict_type_(Type::DICTIONARY), dict_is_alive_(kMagicIsAlive), dict_() {
+ : dict_type_(Type::DICTIONARY), dict_() {
dict_.reserve(in_dict.size());
for (const auto& it : in_dict) {
dict_.try_emplace(dict_.end(), it.first,
@@ -206,11 +204,9 @@ Value::Value(const DictStorage& in_dict)
Value::Value(DictStorage&& in_dict) noexcept
: dict_type_(Type::DICTIONARY),
- dict_is_alive_(kMagicIsAlive),
dict_(std::move(in_dict)) {}
-Value::Value(const ListStorage& in_list)
- : list_type_(Type::LIST), list_is_alive_(kMagicIsAlive), list_() {
+Value::Value(const ListStorage& in_list) : list_type_(Type::LIST), list_() {
list_.reserve(in_list.size());
for (const auto& val : in_list)
list_.emplace_back(val.Clone());
@@ -218,7 +214,6 @@ Value::Value(const ListStorage& in_list)
Value::Value(ListStorage&& in_list) noexcept
: list_type_(Type::LIST),
- list_is_alive_(kMagicIsAlive),
list_(std::move(in_list)) {}
Value& Value::operator=(Value&& that) noexcept {
@@ -246,15 +241,21 @@ Value Value::Clone() const {
return Value(dict_);
case Type::LIST:
return Value(list_);
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case Type::DEAD:
+ CHECK(false);
+ return Value();
}
- NOTREACHED();
+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
+ CHECK(false);
return Value();
}
Value::~Value() {
InternalCleanup();
- is_alive_ = 0;
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ type_ = Type::DEAD;
}
// static
@@ -654,9 +655,14 @@ bool operator==(const Value& lhs, const Value& rhs) {
});
case Value::Type::LIST:
return lhs.list_ == rhs.list_;
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case Value::Type::DEAD:
+ CHECK(false);
+ return false;
}
- NOTREACHED();
+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
+ CHECK(false);
return false;
}
@@ -693,9 +699,14 @@ bool operator<(const Value& lhs, const Value& rhs) {
});
case Value::Type::LIST:
return lhs.list_ < rhs.list_;
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case Value::Type::DEAD:
+ CHECK(false);
+ return false;
}
- NOTREACHED();
+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
+ CHECK(false);
return false;
}
@@ -733,7 +744,6 @@ size_t Value::EstimateMemoryUsage() const {
void Value::InternalMoveConstructFrom(Value&& that) {
type_ = that.type_;
- is_alive_ = that.is_alive_;
switch (type_) {
case Type::NONE:
@@ -759,12 +769,17 @@ void Value::InternalMoveConstructFrom(Value&& that) {
case Type::LIST:
new (&list_) ListStorage(std::move(that.list_));
return;
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case Type::DEAD:
+ CHECK(false);
+ return;
}
+
+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
+ CHECK(false);
}
void Value::InternalCleanup() {
- CHECK_EQ(is_alive_, kMagicIsAlive);
-
switch (type_) {
case Type::NONE:
case Type::BOOLEAN:
@@ -785,7 +800,14 @@ void Value::InternalCleanup() {
case Type::LIST:
list_.~ListStorage();
return;
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case Type::DEAD:
+ CHECK(false);
+ return;
}
+
+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
+ CHECK(false);
}
///////////////////// DictionaryValue ////////////////////
diff --git a/base/values.h b/base/values.h
index 429ef1dfdebd..e31cadd83102 100644
--- a/base/values.h
+++ b/base/values.h
@@ -92,7 +92,9 @@ class BASE_EXPORT Value {
STRING,
BINARY,
DICTIONARY,
- LIST
+ LIST,
+ // TODO(crbug.com/859477): Remove once root cause is found.
+ DEAD
// Note: Do not add more types. See the file-level comment above for why.
};
@@ -375,10 +377,6 @@ class BASE_EXPORT Value {
size_t EstimateMemoryUsage() const;
protected:
- // 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
@@ -408,8 +406,8 @@ class BASE_EXPORT Value {
// 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.
+ // Each struct must declare its own |type_| 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,
@@ -419,24 +417,17 @@ class BASE_EXPORT Value {
// 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.
@@ -444,22 +435,18 @@ class BASE_EXPORT 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_;
};
};
diff --git a/base/values_unittest.cc b/base/values_unittest.cc
index 0a641bcc7ef4..b23fd8332491 100644
--- a/base/values_unittest.cc
+++ b/base/values_unittest.cc
@@ -20,17 +20,20 @@
#include "base/strings/string16.h"
#include "base/strings/string_piece.h"
#include "base/strings/utf_string_conversions.h"
+#include "build/build_config.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace base {
+// Test is currently incorrect on Windows x86.
+#if !defined(OS_WIN) || !defined(ARCH_CPU_X86)
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.
+ // Distinguish between the 'header' that includes |type_| and 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_) \
@@ -61,6 +64,7 @@ TEST(ValuesTest, SizeOfValue) {
LOG(INFO) << "max_inner_struct_limit=" << max_inner_struct_limit;
}
}
+#endif
TEST(ValuesTest, TestNothrow) {
static_assert(std::is_nothrow_move_constructible<Value>::value,
diff --git a/chrome/browser/ui/cocoa/applescript/apple_event_util.mm b/chrome/browser/ui/cocoa/applescript/apple_event_util.mm
index 16d685607ced..25a59338ee73 100644
--- a/chrome/browser/ui/cocoa/applescript/apple_event_util.mm
+++ b/chrome/browser/ui/cocoa/applescript/apple_event_util.mm
@@ -96,6 +96,16 @@ NSAppleEventDescriptor* ValueToAppleEventDescriptor(const base::Value* value) {
}
break;
}
+
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case base::Value::Type::DEAD:
+ CHECK(false);
+ break;
+
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ default:
+ CHECK(false);
+ break;
}
return descriptor;
diff --git a/chromeos/network/onc/variable_expander.cc b/chromeos/network/onc/variable_expander.cc
index fd72752c2aa6..cd5bbb238eb3 100644
--- a/chromeos/network/onc/variable_expander.cc
+++ b/chromeos/network/onc/variable_expander.cc
@@ -145,6 +145,12 @@ bool VariableExpander::ExpandValue(base::Value* value) const {
// Nothing to do here.
break;
}
+
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case base::Value::Type::DEAD: {
+ CHECK(false);
+ break;
+ }
}
return no_error;
}
diff --git a/components/policy/core/browser/android/policy_converter.cc b/components/policy/core/browser/android/policy_converter.cc
index b711a64febc9..9d41ad0d1507 100644
--- a/components/policy/core/browser/android/policy_converter.cc
+++ b/components/policy/core/browser/android/policy_converter.cc
@@ -175,10 +175,17 @@ std::unique_ptr<base::Value> PolicyConverter::ConvertValueToSchema(
}
return value;
}
+
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case base::Value::Type::DEAD: {
+ CHECK(false);
+ return nullptr;
+ }
}
- NOTREACHED();
- return std::unique_ptr<base::Value>();
+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
+ CHECK(false);
+ return nullptr;
}
void PolicyConverter::SetPolicyValue(const std::string& key,
diff --git a/components/policy/core/common/policy_loader_win_unittest.cc b/components/policy/core/common/policy_loader_win_unittest.cc
index 311e7fb122fc..0377307c5e28 100644
--- a/components/policy/core/common/policy_loader_win_unittest.cc
+++ b/components/policy/core/common/policy_loader_win_unittest.cc
@@ -133,8 +133,14 @@ bool InstallValue(const base::Value& value,
case base::Value::Type::BINARY:
return false;
+
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case base::Value::Type::DEAD:
+ CHECK(false);
+ return false;
}
- NOTREACHED();
+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
+ CHECK(false);
return false;
}
diff --git a/components/policy/core/common/policy_test_utils.cc b/components/policy/core/common/policy_test_utils.cc
index 5af98b47275c..919f004153ec 100644
--- a/components/policy/core/common/policy_test_utils.cc
+++ b/components/policy/core/common/policy_test_utils.cc
@@ -137,6 +137,11 @@ CFPropertyListRef ValueToProperty(const base::Value& value) {
// because there's no equivalent JSON type, and policy values can only
// take valid JSON values.
break;
+
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case base::Value::Type::DEAD:
+ CHECK(false);
+ break;
}
return NULL;
diff --git a/components/policy/core/common/registry_dict.cc b/components/policy/core/common/registry_dict.cc
index f3ed372bdcb3..696ba7e04abe 100644
--- a/components/policy/core/common/registry_dict.cc
+++ b/components/policy/core/common/registry_dict.cc
@@ -135,6 +135,10 @@ std::unique_ptr<base::Value> ConvertRegistryValue(const base::Value& value,
case base::Value::Type::BINARY:
// No conversion possible.
break;
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case base::Value::Type::DEAD:
+ CHECK(false);
+ return nullptr;
}
LOG(WARNING) << "Failed to convert " << value.type() << " to "
diff --git a/content/browser/android/java/gin_java_script_to_java_types_coercion.cc b/content/browser/android/java/gin_java_script_to_java_types_coercion.cc
index dabd66ba8c72..84fd5489a414 100644
--- a/content/browser/android/java/gin_java_script_to_java_types_coercion.cc
+++ b/content/browser/android/java/gin_java_script_to_java_types_coercion.cc
@@ -722,8 +722,14 @@ jvalue CoerceJavaScriptValueToJavaValue(JNIEnv* env,
case base::Value::Type::BINARY:
return CoerceGinJavaBridgeValueToJavaValue(
env, value, target_type, coerce_to_string, object_refs, error);
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case base::Value::Type::DEAD:
+ CHECK(false);
+ return jvalue();
}
- NOTREACHED();
+
+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
+ CHECK(false);
return jvalue();
}
diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc
index ec04c77c6c18..df6ec39bd663 100644
--- a/ipc/ipc_message_utils.cc
+++ b/ipc/ipc_message_utils.cc
@@ -92,7 +92,7 @@ void WriteValue(base::Pickle* m, const base::Value* value, int recursion) {
switch (value->type()) {
case base::Value::Type::NONE:
- break;
+ break;
case base::Value::Type::BOOLEAN: {
bool val;
result = value->GetAsBoolean(&val);
@@ -147,6 +147,11 @@ void WriteValue(base::Pickle* m, const base::Value* value, int recursion) {
}
break;
}
+
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ default:
+ CHECK(false);
+ break;
}
}
@@ -260,7 +265,9 @@ bool ReadValue(const base::Pickle* m,
break;
}
default:
- return false;
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ CHECK(false);
+ return false;
}
return true;
diff --git a/mojo/public/cpp/base/values_mojom_traits.h b/mojo/public/cpp/base/values_mojom_traits.h
index cdb9bbbd94df..66752b7c90d8 100644
--- a/mojo/public/cpp/base/values_mojom_traits.h
+++ b/mojo/public/cpp/base/values_mojom_traits.h
@@ -86,8 +86,13 @@ struct COMPONENT_EXPORT(MOJO_BASE_SHARED_TRAITS)
return mojo_base::mojom::ValueDataView::Tag::DICTIONARY_VALUE;
case base::Value::Type::LIST:
return mojo_base::mojom::ValueDataView::Tag::LIST_VALUE;
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case base::Value::Type::DEAD:
+ CHECK(false);
+ return mojo_base::mojom::ValueDataView::Tag::NULL_VALUE;
}
- NOTREACHED();
+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
+ CHECK(false);
return mojo_base::mojom::ValueDataView::Tag::NULL_VALUE;
}
diff --git a/ppapi/shared_impl/private/ppb_x509_certificate_private_shared.cc b/ppapi/shared_impl/private/ppb_x509_certificate_private_shared.cc
index 6ffff36337e0..7f392d50f718 100644
--- a/ppapi/shared_impl/private/ppb_x509_certificate_private_shared.cc
+++ b/ppapi/shared_impl/private/ppb_x509_certificate_private_shared.cc
@@ -73,6 +73,8 @@ PP_Var PPB_X509Certificate_Fields::GetFieldAsPPVar(
}
case base::Value::Type::DICTIONARY:
case base::Value::Type::LIST:
+ // TODO(crbug.com/859477): Remove after root cause is found.
+ case base::Value::Type::DEAD:
// Not handled.
break;
}
--
2.21.0

View File

@ -1,50 +0,0 @@
diff -up chromium-74.0.3729.169/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc.glibc229 chromium-74.0.3729.169/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
--- chromium-74.0.3729.169/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc.glibc229 2019-05-31 13:45:04.165403187 -0400
+++ chromium-74.0.3729.169/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc 2019-05-31 13:45:38.200830150 -0400
@@ -162,6 +162,15 @@ ResultExpr EvaluateSyscallImpl(int fs_de
}
#endif
+#if defined(__NR_vfork)
+ // vfork() is almost never used as a system call, but some libc versions (e.g.
+ // older versions of bionic) might use it in a posix_spawn() implementation,
+ // which is used by system();
+ if (sysno == __NR_vfork) {
+ return Error(EPERM);
+ }
+#endif
+
if (sysno == __NR_futex)
return RestrictFutex();
diff -up chromium-74.0.3729.169/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc.glibc229 chromium-74.0.3729.169/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
--- chromium-74.0.3729.169/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc.glibc229 2019-05-31 13:45:54.653553140 -0400
+++ chromium-74.0.3729.169/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc 2019-05-31 13:47:19.357675791 -0400
@@ -134,7 +134,8 @@ namespace sandbox {
#if !defined(OS_NACL_NONSFI)
// Allow Glibc's and Android pthread creation flags, crash on any other
// thread creation attempts and EPERM attempts to use neither
-// CLONE_VM, nor CLONE_THREAD, which includes all fork() implementations.
+// CLONE_VM nor CLONE_THREAD (all fork implementations), unless CLONE_VFORK is
+// present (as in newer versions of posix_spawn).
ResultExpr RestrictCloneToThreadsAndEPERMFork() {
const Arg<unsigned long> flags(0);
@@ -153,8 +154,16 @@ ResultExpr RestrictCloneToThreadsAndEPER
AnyOf(flags == kAndroidCloneMask, flags == kObsoleteAndroidCloneMask,
flags == kGlibcPthreadFlags);
+ // The following two flags are the two important flags in any vfork-emulating
+ // clone call. EPERM any clone call that contains both of them.
+ const uint64_t kImportantCloneVforkFlags = CLONE_VFORK | CLONE_VM;
+
+ const BoolExpr is_fork_or_clone_vfork =
+ AnyOf((flags & (CLONE_VM | CLONE_THREAD)) == 0,
+ (flags & kImportantCloneVforkFlags) == kImportantCloneVforkFlags);
+
return If(IsAndroid() ? android_test : glibc_test, Allow())
- .ElseIf((flags & (CLONE_VM | CLONE_THREAD)) == 0, Error(EPERM))
+ .ElseIf(is_fork_or_clone_vfork, Error(EPERM))
.Else(CrashSIGSYSClone());
}

View File

@ -0,0 +1,15 @@
diff -up chromium-75.0.3770.80/third_party/webrtc/rtc_base/physical_socket_server.h.SIOCGSTAMP chromium-75.0.3770.80/third_party/webrtc/rtc_base/physical_socket_server.h
--- chromium-75.0.3770.80/third_party/webrtc/rtc_base/physical_socket_server.h.SIOCGSTAMP 2019-06-06 10:04:57.050403639 -0400
+++ chromium-75.0.3770.80/third_party/webrtc/rtc_base/physical_socket_server.h 2019-06-06 10:06:03.975121688 -0400
@@ -16,6 +16,11 @@
#define WEBRTC_USE_EPOLL 1
#endif
+// for SIOCGSTAMP in Linux 5.2
+#if defined(WEBRTC_LINUX)
+#include <linux/sockios.h>
+#endif
+
#include <memory>
#include <set>
#include <vector>

View File

@ -0,0 +1,14 @@
diff -up chromium-75.0.3770.80/cc/scheduler/compositor_frame_reporting_controller.cc.gcc-dcheck_ne-fix chromium-75.0.3770.80/cc/scheduler/compositor_frame_reporting_controller.cc
--- chromium-75.0.3770.80/cc/scheduler/compositor_frame_reporting_controller.cc.gcc-dcheck_ne-fix 2019-06-06 12:42:27.431575032 -0400
+++ chromium-75.0.3770.80/cc/scheduler/compositor_frame_reporting_controller.cc 2019-06-06 12:43:05.692848409 -0400
@@ -31,8 +31,8 @@ void CompositorFrameReportingController:
void CompositorFrameReportingController::WillBeginMainFrame() {
DCHECK(reporters_[PipelineStage::kBeginImplFrame]);
- DCHECK_NE(reporters_[PipelineStage::kBeginMainFrame],
- reporters_[PipelineStage::kBeginImplFrame]);
+ DCHECK(reporters_[PipelineStage::kBeginMainFrame] !=
+ reporters_[PipelineStage::kBeginImplFrame]);
reporters_[PipelineStage::kBeginImplFrame]->StartStage(
"SendBeginMainFrameToCommit");
AdvanceReporterStage(PipelineStage::kBeginImplFrame,

View File

@ -0,0 +1,21 @@
diff -up chromium-75.0.3770.80/third_party/angle/src/common/debug.h.gcc-assume chromium-75.0.3770.80/third_party/angle/src/common/debug.h
--- chromium-75.0.3770.80/third_party/angle/src/common/debug.h.gcc-assume 2019-06-06 17:38:01.876631704 -0400
+++ chromium-75.0.3770.80/third_party/angle/src/common/debug.h 2019-06-07 09:30:06.205446547 -0400
@@ -248,7 +248,7 @@ std::ostream &FmtHex(std::ostream &os, T
# define EVENT(message, ...) (void(0))
#endif
-#if defined(COMPILER_GCC) || defined(__clang__)
+#if defined(__GNUC__)
# define ANGLE_CRASH() __builtin_trap()
#else
# define ANGLE_CRASH() ((void)(*(volatile char *)0 = 0)), __assume(0)
@@ -336,7 +336,7 @@ std::ostream &FmtHex(std::ostream &os, T
# define ANGLE_ENABLE_STRUCT_PADDING_WARNINGS \
_Pragma("clang diagnostic push") _Pragma("clang diagnostic error \"-Wpadded\"")
# define ANGLE_DISABLE_STRUCT_PADDING_WARNINGS _Pragma("clang diagnostic pop")
-#elif defined(COMPILER_GCC)
+#elif defined(__GNUC__)
# define ANGLE_ENABLE_STRUCT_PADDING_WARNINGS \
_Pragma("GCC diagnostic push") _Pragma("GCC diagnostic error \"-Wpadded\"")
# define ANGLE_DISABLE_STRUCT_PADDING_WARNINGS _Pragma("GCC diagnostic pop")

View File

@ -0,0 +1,14 @@
diff -up chromium-75.0.3770.80/third_party/zlib/zconf.h.nozmangle chromium-75.0.3770.80/third_party/zlib/zconf.h
--- chromium-75.0.3770.80/third_party/zlib/zconf.h.nozmangle 2019-06-05 11:12:30.420412467 -0400
+++ chromium-75.0.3770.80/third_party/zlib/zconf.h 2019-06-05 11:17:43.512683058 -0400
@@ -8,10 +8,6 @@
#ifndef ZCONF_H
#define ZCONF_H
-/* This include does prefixing as below, but with an updated set of names. Also
- * sets up export macros in component builds. */
-#include "chromeconf.h"
-
/*
* If you *really* need a unique prefix for all types and library functions,
* compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.

View File

@ -0,0 +1,24 @@
diff -up chromium-75.0.3770.80/chrome/browser/performance_manager/render_process_user_data.cc.pure-virtual-fix chromium-75.0.3770.80/chrome/browser/performance_manager/render_process_user_data.cc
--- chromium-75.0.3770.80/chrome/browser/performance_manager/render_process_user_data.cc.pure-virtual-fix 2019-06-07 15:03:43.302202979 -0400
+++ chromium-75.0.3770.80/chrome/browser/performance_manager/render_process_user_data.cc 2019-06-07 15:04:25.140393048 -0400
@@ -116,4 +116,9 @@ void RenderProcessUserData::RenderProces
base::Unretained(process_node_.get()), info.exit_code));
}
+void RenderProcessUserData::RenderProcessHostDestroyed(
+ content::RenderProcessHost* host) {
+ host->RemoveUserData(kRenderProcessUserDataKey);
+}
+
} // namespace performance_manager
diff -up chromium-75.0.3770.80/chrome/browser/performance_manager/render_process_user_data.h.pure-virtual-fix chromium-75.0.3770.80/chrome/browser/performance_manager/render_process_user_data.h
--- chromium-75.0.3770.80/chrome/browser/performance_manager/render_process_user_data.h.pure-virtual-fix 2019-06-07 15:04:43.530039597 -0400
+++ chromium-75.0.3770.80/chrome/browser/performance_manager/render_process_user_data.h 2019-06-07 15:05:13.770458374 -0400
@@ -47,6 +47,7 @@ class RenderProcessUserData : public bas
void RenderProcessExited(
content::RenderProcessHost* host,
const content::ChildProcessTerminationInfo& info) override;
+ void RenderProcessHostDestroyed(content::RenderProcessHost* host) override;
// All instances are linked together in a doubly linked list to allow orderly
// destruction at browser shutdown time.

View File

@ -0,0 +1,13 @@
diff -up chromium-75.0.3770.80/components/omnibox/browser/autocomplete_match.cc.revert-daff6b chromium-75.0.3770.80/components/omnibox/browser/autocomplete_match.cc
--- chromium-75.0.3770.80/components/omnibox/browser/autocomplete_match.cc.revert-daff6b 2019-06-06 14:54:13.819190586 -0400
+++ chromium-75.0.3770.80/components/omnibox/browser/autocomplete_match.cc 2019-06-06 14:54:31.892839991 -0400
@@ -154,8 +154,7 @@ AutocompleteMatch::AutocompleteMatch(con
additional_info(match.additional_info),
duplicate_matches(match.duplicate_matches) {}
-AutocompleteMatch::AutocompleteMatch(AutocompleteMatch&& match) noexcept =
- default;
+AutocompleteMatch::AutocompleteMatch(AutocompleteMatch&& match) = default;
AutocompleteMatch::~AutocompleteMatch() {
}

View File

@ -0,0 +1,14 @@
diff -up chromium-75.0.3770.80/media/gpu/vaapi/vaapi_mjpeg_decode_accelerator.cc.va1compat chromium-75.0.3770.80/media/gpu/vaapi/vaapi_mjpeg_decode_accelerator.cc
--- chromium-75.0.3770.80/media/gpu/vaapi/vaapi_mjpeg_decode_accelerator.cc.va1compat 2019-06-05 11:35:57.274466969 -0400
+++ chromium-75.0.3770.80/media/gpu/vaapi/vaapi_mjpeg_decode_accelerator.cc 2019-06-05 11:36:17.201067326 -0400
@@ -39,6 +39,10 @@ enum VAJDADecoderFailure {
VAJDA_DECODER_FAILURES_MAX,
};
+#ifndef VA_FOURCC_I420
+#define VA_FOURCC_I420 VA_FOURCC('I', '4', '2', '0')
+#endif
+
static void ReportToVAJDADecoderFailureUMA(VAJDADecoderFailure failure) {
UMA_HISTOGRAM_ENUMERATION("Media.VAJDA.DecoderFailure", failure,
VAJDA_DECODER_FAILURES_MAX + 1);

File diff suppressed because one or more lines are too long

View File

@ -111,6 +111,7 @@ header_files=" libavcodec/x86/inline_asm.h \
libavcodec/mpegvideodsp.h \ libavcodec/mpegvideodsp.h \
libavcodec/mpegvideoencdsp.h \ libavcodec/mpegvideoencdsp.h \
libavcodec/options_table.h \ libavcodec/options_table.h \
libavcodec/opusdsp.h \
libavcodec/opus_celt.h \ libavcodec/opus_celt.h \
libavcodec/opus_pvq.h \ libavcodec/opus_pvq.h \
libavcodec/opus_rc.h \ libavcodec/opus_rc.h \

View File

@ -1,7 +1,7 @@
diff -up chromium-73.0.3683.75/chrome/browser/about_flags.cc.vaapi chromium-73.0.3683.75/chrome/browser/about_flags.cc diff -up chromium-75.0.3770.80/chrome/browser/about_flags.cc.vaapi chromium-75.0.3770.80/chrome/browser/about_flags.cc
--- chromium-73.0.3683.75/chrome/browser/about_flags.cc.vaapi 2019-03-11 18:00:53.000000000 -0400 --- chromium-75.0.3770.80/chrome/browser/about_flags.cc.vaapi 2019-06-04 14:55:16.000000000 -0400
+++ chromium-73.0.3683.75/chrome/browser/about_flags.cc 2019-03-13 09:04:44.186716761 -0400 +++ chromium-75.0.3770.80/chrome/browser/about_flags.cc 2019-06-05 11:26:46.472753047 -0400
@@ -1606,7 +1606,7 @@ const FeatureEntry kFeatureEntries[] = { @@ -1390,7 +1390,7 @@ const FeatureEntry kFeatureEntries[] = {
"disable-accelerated-video-decode", "disable-accelerated-video-decode",
flag_descriptions::kAcceleratedVideoDecodeName, flag_descriptions::kAcceleratedVideoDecodeName,
flag_descriptions::kAcceleratedVideoDecodeDescription, flag_descriptions::kAcceleratedVideoDecodeDescription,
@ -10,7 +10,7 @@ diff -up chromium-73.0.3683.75/chrome/browser/about_flags.cc.vaapi chromium-73.0
SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode), SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
}, },
#if defined(OS_WIN) #if defined(OS_WIN)
@@ -2216,12 +2216,12 @@ const FeatureEntry kFeatureEntries[] = { @@ -1882,12 +1882,12 @@ const FeatureEntry kFeatureEntries[] = {
FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)}, FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)},
#endif // ENABLE_ISOLATED_XR_SERVICE #endif // ENABLE_ISOLATED_XR_SERVICE
#endif // ENABLE_VR #endif // ENABLE_VR
@ -26,15 +26,15 @@ diff -up chromium-73.0.3683.75/chrome/browser/about_flags.cc.vaapi chromium-73.0
{"v8-cache-options", flag_descriptions::kV8CacheOptionsName, {"v8-cache-options", flag_descriptions::kV8CacheOptionsName,
flag_descriptions::kV8CacheOptionsDescription, kOsAll, flag_descriptions::kV8CacheOptionsDescription, kOsAll,
MULTI_VALUE_TYPE(kV8CacheOptionsChoices)}, MULTI_VALUE_TYPE(kV8CacheOptionsChoices)},
diff -up chromium-73.0.3683.75/chrome/browser/flag_descriptions.cc.vaapi chromium-73.0.3683.75/chrome/browser/flag_descriptions.cc diff -up chromium-75.0.3770.80/chrome/browser/flag_descriptions.cc.vaapi chromium-75.0.3770.80/chrome/browser/flag_descriptions.cc
--- chromium-73.0.3683.75/chrome/browser/flag_descriptions.cc.vaapi 2019-03-11 18:00:53.000000000 -0400 --- chromium-75.0.3770.80/chrome/browser/flag_descriptions.cc.vaapi 2019-06-05 11:26:46.473753026 -0400
+++ chromium-73.0.3683.75/chrome/browser/flag_descriptions.cc 2019-03-13 09:04:44.188716714 -0400 +++ chromium-75.0.3770.80/chrome/browser/flag_descriptions.cc 2019-06-05 11:29:28.039397479 -0400
@@ -3096,15 +3096,20 @@ const char kTextSuggestionsTouchBarDescr @@ -2941,15 +2941,20 @@ const char kMacSystemMediaPermissionsInf
#endif #endif
-// Chrome OS ------------------------------------------------------------------- -// Chrome OS -------------------------------------------------------------------
+// Chrome OS Linux------------------------------------------------------------------- +// Chrome OS & Linux------------------------------------------------------------
-#if defined(OS_CHROMEOS) -#if defined(OS_CHROMEOS)
+#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID)) +#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
@ -46,21 +46,21 @@ diff -up chromium-73.0.3683.75/chrome/browser/flag_descriptions.cc.vaapi chromiu
"available."; "available.";
+#endif +#endif
+ +
+// Chrome OS -------------------------------------------------- +// Chrome OS -------------------------------------------------------------------
+ +
+#if defined(OS_CHROMEOS) +#if defined(OS_CHROMEOS)
const char kAllowTouchpadThreeFingerClickName[] = "Touchpad three-finger-click"; const char kAppServiceAshName[] = "App Service Ash";
const char kAllowTouchpadThreeFingerClickDescription[] = const char kAppServiceAshDescription[] =
diff -up chromium-73.0.3683.75/chrome/browser/flag_descriptions.h.vaapi chromium-73.0.3683.75/chrome/browser/flag_descriptions.h diff -up chromium-75.0.3770.80/chrome/browser/flag_descriptions.h.vaapi chromium-75.0.3770.80/chrome/browser/flag_descriptions.h
--- chromium-73.0.3683.75/chrome/browser/flag_descriptions.h.vaapi 2019-03-11 18:00:53.000000000 -0400 --- chromium-75.0.3770.80/chrome/browser/flag_descriptions.h.vaapi 2019-06-05 11:26:46.475752984 -0400
+++ chromium-73.0.3683.75/chrome/browser/flag_descriptions.h 2019-03-13 09:04:44.190716667 -0400 +++ chromium-75.0.3770.80/chrome/browser/flag_descriptions.h 2019-06-05 11:30:39.503928986 -0400
@@ -1842,13 +1842,19 @@ extern const char kPermissionPromptPersi @@ -1765,13 +1765,19 @@ extern const char kPermissionPromptPersi
#endif // defined(OS_MACOSX) #endif // defined(OS_MACOSX)
-// Chrome OS ------------------------------------------------------------------ -// Chrome OS ------------------------------------------------------------------
+// Chrome OS and Linux ------------------------------------------------------------------ +// Chrome OS & Linux ----------------------------------------------------------
-#if defined(OS_CHROMEOS) -#if defined(OS_CHROMEOS)
+#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID)) +#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
@ -68,18 +68,18 @@ diff -up chromium-73.0.3683.75/chrome/browser/flag_descriptions.h.vaapi chromium
extern const char kAcceleratedMjpegDecodeName[]; extern const char kAcceleratedMjpegDecodeName[];
extern const char kAcceleratedMjpegDecodeDescription[]; extern const char kAcceleratedMjpegDecodeDescription[];
+#endif // defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID)) +#endif
+ +
+// Chrome OS ------------------------------------------------------------------------ +// Chrome OS ------------------------------------------------------------------
+ +
+#if defined(OS_CHROMEOS) +#if defined(OS_CHROMEOS)
+ +
extern const char kAllowTouchpadThreeFingerClickName[]; extern const char kAppServiceAshName[];
extern const char kAllowTouchpadThreeFingerClickDescription[]; extern const char kAppServiceAshDescription[];
diff -up chromium-73.0.3683.75/gpu/config/software_rendering_list.json.vaapi chromium-73.0.3683.75/gpu/config/software_rendering_list.json diff -up chromium-75.0.3770.80/gpu/config/software_rendering_list.json.vaapi chromium-75.0.3770.80/gpu/config/software_rendering_list.json
--- chromium-73.0.3683.75/gpu/config/software_rendering_list.json.vaapi 2019-03-11 18:00:59.000000000 -0400 --- chromium-75.0.3770.80/gpu/config/software_rendering_list.json.vaapi 2019-06-04 14:55:24.000000000 -0400
+++ chromium-73.0.3683.75/gpu/config/software_rendering_list.json 2019-03-13 09:04:44.196716525 -0400 +++ chromium-75.0.3770.80/gpu/config/software_rendering_list.json 2019-06-05 11:26:46.482752839 -0400
@@ -371,11 +371,12 @@ @@ -371,11 +371,12 @@
}, },
{ {

View File

@ -1,38 +0,0 @@
From 00f47df999c9b19e80fdc01db0ae9ca1b6a12b3a Mon Sep 17 00:00:00 2001
From: vasilvv <vasilvv@google.com>
Date: Wed, 3 Apr 2019 13:58:53 -0700
Subject: [PATCH] GCC: do not delete move constructor of QuicStreamSendBuffer
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
QuicStreamSendBuffer constructor is implicitely required in the
initialization of the vector of substreams in QuicCryptoStream.
Though clang apparently ignores that, GCC fails to build.
BUG=chromium:819294
Originally submitted by José Dapena Paz <jose.dapena@lge.com> at https://quiche-review.googlesource.com/c/quiche/+/2420
PiperOrigin-RevId: 241800134
Change-Id: I4e3c97d6e5895d85340e8c1b740e6196d9104066
---
quic/core/quic_stream_send_buffer.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/quic/core/quic_stream_send_buffer.h b/quic/core/quic_stream_send_buffer.h
index e34514b..74e9d0d 100644
--- a/net/third_party/quic/core/quic_stream_send_buffer.h
+++ b/net/third_party/quic/core/quic_stream_send_buffer.h
@@ -62,7 +62,7 @@ class QUIC_EXPORT_PRIVATE QuicStreamSendBuffer {
public:
explicit QuicStreamSendBuffer(QuicBufferAllocator* allocator);
QuicStreamSendBuffer(const QuicStreamSendBuffer& other) = delete;
- QuicStreamSendBuffer(QuicStreamSendBuffer&& other) = delete;
+ QuicStreamSendBuffer(QuicStreamSendBuffer&& other) = default;
~QuicStreamSendBuffer();
// Save |data_length| of data starts at |iov_offset| in |iov| to send buffer.
--
2.21.0

View File

@ -17,4 +17,4 @@ SHA512 (Tinos-Italic.ttf) = d4f4f096110ef98a781a2a0e0d319317e5f84e650fe6f4d4f6b0
SHA512 (Tinos-Regular.ttf) = 58085c5dac6d067d60ba2ab3220c4a0cc1efcf279cadfcfb8746a5e5fa1a6f6daa62750dc2051b3b2d8a51b4d2e9bb0f66594caf2253c0870ed9c7286fa45e8f SHA512 (Tinos-Regular.ttf) = 58085c5dac6d067d60ba2ab3220c4a0cc1efcf279cadfcfb8746a5e5fa1a6f6daa62750dc2051b3b2d8a51b4d2e9bb0f66594caf2253c0870ed9c7286fa45e8f
SHA512 (Ahem.ttf) = aeb64b10ab9c87860714cb60b4900254b13dc52c51319256a1a3722c882026ab7c616bf628fbc2fe14e38a6003f3a481af60b52a7ed62071d28ddaf428e4e3fd SHA512 (Ahem.ttf) = aeb64b10ab9c87860714cb60b4900254b13dc52c51319256a1a3722c882026ab7c616bf628fbc2fe14e38a6003f3a481af60b52a7ed62071d28ddaf428e4e3fd
SHA512 (node-v8.9.1-linux-x64.tar.gz) = a707fd4567041c56e7f9d415e505e3fa650627f31def7fefdd7ec50f9e7066bb33332b67f479e1159d85e1105a7e6d034aad7429f4f3d034c9161170d7e0b844 SHA512 (node-v8.9.1-linux-x64.tar.gz) = a707fd4567041c56e7f9d415e505e3fa650627f31def7fefdd7ec50f9e7066bb33332b67f479e1159d85e1105a7e6d034aad7429f4f3d034c9161170d7e0b844
SHA512 (chromium-74.0.3729.169-clean.tar.xz) = 09db23d3b1b8020b21fa8f2b3be2a3be09815b4572ed5ef746061b171a01f75ab62af8ca092dbfb1bfa8065e5994fca56af8d0382053a70e46cb4ef57bf88b65 SHA512 (chromium-75.0.3770.80-clean.tar.xz) = 509093ac03016b3dcb34b715de9b206223780159ca6a17f3d8d88d2a82100923a52a77b20b03e84afa297930174096fad9e76e027e279e5bd3696e8738abf079