Do not delete blink::WebRTCCertificateCallback on non-main thread
blink::WebRTCCertificateCallback has a blink::Persistent, which can not
be destroyed on the original thread. However, RTC implementation brings
it to a worker thread and occasionally deletes it on that thread, in
case the main thread is already gone.
This CL replaces the deleter of the std::unique_ptr that holds
WebRTCCertificateCallback with OnTaskRunnerDeleter, which ensures the
objects is deleted on the original thread.
BUG=627004
Review-Url: https://codereview.chromium.org/2164503002
Cr-Commit-Position: refs/heads/master@{#411965}
diff --git a/base/sequenced_task_runner.cc b/base/sequenced_task_runner.cc
index 00d40488..1bbcb9d 100644
--- a/base/sequenced_task_runner.cc
+++ b/base/sequenced_task_runner.cc
@@ -28,4 +28,17 @@
return PostNonNestableTask(from_here, Bind(releaser, object));
}
+OnTaskRunnerDeleter::OnTaskRunnerDeleter(
+ scoped_refptr<SequencedTaskRunner> task_runner)
+ : task_runner_(std::move(task_runner)) {
+}
+
+OnTaskRunnerDeleter::~OnTaskRunnerDeleter() {
+}
+
+OnTaskRunnerDeleter::OnTaskRunnerDeleter(OnTaskRunnerDeleter&&) = default;
+
+OnTaskRunnerDeleter& OnTaskRunnerDeleter::operator=(
+ OnTaskRunnerDeleter&&) = default;
+
} // namespace base