summaryrefslogtreecommitdiff
path: root/www-client/chromium
diff options
context:
space:
mode:
Diffstat (limited to 'www-client/chromium')
-rw-r--r--www-client/chromium/Manifest8
-rw-r--r--www-client/chromium/chromium-135.0.6999.2.ebuild1
-rw-r--r--www-client/chromium/chromium-135.0.7023.0.ebuild (renamed from www-client/chromium/chromium-134.0.6958.2.ebuild)10
-rw-r--r--www-client/chromium/files/chromium-135-mv2-ungoogled.patch183
-rw-r--r--www-client/chromium/files/chromium-135-protobuf-RepeatedPtrField-export.patch13
5 files changed, 207 insertions, 8 deletions
diff --git a/www-client/chromium/Manifest b/www-client/chromium/Manifest
index f0cb112..1a1caeb 100644
--- a/www-client/chromium/Manifest
+++ b/www-client/chromium/Manifest
@@ -25,14 +25,16 @@ AUX chromium-131-use-oauth2-client-switches-as-default.patch 1194 BLAKE2B 040f81
AUX chromium-132-compiler.patch 12901 BLAKE2B 37be5fc8b2c546cffc0976d5c9f7f0849e4b9475c06891adf67ab6b7921b3dc92c105f21d30c38bf5106bbb4471161579533413cd46969df1f775b6dd24f4ad9 SHA512 089053f70731cc9b0eaabefb14fee0f8571c515ab37f7be1dbd6a0b368e727cf985eae7be60c205ee19e0b3925286abdcdd87ae2bd48159f8fad9b24a9da6dae
AUX chromium-134-EnumTable-crash.patch 3068 BLAKE2B 8b3bad8e20d6c3477495792279b1c58aa599e5934380d6efb26285a4348be8b98fe5869dc9ce9c83049e35f20f73ab9de7eb819002e6753aecd16ef7de734194 SHA512 5cd2da1407d150218595b3da7e76a2df7e12675e91c9bc2dce793f3801ed53705dada351865ead578ad6516ee5d19423f25021ab213bd9305eea8860f92f42b0
AUX chromium-134-gn-exec_script_allowlist.patch 2328 BLAKE2B d5e4ebeff797fa02b4e41da1cbc8f90bdfdf3250e627e387c8b482b5f163703e835da0e06e2d543d7d81fc990fa5093c6495fa5f7858b5c692a9d0b10fe21914 SHA512 c47330b69dd6fa1d0ca91ebf2927fe8f5c75c9e6a9ebb5959ed7590665b05d297c494222c786cba5c3530dcb8ad0fa08e87f0cb2942daeb403b812e5879b684f
+AUX chromium-135-mv2-ungoogled.patch 8653 BLAKE2B 21947e2a25bb5306c63c93de772c41a06e2199a318e90888197d8d7c04bc55ad445a0a5984e84ec6238b80043851b427e4ef1e627dfd41da100b3d1948f6be0c SHA512 d77df69c86b4d91ffb7dbeb8b5640bafab03845c69c50bb0dd9c8b23b4d5d1658f1b9866eb7d0f80a757625e5882f5c65297c6dafe8ed8337de7c2fe5fced032
+AUX chromium-135-protobuf-RepeatedPtrField-export.patch 812 BLAKE2B ba7d6eca5967bfe7324b384bea5b80feb2fdf9013bc32a618ab3fa18b6c143c889e1691c7a9fff501fe8d6c9794e28a2b3541e9aac97614bd1f4a4891e78ca89 SHA512 8d9ba3b598ce70d20635372427d7134d6ebf7951e9015124d8cf928e745b1f234c199929adcdfa738583fabb87800e154ef2219f15a9489f5b64a1e477b3930e
AUX chromium-browser.xml 407 BLAKE2B 168d78b0855546ca559cfb51aff0bc85d5e6ae974c25eb76e4a02f6d11659489c6e40397a0b2f7bc1fda336fd2c6dd8c863fccc3340719210b41c7fef51927f4 SHA512 b767fb4fd1925029d95560fc14cb7ab12ae43b2fe923e92d75e733b9723cbe1dcdf6df041a2b62554e98b79b47ef3f6028c773e72e6fd53166a021d49657aeca
AUX chromium-cross-compile.patch 323 BLAKE2B 8d5091ce5287422c9688ede2563360a96b8bd34b9750dc1c8f0b6ca9aeff2c066fac2da169396baa131d971c087c78f9af53999df0e102d1f57176f5e8d3dd57 SHA512 06d3afc1aa19e57daac0e4bad37e1f365a68408240430e5e818e5a4f12e3b7519214eafa463633e447e7029f4ae13ea864ca347ad1fac117702a0be88718a954
AUX chromium-launcher-r7.sh 1631 BLAKE2B ae28d758264446511fd2b64ba69fe920144b351e8833e0e98f43d00633e850094c288b5d97d1a84801ea13aceb294623692c86c1b9be5811b7b97fa8a07a1ecd SHA512 1e97f8394bd8bb4b29570b1b85176efe6258314a596f079bee1c4018113e0023aa54a93690ba8de2a00d127af10dbe2cc3fb3127b72b841c6f28f9e7bed820e0
AUX chromium-shim_headers.patch 1510 BLAKE2B 9716cd250b249c6255aca01a385ef8a2a6f1df9ea3cf7499715543c14f8be62fd323b6048b890aa2be45891e7a765d92de3f41c3b3a88c08dae4b806c048e20f SHA512 c74bcf690a41b4f9b364477d23408d493aa674e3bd014940098a594471297c2a425241f908510061b5f11c9cfe009c4a803370edd757d3c0ab8d9c0cc128135c
AUX chromium-use-oauth2-client-switches-as-default.patch 1085 BLAKE2B baf3c463305934c126af4f7c5be305863edc7eec3add5b5ada30565b49b5944021eb40f1a9643e7eec3f973c502d9b02426f00b760570fcea5f1509219e41c6f SHA512 fe2878ee45778bac894ea17a668511d27ad2ca40988d5f11439790b700bfefd6560f3931415b4e6c543fcbbfc7cfef55cc757ed4ace1d111039ae78c46b81945
AUX chromium.default 148 BLAKE2B 5ee5b582c59a6e4bef87bbb0e232e2470ad412b1fbbb3b9af6ef7153edb55c5b9080cc16a5a115b0c5b3c381aa87ce57a7b12bdd2070e67dac10a6c2995ddbaf SHA512 0d4849e03592fb58b05e62a43021eca7e61615616c8907c3b2e445402e03adaf9e8fa25b0a745d6c31eb037456215cc02b59e345a3a06d932e76cf990c92d739
-DIST chromium-134.0.6958.2.tar.xz 7384605804 BLAKE2B 24977021b6a2892bf6786f1443a146826a6da1c15b3d701075b59a42656046c7669b16563039f0f14da1b41dcc176880bb7d5fc725cf6c8d1c1979caaeea26c2 SHA512 0a1742d912ce376c976724339dc24c1568146fbd97bba8df77e9069440411e10a06fa135a5f6f098e9b2551f4cb2e93d99a53d91b8e4c03e51ad46350811ca66
DIST chromium-135.0.6999.2.tar.xz 7004861732 BLAKE2B c03d771863e69568bb1d5502ed017903d25006eb9c4e0532391811507cb68702006d73a4821fc6b2a6f29e722601bd6d5a6d9972daca79b3472ed8b5867896f3 SHA512 fcdf3c2b3fe69f0d2cc4c7268216f935ec25f35d5e621bcf764f449f0760376e993ee2177210230aafb3738035a0aa9d03b1917314613f5742f27297e30e8404
+DIST chromium-135.0.7023.0.tar.xz 6994083592 BLAKE2B 097202e647c386218f33e7ef8f03f115def0ad85c46faa94d233a05d43c2e25cdea16f34de7ff42fe279b23a1874e27adfafe7b95648edbf02b2fe1799e8fa1f SHA512 01a68c3387fccb35b4c48ad039e2420bff863f670fb6075a9c7cd0ce9130038ed2617ce2abad0c1cf383e4f5e189d01b97e4429589cecdba4755ef7d1ef72d83
DIST chromium-profiler-0.2.tar 259952640 BLAKE2B 5e82389fce00b267280d633b26551231c558b80f0c92cd7d60271095a3503365ab673e7a46dc5f74f8a82db1f21262cb24dcc0531d954bab5fb3b175dab3394d SHA512 9fa89a5ab728419683e7495ae676567480987d68a2d589f2aa97bfcbcf123f3c8f97f8bca5f65e5e3f6e41475535add473ded83b9c7a33bb4746a9d05b298a6c
-EBUILD chromium-134.0.6958.2.ebuild 40434 BLAKE2B 9dbd035678c84df995030f89e168f2d2b6f161de02e107306d99d00532c97827d34a89e7b6e3cfee8f327fc62a641a6d3bb70ed7a64639a1dd3cf65a17537cff SHA512 21c0116e7b6193f77d0fa640cdcab2c19c1a8788fb0537df0a597df5d74f64abec08e27d634bb77501e9df72b966d8d219f1620b2f748071b913bc8b8ed2c91a
-EBUILD chromium-135.0.6999.2.ebuild 40442 BLAKE2B b6dbc03c04685bf9f88bcf57740bb1ebec828b80f687f7690a32ff702ac83f9e97bc164d48c4d0ffd1e3568a60e7f5a9b20fd784f06ec9211bf844ee1e4f8238 SHA512 a5eef924ff07e313033114a1d4bcc2c3152118946421a1c17dd7f4a9d0f36f47ad0ab6e217760d5a92266f1be9c392894a511f23817e3b3ac238bfed69642624
+EBUILD chromium-135.0.6999.2.ebuild 40476 BLAKE2B bf189c621aebb0c01e40f9e294e789889d494cc2348ce49f75d7cf09791435343b69bee42e87cddc911044b399ce8daf9044cc153be0fa3bd8627665432fabfb SHA512 2d917f72a0c1c508163124484a6ff81cab8047018ef57ae7240fbab9794ab81fb67a96200175e790f60d9b36ef45ec0de193d907cf102bdfe6e738bc5ceaf783
+EBUILD chromium-135.0.7023.0.ebuild 40470 BLAKE2B 775d2a5f0479096302c7ebe84d06e6e7a156e6ad2e5a04537915abb88f69fad9288381592a8ffa499178e2a9fb1045960369a73c2f06e739425bac803532d0f9 SHA512 5a7d39d6d911016d956d5127e8505b4f55fad442d9d0f395ac6971d6510a90a8e2a360ae19019867a9750c3f8885eddfc5411156dfb9a1001d024b3cae5114b5
diff --git a/www-client/chromium/chromium-135.0.6999.2.ebuild b/www-client/chromium/chromium-135.0.6999.2.ebuild
index fe01d33..e371cb5 100644
--- a/www-client/chromium/chromium-135.0.6999.2.ebuild
+++ b/www-client/chromium/chromium-135.0.6999.2.ebuild
@@ -537,6 +537,7 @@ src_prepare() {
third_party/rnnoise
third_party/rust
third_party/s2cellid
+ third_party/search_engines_data
third_party/securemessage
third_party/selenium-atoms
third_party/sentencepiece
diff --git a/www-client/chromium/chromium-134.0.6958.2.ebuild b/www-client/chromium/chromium-135.0.7023.0.ebuild
index ddd7729..262e910 100644
--- a/www-client/chromium/chromium-134.0.6958.2.ebuild
+++ b/www-client/chromium/chromium-135.0.7023.0.ebuild
@@ -260,9 +260,6 @@ pre_build_checks() {
if needs_clang || tc-is-clang; then
tc-is-cross-compiler && CPP=${CBUILD}-clang++ || CPP=${CHOST}-clang++
CPP+=" -E"
- if ! ver_test "$(clang-major-version)" -ge 13; then
- die "At least clang 13 is required"
- fi
fi
fi
@@ -318,13 +315,14 @@ src_prepare() {
python_setup
local PATCHES=(
- "${FILESDIR}/chromium-105-protobuf-RepeatedPtrField-export.patch"
+ "${FILESDIR}/chromium-135-protobuf-RepeatedPtrField-export.patch"
"${FILESDIR}/chromium-132-compiler.patch"
"${FILESDIR}/chromium-119-minizip.patch"
"${FILESDIR}/chromium-118-material-color-utils.patch"
"${FILESDIR}/chromium-126-freetype-blink.patch"
"${FILESDIR}/chromium-124-metrics-histograms-nodepotbin.patch"
"${FILESDIR}/chromium-134-gn-exec_script_allowlist.patch"
+ "${FILESDIR}/chromium-135-mv2-ungoogled.patch"
"${FILESDIR}/chromium-111-InkDropHost-crash.patch"
"${FILESDIR}/chromium-134-EnumTable-crash.patch"
@@ -474,7 +472,6 @@ src_prepare() {
third_party/leveldatabase
third_party/lens_server_proto
third_party/libaddressinput
- third_party/libavif
third_party/libdrm
third_party/libgav1
third_party/libjingle
@@ -530,6 +527,7 @@ src_prepare() {
third_party/private-join-and-compute
third_party/private_membership
third_party/protobuf
+ third_party/protobuf/third_party/utf8_range
third_party/pthreadpool
third_party/puffin
third_party/pyjson5
@@ -538,6 +536,7 @@ src_prepare() {
third_party/rnnoise
third_party/rust
third_party/s2cellid
+ third_party/search_engines_data
third_party/securemessage
third_party/selenium-atoms
third_party/sentencepiece
@@ -602,6 +601,7 @@ src_prepare() {
v8/third_party/valgrind
v8/third_party/glibc
v8/third_party/inspector_protocol
+ v8/third_party/rapidhash-v8
v8/third_party/v8
# gyp -> gn leftovers
diff --git a/www-client/chromium/files/chromium-135-mv2-ungoogled.patch b/www-client/chromium/files/chromium-135-mv2-ungoogled.patch
new file mode 100644
index 0000000..db276b3
--- /dev/null
+++ b/www-client/chromium/files/chromium-135-mv2-ungoogled.patch
@@ -0,0 +1,183 @@
+diff --git a/chrome/browser/extensions/api/developer_private/extension_info_generator.cc b/chrome/browser/extensions/api/developer_private/extension_info_generator.cc
+index e330cb7163..08da10083a 100644
+--- a/chrome/browser/extensions/api/developer_private/extension_info_generator.cc
++++ b/chrome/browser/extensions/api/developer_private/extension_info_generator.cc
+@@ -618,17 +618,6 @@ void ExtensionInfoGenerator::CreateExtensionInfoHelper(
+ info->controlled_info.emplace();
+ info->controlled_info->text =
+ l10n_util::GetStringUTF8(IDS_EXTENSIONS_INSTALL_LOCATION_ENTERPRISE);
+- } else {
+- // Create Safety Hub information for any non-enterprise extension.
+- developer::SafetyCheckWarningReason warning_reason =
+- ExtensionSafetyCheckUtils::GetSafetyCheckWarningReason(extension,
+- profile);
+- if (warning_reason != developer::SafetyCheckWarningReason::kNone) {
+- info->safety_check_warning_reason = warning_reason;
+- info->safety_check_text =
+- ExtensionSafetyCheckUtils::GetSafetyCheckWarningStrings(
+- warning_reason, state);
+- }
+ }
+
+ bool is_enabled = state == developer::ExtensionState::kEnabled;
+diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/extensions/extension_management.cc
+index eb2350fca9..f13816a016 100644
+--- a/chrome/browser/extensions/extension_management.cc
++++ b/chrome/browser/extensions/extension_management.cc
+@@ -318,31 +318,7 @@ bool ExtensionManagement::IsAllowedManifestVersion(
+ int manifest_version,
+ const std::string& extension_id,
+ Manifest::Type manifest_type) {
+- bool enabled_by_default =
+- !base::FeatureList::IsEnabled(
+- extensions_features::kExtensionsManifestV3Only) ||
+- manifest_version >= 3;
+-
+- // Manifest version policy only supports normal extensions and Chrome OS login
+- // screen extension.
+- if (manifest_type != Manifest::Type::TYPE_EXTENSION &&
+- manifest_type != Manifest::Type::TYPE_LOGIN_SCREEN_EXTENSION) {
+- return enabled_by_default;
+- }
+- switch (global_settings_->manifest_v2_setting) {
+- case internal::GlobalSettings::ManifestV2Setting::kDefault:
+- return enabled_by_default;
+- case internal::GlobalSettings::ManifestV2Setting::kDisabled:
+- return manifest_version >= 3;
+- case internal::GlobalSettings::ManifestV2Setting::kEnabled:
+ return true;
+- case internal::GlobalSettings::ManifestV2Setting::kEnabledForForceInstalled:
+- auto installation_mode =
+- GetInstallationMode(extension_id, /*update_url=*/std::string());
+- return manifest_version >= 3 ||
+- installation_mode == INSTALLATION_FORCED ||
+- installation_mode == INSTALLATION_RECOMMENDED;
+- }
+ }
+
+ bool ExtensionManagement::IsAllowedManifestVersion(const Extension* extension) {
+@@ -363,26 +339,8 @@ bool ExtensionManagement::IsExemptFromMV2DeprecationByPolicy(
+ return false;
+ }
+
+- switch (global_settings_->manifest_v2_setting) {
+- case internal::GlobalSettings::ManifestV2Setting::kDefault:
+- // Default browser behavior. Not exempt.
+- return false;
+- case internal::GlobalSettings::ManifestV2Setting::kDisabled:
+- // All MV2 extensions are disallowed. Not exempt.
+- return false;
+- case internal::GlobalSettings::ManifestV2Setting::kEnabled:
+ // All MV2 extensions are allowed. Exempt.
+ return true;
+- case internal::GlobalSettings::ManifestV2Setting::kEnabledForForceInstalled:
+- // Force-installed MV2 extensions are allowed. Exempt if it's a force-
+- // installed extension only.
+- auto installation_mode =
+- GetInstallationMode(extension_id, /*update_url=*/std::string());
+- return installation_mode == INSTALLATION_FORCED ||
+- installation_mode == INSTALLATION_RECOMMENDED;
+- }
+-
+- return false;
+ }
+
+ bool ExtensionManagement::IsAllowedByUnpublishedAvailabilityPolicy(
+diff --git a/chrome/browser/extensions/keyed_services/chrome_browser_context_keyed_service_factories.cc b/chrome/browser/extensions/keyed_services/chrome_browser_context_keyed_service_factories.cc
+index 555fd894e8..3f042548bd 100644
+--- a/chrome/browser/extensions/keyed_services/chrome_browser_context_keyed_service_factories.cc
++++ b/chrome/browser/extensions/keyed_services/chrome_browser_context_keyed_service_factories.cc
+@@ -23,7 +23,6 @@
+ #include "chrome/browser/extensions/extension_web_ui_override_registrar.h"
+ #include "chrome/browser/extensions/install_tracker_factory.h"
+ #include "chrome/browser/extensions/install_verifier_factory.h"
+-#include "chrome/browser/extensions/manifest_v2_experiment_manager.h"
+ #include "chrome/browser/extensions/menu_manager_factory.h"
+ #include "chrome/browser/extensions/permissions/permissions_updater.h"
+ #include "chrome/browser/extensions/plugin_manager.h"
+@@ -55,7 +54,6 @@ void EnsureChromeBrowserContextKeyedServiceFactoriesBuilt() {
+ extensions::ChromeExtensionSystemFactory::GetInstance();
+ extensions::InstallTrackerFactory::GetInstance();
+ extensions::InstallVerifierFactory::GetInstance();
+- extensions::ManifestV2ExperimentManager::GetFactory();
+ extensions::MenuManagerFactory::GetInstance();
+ extensions::PermissionsUpdater::EnsureAssociatedFactoryBuilt();
+ #if BUILDFLAG(ENABLE_PLUGINS)
+diff --git a/chrome/browser/extensions/manifest_v2_experiment_manager.cc b/chrome/browser/extensions/manifest_v2_experiment_manager.cc
+index 2e47e928e3..81ad199a24 100644
+--- a/chrome/browser/extensions/manifest_v2_experiment_manager.cc
++++ b/chrome/browser/extensions/manifest_v2_experiment_manager.cc
+@@ -145,22 +145,6 @@ bool ManifestV2ExperimentManagerFactory::ServiceIsCreatedWithBrowserContext()
+
+ // Determines the current stage of the MV2 deprecation experiments.
+ MV2ExperimentStage CalculateCurrentExperimentStage() {
+- // Return the "highest" stage that is currently active for the user.
+- if (base::FeatureList::IsEnabled(
+- extensions_features::kExtensionManifestV2Unsupported)) {
+- return MV2ExperimentStage::kUnsupported;
+- }
+-
+- if (base::FeatureList::IsEnabled(
+- extensions_features::kExtensionManifestV2Disabled)) {
+- return MV2ExperimentStage::kDisableWithReEnable;
+- }
+-
+- if (base::FeatureList::IsEnabled(
+- extensions_features::kExtensionManifestV2DeprecationWarning)) {
+- return MV2ExperimentStage::kWarning;
+- }
+-
+ return MV2ExperimentStage::kNone;
+ }
+
+@@ -200,19 +184,7 @@ PrefMap GetGlobalNoticeAcknowledgedPrefFor(
+ // Returns true if legacy extensions should be disabled, looking at both
+ // experiment stage and global state.
+ bool ShouldDisableLegacyExtensions(MV2ExperimentStage stage) {
+- if (g_allow_mv2_for_testing) {
+- // We allow legacy MV2 extensions for testing purposes.
+- return false;
+- }
+-
+- switch (stage) {
+- case MV2ExperimentStage::kNone:
+- case MV2ExperimentStage::kWarning:
+ return false;
+- case MV2ExperimentStage::kDisableWithReEnable:
+- case MV2ExperimentStage::kUnsupported:
+- return true;
+- }
+ }
+
+ // Returns true if the given `stage` is one in which extension enablement should
+diff --git a/chrome/browser/ui/webui/extensions/extensions_ui.cc b/chrome/browser/ui/webui/extensions/extensions_ui.cc
+index 057dc619e9..52d0e388c9 100644
+--- a/chrome/browser/ui/webui/extensions/extensions_ui.cc
++++ b/chrome/browser/ui/webui/extensions/extensions_ui.cc
+@@ -477,7 +477,7 @@ content::WebUIDataSource* CreateAndAddExtensionsSource(Profile* profile,
+ extensions_features::kExtensionsMenuAccessControlWithPermittedSites));
+ source->AddBoolean(
+ "safetyHubThreeDotDetails",
+- base::FeatureList::IsEnabled(features::kSafetyHubThreeDotDetails));
++ false);
+
+ // TODO(crbug.com/392777363): Clean these up with non-placeholder values.
+ #if BUILDFLAG(IS_ANDROID)
+diff --git a/extensions/common/extension.cc b/extensions/common/extension.cc
+index 833ea42681..dfd41632bd 100644
+--- a/extensions/common/extension.cc
++++ b/extensions/common/extension.cc
+@@ -96,13 +96,6 @@ bool IsManifestSupported(int manifest_version,
+ // Supported versions are always safe.
+ if (manifest_version >= kMinimumSupportedManifestVersion &&
+ manifest_version <= kMaximumSupportedManifestVersion) {
+- // Emit a warning for unpacked extensions on Manifest V2 warning that
+- // MV2 is deprecated.
+- if (type == Manifest::TYPE_EXTENSION && manifest_version == 2 &&
+- Manifest::IsUnpackedLocation(location) &&
+- !g_silence_deprecated_manifest_version_warnings) {
+- *warning = errors::kManifestV2IsDeprecatedWarning;
+- }
+ return true;
+ }
+
diff --git a/www-client/chromium/files/chromium-135-protobuf-RepeatedPtrField-export.patch b/www-client/chromium/files/chromium-135-protobuf-RepeatedPtrField-export.patch
new file mode 100644
index 0000000..5d336bd
--- /dev/null
+++ b/www-client/chromium/files/chromium-135-protobuf-RepeatedPtrField-export.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/protobuf/src/google/protobuf/repeated_ptr_field.h b/third_party/protobuf/src/google/protobuf/repeated_ptr_field.h
+index 36ca1c65c9..30baf169ef 100644
+--- a/third_party/protobuf/src/google/protobuf/repeated_ptr_field.h
++++ b/third_party/protobuf/src/google/protobuf/repeated_ptr_field.h
+@@ -926,7 +926,7 @@ class GenericTypeHandler<std::string> {
+ // RepeatedPtrField is like RepeatedField, but used for repeated strings or
+ // Messages.
+ template <typename Element>
+-class RepeatedPtrField final : private internal::RepeatedPtrFieldBase {
++class PROTOBUF_EXPORT RepeatedPtrField final : private internal::RepeatedPtrFieldBase {
+ static_assert(!std::is_const<Element>::value,
+ "We do not support const value types.");
+ static_assert(!std::is_volatile<Element>::value,