summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-02-10 11:44:20 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-02-11 11:39:03 +0000
commit1d119e1884d6ee26f1122136867c75fb50091d4f (patch)
tree50e1b2a0e16140946936f184844aec45e15c4318
parentc3dcc07f4f3f94ed510dc4bc646e0a897cc57860 (diff)
downloadqtwebengine-chromium-1d119e1884d6ee26f1122136867c75fb50091d4f.tar.gz
Fix building with MSVC 2017
Work-around various issues to make Chromium build on VS 2017 Change-Id: I582454dce657014d5cbb4864ea281a4c327172a4 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
-rw-r--r--chromium/base/containers/span.h14
-rw-r--r--chromium/base/immediate_crash.h6
-rw-r--r--chromium/base/parameter_pack.h23
-rw-r--r--chromium/base/task/promise/helpers.h4
-rw-r--r--chromium/base/task/promise/promise_value.h8
-rw-r--r--chromium/base/traits_bag.h15
-rw-r--r--chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc4
-rw-r--r--chromium/third_party/blink/renderer/platform/fonts/shaping/shape_result.cc8
-rw-r--r--chromium/third_party/blink/renderer/platform/loader/cors/cors_error_string.cc9
-rw-r--r--chromium/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.cc3
10 files changed, 71 insertions, 23 deletions
diff --git a/chromium/base/containers/span.h b/chromium/base/containers/span.h
index f866926f893..12ad2d608da 100644
--- a/chromium/base/containers/span.h
+++ b/chromium/base/containers/span.h
@@ -270,6 +270,7 @@ class span : public internal::ExtentStorage<Extent> {
// Conversion from a container that has compatible base::data() and integral
// base::size().
+#ifndef _MSC_VER
template <
typename Container,
internal::EnableIfSpanCompatibleContainerAndSpanIsDynamic<Container&,
@@ -301,7 +302,18 @@ class span : public internal::ExtentStorage<Extent> {
Extent> = false>
constexpr explicit span(const Container& container) noexcept
: span(base::data(container), base::size(container)) {}
-
+#else
+ // Visual Studio has problems with the double declarations above.
+ template <
+ typename Container,
+ typename = internal::EnableIfSpanCompatibleContainer<Container&, T>>
+ constexpr span(Container& container) noexcept
+ : span(base::data(container), base::size(container)) {}
+ template <typename Container,
+ typename = internal::EnableIfSpanCompatibleContainer<const Container&, T>>
+ constexpr span(const Container& container) noexcept
+ : span(base::data(container), base::size(container)) {}
+#endif
constexpr span(const span& other) noexcept = default;
// Conversions from spans of compatible types and extents: this allows a
diff --git a/chromium/base/immediate_crash.h b/chromium/base/immediate_crash.h
index 94158fe3ceb..14f09bea707 100644
--- a/chromium/base/immediate_crash.h
+++ b/chromium/base/immediate_crash.h
@@ -132,7 +132,11 @@
// calling function, but to this anonymous lambda. This is still useful as the
// full name of the lambda will typically include the name of the function that
// calls CHECK() and the debugger will still break at the right line of code.
-#if !defined(COMPILER_GCC)
+#if defined(COMPILER_MSVC) && !defined(__clang__)
+
+#define WRAPPED_TRAP_SEQUENCE_() TRAP_SEQUENCE1_()
+
+#elif !defined(COMPILER_GCC)
#define WRAPPED_TRAP_SEQUENCE_() TRAP_SEQUENCE_()
diff --git a/chromium/base/parameter_pack.h b/chromium/base/parameter_pack.h
index 8fec8fbac7e..3e13dd7f527 100644
--- a/chromium/base/parameter_pack.h
+++ b/chromium/base/parameter_pack.h
@@ -48,6 +48,29 @@ inline constexpr size_t count(std::initializer_list<T> ilist, T value) {
return c;
}
+template <class... Ts >
+struct if_all;
+
+template <>
+struct if_all<>
+ : std::integral_constant<bool, true> {};
+
+template <class T, class... Ts >
+struct if_all<T, Ts...>
+ : std::conditional<T::value, if_all<Ts...>, std::integral_constant<bool, false>>::type {};
+
+
+template <class... Ts >
+struct if_any;
+
+template <>
+struct if_any<>
+ : std::integral_constant<bool, false> {};
+
+template <class T, class... Ts >
+struct if_any<T, Ts...>
+ : std::conditional<T::value, std::integral_constant<bool, true>, if_any<Ts...>>::type {};
+
constexpr size_t pack_npos = -1;
template <typename... Ts>
diff --git a/chromium/base/task/promise/helpers.h b/chromium/base/task/promise/helpers.h
index 87d9ff64bec..0502b5f8ea3 100644
--- a/chromium/base/task/promise/helpers.h
+++ b/chromium/base/task/promise/helpers.h
@@ -165,9 +165,9 @@ struct UseMoveSemantics : public std::integral_constant<bool, UseMove<T>()> {
// to be moved according to UseMove<>.
template <typename... Ts>
struct UseMoveSemantics<std::tuple<Ts...>>
- : public std::integral_constant<bool, any_of({UseMove<Ts>()...})> {
+ : public if_any<UseMoveSemantics<Ts>...> {
static constexpr PromiseExecutor::ArgumentPassingType argument_passing_type =
- any_of({UseMove<Ts>()...})
+ if_any<UseMoveSemantics<Ts>...>::value
? PromiseExecutor::ArgumentPassingType::kMove
: PromiseExecutor::ArgumentPassingType::kNormal;
};
diff --git a/chromium/base/task/promise/promise_value.h b/chromium/base/task/promise/promise_value.h
index 3ca338845ff..cc51684cebb 100644
--- a/chromium/base/task/promise/promise_value.h
+++ b/chromium/base/task/promise/promise_value.h
@@ -43,8 +43,8 @@ struct Resolved {
// Conversion constructor accepts any arguments except Resolved<T>.
template <
typename... Args,
- std::enable_if_t<!all_of(
- {std::is_same<Resolved, std::decay_t<Args>>::value...})>* = nullptr>
+ std::enable_if_t<!if_all<
+ std::is_same<Resolved, std::decay_t<Args>>...>::value>* = nullptr>
Resolved(Args&&... args) noexcept : value(std::forward<Args>(args)...) {}
T value;
@@ -75,8 +75,8 @@ struct Rejected {
// Conversion constructor accepts any arguments except Rejected<T>.
template <
typename... Args,
- std::enable_if_t<!all_of(
- {std::is_same<Rejected, std::decay_t<Args>>::value...})>* = nullptr>
+ std::enable_if_t<!if_all<
+ std::is_same<Rejected, std::decay_t<Args>>...>::value>* = nullptr>
Rejected(Args&&... args) noexcept : value(std::forward<Args>(args)...) {
static_assert(!std::is_same<T, NoReject>::value,
"Can't have Rejected<NoReject>");
diff --git a/chromium/base/traits_bag.h b/chromium/base/traits_bag.h
index d6b1d7b56a3..c50ba1c9bd0 100644
--- a/chromium/base/traits_bag.h
+++ b/chromium/base/traits_bag.h
@@ -200,10 +200,12 @@ struct RequiredEnumTraitFilter : public BasicTraitFilter<ArgType> {
// Note EmptyTrait is always regarded as valid to support filtering.
template <class ValidTraits, class T>
-inline constexpr bool IsValidTrait() {
- return std::is_constructible<ValidTraits, T>::value ||
- std::is_same<T, EmptyTrait>::value;
-}
+struct IsValidTrait
+ : std::is_constructible<ValidTraits, T> {};
+
+template <class T>
+struct IsValidTrait<EmptyTrait, T>
+ : std::integral_constant<bool, true> {};
// Tests whether a given trait type is valid or invalid by testing whether it is
// convertible to the provided ValidTraits type. To use, define a ValidTraits
@@ -221,12 +223,11 @@ inline constexpr bool IsValidTrait() {
// MoreValidTraits(MyOtherTrait);
// ...
// };
+
template <class ValidTraits, class... ArgTypes>
struct AreValidTraits
: std::integral_constant<bool,
- all_of(
- {IsValidTrait<ValidTraits, ArgTypes>()...})> {
-};
+ if_all<IsValidTrait<ValidTraits, ArgTypes>...>::value> {};
// Helper to make getting an enum from a trait more readable.
template <typename Enum, typename... Args>
diff --git a/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc b/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
index 7e371d0776a..c42d8af65b9 100644
--- a/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
+++ b/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
@@ -205,8 +205,8 @@ class ReusingTextShaper final {
return shape_results;
for (const NGInlineItem *item = std::lower_bound(
reusable_items_->begin(), reusable_items_->end(), start_offset,
- [](const NGInlineItem&item, unsigned offset) {
- return item.EndOffset() <= offset;
+ [](const NGInlineItem& this_item, unsigned offset) {
+ return this_item.EndOffset() <= offset;
});
item != reusable_items_->end(); ++item) {
if (end_offset <= item->StartOffset())
diff --git a/chromium/third_party/blink/renderer/platform/fonts/shaping/shape_result.cc b/chromium/third_party/blink/renderer/platform/fonts/shaping/shape_result.cc
index 6cb415e4519..2f417229949 100644
--- a/chromium/third_party/blink/renderer/platform/fonts/shaping/shape_result.cc
+++ b/chromium/third_party/blink/renderer/platform/fonts/shaping/shape_result.cc
@@ -1130,9 +1130,11 @@ void ShapeResult::InsertRun(scoped_refptr<ShapeResult::RunInfo> run) {
return run->start_index_ > start_index;
};
- Vector<scoped_refptr<RunInfo>>::iterator iterator = std::lower_bound(
- runs_.begin(), runs_.end(), run->start_index_,
- HB_DIRECTION_IS_FORWARD(run->direction_) ? ltr_comparer : rtl_comparer);
+ Vector<scoped_refptr<RunInfo>>::iterator iterator;
+ if (HB_DIRECTION_IS_FORWARD(run->direction_))
+ iterator = std::lower_bound(runs_.begin(), runs_.end(), run->start_index_, ltr_comparer);
+ else
+ iterator = std::lower_bound(runs_.begin(), runs_.end(), run->start_index_, rtl_comparer);
if (iterator != runs_.end())
runs_.insert(iterator - runs_.begin(), std::move(run));
diff --git a/chromium/third_party/blink/renderer/platform/loader/cors/cors_error_string.cc b/chromium/third_party/blink/renderer/platform/loader/cors/cors_error_string.cc
index d428a2f5a64..059d8b4dac4 100644
--- a/chromium/third_party/blink/renderer/platform/loader/cors/cors_error_string.cc
+++ b/chromium/third_party/blink/renderer/platform/loader/cors/cors_error_string.cc
@@ -78,7 +78,8 @@ String GetErrorString(const network::CorsErrorStatus& status,
Append(builder,
{"(redirected from '", initial_request_url.GetString(), "') "});
}
- Append(builder, {"from origin '", origin.ToString(),
+ String originString = origin.ToString(); // StringView of temporary String is illegal.
+ Append(builder, {"from origin '", originString,
"' has been blocked by CORS policy: "});
if (IsPreflightError(status.cors_error)) {
@@ -155,11 +156,13 @@ String GetErrorString(const network::CorsErrorStatus& status,
"attribute.");
}
break;
- case CorsError::kCorsDisabledScheme:
+ case CorsError::kCorsDisabledScheme: {
+ String listOfCORSEnabledURLSchemes = SchemeRegistry::ListOfCorsEnabledURLSchemes();
Append(builder,
{"Cross origin requests are only supported for protocol schemes: ",
- SchemeRegistry::ListOfCorsEnabledURLSchemes(), "."});
+ listOfCORSEnabledURLSchemes, "."});
break;
+ }
case CorsError::kPreflightInvalidStatus:
builder.Append("It does not have HTTP ok status.");
break;
diff --git a/chromium/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.cc b/chromium/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.cc
index 1779e616c30..a7557b837db 100644
--- a/chromium/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.cc
+++ b/chromium/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.cc
@@ -685,11 +685,14 @@ void PageSchedulerImpl::PageLifecycleStateTracker::SetPageLifecycleState(
return;
base::Optional<PageLifecycleStateTransition> transition =
ComputePageLifecycleStateTransition(current_state_, new_state);
+#if !defined(OS_WIN) || !defined(TOOLKIT_QT)
+ // ### For some reason MSVC2017 just can't handle this
if (transition) {
UMA_HISTOGRAM_ENUMERATION(
kHistogramPageLifecycleStateTransition,
static_cast<PageLifecycleStateTransition>(transition.value()));
}
+#endif
if (page_scheduler_impl_->delegate_)
page_scheduler_impl_->delegate_->SetLifecycleState(new_state);
current_state_ = new_state;