| Index: third_party/WebKit/Source/wtf/Functional.h
|
| diff --git a/third_party/WebKit/Source/wtf/Functional.h b/third_party/WebKit/Source/wtf/Functional.h
|
| index 18be42ace56872ec3d235b15d9625a8011bdaa99..c64bfb68cf4bed64d3a2574bcdd861b13f2b86ef 100644
|
| --- a/third_party/WebKit/Source/wtf/Functional.h
|
| +++ b/third_party/WebKit/Source/wtf/Functional.h
|
| @@ -116,10 +116,10 @@ class PassedWrapper final {
|
| public:
|
| explicit PassedWrapper(T&& scoper) : m_scoper(std::move(scoper)) { }
|
| PassedWrapper(PassedWrapper&& other) : m_scoper(std::move(other.m_scoper)) { }
|
| - T moveOut() { return std::move(m_scoper); }
|
| + T moveOut() const { return std::move(m_scoper); }
|
|
|
| private:
|
| - T m_scoper;
|
| + mutable T m_scoper;
|
| };
|
|
|
| template <typename T>
|
| @@ -219,56 +219,54 @@ struct ParamStorageTraits {
|
|
|
| static_assert(!std::is_pointer<T>::value, "Raw pointers are not allowed to bind into WTF::Function. Wrap it with either wrapPersistent, wrapWeakPersistent, wrapCrossThreadPersistent, wrapCrossThreadWeakPersistent, RefPtr or unretained.");
|
| static_assert(!IsSubclassOfTemplate<T, blink::Member>::value && !IsSubclassOfTemplate<T, blink::WeakMember>::value, "Member and WeakMember are not allowed to bind into WTF::Function. Wrap it with either wrapPersistent, wrapWeakPersistent, wrapCrossThreadPersistent or wrapCrossThreadWeakPersistent.");
|
| -
|
| - static StorageType wrap(const T& value) { return value; } // Copy.
|
| - static StorageType wrap(T&& value) { return std::move(value); }
|
| -
|
| - // Don't move out, because the functor may be called multiple times.
|
| - static const T& unwrap(const StorageType& value) { return value; }
|
| };
|
|
|
| template <typename T>
|
| struct ParamStorageTraits<PassRefPtr<T>> {
|
| typedef RefPtr<T> StorageType;
|
| -
|
| - static StorageType wrap(PassRefPtr<T> value) { return value; }
|
| - static T* unwrap(const StorageType& value) { return value.get(); }
|
| };
|
|
|
| template <typename T>
|
| struct ParamStorageTraits<RefPtr<T>> {
|
| typedef RefPtr<T> StorageType;
|
| -
|
| - static StorageType wrap(RefPtr<T> value) { return value.release(); }
|
| - static T* unwrap(const StorageType& value) { return value.get(); }
|
| };
|
|
|
| +template <typename T>
|
| +T* Unwrap(const RefPtr<T>& wrapped)
|
| +{
|
| + return wrapped.get();
|
| +}
|
| +
|
| template <typename> class RetainPtr;
|
|
|
| template <typename T>
|
| struct ParamStorageTraits<RetainPtr<T>> {
|
| typedef RetainPtr<T> StorageType;
|
| -
|
| - static StorageType wrap(const RetainPtr<T>& value) { return value; }
|
| - static typename RetainPtr<T>::PtrType unwrap(const StorageType& value) { return value.get(); }
|
| };
|
|
|
| template <typename T>
|
| struct ParamStorageTraits<PassedWrapper<T>> {
|
| typedef PassedWrapper<T> StorageType;
|
| -
|
| - static StorageType wrap(PassedWrapper<T>&& value) { return std::move(value); }
|
| - static T unwrap(StorageType& value) { return value.moveOut(); }
|
| };
|
|
|
| +template <typename T>
|
| +T Unwrap(const PassedWrapper<T>& wrapped)
|
| +{
|
| + return wrapped.moveOut();
|
| +}
|
| +
|
| template <typename T, FunctionThreadAffinity threadAffinity>
|
| struct ParamStorageTraits<UnretainedWrapper<T, threadAffinity>> {
|
| typedef UnretainedWrapper<T, threadAffinity> StorageType;
|
| -
|
| - static StorageType wrap(const UnretainedWrapper<T, threadAffinity>& value) { return value; }
|
| - static T* unwrap(const StorageType& value) { return value.value(); }
|
| };
|
|
|
| +template <typename T, FunctionThreadAffinity threadAffinity>
|
| +T* Unwrap(const UnretainedWrapper<T, threadAffinity>& wrapped)
|
| +{
|
| + return wrapped.value();
|
| +}
|
| +
|
| +
|
| template<typename, FunctionThreadAffinity threadAffinity = SameThreadAffinity>
|
| class Function;
|
|
|
| @@ -332,7 +330,7 @@ public:
|
| // Note that BoundParameters can be const T&, T&& or a mix of these.
|
| explicit PartBoundFunctionImpl(FunctionWrapper functionWrapper, BoundParameters... bound)
|
| : m_functionWrapper(functionWrapper)
|
| - , m_bound(ParamStorageTraits<typename std::decay<BoundParameters>::type>::wrap(std::forward<BoundParameters>(bound))...)
|
| + , m_bound(std::forward<BoundParameters>(bound)...)
|
| {
|
| }
|
|
|
| @@ -349,7 +347,8 @@ private:
|
| {
|
| this->checkThread();
|
| // Get each element in m_bound, unwrap them, and call the function with the desired arguments.
|
| - return m_functionWrapper(ParamStorageTraits<typename std::decay<BoundParameters>::type>::unwrap(std::get<boundIndices>(m_bound))..., std::forward<IncomingUnboundParameters>(unbound)...);
|
| + using base::internal::Unwrap;
|
| + return m_functionWrapper(Unwrap(std::get<boundIndices>(m_bound))..., std::forward<IncomingUnboundParameters>(unbound)...);
|
| }
|
|
|
| FunctionWrapper m_functionWrapper;
|
|
|