Commit c1e775f0 authored by Marijn Kruisselbrink's avatar Marijn Kruisselbrink Committed by Commit Bot

Allow custom deleters for base::Owned.

And use that to fix test flakiness caused by the listener in
NativeFileSystemDirectoryHandleImpl::GetEntries sometimes not being
deleted on the right sequence.

Bug: 1035115
Change-Id: I03f404db002e8deb6cad885ba189e48333676a73
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1972774Reviewed-by: default avatarAlbert J. Wong <ajwong@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Commit-Queue: Marijn Kruisselbrink <mek@chromium.org>
Cr-Commit-Position: refs/heads/master@{#726191}
parent 4317a101
...@@ -363,9 +363,10 @@ static inline internal::OwnedWrapper<T> Owned(T* o) { ...@@ -363,9 +363,10 @@ static inline internal::OwnedWrapper<T> Owned(T* o) {
return internal::OwnedWrapper<T>(o); return internal::OwnedWrapper<T>(o);
} }
template <typename T> template <typename T, typename Deleter>
static inline internal::OwnedWrapper<T> Owned(std::unique_ptr<T>&& ptr) { static inline internal::OwnedWrapper<T, Deleter> Owned(
return internal::OwnedWrapper<T>(std::move(ptr)); std::unique_ptr<T, Deleter>&& ptr) {
return internal::OwnedWrapper<T, Deleter>(std::move(ptr));
} }
// Passed() is for transferring movable-but-not-copyable types (eg. unique_ptr) // Passed() is for transferring movable-but-not-copyable types (eg. unique_ptr)
......
...@@ -104,15 +104,16 @@ struct IgnoreResultHelper { ...@@ -104,15 +104,16 @@ struct IgnoreResultHelper {
T functor_; T functor_;
}; };
template <typename T> template <typename T, typename Deleter = std::default_delete<T>>
class OwnedWrapper { class OwnedWrapper {
public: public:
explicit OwnedWrapper(T* o) : ptr_(o) {} explicit OwnedWrapper(T* o) : ptr_(o) {}
explicit OwnedWrapper(std::unique_ptr<T>&& ptr) : ptr_(std::move(ptr)) {} explicit OwnedWrapper(std::unique_ptr<T, Deleter>&& ptr)
: ptr_(std::move(ptr)) {}
T* get() const { return ptr_.get(); } T* get() const { return ptr_.get(); }
private: private:
std::unique_ptr<T> ptr_; std::unique_ptr<T, Deleter> ptr_;
}; };
// PassedWrapper is a copyable adapter for a scoper that ignores const. // PassedWrapper is a copyable adapter for a scoper that ignores const.
...@@ -952,9 +953,11 @@ struct BindUnwrapTraits<internal::RetainedRefWrapper<T>> { ...@@ -952,9 +953,11 @@ struct BindUnwrapTraits<internal::RetainedRefWrapper<T>> {
static T* Unwrap(const internal::RetainedRefWrapper<T>& o) { return o.get(); } static T* Unwrap(const internal::RetainedRefWrapper<T>& o) { return o.get(); }
}; };
template <typename T> template <typename T, typename Deleter>
struct BindUnwrapTraits<internal::OwnedWrapper<T>> { struct BindUnwrapTraits<internal::OwnedWrapper<T, Deleter>> {
static T* Unwrap(const internal::OwnedWrapper<T>& o) { return o.get(); } static T* Unwrap(const internal::OwnedWrapper<T, Deleter>& o) {
return o.get();
}
}; };
template <typename T> template <typename T>
......
...@@ -173,9 +173,14 @@ void NativeFileSystemDirectoryHandleImpl::GetEntries( ...@@ -173,9 +173,14 @@ void NativeFileSystemDirectoryHandleImpl::GetEntries(
pending_listener) { pending_listener) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
auto listener = std::make_unique< std::unique_ptr<
mojo::Remote<blink::mojom::NativeFileSystemDirectoryEntriesListener>>( mojo::Remote<blink::mojom::NativeFileSystemDirectoryEntriesListener>,
std::move(pending_listener)); base::OnTaskRunnerDeleter>
listener(
new mojo::Remote<
blink::mojom::NativeFileSystemDirectoryEntriesListener>(
std::move(pending_listener)),
base::OnTaskRunnerDeleter(base::SequencedTaskRunnerHandle::Get()));
listener->reset_on_disconnect(); listener->reset_on_disconnect();
DoFileSystemOperation( DoFileSystemOperation(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment