diff --git a/.gitignore b/.gitignore index 11c035f9..3e50fe8d 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ /chromium-64.0.3282.167-clean.tar.xz /chromium-64.0.3282.186-clean.tar.xz /chromium-65.0.3325.146-clean.tar.xz +/chromium-65.0.3325.162-clean.tar.xz diff --git a/chromium-65.0.3325.146-Fix-non-copyable-class-s-optional-move.patch b/chromium-65.0.3325.146-Fix-non-copyable-class-s-optional-move.patch new file mode 100644 index 00000000..6cf8ca81 --- /dev/null +++ b/chromium-65.0.3325.146-Fix-non-copyable-class-s-optional-move.patch @@ -0,0 +1,41 @@ +diff -up chromium-65.0.3325.146/base/optional.h.noncopyable chromium-65.0.3325.146/base/optional.h +--- chromium-65.0.3325.146/base/optional.h.noncopyable 2018-03-13 16:52:15.953729689 -0400 ++++ chromium-65.0.3325.146/base/optional.h 2018-03-13 16:53:55.365792522 -0400 +@@ -45,6 +45,15 @@ struct OptionalStorageBase { + + // When T is not trivially destructible we must call its + // destructor before deallocating its memory. ++ // Note that this hides the (implicitly declared) move constructor, which ++ // would be used for constexpr move constructor in OptionalStorage. ++ // It is needed iff T is trivially move constructible. However, the current ++ // is_trivially_{copy,move}_constructible implementation requires ++ // is_trivially_destructible (which looks a bug, cf: ++ // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51452 and ++ // http://cplusplus.github.io/LWG/lwg-active.html#2116), so it is not ++ // necessary for this case at the moment. Please see also the destructor ++ // comment in "is_trivially_destructible = true" specialization below. + ~OptionalStorageBase() { + if (!is_null_) + value_.~T(); +@@ -78,9 +87,18 @@ struct OptionalStorageBase(args)...) {} + + // When T is trivially destructible (i.e. its destructor does nothing) there +- // is no need to call it. Explicitly defaulting the destructor means it's not +- // user-provided. Those two together make this destructor trivial. +- ~OptionalStorageBase() = default; ++ // is no need to call it. Implicitly defined destructor is trivial, because ++ // both members (bool and union containing only variants which are trivially ++ // destructible) are trivially destructible. ++ // Explicitly-defaulted destructor is also trivial, but do not use it here, ++ // because it hides the implicit move constructor. It is needed to implement ++ // constexpr move constructor in OptionalStorage iff T is trivially move ++ // constructible. Note that, if T is trivially move constructible, the move ++ // constructor of OptionalStorageBase is also implicitly defined and it is ++ // trivially move constructor. If T is not trivially move constructible, ++ // "not declaring move constructor without destructor declaration" here means ++ // "delete move constructor", which works because any move constructor of ++ // OptionalStorage will not refer to it in that case. + + template + void Init(Args&&... args) { diff --git a/chromium-65.0.3325.146-GCC-IDB-methods-String-renamed-to-GetString.patch b/chromium-65.0.3325.146-GCC-IDB-methods-String-renamed-to-GetString.patch new file mode 100644 index 00000000..dbdf68ff --- /dev/null +++ b/chromium-65.0.3325.146-GCC-IDB-methods-String-renamed-to-GetString.patch @@ -0,0 +1,108 @@ +diff -up chromium-65.0.3325.146/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp.GetString chromium-65.0.3325.146/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp +--- chromium-65.0.3325.146/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp.GetString 2018-03-13 22:54:27.262671113 -0400 ++++ chromium-65.0.3325.146/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp 2018-03-13 22:55:47.722113713 -0400 +@@ -68,7 +68,7 @@ v8::Local ToV8(const IDBKeyPa + case IDBKeyPath::kNullType: + return v8::Null(isolate); + case IDBKeyPath::kStringType: +- return V8String(isolate, value.String()); ++ return V8String(isolate, value.GetString()); + case IDBKeyPath::kArrayType: + return ToV8(value.Array(), creation_context, isolate); + } +@@ -97,7 +97,7 @@ v8::Local ToV8(const IDBKey* + case IDBKey::kNumberType: + return v8::Number::New(isolate, key->Number()); + case IDBKey::kStringType: +- return V8String(isolate, key->String()); ++ return V8String(isolate, key->GetString()); + case IDBKey::kBinaryType: + // https://w3c.github.io/IndexedDB/#convert-a-value-to-a-key + return ToV8(DOMArrayBuffer::Create(key->Binary()), creation_context, +@@ -379,7 +379,7 @@ static std::unique_ptr CreateIDB + } + + DCHECK_EQ(key_path.GetType(), IDBKeyPath::kStringType); +- return CreateIDBKeyFromValueAndKeyPath(isolate, value, key_path.String(), ++ return CreateIDBKeyFromValueAndKeyPath(isolate, value, key_path.GetString(), + exception_state); + } + +@@ -483,7 +483,7 @@ bool InjectV8KeyIntoV8Value(v8::Isolate* + DCHECK(isolate->InContext()); + + DCHECK_EQ(key_path.GetType(), IDBKeyPath::kStringType); +- Vector key_path_elements = ParseKeyPath(key_path.String()); ++ Vector key_path_elements = ParseKeyPath(key_path.GetString()); + + // The conbination of a key generator and an empty key path is forbidden by + // spec. +@@ -569,7 +569,7 @@ bool CanInjectIDBKeyIntoScriptValue(v8:: + const IDBKeyPath& key_path) { + IDB_TRACE("canInjectIDBKeyIntoScriptValue"); + DCHECK_EQ(key_path.GetType(), IDBKeyPath::kStringType); +- Vector key_path_elements = ParseKeyPath(key_path.String()); ++ Vector key_path_elements = ParseKeyPath(key_path.GetString()); + + if (!key_path_elements.size()) + return false; +diff -up chromium-65.0.3325.146/third_party/WebKit/Source/modules/exported/WebIDBKey.cpp.GetString chromium-65.0.3325.146/third_party/WebKit/Source/modules/exported/WebIDBKey.cpp +--- chromium-65.0.3325.146/third_party/WebKit/Source/modules/exported/WebIDBKey.cpp.GetString 2018-03-13 22:56:04.041798217 -0400 ++++ chromium-65.0.3325.146/third_party/WebKit/Source/modules/exported/WebIDBKey.cpp 2018-03-13 22:56:22.481440993 -0400 +@@ -56,7 +56,7 @@ WebData WebIDBKeyView::Binary() const { + } + + WebString WebIDBKeyView::String() const { +- return private_->String(); ++ return private_->GetString(); + } + + double WebIDBKeyView::Date() const { +diff -up chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp.GetString chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp +--- chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp.GetString 2018-03-13 22:56:36.028178758 -0400 ++++ chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp 2018-03-13 22:56:58.846736831 -0400 +@@ -297,7 +297,7 @@ IDBObjectStore* IDBDatabase::createObjec + } + + if (auto_increment && ((key_path.GetType() == IDBKeyPath::kStringType && +- key_path.String().IsEmpty()) || ++ key_path.GetString().IsEmpty()) || + key_path.GetType() == IDBKeyPath::kArrayType)) { + exception_state.ThrowDOMException( + kInvalidAccessError, +diff -up chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKey.h.GetString chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKey.h +--- chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKey.h.GetString 2018-03-13 22:57:13.229458842 -0400 ++++ chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKey.h 2018-03-13 22:57:38.633966776 -0400 +@@ -106,7 +106,7 @@ class MODULES_EXPORT IDBKey { + return binary_; + } + +- const String& String() const { ++ const String& GetString() const { + DCHECK_EQ(type_, kStringType); + return string_; + } +diff -up chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.h.GetString chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.h +--- chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.h.GetString 2018-03-13 22:57:51.104725428 -0400 ++++ chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/IDBKeyPath.h 2018-03-13 22:58:09.459369906 -0400 +@@ -65,7 +65,7 @@ class MODULES_EXPORT IDBKeyPath { + return array_; + } + +- const String& String() const { ++ const String& GetString() const { + DCHECK_EQ(type_, kStringType); + return string_; + } +diff -up chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp.GetString chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp +--- chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp.GetString 2018-03-13 22:58:28.778995834 -0400 ++++ chromium-65.0.3325.146/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp 2018-03-13 22:58:45.044681364 -0400 +@@ -399,7 +399,7 @@ static std::unique_ptr KeyPathF + case IDBKeyPath::kStringType: + key_path = KeyPath::create() + .setType(KeyPath::TypeEnum::String) +- .setString(idb_key_path.String()) ++ .setString(idb_key_path.GetString()) + .build(); + break; + case IDBKeyPath::kArrayType: { diff --git a/chromium-65.0.3325.146-GCC-PlaybackImageProvider-Settings-do-not-provide-co.patch b/chromium-65.0.3325.146-GCC-PlaybackImageProvider-Settings-do-not-provide-co.patch new file mode 100644 index 00000000..8edc424f --- /dev/null +++ b/chromium-65.0.3325.146-GCC-PlaybackImageProvider-Settings-do-not-provide-co.patch @@ -0,0 +1,22 @@ +diff -up chromium-65.0.3325.146/cc/raster/playback_image_provider.cc.pipcc chromium-65.0.3325.146/cc/raster/playback_image_provider.cc +--- chromium-65.0.3325.146/cc/raster/playback_image_provider.cc.pipcc 2018-03-13 22:47:00.271322726 -0400 ++++ chromium-65.0.3325.146/cc/raster/playback_image_provider.cc 2018-03-13 22:47:53.127300060 -0400 +@@ -92,7 +92,6 @@ PlaybackImageProvider::GetDecodedDrawIma + } + + PlaybackImageProvider::Settings::Settings() = default; +-PlaybackImageProvider::Settings::Settings(const Settings& other) = default; + PlaybackImageProvider::Settings::~Settings() = default; + + } // namespace cc +diff -up chromium-65.0.3325.146/cc/raster/playback_image_provider.h.pipcc chromium-65.0.3325.146/cc/raster/playback_image_provider.h +--- chromium-65.0.3325.146/cc/raster/playback_image_provider.h.pipcc 2018-03-13 22:48:00.673153629 -0400 ++++ chromium-65.0.3325.146/cc/raster/playback_image_provider.h 2018-03-13 22:48:12.726920597 -0400 +@@ -20,7 +20,6 @@ class CC_EXPORT PlaybackImageProvider : + public: + struct CC_EXPORT Settings { + Settings(); +- Settings(const Settings& other); + ~Settings(); + + // The set of image ids to skip during raster. diff --git a/chromium-65.0.3325.146-GCC-build-fix-base-Optional-T-requires-the-full-decl.patch b/chromium-65.0.3325.146-GCC-build-fix-base-Optional-T-requires-the-full-decl.patch new file mode 100644 index 00000000..62124be4 --- /dev/null +++ b/chromium-65.0.3325.146-GCC-build-fix-base-Optional-T-requires-the-full-decl.patch @@ -0,0 +1,33 @@ +diff -up chromium-65.0.3325.146/services/preferences/tracked/pref_hash_filter.h.fulldecl chromium-65.0.3325.146/services/preferences/tracked/pref_hash_filter.h +--- chromium-65.0.3325.146/services/preferences/tracked/pref_hash_filter.h.fulldecl 2018-03-13 16:38:38.870652491 -0400 ++++ chromium-65.0.3325.146/services/preferences/tracked/pref_hash_filter.h 2018-03-13 16:39:02.691186647 -0400 +@@ -21,9 +21,9 @@ + #include "services/preferences/public/interfaces/preferences.mojom.h" + #include "services/preferences/tracked/hash_store_contents.h" + #include "services/preferences/tracked/interceptable_pref_filter.h" ++#include "services/preferences/tracked/pref_hash_store.h" + #include "services/preferences/tracked/tracked_preference.h" + +-class PrefHashStore; + class PrefService; + + namespace base { +diff -up chromium-65.0.3325.146/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.h.fulldecl chromium-65.0.3325.146/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.h +--- chromium-65.0.3325.146/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.h.fulldecl 2018-03-13 16:39:13.787970233 -0400 ++++ chromium-65.0.3325.146/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.h 2018-03-13 16:39:42.614407235 -0400 +@@ -30,6 +30,7 @@ + + #include + #include "modules/webdatabase/DatabaseBasicTypes.h" ++#include "modules/webdatabase/SQLError.h" + #include "modules/webdatabase/SQLStatement.h" + #include "modules/webdatabase/SQLStatementBackend.h" + #include "modules/webdatabase/SQLTransactionStateMachine.h" +@@ -41,7 +42,6 @@ + namespace blink { + + class Database; +-class SQLErrorData; + class SQLiteTransaction; + class SQLTransaction; + class SQLTransactionBackend; diff --git a/chromium-65.0.3325.146-GCC-explicitely-std-move-to-base-Optional-instead-of.patch b/chromium-65.0.3325.146-GCC-explicitely-std-move-to-base-Optional-instead-of.patch new file mode 100644 index 00000000..9c6f315b --- /dev/null +++ b/chromium-65.0.3325.146-GCC-explicitely-std-move-to-base-Optional-instead-of.patch @@ -0,0 +1,24 @@ +diff -up chromium-65.0.3325.146/content/browser/appcache/appcache_request_handler.cc.explicit-std-move chromium-65.0.3325.146/content/browser/appcache/appcache_request_handler.cc +--- chromium-65.0.3325.146/content/browser/appcache/appcache_request_handler.cc.explicit-std-move 2018-03-13 22:50:41.346043716 -0400 ++++ chromium-65.0.3325.146/content/browser/appcache/appcache_request_handler.cc 2018-03-13 22:51:21.428267583 -0400 +@@ -639,7 +639,7 @@ AppCacheRequestHandler::MaybeCreateSubre + + SubresourceLoaderParams params; + params.loader_factory_info = factory_ptr.PassInterface(); +- return params; ++ return base::Optional(std::move(params)); + } + + void AppCacheRequestHandler::MaybeCreateSubresourceLoader( +diff -up chromium-65.0.3325.146/content/browser/service_worker/service_worker_controllee_request_handler.cc.explicit-std-move chromium-65.0.3325.146/content/browser/service_worker/service_worker_controllee_request_handler.cc +--- chromium-65.0.3325.146/content/browser/service_worker/service_worker_controllee_request_handler.cc.explicit-std-move 2018-03-13 22:51:38.133943776 -0400 ++++ chromium-65.0.3325.146/content/browser/service_worker/service_worker_controllee_request_handler.cc 2018-03-13 22:51:57.658566347 -0400 +@@ -271,7 +271,7 @@ ServiceWorkerControlleeRequestHandler::M + controller_info->object_info = provider_host_->GetOrCreateServiceWorkerHandle( + provider_host_->controller()); + params.controller_service_worker_info = std::move(controller_info); +- return params; ++ return base::Optional(std::move(params)); + } + + void ServiceWorkerControlleeRequestHandler::PrepareForMainResource( diff --git a/chromium-65.0.3325.146-GCC-fully-declare-ConfigurationPolicyProvider.patch b/chromium-65.0.3325.146-GCC-fully-declare-ConfigurationPolicyProvider.patch new file mode 100644 index 00000000..809a321c --- /dev/null +++ b/chromium-65.0.3325.146-GCC-fully-declare-ConfigurationPolicyProvider.patch @@ -0,0 +1,18 @@ +diff -up chromium-65.0.3325.146/components/policy/core/browser/browser_policy_connector_base.h.fully-declare chromium-65.0.3325.146/components/policy/core/browser/browser_policy_connector_base.h +--- chromium-65.0.3325.146/components/policy/core/browser/browser_policy_connector_base.h.fully-declare 2018-03-13 23:02:13.989635567 -0400 ++++ chromium-65.0.3325.146/components/policy/core/browser/browser_policy_connector_base.h 2018-03-13 23:02:44.318048625 -0400 +@@ -12,13 +12,13 @@ + #include "base/macros.h" + #include "base/optional.h" + #include "components/policy/core/browser/configuration_policy_handler_list.h" ++#include "components/policy/core/common/configuration_policy_provider.h" + #include "components/policy/core/common/schema.h" + #include "components/policy/core/common/schema_registry.h" + #include "components/policy/policy_export.h" + + namespace policy { + +-class ConfigurationPolicyProvider; + class PolicyService; + class PolicyServiceImpl; + diff --git a/chromium-65.0.3325.146-Implement-conditional-copy-move-ctors-assign-operato.patch b/chromium-65.0.3325.146-Implement-conditional-copy-move-ctors-assign-operato.patch new file mode 100644 index 00000000..9b4befec --- /dev/null +++ b/chromium-65.0.3325.146-Implement-conditional-copy-move-ctors-assign-operato.patch @@ -0,0 +1,91 @@ +diff -up chromium-65.0.3325.146/base/optional.h.conditional chromium-65.0.3325.146/base/optional.h +--- chromium-65.0.3325.146/base/optional.h.conditional 2018-03-13 22:11:02.328058249 -0400 ++++ chromium-65.0.3325.146/base/optional.h 2018-03-13 22:12:43.622098296 -0400 +@@ -266,6 +266,58 @@ class OptionalBase { + OptionalStorage storage_; + }; + ++// The following {Copy,Move}{Constructible,Assignable} structs are helpers to ++// implement constructor/assign-operator overloading. Specifically, if T is ++// is not movable but copyable, Optional's move constructor should not ++// participate in overload resolution. This inheritance trick implements that. ++template ++struct CopyConstructible {}; ++ ++template <> ++struct CopyConstructible { ++ constexpr CopyConstructible() = default; ++ constexpr CopyConstructible(const CopyConstructible&) = delete; ++ constexpr CopyConstructible(CopyConstructible&&) = default; ++ CopyConstructible& operator=(const CopyConstructible&) = default; ++ CopyConstructible& operator=(CopyConstructible&&) = default; ++}; ++ ++template ++struct MoveConstructible {}; ++ ++template <> ++struct MoveConstructible { ++ constexpr MoveConstructible() = default; ++ constexpr MoveConstructible(const MoveConstructible&) = default; ++ constexpr MoveConstructible(MoveConstructible&&) = delete; ++ MoveConstructible& operator=(const MoveConstructible&) = default; ++ MoveConstructible& operator=(MoveConstructible&&) = default; ++}; ++ ++template ++struct CopyAssignable {}; ++ ++template <> ++struct CopyAssignable { ++ constexpr CopyAssignable() = default; ++ constexpr CopyAssignable(const CopyAssignable&) = default; ++ constexpr CopyAssignable(CopyAssignable&&) = default; ++ CopyAssignable& operator=(const CopyAssignable&) = delete; ++ CopyAssignable& operator=(CopyAssignable&&) = default; ++}; ++ ++template ++struct MoveAssignable {}; ++ ++template <> ++struct MoveAssignable { ++ constexpr MoveAssignable() = default; ++ constexpr MoveAssignable(const MoveAssignable&) = default; ++ constexpr MoveAssignable(MoveAssignable&&) = default; ++ MoveAssignable& operator=(const MoveAssignable&) = default; ++ MoveAssignable& operator=(MoveAssignable&&) = delete; ++}; ++ + } // namespace internal + + // base::Optional is a Chromium version of the C++17 optional class: +@@ -280,12 +332,18 @@ class OptionalBase { + // - No exceptions are thrown, because they are banned from Chromium. + // - All the non-members are in the 'base' namespace instead of 'std'. + template +-class Optional : public internal::OptionalBase { ++class Optional ++ : public internal::OptionalBase, ++ public internal::CopyConstructible::value>, ++ public internal::MoveConstructible::value>, ++ public internal::CopyAssignable::value && ++ std::is_copy_assignable::value>, ++ public internal::MoveAssignable::value && ++ std::is_move_assignable::value> { + public: + using value_type = T; + + // Defer default/copy/move constructor implementation to OptionalBase. +- // TODO(hidehiko): Implement conditional enabling. + constexpr Optional() = default; + constexpr Optional(const Optional& other) = default; + constexpr Optional(Optional&& other) = default; +@@ -316,7 +374,6 @@ class Optional : public internal::Option + ~Optional() = default; + + // Defer copy-/move- assign operator implementation to OptionalBase. +- // TOOD(hidehiko): Implement conditional enabling. + Optional& operator=(const Optional& other) = default; + Optional& operator=(Optional&& other) = default; + diff --git a/chromium-65.0.3325.146-Implement-converting-constructors-from-Optional-U.patch b/chromium-65.0.3325.146-Implement-converting-constructors-from-Optional-U.patch new file mode 100644 index 00000000..32141042 --- /dev/null +++ b/chromium-65.0.3325.146-Implement-converting-constructors-from-Optional-U.patch @@ -0,0 +1,116 @@ +diff -up chromium-65.0.3325.146/base/optional.h.converting chromium-65.0.3325.146/base/optional.h +--- chromium-65.0.3325.146/base/optional.h.converting 2018-03-13 22:31:05.248797490 -0400 ++++ chromium-65.0.3325.146/base/optional.h 2018-03-13 22:33:10.826368771 -0400 +@@ -31,6 +31,10 @@ constexpr in_place_t in_place = {}; + // http://en.cppreference.com/w/cpp/utility/optional/nullopt + constexpr nullopt_t nullopt(0); + ++// Forward declaration, which is refered by following helpers. ++template ++class Optional; ++ + namespace internal { + + template ::value> +@@ -220,6 +224,19 @@ class OptionalBase { + constexpr explicit OptionalBase(in_place_t, Args&&... args) + : storage_(in_place, std::forward(args)...) {} + ++ // Implementation of converting constructors. ++ template ++ explicit OptionalBase(const OptionalBase& other) { ++ if (other.storage_.is_populated_) ++ storage_.Init(other.storage_.value_); ++ } ++ ++ template ++ explicit OptionalBase(OptionalBase&& other) { ++ if (other.storage_.is_populated_) ++ storage_.Init(std::move(other.storage_.value_)); ++ } ++ + ~OptionalBase() = default; + + OptionalBase& operator=(const OptionalBase& other) { +@@ -263,6 +280,11 @@ class OptionalBase { + storage_.is_populated_ = false; + } + ++ // For implementing conversion, allow access to other typed OptionalBase ++ // class. ++ template ++ friend class OptionalBase; ++ + OptionalStorage storage_; + }; + +@@ -318,6 +340,20 @@ struct MoveAssignable { + MoveAssignable& operator=(MoveAssignable&&) = delete; + }; + ++// Helper to conditionally enable converting constructors. ++template ++struct IsConvertibleFromOptional ++ : std::integral_constant< ++ bool, ++ std::is_constructible&>::value || ++ std::is_constructible&>::value || ++ std::is_constructible&&>::value || ++ std::is_constructible&&>::value || ++ std::is_convertible&, T>::value || ++ std::is_convertible&, T>::value || ++ std::is_convertible&&, T>::value || ++ std::is_convertible&&, T>::value> {}; ++ + } // namespace internal + + // base::Optional is a Chromium version of the C++17 optional class: +@@ -348,7 +384,47 @@ class Optional + constexpr Optional(const Optional& other) = default; + constexpr Optional(Optional&& other) = default; + +- constexpr Optional(nullopt_t) {} ++ constexpr Optional(nullopt_t) {} // NOLINT(runtime/explicit) ++ ++ // Converting copy constructor. "explicit" only if ++ // std::is_convertible::value is false. It is implemented by ++ // declaring two almost same constructors, but that condition in enable_if_t ++ // is different, so that either one is chosen, thanks to SFINAE. ++ template < ++ typename U, ++ std::enable_if_t::value && ++ !internal::IsConvertibleFromOptional::value && ++ std::is_convertible::value, ++ bool> = false> ++ Optional(const Optional& other) : internal::OptionalBase(other) {} ++ ++ template < ++ typename U, ++ std::enable_if_t::value && ++ !internal::IsConvertibleFromOptional::value && ++ !std::is_convertible::value, ++ bool> = false> ++ explicit Optional(const Optional& other) ++ : internal::OptionalBase(other) {} ++ ++ // Converting move constructor. Similar to converting copy constructor, ++ // declaring two (explicit and non-explicit) constructors. ++ template < ++ typename U, ++ std::enable_if_t::value && ++ !internal::IsConvertibleFromOptional::value && ++ std::is_convertible::value, ++ bool> = false> ++ Optional(Optional&& other) : internal::OptionalBase(std::move(other)) {} ++ ++ template < ++ typename U, ++ std::enable_if_t::value && ++ !internal::IsConvertibleFromOptional::value && ++ !std::is_convertible::value, ++ bool> = false> ++ explicit Optional(Optional&& other) ++ : internal::OptionalBase(std::move(other)) {} + + constexpr Optional(const T& value) + : internal::OptionalBase(in_place, value) {} diff --git a/chromium-65.0.3325.146-Implement-value-forward-constructor.patch b/chromium-65.0.3325.146-Implement-value-forward-constructor.patch new file mode 100644 index 00000000..db727d89 --- /dev/null +++ b/chromium-65.0.3325.146-Implement-value-forward-constructor.patch @@ -0,0 +1,72 @@ +diff -up chromium-65.0.3325.146/base/optional.h.vforward chromium-65.0.3325.146/base/optional.h +--- chromium-65.0.3325.146/base/optional.h.vforward 2018-03-13 22:35:46.383359966 -0400 ++++ chromium-65.0.3325.146/base/optional.h 2018-03-13 22:37:48.724992995 -0400 +@@ -354,6 +354,10 @@ struct IsConvertibleFromOptional + std::is_convertible&&, T>::value || + std::is_convertible&&, T>::value> {}; + ++// Forward compatibility for C++20. ++template ++using RemoveCvRefT = std::remove_cv_t>; ++ + } // namespace internal + + // base::Optional is a Chromium version of the C++17 optional class: +@@ -367,6 +371,13 @@ struct IsConvertibleFromOptional + // - 'constexpr' might be missing in some places for reasons specified locally. + // - No exceptions are thrown, because they are banned from Chromium. + // - All the non-members are in the 'base' namespace instead of 'std'. ++// ++// Note that T cannot have a constructor T(Optional) etc. Optional checks ++// T's constructor (specifically via IsConvertibleFromOptional), and in the ++// check whether T can be constructible from Optional, which is recursive ++// so it does not work. As of Feb 2018, std::optional C++17 implementation in ++// both clang and gcc has same limitation. MSVC SFINAE looks to have different ++// behavior, but anyway it reports an error, too. + template + class Optional + : public internal::OptionalBase, +@@ -426,12 +437,6 @@ class Optional + explicit Optional(Optional&& other) + : internal::OptionalBase(std::move(other)) {} + +- constexpr Optional(const T& value) +- : internal::OptionalBase(in_place, value) {} +- +- constexpr Optional(T&& value) +- : internal::OptionalBase(in_place, std::move(value)) {} +- + template + constexpr explicit Optional(in_place_t, Args&&... args) + : internal::OptionalBase(in_place, std::forward(args)...) {} +@@ -447,6 +452,30 @@ class Optional + Args&&... args) + : internal::OptionalBase(in_place, il, std::forward(args)...) {} + ++ // Forward value constructor. Similar to converting constructors, ++ // conditionally explicit. ++ template < ++ typename U = value_type, ++ std::enable_if_t< ++ std::is_constructible::value && ++ !std::is_same, in_place_t>::value && ++ !std::is_same, Optional>::value && ++ std::is_convertible::value, ++ bool> = false> ++ constexpr Optional(U&& value) ++ : internal::OptionalBase(in_place, std::forward(value)) {} ++ ++ template < ++ typename U = value_type, ++ std::enable_if_t< ++ std::is_constructible::value && ++ !std::is_same, in_place_t>::value && ++ !std::is_same, Optional>::value && ++ !std::is_convertible::value, ++ bool> = false> ++ constexpr explicit Optional(U&& value) ++ : internal::OptionalBase(in_place, std::forward(value)) {} ++ + ~Optional() = default; + + // Defer copy-/move- assign operator implementation to OptionalBase. diff --git a/chromium-65.0.3325.146-Update-non-copy-non-move-assign-operators.patch b/chromium-65.0.3325.146-Update-non-copy-non-move-assign-operators.patch new file mode 100644 index 00000000..f9c45038 --- /dev/null +++ b/chromium-65.0.3325.146-Update-non-copy-non-move-assign-operators.patch @@ -0,0 +1,144 @@ +diff -up chromium-65.0.3325.146/base/optional.h.ncnm chromium-65.0.3325.146/base/optional.h +--- chromium-65.0.3325.146/base/optional.h.ncnm 2018-03-13 22:40:11.743226276 -0400 ++++ chromium-65.0.3325.146/base/optional.h 2018-03-13 22:44:30.948211358 -0400 +@@ -240,37 +240,37 @@ class OptionalBase { + ~OptionalBase() = default; + + OptionalBase& operator=(const OptionalBase& other) { +- if (!other.storage_.is_populated_) { +- FreeIfNeeded(); +- return *this; +- } +- +- InitOrAssign(other.storage_.value_); ++ CopyAssign(other); + return *this; + } + + OptionalBase& operator=(OptionalBase&& other) { +- if (!other.storage_.is_populated_) { +- FreeIfNeeded(); +- return *this; +- } +- +- InitOrAssign(std::move(other.storage_.value_)); ++ MoveAssign(std::move(other)); + return *this; + } + +- void InitOrAssign(const T& value) { +- if (!storage_.is_populated_) +- storage_.Init(value); ++ template ++ void CopyAssign(const OptionalBase& other) { ++ if (other.storage_.is_populated_) ++ InitOrAssign(other.storage_.value_); + else +- storage_.value_ = value; ++ FreeIfNeeded(); + } + +- void InitOrAssign(T&& value) { +- if (!storage_.is_populated_) +- storage_.Init(std::move(value)); ++ template ++ void MoveAssign(OptionalBase&& other) { ++ if (other.storage_.is_populated_) ++ InitOrAssign(std::move(other.storage_.value_)); ++ else ++ FreeIfNeeded(); ++ } ++ ++ template ++ void InitOrAssign(U&& value) { ++ if (storage_.is_populated_) ++ storage_.value_ = std::forward(value); + else +- storage_.value_ = std::move(value); ++ storage_.Init(std::forward(value)); + } + + void FreeIfNeeded() { +@@ -340,7 +340,7 @@ struct MoveAssignable { + MoveAssignable& operator=(MoveAssignable&&) = delete; + }; + +-// Helper to conditionally enable converting constructors. ++// Helper to conditionally enable converting constructors and assign operators. + template + struct IsConvertibleFromOptional + : std::integral_constant< +@@ -354,6 +354,16 @@ struct IsConvertibleFromOptional + std::is_convertible&&, T>::value || + std::is_convertible&&, T>::value> {}; + ++template ++struct IsAssignableFromOptional ++ : std::integral_constant< ++ bool, ++ IsConvertibleFromOptional::value || ++ std::is_assignable&>::value || ++ std::is_assignable&>::value || ++ std::is_assignable&&>::value || ++ std::is_assignable&&>::value> {}; ++ + // Forward compatibility for C++20. + template + using RemoveCvRefT = std::remove_cv_t>; +@@ -487,14 +497,42 @@ class Optional + return *this; + } + +- template +- typename std::enable_if, T>::value, +- Optional&>::type ++ // Perfect-forwarded assignment. ++ template ++ std::enable_if_t< ++ !std::is_same, Optional>::value && ++ std::is_constructible::value && ++ std::is_assignable::value && ++ (!std::is_scalar::value || ++ !std::is_same, T>::value), ++ Optional&> + operator=(U&& value) { + InitOrAssign(std::forward(value)); + return *this; + } + ++// Copy assign the state of other. ++ template ++ std::enable_if_t::value && ++ std::is_constructible::value && ++ std::is_assignable::value, ++ Optional&> ++ operator=(const Optional& other) { ++ CopyAssign(other); ++ return *this; ++ } ++ ++ // Move assign the state of other. ++ template ++ std::enable_if_t::value && ++ std::is_constructible::value && ++ std::is_assignable::value, ++ Optional&> ++ operator=(Optional&& other) { ++ MoveAssign(std::move(other)); ++ return *this; ++ } ++ + constexpr const T* operator->() const { + DCHECK(storage_.is_populated_); + return &value(); +@@ -606,8 +644,10 @@ class Optional + private: + // Accessing template base class's protected member needs explicit + // declaration to do so. ++ using internal::OptionalBase::CopyAssign; + using internal::OptionalBase::FreeIfNeeded; + using internal::OptionalBase::InitOrAssign; ++ using internal::OptionalBase::MoveAssign; + using internal::OptionalBase::storage_; + }; + diff --git a/chromium-65.0.3325.146-Use-affirmative-expression-in-base-Optional.patch b/chromium-65.0.3325.146-Use-affirmative-expression-in-base-Optional.patch new file mode 100644 index 00000000..8aaea851 --- /dev/null +++ b/chromium-65.0.3325.146-Use-affirmative-expression-in-base-Optional.patch @@ -0,0 +1,265 @@ +diff -up chromium-65.0.3325.146/base/optional.h.affirmative chromium-65.0.3325.146/base/optional.h +--- chromium-65.0.3325.146/base/optional.h.affirmative 2018-03-13 22:27:29.451969704 -0400 ++++ chromium-65.0.3325.146/base/optional.h 2018-03-13 22:27:57.031436045 -0400 +@@ -41,7 +41,7 @@ struct OptionalStorageBase { + + template + constexpr explicit OptionalStorageBase(in_place_t, Args&&... args) +- : is_null_(false), value_(std::forward(args)...) {} ++ : is_populated_(true), value_(std::forward(args)...) {} + + // When T is not trivially destructible we must call its + // destructor before deallocating its memory. +@@ -55,18 +55,18 @@ struct OptionalStorageBase { + // necessary for this case at the moment. Please see also the destructor + // comment in "is_trivially_destructible = true" specialization below. + ~OptionalStorageBase() { +- if (!is_null_) ++ if (is_populated_) + value_.~T(); + } + + template + void Init(Args&&... args) { +- DCHECK(is_null_); ++ DCHECK(!is_populated_); + ::new (&value_) T(std::forward(args)...); +- is_null_ = false; ++ is_populated_ = true; + } + +- bool is_null_ = true; ++ bool is_populated_ = false; + union { + // |empty_| exists so that the union will always be initialized, even when + // it doesn't contain a value. Union members must be initialized for the +@@ -84,7 +84,7 @@ struct OptionalStorageBase + constexpr explicit OptionalStorageBase(in_place_t, Args&&... args) +- : is_null_(false), value_(std::forward(args)...) {} ++ : is_populated_(true), value_(std::forward(args)...) {} + + // When T is trivially destructible (i.e. its destructor does nothing) there + // is no need to call it. Implicitly defined destructor is trivial, because +@@ -102,12 +102,12 @@ struct OptionalStorageBase + void Init(Args&&... args) { +- DCHECK(is_null_); ++ DCHECK(!is_populated_); + ::new (&value_) T(std::forward(args)...); +- is_null_ = false; ++ is_populated_ = true; + } + +- bool is_null_ = true; ++ bool is_populated_ = false; + union { + // |empty_| exists so that the union will always be initialized, even when + // it doesn't contain a value. Union members must be initialized for the +@@ -133,7 +133,7 @@ struct OptionalStorage : OptionalStorage + + // Accessing the members of template base class requires explicit + // declaration. +- using OptionalStorageBase::is_null_; ++ using OptionalStorageBase::is_populated_; + using OptionalStorageBase::value_; + using OptionalStorageBase::Init; + +@@ -145,12 +145,12 @@ struct OptionalStorage : OptionalStorage + OptionalStorage() = default; + + OptionalStorage(const OptionalStorage& other) { +- if (!other.is_null_) ++ if (other.is_populated_) + Init(other.value_); + } + + OptionalStorage(OptionalStorage&& other) { +- if (!other.is_null_) ++ if (other.is_populated_) + Init(std::move(other.value_)); + } + }; +@@ -160,7 +160,7 @@ struct OptionalStorage + : OptionalStorageBase { +- using OptionalStorageBase::is_null_; ++ using OptionalStorageBase::is_populated_; + using OptionalStorageBase::value_; + using OptionalStorageBase::Init; + using OptionalStorageBase::OptionalStorageBase; +@@ -169,7 +169,7 @@ struct OptionalStorage + : OptionalStorageBase { +- using OptionalStorageBase::is_null_; ++ using OptionalStorageBase::is_populated_; + using OptionalStorageBase::value_; + using OptionalStorageBase::Init; + using OptionalStorageBase::OptionalStorageBase; +@@ -188,7 +188,7 @@ struct OptionalStorage storage_; +@@ -334,12 +334,12 @@ class Optional : public internal::Option + } + + constexpr const T* operator->() const { +- DCHECK(!storage_.is_null_); ++ DCHECK(storage_.is_populated_); + return &value(); + } + + constexpr T* operator->() { +- DCHECK(!storage_.is_null_); ++ DCHECK(storage_.is_populated_); + return &value(); + } + +@@ -351,27 +351,27 @@ class Optional : public internal::Option + + constexpr T&& operator*() && { return std::move(value()); } + +- constexpr explicit operator bool() const { return !storage_.is_null_; } ++ constexpr explicit operator bool() const { return storage_.is_populated_; } + +- constexpr bool has_value() const { return !storage_.is_null_; } ++ constexpr bool has_value() const { return storage_.is_populated_; } + + constexpr T& value() & { +- DCHECK(!storage_.is_null_); ++ DCHECK(storage_.is_populated_); + return storage_.value_; + } + + constexpr const T& value() const & { +- DCHECK(!storage_.is_null_); ++ DCHECK(storage_.is_populated_); + return storage_.value_; + } + + constexpr T&& value() && { +- DCHECK(!storage_.is_null_); ++ DCHECK(storage_.is_populated_); + return std::move(storage_.value_); + } + + constexpr const T&& value() const && { +- DCHECK(!storage_.is_null_); ++ DCHECK(storage_.is_populated_); + return std::move(storage_.value_); + } + +@@ -382,8 +382,9 @@ class Optional : public internal::Option + // "T must be copy constructible"); + static_assert(std::is_convertible::value, + "U must be convertible to T"); +- return storage_.is_null_ ? static_cast(std::forward(default_value)) +- : value(); ++ return storage_.is_populated_ ++ ? value() ++ : static_cast(std::forward(default_value)); + } + + template +@@ -393,26 +394,27 @@ class Optional : public internal::Option + // "T must be move constructible"); + static_assert(std::is_convertible::value, + "U must be convertible to T"); +- return storage_.is_null_ ? static_cast(std::forward(default_value)) +- : std::move(value()); ++ return storage_.is_populated_ ++ ? std::move(value()) ++ : static_cast(std::forward(default_value)); + } + + void swap(Optional& other) { +- if (storage_.is_null_ && other.storage_.is_null_) ++ if (!storage_.is_populated_ && !other.storage_.is_populated_) + return; + +- if (storage_.is_null_ != other.storage_.is_null_) { +- if (storage_.is_null_) { +- storage_.Init(std::move(other.storage_.value_)); +- other.FreeIfNeeded(); +- } else { ++ if (storage_.is_populated_ != other.storage_.is_populated_) { ++ if (storage_.is_populated_) { + other.storage_.Init(std::move(storage_.value_)); + FreeIfNeeded(); ++ } else { ++ storage_.Init(std::move(other.storage_.value_)); ++ other.FreeIfNeeded(); + } + return; + } + +- DCHECK(!storage_.is_null_ && !other.storage_.is_null_); ++ DCHECK(storage_.is_populated_ && other.storage_.is_populated_); + using std::swap; + swap(**this, *other); + } diff --git a/chromium-65.0.3325.146-workaround-gcc7-is_trivially_copy_constructable-failure.patch b/chromium-65.0.3325.146-workaround-gcc7-is_trivially_copy_constructable-failure.patch new file mode 100644 index 00000000..241dfb54 --- /dev/null +++ b/chromium-65.0.3325.146-workaround-gcc7-is_trivially_copy_constructable-failure.patch @@ -0,0 +1,55 @@ +diff -up chromium-65.0.3325.146/base/optional.h.784732 chromium-65.0.3325.146/base/optional.h +--- chromium-65.0.3325.146/base/optional.h.784732 2018-03-07 13:40:00.103579631 -0500 ++++ chromium-65.0.3325.146/base/optional.h 2018-03-07 13:41:08.950323996 -0500 +@@ -9,6 +9,7 @@ + #include + + #include "base/logging.h" ++#include "base/template_util.h" + + namespace base { + +@@ -106,7 +107,7 @@ struct OptionalStorageBase::value, ++ bool = is_trivially_copy_constructible::value, + bool = std::is_trivially_move_constructible::value> + struct OptionalStorage : OptionalStorageBase { + // This is no trivially {copy,move} constructible case. Other cases are +diff -up chromium-65.0.3325.146/base/template_util.h.784732 chromium-65.0.3325.146/base/template_util.h +--- chromium-65.0.3325.146/base/template_util.h.784732 2018-03-07 13:41:19.479131969 -0500 ++++ chromium-65.0.3325.146/base/template_util.h 2018-03-07 13:42:41.308639551 -0500 +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + + #include "build/build_config.h" + +@@ -127,6 +128,23 @@ template + using is_trivially_copyable = std::is_trivially_copyable; + #endif + ++#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ <= 7 ++// Workaround for g++7 and earlier family. ++// Due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80654, without this ++// Optional> where T is non-copyable causes a compile error. ++// As we know it is not trivially copy constructible, explicitly declare so. ++template ++struct is_trivially_copy_constructible ++ : std::is_trivially_copy_constructible {}; ++ ++template ++struct is_trivially_copy_constructible> : std::false_type {}; ++#else ++// Otherwise use std::is_trivially_copy_constructible as is. ++template ++using is_trivially_copy_constructible = std::is_trivially_copy_constructible; ++#endif ++ + } // namespace base + + #undef CR_USE_FALLBACKS_FOR_GCC_WITH_LIBCXX diff --git a/chromium-65.0.3325.146-wtf-oilpan-Remove-GC-checks-from-WTF-Optional-T.patch b/chromium-65.0.3325.146-wtf-oilpan-Remove-GC-checks-from-WTF-Optional-T.patch new file mode 100644 index 00000000..8b5ff7fe --- /dev/null +++ b/chromium-65.0.3325.146-wtf-oilpan-Remove-GC-checks-from-WTF-Optional-T.patch @@ -0,0 +1,61 @@ +diff -up chromium-65.0.3325.146/third_party/WebKit/Source/platform/heap/TraceTraits.h.oilpan chromium-65.0.3325.146/third_party/WebKit/Source/platform/heap/TraceTraits.h +--- chromium-65.0.3325.146/third_party/WebKit/Source/platform/heap/TraceTraits.h.oilpan 2018-03-13 16:45:40.613426445 -0400 ++++ chromium-65.0.3325.146/third_party/WebKit/Source/platform/heap/TraceTraits.h 2018-03-13 16:45:49.946244905 -0400 +@@ -18,6 +18,7 @@ + #include "platform/wtf/HashTable.h" + #include "platform/wtf/LinkedHashSet.h" + #include "platform/wtf/ListHashSet.h" ++#include "platform/wtf/Optional.h" + #include "platform/wtf/TypeTraits.h" + + namespace blink { +@@ -325,6 +326,23 @@ class TraceTrait> { + } + }; + ++// While using Optional with garbage-collected types is generally disallowed ++// by the OptionalGarbageCollected check in blink_gc_plugin, garbage-collected ++// containers such as HeapVector are allowed and need to be traced. ++template ++class TraceTrait> { ++ STATIC_ONLY(TraceTrait); ++ ++ public: ++ template ++ static void Trace(VisitorDispatcher visitor, WTF::Optional* optional) { ++ if (*optional != WTF::nullopt) { ++ TraceIfEnabled::value>::Trace(visitor, ++ optional->value()); ++ } ++ } ++}; ++ + // If eager tracing leads to excessively deep |trace()| call chains (and + // the system stack usage that this brings), the marker implementation will + // switch to using an explicit mark stack. Recursive and deep object graphs +diff -up chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h.oilpan chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h +--- chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h.oilpan 2018-03-13 16:46:01.683015951 -0400 ++++ chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h 2018-03-13 16:46:51.632043375 -0400 +@@ -7,20 +7,15 @@ + + #include "base/optional.h" + #include "platform/wtf/TemplateUtil.h" +-#include "platform/wtf/TypeTraits.h" + + namespace WTF { + + // WTF::Optional is base::Optional. See base/optional.h for documentation. + // + // A clang plugin enforces that garbage collected types are not allocated +-// outside of the heap, similarly we enforce that one doesn't create garbage +-// collected types nested inside an Optional. ++// outside of the heap. GC containers such as HeapVector are allowed though. + template +-using Optional = +- typename std::enable_if::value || +- IsPersistentReferenceType::value, +- base::Optional>::type; ++using Optional = base::Optional; + + constexpr base::nullopt_t nullopt = base::nullopt; + constexpr base::in_place_t in_place = base::in_place; diff --git a/chromium-65.0.3325.146-wtf-vector-fix.patch b/chromium-65.0.3325.146-wtf-vector-fix.patch new file mode 100644 index 00000000..e4bfeba4 --- /dev/null +++ b/chromium-65.0.3325.146-wtf-vector-fix.patch @@ -0,0 +1,54 @@ +diff -up chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/DEPS.jdp chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/DEPS +--- chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/DEPS.jdp 2018-03-07 13:54:42.653286576 -0500 ++++ chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/DEPS 2018-03-07 13:55:00.973903591 -0500 +@@ -16,6 +16,7 @@ include_rules = [ + "+base/process/process_metrics.h", + "+base/rand_util.h", + "+base/strings", ++ "+base/template_util.h", + "+base/threading/thread_checker.h", + "+base/time/time.h", + "+base/tuple.h", +diff -up chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h.jdp chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h +--- chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h.jdp 2018-03-07 13:56:29.053062331 -0500 ++++ chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/Optional.h 2018-03-07 13:56:36.595904651 -0500 +@@ -6,6 +6,7 @@ + #define Optional_h + + #include "base/optional.h" ++#include "platform/wtf/TemplateUtil.h" + #include "platform/wtf/TypeTraits.h" + + namespace WTF { +diff -up chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/TemplateUtil.h.jdp chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/TemplateUtil.h +--- chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/TemplateUtil.h.jdp 2018-03-07 13:56:47.356679702 -0500 ++++ chromium-65.0.3325.146/third_party/WebKit/Source/platform/wtf/TemplateUtil.h 2018-03-07 13:57:41.769542223 -0500 +@@ -0,0 +1,28 @@ ++// Copyright 2018 The Chromium Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++#ifndef TemplateUtil_h ++#define TemplateUtil_h ++ ++#include "base/template_util.h" ++#include "platform/wtf/Vector.h" ++ ++namespace base { ++ ++#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ <= 7 ++// Workaround for g++7 and earlier family. ++// Due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80654, without this ++// Optional> where T is non-copyable causes a compile error. ++// As we know it is not trivially copy constructible, explicitly declare so. ++// ++// It completes the declaration in base/template_util.h that was provided ++// for std::vector ++template ++struct is_trivially_copy_constructible> : std::false_type {}; ++#endif ++ ++} // namespace base ++ ++#endif // TemplateUtil_h ++ diff --git a/chromium.spec b/chromium.spec index 5fe1f183..e0cce6eb 100644 --- a/chromium.spec +++ b/chromium.spec @@ -26,7 +26,7 @@ # Requires is trickier. %global __provides_exclude_from %{chromium_path}/.*\\.so|%{chromium_path}/lib/.*\\.so -%global privlibs libaccessibility|libanimation|libaura_extra|libaura|libbase_i18n|libbase|libbindings|libblink_android_mojo_bindings_shared|libblink_common|libblink_controller|libblink_core_mojo_bindings_shared|libblink_core|libblink_modules|libblink_mojo_bindings_shared|libblink_offscreen_canvas_mojo_bindings_shared|libblink_platform|libbluetooth|libboringssl|libbrowser_ui_views|libcaptive_portal|libcapture_base|libcapture_lib|libcc_animation|libcc_base|libcc_blink|libcc_debug|libcc_ipc|libcc_paint|libcc|libcdm_manager|libchromium_sqlite3|libclearkeycdm|libclient|libcloud_policy_proto_generated_compile|libcodec|libcolor_space|libcommon|libcompositor|libcontent_common_mojo_bindings_shared|libcontent_public_common_mojo_bindings_shared|libcontent|libcpp|libcrcrypto|libdbus|libdevice_base|libdevice_event_log|libdevice_gamepad|libdevices|libdevice_vr_mojo_bindings_blink|libdevice_vr_mojo_bindings_shared|libdevice_vr_mojo_bindings|libdiscardable_memory_client|libdiscardable_memory_common|libdiscardable_memory_service|libdisplay|libdisplay_types|libdisplay_util|libdomain_reliability|libEGL|libembedder|libembedder_switches|libevents_base|libevents_devices_x11|libevents_ozone_layout|libevents|libevents_x|libffmpeg|libfingerprint|libfreetype_harfbuzz|libgcm|libgeolocation|libgeometry_skia|libgeometry|libgesture_detection|libgfx_ipc_color|libgfx_ipc_geometry|libgfx_ipc_skia|libgfx_ipc|libgfx|libgfx_switches|libgfx_x11|libgin|libgles2_c_lib|libgles2_implementation|libgles2_utils|libGLESv2|libgl_init|libgl_in_process_context|libgl_wrapper|libgpu|libgpu_util|libgtk3ui|libheadless|libhost|libicui18n|libicuuc|libipc_mojom_shared|libipc_mojom|libipc|libjs|libkeyboard|libkeyboard_with_content|libkeycodes_x11|libkeyed_service_content|libkeyed_service_core|libleveldatabase|libmanager|libmedia_blink|libmedia_devices_mojo_bindings_shared|libmedia_gpu|libmedia_mojo_services|libmedia|libmessage_center|libmessage_support|libmetrics_cpp|libmidi|libmojo_bindings_shared|libmojo_common_lib|libmojo_ime_lib|libmojo_platform_bindings_shared|libmojo_public_system_cpp|libmojo_public_system|libmojo_system_impl|libnative_theme|libnet|libnet_with_v8|libonc|libplatform|libpolicy_component|libpolicy_proto|libppapi_host|libppapi_proxy|libppapi_shared|libprefs|libprinting|libprotobuf_lite|libproxy_config|librange|libresource_coordinator_cpp|libresource_coordinator_public_interfaces_internal_shared|libsandbox_services|libsandbox|libseccomp_bpf|libsensors|libservice_manager_cpp|libservice_manager_cpp_types|libservice_manager_mojom_blink|libservice_manager_mojom_constants_blink|libservice_manager_mojom_constants_shared|libservice_manager_mojom_constants|libservice_manager_mojom_shared|libservice_manager_mojom|libservice|libsessions|libshared_memory_support|libshell_dialogs|libskia|libsnapshot|libsql|libstartup_tracing|libstorage_browser|libstorage_common|libstub_window|libsuid_sandbox_client|libsurface|libtracing|libui_base_ime|libui_base|libui_base_x|libui_data_pack|libui_devtools|libui_touch_selection|libui_views_mus_lib|liburl_ipc|liburl_matcher|liburl|libuser_manager|libuser_prefs|libv8_libbase|libv8_libplatform|libv8|libviews|libviz_common|libviz_resource_format|libVkLayer_core_validation|libVkLayer_object_tracker|libVkLayer_parameter_validation|libVkLayer_swapchain|libVkLayer_threading|libVkLayer_unique_objects|libwebdata_common|libweb_dialogs|libwebview|libwidevinecdmadapter|libwidevinecdm|libwm_public|libwm|libwtf|libx11_events_platform|libx11_window +%global privlibs libaccessibility|libanimation|libaura_extra|libaura|libbase_i18n|libbase|libbindings|libblink_android_mojo_bindings_shared|libblink_common|libblink_controller|libblink_core_mojo_bindings_shared|libblink_core|libblink_modules|libblink_mojo_bindings_shared|libblink_offscreen_canvas_mojo_bindings_shared|libblink_platform|libbluetooth|libboringssl|libbrowser_ui_views|libcaptive_portal|libcapture_base|libcapture_lib|libcbor|libcc_animation|libcc_base|libcc_blink|libcc_debug|libcc_ipc|libcc_paint|libcc|libcdm_manager|libchromium_sqlite3|libclearkeycdm|libclient|libcloud_policy_proto_generated_compile|libcodec|libcolor_space|libcommon|libcompositor|libcontent_common_mojo_bindings_shared|libcontent_public_common_mojo_bindings_shared|libcontent|libcpp|libcrash_key|libcrcrypto|libdbus|libdevice_base|libdevice_event_log|libdevice_features|libdevice_gamepad|libdevices|libdevice_vr_mojo_bindings_blink|libdevice_vr_mojo_bindings_shared|libdevice_vr_mojo_bindings|libdevice_vr|libdiscardable_memory_client|libdiscardable_memory_common|libdiscardable_memory_service|libdisplay|libdisplay_types|libdisplay_util|libdomain_reliability|libEGL|libembedder|libembedder_switches|libevents_base|libevents_devices_x11|libevents_ozone_layout|libevents|libevents_x|libffmpeg|libfingerprint|libfontconfig|libfreetype_harfbuzz|libgcm|libgeolocation|libgeometry_skia|libgeometry|libgesture_detection|libgfx_ipc_buffer_types|libgfx_ipc_color|libgfx_ipc_geometry|libgfx_ipc_skia|libgfx_ipc|libgfx|libgfx_switches|libgfx_x11|libgin|libgles2_c_lib|libgles2_implementation|libgles2|libgles2_utils|libGLESv2|libgl_init|libgl_in_process_context|libgl_wrapper|libgpu_ipc_service|libgpu|libgpu_util|libgtk3ui|libheadless|libhost|libicui18n|libicuuc|libipc_mojom_shared|libipc_mojom|libipc|libkeyboard|libkeyboard_with_content|libkeycodes_x11|libkeyed_service_content|libkeyed_service_core|libleveldatabase|libmanager|libmedia_blink|libmedia_devices_mojo_bindings_shared|libmedia_gpu|libmedia_mojo_services|libmedia|libmessage_center|libmessage_support|libmetrics_cpp|libmidi|libmojo_base_lib|libmojo_base_mojom_blink|libmojo_base_mojom_shared|libmojo_base_mojom|libmojo_base_shared_typemap_traits|libmojo_bindings_shared|libmojo_common_lib|libmojo_ime_lib|libmojo_platform_bindings_shared|libmojo_public_system_cpp|libmojo_public_system|libmojo_system_impl|libnative_theme|libnet|libnet_with_v8|libnetwork_session_configurator|libonc|libplatform|libpolicy_component|libpolicy_proto|libppapi_host|libppapi_proxy|libppapi_shared|libprefs|libprinting|libprotobuf_lite|libproxy_config|librange|libresource_coordinator_cpp_base|libresource_coordinator_cpp|libresource_coordinator_public_interfaces_blink|libresource_coordinator_public_interfaces_shared|libresource_coordinator_public_interfaces|libsandbox_services|libsandbox|libseccomp_bpf|libsensors|libservice_manager_cpp|libservice_manager_cpp_types|libservice_manager_mojom_blink|libservice_manager_mojom_constants_blink|libservice_manager_mojom_constants_shared|libservice_manager_mojom_constants|libservice_manager_mojom_shared|libservice_manager_mojom|libservice|libsessions|libshared_memory_support|libshell_dialogs|libskia|libsnapshot|libsql|libstartup_tracing|libstorage_browser|libstorage_common|libstub_window|libsuid_sandbox_client|libsurface|libtracing|libui_base_ime|libui_base|libui_base_x|libui_data_pack|libui_devtools|libui_touch_selection|libui_views_mus_lib|liburl_ipc|liburl_matcher|liburl|libuser_manager|libuser_prefs|libv8_libbase|libv8_libplatform|libv8|libviews|libviz_common|libviz_resource_format|libVkLayer_core_validation|libVkLayer_object_tracker|libVkLayer_parameter_validation|libVkLayer_threading|libVkLayer_unique_objects|libwebdata_common|libweb_dialogs|libwebview|libwidevinecdmadapter|libwidevinecdm|libwm_public|libwm|libwtf|libx11_events_platform|libx11_window %global __requires_exclude ^(%{privlibs})\\.so # If we build with shared on, then chrome-remote-desktop depends on chromium libs. @@ -116,7 +116,7 @@ Name: chromium%{chromium_channel}%{?freeworld:-freeworld} %else Name: chromium%{chromium_channel} %endif -Version: %{majorversion}.0.3325.146 +Version: %{majorversion}.0.3325.162 Release: 1%{?dist} Summary: A WebKit (Blink) powered web browser Url: http://www.chromium.org/Home @@ -206,6 +206,36 @@ Patch68: chromium-64.0.3282.167-gcc8-fabi11.patch # From Gentoo Patch69: chromium-math.h-r0.patch Patch70: chromium-stdint.patch +# Workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80654 +# crbug.com/784732#27 +# https://chromium-review.googlesource.com/c/chromium/src/+/927942 +Patch71: chromium-65.0.3325.146-workaround-gcc7-is_trivially_copy_constructable-failure.patch +# And https://bugs.chromium.org/p/chromium/issues/detail?id=816952 +Patch72: chromium-65.0.3325.146-wtf-vector-fix.patch +# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be6a1db8d644ae1e43/recipes-browser/chromium/files/0001-GCC-build-fix-base-Optional-T-requires-the-full-decl.patch +Patch73: chromium-65.0.3325.146-GCC-build-fix-base-Optional-T-requires-the-full-decl.patch +# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be6a1db8d644ae1e43/recipes-browser/chromium/files/0001-wtf-oilpan-Remove-GC-checks-from-WTF-Optional-T.patch +Patch74: chromium-65.0.3325.146-wtf-oilpan-Remove-GC-checks-from-WTF-Optional-T.patch +# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be6a1db8d644ae1e43/recipes-browser/chromium/files/0001-Fix-non-copyable-class-s-optional-move.patch +Patch75: chromium-65.0.3325.146-Fix-non-copyable-class-s-optional-move.patch +# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be6a1db8d644ae1e43/recipes-browser/chromium/files/0001-Use-affirmative-expression-in-base-Optional.patch +Patch76: chromium-65.0.3325.146-Use-affirmative-expression-in-base-Optional.patch +# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be6a1db8d644ae1e43/recipes-browser/chromium/files/0001-Implement-conditional-copy-move-ctors-assign-operato.patch +Patch77: chromium-65.0.3325.146-Implement-conditional-copy-move-ctors-assign-operato.patch +# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be6a1db8d644ae1e43/recipes-browser/chromium/files/0001-Implement-converting-constructors-from-Optional-U.patch +Patch78: chromium-65.0.3325.146-Implement-converting-constructors-from-Optional-U.patch +# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be6a1db8d644ae1e43/recipes-browser/chromium/files/0001-Implement-value-forward-constructor.patch +Patch79: chromium-65.0.3325.146-Implement-value-forward-constructor.patch +# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be6a1db8d644ae1e43/recipes-browser/chromium/files/0001-Update-non-copy-non-move-assign-operators.patch +Patch80: chromium-65.0.3325.146-Update-non-copy-non-move-assign-operators.patch +# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be6a1db8d644ae1e43/recipes-browser/chromium/files/0001-GCC-PlaybackImageProvider-Settings-do-not-provide-co.patch +Patch81: chromium-65.0.3325.146-GCC-PlaybackImageProvider-Settings-do-not-provide-co.patch +# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be6a1db8d644ae1e43/recipes-browser/chromium/files/0001-GCC-explicitely-std-move-to-base-Optional-instead-of.patch +Patch82: chromium-65.0.3325.146-GCC-explicitely-std-move-to-base-Optional-instead-of.patch +# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be6a1db8d644ae1e43/recipes-browser/chromium/files/0001-GCC-IDB-methods-String-renamed-to-GetString.patch +Patch83: chromium-65.0.3325.146-GCC-IDB-methods-String-renamed-to-GetString.patch +# https://github.com/lgsvl/meta-lgsvl-browser/blob/ac93e7622be66946c76504be6a1db8d644ae1e43/recipes-browser/chromium/files/0001-GCC-fully-declare-ConfigurationPolicyProvider.patch +Patch84: chromium-65.0.3325.146-GCC-fully-declare-ConfigurationPolicyProvider.patch # Use chromium-latest.py to generate clean tarball from released build tarballs, found here: # http://build.chromium.org/buildbot/official/ @@ -642,6 +672,20 @@ udev. %patch68 -p1 -b .fabi11 %patch69 -p1 -b .gentoo-math %patch70 -p1 -b .gentoo-stdint +%patch71 -p1 -b .gcc7-itcc +%patch72 -p1 -b .wtf-fix +%patch73 -p1 -b .fulldecl +%patch74 -p1 -b .oilpan +%patch75 -p1 -b .noncopyable +%patch76 -p1 -b .affirmative +%patch77 -p1 -b .conditional +%patch78 -p1 -b .converting +%patch79 -p1 -b .vforward +%patch80 -p1 -b .ncnm +%patch81 -p1 -b .pipcc +%patch82 -p1 -b .explicit-std-move +%patch83 -p1 -b .GetString +%patch84 -p1 -b .fully-declare %if 0%{?asan} export CC="clang" @@ -1075,7 +1119,7 @@ sed -i.orig -e 's/getenv("CHROME_VERSION_EXTRA")/"Fedora Project"/' $FILE # Do headless first. ../depot_tools/ninja -C %{headlesstarget} -vvv headless_shell -../depot_tools/ninja -C %{target} -vvv chrome chrome_sandbox chromedriver widevinecdmadapter clearkeycdm policy_templates +../depot_tools/ninja -C %{target} -vvv chrome chrome_sandbox chromedriver widevinecdmadapter clear_key_cdm policy_templates # remote client pushd remoting @@ -1505,6 +1549,9 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt %changelog +* Wed Mar 14 2018 Tom Callaway 65.0.3325.162-1 +- update to 65.0.3325.162 + * Wed Mar 7 2018 Tom Callaway 65.0.3325.146-1 - update to 65.0.3325.146 diff --git a/clean_ffmpeg.sh b/clean_ffmpeg.sh index f5c85a53..7c63d506 100755 --- a/clean_ffmpeg.sh +++ b/clean_ffmpeg.sh @@ -87,6 +87,7 @@ header_files=" libavcodec/x86/inline_asm.h \ libavcodec/h264chroma.h \ libavcodec/hpeldsp.h \ libavcodec/hwaccel.h \ + libavcodec/hwaccels.h \ libavcodec/idctdsp.h \ libavcodec/internal.h \ libavcodec/kbdwin.h \ @@ -109,6 +110,8 @@ header_files=" libavcodec/x86/inline_asm.h \ libavcodec/mpegvideodsp.h \ libavcodec/mpegvideoencdsp.h \ libavcodec/options_table.h \ + libavcodec/opus_celt.h \ + libavcodec/opus_pvq.h \ libavcodec/opus_rc.h \ libavcodec/pcm_tablegen.h \ libavcodec/pixblockdsp.h \ diff --git a/sources b/sources index 8b00246c..e3860a35 100644 --- a/sources +++ b/sources @@ -1,2 +1,3 @@ SHA512 (depot_tools.git-master.tar.gz) = d3d6a1873b2b0296a8cd99e0d8d2e629a17b1808934b4972556168f8b4ccea60577ebaeab4445baf15afb1b04080808db59a832a5b61d247bd48da14fa6acf03 SHA512 (chromium-65.0.3325.146-clean.tar.xz) = 18a45e41eb706fa87a707c89ee419b6a408132d763318c06cffca9e453f09a0e52a76089002ec1c25224d77a54eecc17013a6087dd4acdbd15df073fd7eff937 +SHA512 (chromium-65.0.3325.162-clean.tar.xz) = 6f8d2267ca27027a87515e0dfc4aafeb89b2344b994b48c0b7302dd56868e47df46f270c403f7311a2bbacaf5e1eb8b96b31141e9a99080e12321a0d38a618f5