[go: nahoru, domu]

Remove base::ResetAndReturn usage. Switch to bool callback checks.

base::ResetAndReturn is deprecated and .is_null() syntax is onerous.

Mechanically done via:
git grep --name-only "base::ResetAndReturn(\&" | \
    xargs sed -i "s/base::ResetAndReturn(\&/std::move(/g"
git grep --name-only -e "_cb_\.is_null\(\)" *.cc | \
    xargs sed -ri "s/!([a-zA-Z0-9_]*)_cb_\.is_null\(\)/\1_cb_/g"
git grep --name-only -e "_cb_\.is_null\(\)" *.cc | \
    xargs sed -ri "s/([a-zA-Z0-9_]*)_cb_\.is_null\(\)/\!\1_cb_/g"
git grep --name-only -e "_cb\.is_null\(\)" *.cc | \
    xargs sed -ri "s/!([a-zA-Z0-9_]*)_cb\.is_null\(\)/\1_cb/g"
git grep --name-only -e "_cb\.is_null\(\)" *.cc | \
    xargs sed -ri "s/([a-zA-Z0-9_]*)_cb\.is_null\(\)/\!\1_cb/g"

Bug: none
Test: compiles, passes cq
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: I7bb2bd9da08a4749b69bfbc6d3f471a1cfc1d6c0
Reviewed-on: https://chromium-review.googlesource.com/1239200
Reviewed-by: Xiaohan Wang <xhwang@chromium.org>
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#593351}
diff --git a/media/audio/mock_audio_manager.cc b/media/audio/mock_audio_manager.cc
index 9f0686f..d8b9e14 100644
--- a/media/audio/mock_audio_manager.cc
+++ b/media/audio/mock_audio_manager.cc
@@ -35,7 +35,7 @@
 void MockAudioManager::GetAudioInputDeviceDescriptions(
     AudioDeviceDescriptions* device_descriptions) {
   DCHECK(GetTaskRunner()->BelongsToCurrentThread());
-  if (get_input_device_descriptions_cb_.is_null())
+  if (!get_input_device_descriptions_cb_)
     return;
   get_input_device_descriptions_cb_.Run(device_descriptions);
 }
@@ -43,7 +43,7 @@
 void MockAudioManager::GetAudioOutputDeviceDescriptions(
     AudioDeviceDescriptions* device_descriptions) {
   DCHECK(GetTaskRunner()->BelongsToCurrentThread());
-  if (get_output_device_descriptions_cb_.is_null())
+  if (!get_output_device_descriptions_cb_)
     return;
   get_output_device_descriptions_cb_.Run(device_descriptions);
 }
@@ -58,20 +58,16 @@
 media::AudioOutputStream* MockAudioManager::MakeAudioOutputStreamProxy(
     const media::AudioParameters& params,
     const std::string& device_id) {
-  if (make_output_stream_cb_) {
-    return make_output_stream_cb_.Run(params, device_id);
-  }
-  return nullptr;
+  return make_output_stream_cb_ ? make_output_stream_cb_.Run(params, device_id)
+                                : nullptr;
 }
 
 media::AudioInputStream* MockAudioManager::MakeAudioInputStream(
     const media::AudioParameters& params,
     const std::string& device_id,
     const LogCallback& log_callback) {
-  if (make_input_stream_cb_) {
-    return make_input_stream_cb_.Run(params, device_id);
-  }
-  return nullptr;
+  return make_input_stream_cb_ ? make_input_stream_cb_.Run(params, device_id)
+                               : nullptr;
 }
 
 void MockAudioManager::AddOutputDeviceChangeListener(
@@ -102,9 +98,9 @@
 std::string MockAudioManager::GetAssociatedOutputDeviceID(
     const std::string& input_device_id) {
   DCHECK(GetTaskRunner()->BelongsToCurrentThread());
-  return get_associated_output_device_id_cb_.is_null()
-             ? std::string()
-             : get_associated_output_device_id_cb_.Run(input_device_id);
+  return get_associated_output_device_id_cb_
+             ? get_associated_output_device_id_cb_.Run(input_device_id)
+             : std::string();
 }
 
 std::string MockAudioManager::GetDefaultInputDeviceID() {
diff --git a/media/audio/virtual_audio_input_stream.cc b/media/audio/virtual_audio_input_stream.cc
index 660fb669..ee4239d0 100644
--- a/media/audio/virtual_audio_input_stream.cc
+++ b/media/audio/virtual_audio_input_stream.cc
@@ -122,7 +122,7 @@
   // If a non-null AfterCloseCallback was provided to the constructor, invoke it
   // here.  The callback is moved to a stack-local first since |this| could be
   // destroyed during Run().
-  if (!after_close_cb_.is_null()) {
+  if (after_close_cb_) {
     const AfterCloseCallback cb = after_close_cb_;
     after_close_cb_.Reset();
     cb.Run(this);
diff --git a/media/audio/virtual_audio_output_stream.cc b/media/audio/virtual_audio_output_stream.cc
index e7e5255..a7ba1dec 100644
--- a/media/audio/virtual_audio_output_stream.cc
+++ b/media/audio/virtual_audio_output_stream.cc
@@ -58,7 +58,7 @@
   // If a non-null AfterCloseCallback was provided to the constructor, invoke it
   // here.  The callback is moved to a stack-local first since |this| could be
   // destroyed during Run().
-  if (!after_close_cb_.is_null()) {
+  if (after_close_cb_) {
     const AfterCloseCallback cb = after_close_cb_;
     after_close_cb_.Reset();
     cb.Run(this);
diff --git a/media/audio/virtual_audio_sink.cc b/media/audio/virtual_audio_sink.cc
index 41b3066..9db8da4 100644
--- a/media/audio/virtual_audio_sink.cc
+++ b/media/audio/virtual_audio_sink.cc
@@ -44,9 +44,8 @@
 
 void VirtualAudioSink::Close() {
   target_->RemoveInputProvider(this, params_);
-  const AfterCloseCallback& cb = base::ResetAndReturn(&after_close_callback_);
-  if (!cb.is_null())
-    cb.Run(this);
+  if (after_close_callback_)
+    std::move(after_close_callback_).Run(this);
 }
 
 void VirtualAudioSink::OnData(std::unique_ptr<AudioBus> source,
diff --git a/media/base/android/media_codec_bridge_impl.cc b/media/base/android/media_codec_bridge_impl.cc
index 9946bae..dbc41b7 100644
--- a/media/base/android/media_codec_bridge_impl.cc
+++ b/media/base/android/media_codec_bridge_impl.cc
@@ -225,7 +225,7 @@
       Java_MediaCodecBridgeBuilder_createAudioDecoder(
           env, j_mime, media_crypto, config.samples_per_second(), channel_count,
           j_csd0, j_csd1, j_csd2, output_frame_has_adts_header,
-          !on_buffers_available_cb.is_null()));
+          !!on_buffers_available_cb));
 
   if (j_bridge.is_null())
     return nullptr;
@@ -274,7 +274,7 @@
       Java_MediaCodecBridgeBuilder_createVideoDecoder(
           env, j_mime, static_cast<int>(codec_type), media_crypto, size.width(),
           size.height(), surface, j_csd0, j_csd1, j_hdr_metadata,
-          allow_adaptive_playback, !on_buffers_available_cb.is_null()));
+          allow_adaptive_playback, !!on_buffers_available_cb));
   if (j_bridge.is_null())
     return nullptr;
 
@@ -329,7 +329,7 @@
       j_bridge_(std::move(j_bridge)) {
   DCHECK(!j_bridge_.is_null());
 
-  if (on_buffers_available_cb_.is_null())
+  if (!on_buffers_available_cb_)
     return;
 
   DCHECK_GE(base::android::BuildInfo::GetInstance()->sdk_int(),
diff --git a/media/base/android/media_drm_bridge.cc b/media/base/android/media_drm_bridge.cc
index 83b34c4..9685db3 100644
--- a/media/base/android/media_drm_bridge.cc
+++ b/media/base/android/media_drm_bridge.cc
@@ -573,7 +573,7 @@
     const ResetCredentialsCB& callback) {
   DVLOG(1) << __func__;
 
-  DCHECK(reset_credentials_cb_.is_null());
+  DCHECK(!reset_credentials_cb_);
   reset_credentials_cb_ = callback;
   JNIEnv* env = AttachCurrentThread();
   Java_MediaDrmBridge_resetDeviceCredentials(env, j_media_drm_);
@@ -616,18 +616,18 @@
 
   DVLOG(1) << __func__;
 
-  if (media_crypto_ready_cb.is_null()) {
+  if (!media_crypto_ready_cb) {
     media_crypto_ready_cb_.Reset();
     return;
   }
 
-  DCHECK(media_crypto_ready_cb_.is_null());
+  DCHECK(!media_crypto_ready_cb_);
   media_crypto_ready_cb_ = media_crypto_ready_cb;
 
   if (!j_media_crypto_)
     return;
 
-  base::ResetAndReturn(&media_crypto_ready_cb_)
+  std::move(media_crypto_ready_cb_)
       .Run(CreateJavaObjectPtr(j_media_crypto_->obj()),
            IsSecureCodecRequired());
 }
@@ -798,10 +798,9 @@
     const JavaParamRef<jobject>&,
     bool success) {
   DVLOG(2) << __func__ << ": success:" << success;
-  DCHECK(!reset_credentials_cb_.is_null());
+  DCHECK(reset_credentials_cb_);
   task_runner_->PostTask(
-      FROM_HERE,
-      base::Bind(base::ResetAndReturn(&reset_credentials_cb_), success));
+      FROM_HERE, base::BindOnce(std::move(reset_credentials_cb_), success));
 }
 
 //------------------------------------------------------------------------------
@@ -876,9 +875,8 @@
 
   player_tracker_.NotifyCdmUnset();
 
-  if (!media_crypto_ready_cb_.is_null()) {
-    base::ResetAndReturn(&media_crypto_ready_cb_)
-        .Run(CreateJavaObjectPtr(nullptr), false);
+  if (media_crypto_ready_cb_) {
+    std::move(media_crypto_ready_cb_).Run(CreateJavaObjectPtr(nullptr), false);
   }
 
   // Rejects all pending promises.
@@ -904,11 +902,11 @@
   UMA_HISTOGRAM_BOOLEAN("Media.EME.MediaCryptoAvailable",
                         !j_media_crypto_->is_null());
 
-  if (media_crypto_ready_cb_.is_null())
+  if (!media_crypto_ready_cb_)
     return;
 
   // We have to use scoped_ptr to pass ScopedJavaGlobalRef with a callback.
-  base::ResetAndReturn(&media_crypto_ready_cb_)
+  std::move(media_crypto_ready_cb_)
       .Run(CreateJavaObjectPtr(j_media_crypto_->obj()),
            IsSecureCodecRequired());
 }
diff --git a/media/base/callback_holder.h b/media/base/callback_holder.h
index ea3cd7f..b77f022 100644
--- a/media/base/callback_holder.h
+++ b/media/base/callback_holder.h
@@ -39,19 +39,19 @@
   void RunOrHold() {
     DCHECK(held_cb_.is_null());
     if (hold_)
-      held_cb_ = base::ResetAndReturn(&original_cb_);
+      held_cb_ = std::move(original_cb_);
     else
-      base::ResetAndReturn(&original_cb_).Run();
+      std::move(original_cb_).Run();
   }
 
   template <typename... Args>
   void RunOrHold(Args&&... args) {
     DCHECK(held_cb_.is_null());
     if (hold_) {
-      held_cb_ = base::BindOnce(base::ResetAndReturn(&original_cb_),
-                                std::forward<Args>(args)...);
+      held_cb_ =
+          base::BindOnce(std::move(original_cb_), std::forward<Args>(args)...);
     } else {
-      base::ResetAndReturn(&original_cb_).Run(std::forward<Args>(args)...);
+      std::move(original_cb_).Run(std::forward<Args>(args)...);
     }
   }
 
@@ -60,7 +60,7 @@
     DCHECK(hold_);
     DCHECK(!held_cb_.is_null());
     hold_ = false;
-    base::ResetAndReturn(&held_cb_).Run();
+    std::move(held_cb_).Run();
   }
 
  private:
diff --git a/media/base/cdm_callback_promise.cc b/media/base/cdm_callback_promise.cc
index 788ecde..103507f7 100644
--- a/media/base/cdm_callback_promise.cc
+++ b/media/base/cdm_callback_promise.cc
@@ -14,8 +14,8 @@
     base::OnceCallback<void(const T&...)> resolve_cb,
     PromiseRejectedCB reject_cb)
     : resolve_cb_(std::move(resolve_cb)), reject_cb_(std::move(reject_cb)) {
-  DCHECK(!resolve_cb_.is_null());
-  DCHECK(!reject_cb_.is_null());
+  DCHECK(resolve_cb_);
+  DCHECK(reject_cb_);
 }
 
 template <typename... T>
@@ -23,7 +23,7 @@
   if (IsPromiseSettled())
     return;
 
-  DCHECK(!resolve_cb_.is_null() && !reject_cb_.is_null());
+  DCHECK(resolve_cb_ && reject_cb_);
   RejectPromiseOnDestruction();
 }
 
diff --git a/media/base/fake_audio_worker.cc b/media/base/fake_audio_worker.cc
index 66c8756..54e0f8d 100644
--- a/media/base/fake_audio_worker.cc
+++ b/media/base/fake_audio_worker.cc
@@ -89,20 +89,20 @@
 }
 
 FakeAudioWorker::Worker::~Worker() {
-  DCHECK(worker_cb_.is_null());
+  DCHECK(!worker_cb_);
 }
 
 bool FakeAudioWorker::Worker::IsStopped() {
   base::AutoLock scoped_lock(worker_cb_lock_);
-  return worker_cb_.is_null();
+  return !worker_cb_;
 }
 
 void FakeAudioWorker::Worker::Start(const base::Closure& worker_cb) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  DCHECK(!worker_cb.is_null());
+  DCHECK(worker_cb);
   {
     base::AutoLock scoped_lock(worker_cb_lock_);
-    DCHECK(worker_cb_.is_null());
+    DCHECK(!worker_cb_);
     worker_cb_ = worker_cb;
   }
   worker_task_runner_->PostTask(FROM_HERE, base::Bind(&Worker::DoStart, this));
@@ -119,7 +119,7 @@
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   {
     base::AutoLock scoped_lock(worker_cb_lock_);
-    if (worker_cb_.is_null())
+    if (!worker_cb_)
       return;
     worker_cb_.Reset();
   }
@@ -136,7 +136,7 @@
 
   {
     base::AutoLock scoped_lock(worker_cb_lock_);
-    if (!worker_cb_.is_null())
+    if (worker_cb_)
       worker_cb_.Run();
   }
 
diff --git a/media/base/fake_demuxer_stream.cc b/media/base/fake_demuxer_stream.cc
index ee5db19..a327a38a 100644
--- a/media/base/fake_demuxer_stream.cc
+++ b/media/base/fake_demuxer_stream.cc
@@ -68,7 +68,7 @@
 
 void FakeDemuxerStream::Read(const ReadCB& read_cb) {
   DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(read_cb_.is_null());
+  DCHECK(!read_cb_);
 
   read_cb_ = BindToCurrentLoop(read_cb);
 
@@ -115,7 +115,7 @@
 void FakeDemuxerStream::SatisfyRead() {
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK_EQ(read_to_hold_, next_read_num_);
-  DCHECK(!read_cb_.is_null());
+  DCHECK(read_cb_);
 
   read_to_hold_ = -1;
   DoRead();
@@ -124,7 +124,7 @@
 void FakeDemuxerStream::SatisfyReadAndHoldNext() {
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK_EQ(read_to_hold_, next_read_num_);
-  DCHECK(!read_cb_.is_null());
+  DCHECK(read_cb_);
 
   ++read_to_hold_;
   DoRead();
@@ -133,15 +133,15 @@
 void FakeDemuxerStream::Reset() {
   read_to_hold_ = -1;
 
-  if (!read_cb_.is_null())
-    base::ResetAndReturn(&read_cb_).Run(kAborted, NULL);
+  if (read_cb_)
+    std::move(read_cb_).Run(kAborted, NULL);
 }
 
 void FakeDemuxerStream::Error() {
   read_to_hold_ = -1;
 
-  if (!read_cb_.is_null())
-    base::ResetAndReturn(&read_cb_).Run(kError, nullptr);
+  if (read_cb_)
+    std::move(read_cb_).Run(kError, nullptr);
 }
 
 void FakeDemuxerStream::SeekToStart() {
@@ -166,22 +166,21 @@
 
 void FakeDemuxerStream::DoRead() {
   DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(!read_cb_.is_null());
+  DCHECK(read_cb_);
 
   next_read_num_++;
 
   if (num_buffers_left_in_current_config_ == 0) {
     // End of stream.
     if (num_configs_left_ == 0) {
-      base::ResetAndReturn(&read_cb_).Run(kOk,
-                                          DecoderBuffer::CreateEOSBuffer());
+      std::move(read_cb_).Run(kOk, DecoderBuffer::CreateEOSBuffer());
       return;
     }
 
     // Config change.
     num_buffers_left_in_current_config_ = num_buffers_in_one_config_;
     UpdateVideoDecoderConfig();
-    base::ResetAndReturn(&read_cb_).Run(kConfigChanged, NULL);
+    std::move(read_cb_).Run(kConfigChanged, NULL);
     return;
   }
 
@@ -203,7 +202,7 @@
     num_configs_left_--;
 
   num_buffers_returned_++;
-  base::ResetAndReturn(&read_cb_).Run(kOk, buffer);
+  std::move(read_cb_).Run(kOk, buffer);
 }
 
 FakeMediaResource::FakeMediaResource(int num_video_configs,
diff --git a/media/base/fake_text_track_stream.cc b/media/base/fake_text_track_stream.cc
index 62b1b65..011060c 100644
--- a/media/base/fake_text_track_stream.cc
+++ b/media/base/fake_text_track_stream.cc
@@ -21,12 +21,12 @@
 }
 
 FakeTextTrackStream::~FakeTextTrackStream() {
-  DCHECK(read_cb_.is_null());
+  DCHECK(!read_cb_);
 }
 
 void FakeTextTrackStream::Read(const ReadCB& read_cb) {
-  DCHECK(!read_cb.is_null());
-  DCHECK(read_cb_.is_null());
+  DCHECK(read_cb);
+  DCHECK(!read_cb_);
   OnRead();
   read_cb_ = read_cb;
 
@@ -48,7 +48,7 @@
     const std::string& id,
     const std::string& content,
     const std::string& settings) {
-  DCHECK(!read_cb_.is_null());
+  DCHECK(read_cb_);
 
   const uint8_t* const data_buf =
       reinterpret_cast<const uint8_t*>(content.data());
@@ -71,22 +71,22 @@
   // Assume all fake text buffers are keyframes.
   buffer->set_is_key_frame(true);
 
-  base::ResetAndReturn(&read_cb_).Run(kOk, buffer);
+  std::move(read_cb_).Run(kOk, buffer);
 }
 
 void FakeTextTrackStream::AbortPendingRead() {
-  DCHECK(!read_cb_.is_null());
-  base::ResetAndReturn(&read_cb_).Run(kAborted, NULL);
+  DCHECK(read_cb_);
+  std::move(read_cb_).Run(kAborted, NULL);
 }
 
 void FakeTextTrackStream::SendEosNotification() {
-  DCHECK(!read_cb_.is_null());
-  base::ResetAndReturn(&read_cb_).Run(kOk, DecoderBuffer::CreateEOSBuffer());
+  DCHECK(read_cb_);
+  std::move(read_cb_).Run(kOk, DecoderBuffer::CreateEOSBuffer());
 }
 
 void FakeTextTrackStream::Stop() {
   stopping_ = true;
-  if (!read_cb_.is_null())
+  if (read_cb_)
     AbortPendingRead();
 }
 
diff --git a/media/base/mock_filters.cc b/media/base/mock_filters.cc
index f43b881..0cb8b411 100644
--- a/media/base/mock_filters.cc
+++ b/media/base/mock_filters.cc
@@ -236,7 +236,7 @@
   }
 
   // Since there is a CDM, call |before_creation_cb_| first.
-  if (!before_creation_cb_.is_null())
+  if (before_creation_cb_)
     before_creation_cb_.Run();
 
   // Create and return a new MockCdm. Keep a pointer to the created CDM so
diff --git a/media/base/null_video_sink.cc b/media/base/null_video_sink.cc
index f5ae913..a91a813f 100644
--- a/media/base/null_video_sink.cc
+++ b/media/base/null_video_sink.cc
@@ -44,8 +44,8 @@
   DCHECK(task_runner_->BelongsToCurrentThread());
   cancelable_worker_.Cancel();
   started_ = false;
-  if (!stop_cb_.is_null())
-    base::ResetAndReturn(&stop_cb_).Run();
+  if (stop_cb_)
+    std::move(stop_cb_).Run();
 }
 
 void NullVideoSink::CallRender() {
@@ -58,7 +58,7 @@
   DCHECK(new_frame);
   const bool is_new_frame = new_frame != last_frame_;
   last_frame_ = new_frame;
-  if (is_new_frame && !new_frame_cb_.is_null())
+  if (is_new_frame && new_frame_cb_)
     new_frame_cb_.Run(new_frame);
 
   current_render_time_ += interval_;
@@ -93,7 +93,7 @@
     return;
 
   last_frame_ = frame;
-  if (!new_frame_cb_.is_null())
+  if (new_frame_cb_)
     new_frame_cb_.Run(frame);
 }
 
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc
index 00e9503..b706f2a7 100644
--- a/media/base/pipeline_impl.cc
+++ b/media/base/pipeline_impl.cc
@@ -997,8 +997,8 @@
   DVLOG(2) << __func__;
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(!client_) << "Stop() must complete before destroying object";
-  DCHECK(seek_cb_.is_null());
-  DCHECK(suspend_cb_.is_null());
+  DCHECK(!seek_cb_);
+  DCHECK(!suspend_cb_);
   DCHECK(!weak_factory_.HasWeakPtrs());
 
   // RendererWrapper is deleted on the media thread.
@@ -1015,10 +1015,10 @@
   DCHECK(demuxer);
   DCHECK(renderer);
   DCHECK(client);
-  DCHECK(!seek_cb.is_null());
+  DCHECK(seek_cb);
 
   DCHECK(!client_);
-  DCHECK(seek_cb_.is_null());
+  DCHECK(!seek_cb_);
   client_ = client;
   seek_cb_ = seek_cb;
   last_media_time_ = base::TimeDelta();
@@ -1081,14 +1081,14 @@
 void PipelineImpl::Seek(base::TimeDelta time, const PipelineStatusCB& seek_cb) {
   DVLOG(2) << __func__ << " to " << time.InMicroseconds();
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(!seek_cb.is_null());
+  DCHECK(seek_cb);
 
   if (!IsRunning()) {
     DLOG(ERROR) << "Media pipeline isn't running. Ignoring Seek().";
     return;
   }
 
-  DCHECK(seek_cb_.is_null());
+  DCHECK(!seek_cb_);
   seek_cb_ = seek_cb;
   seek_time_ = time;
   last_media_time_ = base::TimeDelta();
@@ -1099,10 +1099,10 @@
 
 void PipelineImpl::Suspend(const PipelineStatusCB& suspend_cb) {
   DVLOG(2) << __func__;
-  DCHECK(!suspend_cb.is_null());
+  DCHECK(suspend_cb);
 
   DCHECK(IsRunning());
-  DCHECK(suspend_cb_.is_null());
+  DCHECK(!suspend_cb_);
   suspend_cb_ = suspend_cb;
 
   media_task_runner_->PostTask(
@@ -1116,10 +1116,10 @@
   DVLOG(2) << __func__;
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(renderer);
-  DCHECK(!seek_cb.is_null());
+  DCHECK(seek_cb);
 
   DCHECK(IsRunning());
-  DCHECK(seek_cb_.is_null());
+  DCHECK(!seek_cb_);
   seek_cb_ = seek_cb;
   seek_time_ = time;
   last_media_time_ = base::TimeDelta();
@@ -1234,7 +1234,7 @@
   DVLOG(2) << __func__;
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(cdm_context);
-  DCHECK(!cdm_attached_cb.is_null());
+  DCHECK(cdm_attached_cb);
 
   media_task_runner_->PostTask(
       FROM_HERE,
@@ -1275,13 +1275,13 @@
   // If the error happens during starting/seeking/suspending/resuming,
   // report the error via the completion callback for those tasks.
   // Else report error via the client interface.
-  if (!seek_cb_.is_null()) {
-    base::ResetAndReturn(&seek_cb_).Run(error);
+  if (seek_cb_) {
+    std::move(seek_cb_).Run(error);
     return;
   }
 
-  if (!suspend_cb_.is_null()) {
-    base::ResetAndReturn(&suspend_cb_).Run(error);
+  if (suspend_cb_) {
+    std::move(suspend_cb_).Run(error);
     return;
   }
 
@@ -1407,8 +1407,8 @@
   seek_time_ = kNoTimestamp;
   is_suspended_ = is_suspended;
 
-  DCHECK(!seek_cb_.is_null());
-  base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK);
+  DCHECK(seek_cb_);
+  std::move(seek_cb_).Run(PIPELINE_OK);
 }
 
 void PipelineImpl::OnSuspendDone() {
@@ -1417,8 +1417,8 @@
   DCHECK(IsRunning());
 
   is_suspended_ = true;
-  DCHECK(!suspend_cb_.is_null());
-  base::ResetAndReturn(&suspend_cb_).Run(PIPELINE_OK);
+  DCHECK(suspend_cb_);
+  std::move(suspend_cb_).Run(PIPELINE_OK);
 }
 
 }  // namespace media
diff --git a/media/base/serial_runner.cc b/media/base/serial_runner.cc
index 1c7e84f..52751cc 100644
--- a/media/base/serial_runner.cc
+++ b/media/base/serial_runner.cc
@@ -98,10 +98,10 @@
 
 void SerialRunner::RunNextInSeries(PipelineStatus last_status) {
   DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(!done_cb_.is_null());
+  DCHECK(done_cb_);
 
   if (bound_fns_.empty() || last_status != PIPELINE_OK) {
-    base::ResetAndReturn(&done_cb_).Run(last_status);
+    std::move(done_cb_).Run(last_status);
     return;
   }
 
diff --git a/media/base/text_renderer.cc b/media/base/text_renderer.cc
index 22c59d8..88640f6b 100644
--- a/media/base/text_renderer.cc
+++ b/media/base/text_renderer.cc
@@ -31,18 +31,18 @@
 TextRenderer::~TextRenderer() {
   DCHECK(task_runner_->BelongsToCurrentThread());
   text_track_state_map_.clear();
-  if (!pause_cb_.is_null())
-    base::ResetAndReturn(&pause_cb_).Run();
+  if (pause_cb_)
+    std::move(pause_cb_).Run();
 }
 
 void TextRenderer::Initialize(const base::Closure& ended_cb) {
   DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(!ended_cb.is_null());
+  DCHECK(ended_cb);
   DCHECK_EQ(kUninitialized, state_)  << "state_ " << state_;
   DCHECK(text_track_state_map_.empty());
   DCHECK_EQ(pending_read_count_, 0);
   DCHECK(pending_eos_set_.empty());
-  DCHECK(ended_cb_.is_null());
+  DCHECK(!ended_cb_);
 
   ended_cb_ = ended_cb;
   state_ = kPaused;
@@ -157,7 +157,7 @@
       case kPausePending:
         if (pending_read_count_ == 0) {
           state_ = kPaused;
-          base::ResetAndReturn(&pause_cb_).Run();
+          std::move(pause_cb_).Run();
         }
 
         return;
@@ -253,7 +253,7 @@
       }
 
       state_ = kPaused;
-      base::ResetAndReturn(&pause_cb_).Run();
+      std::move(pause_cb_).Run();
 
       return;
     }
@@ -284,7 +284,7 @@
   if (pending_read_count_ == 0) {
       DCHECK_EQ(state_, kPausePending) << "state_ " << state_;
       state_ = kPaused;
-      base::ResetAndReturn(&pause_cb_).Run();
+      std::move(pause_cb_).Run();
   }
 }
 
diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc
index 3338045..c4928ad8 100644
--- a/media/base/video_frame.cc
+++ b/media/base/video_frame.cc
@@ -880,13 +880,13 @@
 #endif
 
 void VideoFrame::SetReleaseMailboxCB(ReleaseMailboxCB release_mailbox_cb) {
-  DCHECK(!release_mailbox_cb.is_null());
-  DCHECK(mailbox_holders_release_cb_.is_null());
+  DCHECK(release_mailbox_cb);
+  DCHECK(!mailbox_holders_release_cb_);
   mailbox_holders_release_cb_ = std::move(release_mailbox_cb);
 }
 
 bool VideoFrame::HasReleaseMailboxCB() const {
-  return !mailbox_holders_release_cb_.is_null();
+  return !!mailbox_holders_release_cb_;
 }
 
 void VideoFrame::AddDestructionObserver(base::OnceClosure callback) {
@@ -1042,7 +1042,7 @@
                  timestamp) {}
 
 VideoFrame::~VideoFrame() {
-  if (!mailbox_holders_release_cb_.is_null()) {
+  if (mailbox_holders_release_cb_) {
     gpu::SyncToken release_sync_token;
     {
       // To ensure that changes to |release_sync_token_| are visible on this
@@ -1050,11 +1050,11 @@
       base::AutoLock locker(release_sync_token_lock_);
       release_sync_token = release_sync_token_;
     }
-    base::ResetAndReturn(&mailbox_holders_release_cb_).Run(release_sync_token);
+    std::move(mailbox_holders_release_cb_).Run(release_sync_token);
   }
 
   for (auto& callback : done_callbacks_)
-    base::ResetAndReturn(&callback).Run();
+    std::move(callback).Run();
 }
 
 // static
diff --git a/media/blink/multibuffer_data_source.cc b/media/blink/multibuffer_data_source.cc
index 6932acd..0bd2e5c 100644
--- a/media/blink/multibuffer_data_source.cc
+++ b/media/blink/multibuffer_data_source.cc
@@ -115,7 +115,7 @@
 void MultibufferDataSource::ReadOperation::Run(
     std::unique_ptr<ReadOperation> read_op,
     int result) {
-  base::ResetAndReturn(&read_op->callback_).Run(result);
+  std::move(read_op->callback_).Run(result);
 }
 
 MultibufferDataSource::MultibufferDataSource(
@@ -143,7 +143,7 @@
       weak_factory_(this) {
   weak_ptr_ = weak_factory_.GetWeakPtr();
   DCHECK(host_);
-  DCHECK(!downloading_cb_.is_null());
+  DCHECK(downloading_cb_);
   DCHECK(render_task_runner_->BelongsToCurrentThread());
   DCHECK(url_data_);
   url_data_->Use();
@@ -194,7 +194,7 @@
 
 void MultibufferDataSource::Initialize(const InitializeCB& init_cb) {
   DCHECK(render_task_runner_->BelongsToCurrentThread());
-  DCHECK(!init_cb.is_null());
+  DCHECK(init_cb);
   DCHECK(!reader_.get());
 
   init_cb_ = init_cb;
@@ -225,7 +225,7 @@
   if (!destination) {
     // A failure occured.
     failed_ = true;
-    if (!init_cb_.is_null()) {
+    if (init_cb_) {
       render_task_runner_->PostTask(
           FROM_HERE,
           base::Bind(&MultibufferDataSource::StartCallback, weak_ptr_));
@@ -246,7 +246,7 @@
     url_data_->OnRedirect(
         base::Bind(&MultibufferDataSource::OnRedirect, weak_ptr_));
 
-    if (!init_cb_.is_null()) {
+    if (init_cb_) {
       CreateResourceLoader(0, kPositionNotSpecified);
       if (reader_->Available()) {
         render_task_runner_->PostTask(
@@ -288,7 +288,7 @@
     return false;
 
   // If init_cb is set, we know initialization is not finished yet.
-  if (!init_cb_.is_null())
+  if (init_cb_)
     return false;
   if (failed_)
     return false;
@@ -337,7 +337,7 @@
 
 void MultibufferDataSource::Abort() {
   base::AutoLock auto_lock(lock_);
-  DCHECK(init_cb_.is_null());
+  DCHECK(!init_cb_);
   if (read_op_)
     ReadOperation::Run(std::move(read_op_), kAborted);
 
@@ -387,8 +387,8 @@
                                  const DataSource::ReadCB& read_cb) {
   DVLOG(1) << "Read: " << position << " offset, " << size << " bytes";
   // Reading is not allowed until after initialization.
-  DCHECK(init_cb_.is_null());
-  DCHECK(!read_cb.is_null());
+  DCHECK(!init_cb_);
+  DCHECK(read_cb);
 
   {
     base::AutoLock auto_lock(lock_);
@@ -577,7 +577,7 @@
 void MultibufferDataSource::StartCallback() {
   DCHECK(render_task_runner_->BelongsToCurrentThread());
 
-  if (init_cb_.is_null()) {
+  if (!init_cb_) {
     SetReader(nullptr);
     return;
   }
@@ -626,8 +626,8 @@
                                    url_data_->range_supported());
   }
 
-  render_task_runner_->PostTask(
-      FROM_HERE, base::Bind(base::ResetAndReturn(&init_cb_), success));
+  render_task_runner_->PostTask(FROM_HERE,
+                                base::Bind(std::move(init_cb_), success));
 
   UpdateBufferSizes();
 
diff --git a/media/blink/multibuffer_reader.cc b/media/blink/multibuffer_reader.cc
index 2973c164..fd9f40b 100644
--- a/media/blink/multibuffer_reader.cc
+++ b/media/blink/multibuffer_reader.cc
@@ -151,9 +151,8 @@
     // there are no callbacks from us after we've been destroyed.
     current_wait_size_ = 0;
     base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE,
-        base::Bind(&MultiBufferReader::Call, weak_factory_.GetWeakPtr(),
-                   base::ResetAndReturn(&cb_)));
+        FROM_HERE, base::Bind(&MultiBufferReader::Call,
+                              weak_factory_.GetWeakPtr(), std::move(cb_)));
   }
 }
 
diff --git a/media/blink/video_decode_stats_reporter.cc b/media/blink/video_decode_stats_reporter.cc
index 8f2a195..4196fca 100644
--- a/media/blink/video_decode_stats_reporter.cc
+++ b/media/blink/video_decode_stats_reporter.cc
@@ -30,7 +30,7 @@
       tick_clock_(tick_clock),
       stats_cb_timer_(tick_clock_) {
   DCHECK(recorder_ptr_.is_bound());
-  DCHECK(!get_pipeline_stats_cb_.is_null());
+  DCHECK(get_pipeline_stats_cb_);
   DCHECK(video_config_.IsValidConfig());
 
   recorder_ptr_.set_connection_error_handler(base::BindRepeating(
diff --git a/media/blink/video_frame_compositor.cc b/media/blink/video_frame_compositor.cc
index dae188a..e984d0c 100644
--- a/media/blink/video_frame_compositor.cc
+++ b/media/blink/video_frame_compositor.cc
@@ -269,7 +269,7 @@
 
   SetCurrentFrame(frame);
 
-  if (!new_processed_frame_cb_.is_null())
+  if (new_processed_frame_cb_)
     std::move(new_processed_frame_cb_).Run(base::TimeTicks::Now());
 
   return true;
diff --git a/media/blink/watch_time_component.cc b/media/blink/watch_time_component.cc
index 7e6a61e..c7555db 100644
--- a/media/blink/watch_time_component.cc
+++ b/media/blink/watch_time_component.cc
@@ -85,7 +85,7 @@
 
   // If no value to key callback has been provided, record |elapsed| to every
   // key in the |keys_to_finalize_| list.
-  if (value_to_key_cb_.is_null()) {
+  if (!value_to_key_cb_) {
     for (auto k : keys_to_finalize_)
       recorder_->RecordWatchTime(k, elapsed);
     return;
diff --git a/media/blink/watch_time_reporter.cc b/media/blink/watch_time_reporter.cc
index 52ffc08..c4c15d1 100644
--- a/media/blink/watch_time_reporter.cc
+++ b/media/blink/watch_time_reporter.cc
@@ -69,7 +69,7 @@
       initial_natural_size_(initial_natural_size),
       get_media_time_cb_(std::move(get_media_time_cb)),
       reporting_timer_(tick_clock) {
-  DCHECK(!get_media_time_cb_.is_null());
+  DCHECK(get_media_time_cb_);
   DCHECK(properties_->has_audio || properties_->has_video);
   DCHECK_EQ(is_background, properties_->is_background);
 
diff --git a/media/blink/webaudiosourceprovider_impl.cc b/media/blink/webaudiosourceprovider_impl.cc
index 644e9d51..bc2431f 100644
--- a/media/blink/webaudiosourceprovider_impl.cc
+++ b/media/blink/webaudiosourceprovider_impl.cc
@@ -143,7 +143,7 @@
     // called when Initialize() is called. Note: Always using |set_format_cb_|
     // ensures we have the same locking order when calling into |client_|.
     if (tee_filter_->initialized())
-      base::ResetAndReturn(&set_format_cb_).Run();
+      std::move(set_format_cb_).Run();
     return;
   }
 
@@ -215,8 +215,8 @@
 
   sink_->Initialize(params, tee_filter_.get());
 
-  if (!set_format_cb_.is_null())
-    base::ResetAndReturn(&set_format_cb_).Run();
+  if (set_format_cb_)
+    std::move(set_format_cb_).Run();
 }
 
 void WebAudioSourceProviderImpl::Start() {
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index 217db3d..adafe11 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -276,7 +276,7 @@
       overlay_routing_token_(OverlayInfo::RoutingToken()),
       media_metrics_provider_(params->take_metrics_provider()) {
   DVLOG(1) << __func__;
-  DCHECK(!adjust_allocated_memory_cb_.is_null());
+  DCHECK(adjust_allocated_memory_cb_);
   DCHECK(renderer_factory_selector_);
   DCHECK(client_);
   DCHECK(delegate_);
@@ -410,7 +410,7 @@
 
   bool is_deferred = false;
 
-  if (!defer_load_cb_.is_null()) {
+  if (defer_load_cb_) {
     is_deferred = defer_load_cb_.Run(base::BindOnce(
         &WebMediaPlayerImpl::DoLoad, AsWeakPtr(), load_type, url, cors_mode));
   } else {
@@ -2333,7 +2333,7 @@
   // If we get a non-null cb, a decoder is initializing and requires overlay
   // info. If we get a null cb, a previously initialized decoder is
   // unregistering for overlay info updates.
-  if (provide_overlay_info_cb.is_null()) {
+  if (!provide_overlay_info_cb) {
     decoder_requires_restart_for_overlay_ = false;
     provide_overlay_info_cb_.Reset();
     return;
@@ -2390,7 +2390,7 @@
 
   // If restart is required, the callback is one-shot only.
   if (decoder_requires_restart_for_overlay_) {
-    base::ResetAndReturn(&provide_overlay_info_cb_).Run(overlay_info_);
+    std::move(provide_overlay_info_cb_).Run(overlay_info_);
   } else {
     provide_overlay_info_cb_.Run(overlay_info_);
   }
diff --git a/media/capture/video/fake_video_capture_device_factory.cc b/media/capture/video/fake_video_capture_device_factory.cc
index ece8de1..4f568ed 100644
--- a/media/capture/video/fake_video_capture_device_factory.cc
+++ b/media/capture/video/fake_video_capture_device_factory.cc
@@ -246,7 +246,7 @@
 void FakeVideoCaptureDeviceFactory::GetCameraLocationsAsync(
     std::unique_ptr<VideoCaptureDeviceDescriptors> device_descriptors,
     DeviceDescriptorsCallback result_callback) {
-  base::ResetAndReturn(&result_callback).Run(std::move(device_descriptors));
+  std::move(result_callback).Run(std::move(device_descriptors));
 }
 
 // static
diff --git a/media/capture/video/file_video_capture_device_factory.cc b/media/capture/video/file_video_capture_device_factory.cc
index 6205b57..c05be23 100644
--- a/media/capture/video/file_video_capture_device_factory.cc
+++ b/media/capture/video/file_video_capture_device_factory.cc
@@ -81,7 +81,7 @@
 void FileVideoCaptureDeviceFactory::GetCameraLocationsAsync(
     std::unique_ptr<VideoCaptureDeviceDescriptors> device_descriptors,
     DeviceDescriptorsCallback result_callback) {
-  base::ResetAndReturn(&result_callback).Run(std::move(device_descriptors));
+  std::move(result_callback).Run(std::move(device_descriptors));
 }
 
 }  // namespace media
diff --git a/media/capture/video/win/video_capture_device_factory_win.cc b/media/capture/video/win/video_capture_device_factory_win.cc
index 38d6190..f9e73936 100644
--- a/media/capture/video/win/video_capture_device_factory_win.cc
+++ b/media/capture/video/win/video_capture_device_factory_win.cc
@@ -596,7 +596,7 @@
     com_thread_.Stop();
   }
 
-  base::ResetAndReturn(&result_callback).Run(std::move(device_descriptors));
+  std::move(result_callback).Run(std::move(device_descriptors));
 }
 
 void VideoCaptureDeviceFactoryWin::GetDeviceDescriptorsMediaFoundation(
diff --git a/media/cast/net/udp_packet_pipe.cc b/media/cast/net/udp_packet_pipe.cc
index a2480630..732021de 100644
--- a/media/cast/net/udp_packet_pipe.cc
+++ b/media/cast/net/udp_packet_pipe.cc
@@ -66,7 +66,7 @@
 UdpPacketPipeWriter::~UdpPacketPipeWriter() {}
 
 void UdpPacketPipeWriter::Write(PacketRef packet, base::OnceClosure done_cb) {
-  DCHECK(!done_cb.is_null());
+  DCHECK(done_cb);
   current_packet_size_ = packet->data.size();
   data_pipe_writer_.Write(
       reinterpret_cast<uint8_t*>(&current_packet_size_), sizeof(uint16_t),
@@ -94,7 +94,7 @@
 void UdpPacketPipeWriter::OnPacketWritten(PacketRef packet,
                                           base::OnceClosure done_cb,
                                           bool success) {
-  DCHECK(!done_cb.is_null());
+  DCHECK(done_cb);
   if (!success) {
     VLOG(1) << "Failed to write the packet.";
     // The data pipe should have been closed.
diff --git a/media/cast/sender/external_video_encoder.cc b/media/cast/sender/external_video_encoder.cc
index 76208368..87c67c6 100644
--- a/media/cast/sender/external_video_encoder.cc
+++ b/media/cast/sender/external_video_encoder.cc
@@ -618,9 +618,9 @@
   DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
   DCHECK_GT(video_config.max_frame_rate, 0);
   DCHECK(!frame_size_.IsEmpty());
-  DCHECK(!status_change_cb.is_null());
-  DCHECK(!create_vea_cb.is_null());
-  DCHECK(!create_video_encode_memory_cb_.is_null());
+  DCHECK(status_change_cb);
+  DCHECK(create_vea_cb);
+  DCHECK(create_video_encode_memory_cb_);
   DCHECK_GT(bit_rate_, 0);
 
   create_vea_cb.Run(
diff --git a/media/cast/sender/fake_video_encode_accelerator_factory.cc b/media/cast/sender/fake_video_encode_accelerator_factory.cc
index 9428c3c6..c766742 100644
--- a/media/cast/sender/fake_video_encode_accelerator_factory.cc
+++ b/media/cast/sender/fake_video_encode_accelerator_factory.cc
@@ -69,7 +69,7 @@
   DCHECK(next_response_vea_.get());
   last_response_vea_ = next_response_vea_.get();
   ++vea_response_count_;
-  base::ResetAndReturn(&vea_response_callback_)
+  std::move(vea_response_callback_)
       .Run(task_runner_, std::move(next_response_vea_));
 }
 
@@ -77,8 +77,7 @@
   DCHECK(next_response_shm_.get());
   last_response_shm_ = next_response_shm_.get();
   ++shm_response_count_;
-  base::ResetAndReturn(&shm_response_callback_)
-      .Run(std::move(next_response_shm_));
+  std::move(shm_response_callback_).Run(std::move(next_response_shm_));
 }
 
 }  // namespace cast
diff --git a/media/cast/sender/h264_vt_encoder.cc b/media/cast/sender/h264_vt_encoder.cc
index 5ee06cc..bca0e52 100644
--- a/media/cast/sender/h264_vt_encoder.cc
+++ b/media/cast/sender/h264_vt_encoder.cc
@@ -162,7 +162,7 @@
       power_suspended_(false),
       weak_factory_(this) {
   DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
-  DCHECK(!status_change_cb_.is_null());
+  DCHECK(status_change_cb_);
 
   OperationalStatus operational_status =
       H264VideoToolboxEncoder::IsSupported(video_config)
diff --git a/media/cast/sender/video_encoder_impl.cc b/media/cast/sender/video_encoder_impl.cc
index 7993895f..e441c56 100644
--- a/media/cast/sender/video_encoder_impl.cc
+++ b/media/cast/sender/video_encoder_impl.cc
@@ -64,7 +64,7 @@
     const StatusChangeCallback& status_change_cb)
     : cast_environment_(cast_environment) {
   CHECK(cast_environment_->HasVideoThread());
-  DCHECK(!status_change_cb.is_null());
+  DCHECK(status_change_cb);
 
   if (video_config.codec == CODEC_VIDEO_VP8) {
     encoder_.reset(new Vp8Encoder(video_config));
diff --git a/media/cdm/aes_decryptor.cc b/media/cdm/aes_decryptor.cc
index 2a8c76b4..9a174f4 100644
--- a/media/cdm/aes_decryptor.cc
+++ b/media/cdm/aes_decryptor.cc
@@ -176,9 +176,9 @@
       session_expiration_update_cb_(session_expiration_update_cb) {
   // AesDecryptor doesn't keep any persistent data, so no need to do anything
   // with |security_origin|.
-  DCHECK(!session_message_cb_.is_null());
-  DCHECK(!session_closed_cb_.is_null());
-  DCHECK(!session_keys_change_cb_.is_null());
+  DCHECK(session_message_cb_);
+  DCHECK(session_closed_cb_);
+  DCHECK(session_keys_change_cb_);
 }
 
 AesDecryptor::~AesDecryptor() {
@@ -339,10 +339,10 @@
   {
     base::AutoLock auto_lock(new_key_cb_lock_);
 
-    if (!new_audio_key_cb_.is_null())
+    if (new_audio_key_cb_)
       new_audio_key_cb_.Run();
 
-    if (!new_video_key_cb_.is_null())
+    if (new_video_key_cb_)
       new_video_key_cb_.Run();
   }
 
diff --git a/media/cdm/cdm_adapter.cc b/media/cdm/cdm_adapter.cc
index 8b99977..02c4981 100644
--- a/media/cdm/cdm_adapter.cc
+++ b/media/cdm/cdm_adapter.cc
@@ -547,10 +547,10 @@
     const SessionExpirationUpdateCB& session_expiration_update_cb,
     const CdmCreatedCB& cdm_created_cb) {
   DCHECK(!key_system.empty());
-  DCHECK(!session_message_cb.is_null());
-  DCHECK(!session_closed_cb.is_null());
-  DCHECK(!session_keys_change_cb.is_null());
-  DCHECK(!session_expiration_update_cb.is_null());
+  DCHECK(session_message_cb);
+  DCHECK(session_closed_cb);
+  DCHECK(session_keys_change_cb);
+  DCHECK(session_expiration_update_cb);
 
   scoped_refptr<CdmAdapter> cdm =
       new CdmAdapter(key_system, security_origin, cdm_config, create_cdm_func,
@@ -822,7 +822,7 @@
 void CdmAdapter::InitializeAudioDecoder(const AudioDecoderConfig& config,
                                         const DecoderInitCB& init_cb) {
   DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(audio_init_cb_.is_null());
+  DCHECK(!audio_init_cb_);
 
   cdm::Status status =
       cdm_->InitializeAudioDecoder(ToCdmAudioDecoderConfig(config));
@@ -848,7 +848,7 @@
 void CdmAdapter::InitializeVideoDecoder(const VideoDecoderConfig& config,
                                         const DecoderInitCB& init_cb) {
   DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(video_init_cb_.is_null());
+  DCHECK(!video_init_cb_);
 
   cdm::Status status =
       cdm_->InitializeVideoDecoder(ToCdmVideoDecoderConfig(config));
@@ -1058,9 +1058,9 @@
   // TODO(jrummell): Handling resume playback should be done in the media
   // player, not in the Decryptors. http://crbug.com/413413.
   if (has_additional_usable_key) {
-    if (!new_audio_key_cb_.is_null())
+    if (new_audio_key_cb_)
       new_audio_key_cb_.Run();
-    if (!new_video_key_cb_.is_null())
+    if (new_video_key_cb_)
       new_video_key_cb_.Run();
   }
 
@@ -1224,12 +1224,10 @@
 
   switch (stream_type) {
     case cdm::kStreamTypeAudio:
-      base::ResetAndReturn(&audio_init_cb_)
-          .Run(decoder_status == cdm::kSuccess);
+      std::move(audio_init_cb_).Run(decoder_status == cdm::kSuccess);
       return;
     case cdm::kStreamTypeVideo:
-      base::ResetAndReturn(&video_init_cb_)
-          .Run(decoder_status == cdm::kSuccess);
+      std::move(video_init_cb_).Run(decoder_status == cdm::kSuccess);
       return;
   }
 
diff --git a/media/cdm/library_cdm/clear_key_cdm/cdm_file_adapter.cc b/media/cdm/library_cdm/clear_key_cdm/cdm_file_adapter.cc
index 33994ad8..d5e4f02 100644
--- a/media/cdm/library_cdm/clear_key_cdm/cdm_file_adapter.cc
+++ b/media/cdm/library_cdm/clear_key_cdm/cdm_file_adapter.cc
@@ -35,9 +35,9 @@
 }
 
 CdmFileAdapter::~CdmFileAdapter() {
-  DCHECK(open_cb_.is_null());
-  DCHECK(read_cb_.is_null());
-  DCHECK(write_cb_.is_null());
+  DCHECK(!open_cb_);
+  DCHECK(!read_cb_);
+  DCHECK(!write_cb_);
   file_io_->Close();
 }
 
diff --git a/media/cdm/library_cdm/clear_key_cdm/cdm_file_io_test.cc b/media/cdm/library_cdm/clear_key_cdm/cdm_file_io_test.cc
index 2813466..2485bfe 100644
--- a/media/cdm/library_cdm/clear_key_cdm/cdm_file_io_test.cc
+++ b/media/cdm/library_cdm/clear_key_cdm/cdm_file_io_test.cc
@@ -500,7 +500,7 @@
                      << (total_num_tests_ - num_passed_tests_) << " failed in "
                      << total_num_tests_ << " tests.";
     bool success = (num_passed_tests_ == total_num_tests_);
-    base::ResetAndReturn(&completion_cb_).Run(success);
+    std::move(completion_cb_).Run(success);
     return;
   }
 
@@ -661,7 +661,7 @@
   }
   FILE_IO_DVLOG(3) << test_name_ << (success ? " PASSED" : " FAILED");
   DLOG_IF(WARNING, !success) << test_name_ << " FAILED";
-  base::ResetAndReturn(&completion_cb_).Run(success);
+  std::move(completion_cb_).Run(success);
 }
 
 }  // namespace media
diff --git a/media/filters/aom_video_decoder.cc b/media/filters/aom_video_decoder.cc
index a29dbf5..2f322a64 100644
--- a/media/filters/aom_video_decoder.cc
+++ b/media/filters/aom_video_decoder.cc
@@ -185,7 +185,7 @@
                              const DecodeCB& decode_cb) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(buffer);
-  DCHECK(!decode_cb.is_null());
+  DCHECK(decode_cb);
   DCHECK_NE(state_, DecoderState::kUninitialized)
       << "Called Decode() before successful Initialize()";
 
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index d284684..98f23c4 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -99,7 +99,7 @@
 void ChunkDemuxerStream::StartReturningData() {
   DVLOG(1) << "ChunkDemuxerStream::StartReturningData()";
   base::AutoLock auto_lock(lock_);
-  DCHECK(read_cb_.is_null());
+  DCHECK(!read_cb_);
   ChangeState_Locked(RETURNING_DATA_FOR_READS);
 }
 
@@ -107,13 +107,13 @@
   DVLOG(1) << "ChunkDemuxerStream::AbortReads()";
   base::AutoLock auto_lock(lock_);
   ChangeState_Locked(RETURNING_ABORT_FOR_READS);
-  if (!read_cb_.is_null())
-    base::ResetAndReturn(&read_cb_).Run(kAborted, NULL);
+  if (read_cb_)
+    std::move(read_cb_).Run(kAborted, NULL);
 }
 
 void ChunkDemuxerStream::CompletePendingReadIfPossible() {
   base::AutoLock auto_lock(lock_);
-  if (read_cb_.is_null())
+  if (!read_cb_)
     return;
 
   CompletePendingReadIfPossible_Locked();
@@ -126,9 +126,9 @@
 
   // Pass an end of stream buffer to the pending callback to signal that no more
   // data will be sent.
-  if (!read_cb_.is_null()) {
-    base::ResetAndReturn(&read_cb_).Run(DemuxerStream::kOk,
-                                        StreamParserBuffer::CreateEOSBuffer());
+  if (read_cb_) {
+    std::move(read_cb_).Run(DemuxerStream::kOk,
+                            StreamParserBuffer::CreateEOSBuffer());
   }
 }
 
@@ -145,7 +145,7 @@
 void ChunkDemuxerStream::Seek(TimeDelta time) {
   DVLOG(1) << "ChunkDemuxerStream::Seek(" << time.InSecondsF() << ")";
   base::AutoLock auto_lock(lock_);
-  DCHECK(read_cb_.is_null());
+  DCHECK(!read_cb_);
   DCHECK(state_ == UNINITIALIZED || state_ == RETURNING_ABORT_FOR_READS)
       << state_;
 
@@ -163,7 +163,7 @@
     return false;
   }
 
-  if (!read_cb_.is_null())
+  if (read_cb_)
     CompletePendingReadIfPossible_Locked();
 
   return true;
@@ -312,14 +312,13 @@
 void ChunkDemuxerStream::Read(const ReadCB& read_cb) {
   base::AutoLock auto_lock(lock_);
   DCHECK_NE(state_, UNINITIALIZED);
-  DCHECK(read_cb_.is_null());
+  DCHECK(!read_cb_);
 
   read_cb_ = BindToCurrentLoop(read_cb);
 
   if (!is_enabled_) {
     DVLOG(1) << "Read from disabled stream, returning EOS";
-    base::ResetAndReturn(&read_cb_).Run(kOk,
-                                        StreamParserBuffer::CreateEOSBuffer());
+    std::move(read_cb_).Run(kOk, StreamParserBuffer::CreateEOSBuffer());
     return;
   }
 
@@ -366,10 +365,9 @@
   if (enabled) {
     DCHECK(SBSTREAM_IS_SET);
     SBSTREAM_OP(Seek(timestamp));
-  } else if (!read_cb_.is_null()) {
+  } else if (read_cb_) {
     DVLOG(1) << "Read from disabled stream, returning EOS";
-    base::ResetAndReturn(&read_cb_).Run(kOk,
-                                        StreamParserBuffer::CreateEOSBuffer());
+    std::move(read_cb_).Run(kOk, StreamParserBuffer::CreateEOSBuffer());
   }
 }
 
@@ -400,7 +398,7 @@
 
 void ChunkDemuxerStream::CompletePendingReadIfPossible_Locked() {
   lock_.AssertAcquired();
-  DCHECK(!read_cb_.is_null());
+  DCHECK(read_cb_);
 
   DemuxerStream::Status status = DemuxerStream::kAborted;
   scoped_refptr<StreamParserBuffer> buffer;
@@ -452,7 +450,7 @@
       break;
   }
 
-  base::ResetAndReturn(&read_cb_).Run(status, buffer);
+  std::move(read_cb_).Run(status, buffer);
 }
 
 ChunkDemuxer::ChunkDemuxer(
@@ -474,8 +472,8 @@
       detected_video_track_count_(0),
       detected_text_track_count_(0),
       buffering_by_pts_(base::FeatureList::IsEnabled(kMseBufferByPts)) {
-  DCHECK(!open_cb_.is_null());
-  DCHECK(!encrypted_media_init_data_cb_.is_null());
+  DCHECK(open_cb_);
+  DCHECK(encrypted_media_init_data_cb_);
   MEDIA_LOG(INFO, media_log_)
       << GetDisplayName()
       << (buffering_by_pts_ ? ": buffering by PTS" : ": buffering by DTS");
@@ -507,7 +505,7 @@
 
   ChangeState_Locked(INITIALIZING);
 
-  base::ResetAndReturn(&open_cb_).Run();
+  std::move(open_cb_).Run();
 }
 
 void ChunkDemuxer::Stop() {
@@ -520,17 +518,17 @@
   DCHECK(time >= TimeDelta());
 
   base::AutoLock auto_lock(lock_);
-  DCHECK(seek_cb_.is_null());
+  DCHECK(!seek_cb_);
 
   seek_cb_ = BindToCurrentLoop(cb);
   if (state_ != INITIALIZED && state_ != ENDED) {
-    base::ResetAndReturn(&seek_cb_).Run(PIPELINE_ERROR_INVALID_STATE);
+    std::move(seek_cb_).Run(PIPELINE_ERROR_INVALID_STATE);
     return;
   }
 
   if (cancel_next_seek_) {
     cancel_next_seek_ = false;
-    base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK);
+    std::move(seek_cb_).Run(PIPELINE_OK);
     return;
   }
 
@@ -542,7 +540,7 @@
     return;
   }
 
-  base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK);
+  std::move(seek_cb_).Run(PIPELINE_OK);
 }
 
 // Demuxer implementation.
@@ -607,7 +605,7 @@
   base::AutoLock auto_lock(lock_);
   DCHECK(state_ == INITIALIZED || state_ == ENDED || state_ == SHUTDOWN ||
          state_ == PARSE_ERROR) << state_;
-  DCHECK(seek_cb_.is_null());
+  DCHECK(!seek_cb_);
 
   if (state_ == SHUTDOWN || state_ == PARSE_ERROR)
     return;
@@ -623,7 +621,7 @@
 void ChunkDemuxer::CancelPendingSeek(TimeDelta seek_time) {
   base::AutoLock auto_lock(lock_);
   DCHECK_NE(state_, INITIALIZING);
-  DCHECK(seek_cb_.is_null() || IsSeekWaitingForData_Locked());
+  DCHECK(!seek_cb_ || IsSeekWaitingForData_Locked());
 
   if (cancel_next_seek_)
     return;
@@ -631,12 +629,12 @@
   AbortPendingReads_Locked();
   SeekAllSources(seek_time);
 
-  if (seek_cb_.is_null()) {
+  if (!seek_cb_) {
     cancel_next_seek_ = true;
     return;
   }
 
-  base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK);
+  std::move(seek_cb_).Run(PIPELINE_OK);
 }
 
 ChunkDemuxer::Status ChunkDemuxer::AddId(const std::string& id,
@@ -651,7 +649,7 @@
 
   // TODO(wolenetz): Change to DCHECK once less verification in release build is
   // needed. See https://crbug.com/786975.
-  CHECK(!init_cb_.is_null());
+  CHECK(init_cb_);
 
   std::unique_ptr<media::StreamParser> stream_parser(
       CreateParserForTypeAndCodecs(content_type, codecs, media_log_));
@@ -901,9 +899,8 @@
 
     // Check to see if data was appended at the pending seek point. This
     // indicates we have parsed enough data to complete the seek.
-    if (old_waiting_for_data && !IsSeekWaitingForData_Locked() &&
-        !seek_cb_.is_null()) {
-      base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK);
+    if (old_waiting_for_data && !IsSeekWaitingForData_Locked() && seek_cb_) {
+      std::move(seek_cb_).Run(PIPELINE_OK);
     }
 
     ranges = GetBufferedRanges_Locked();
@@ -928,9 +925,8 @@
                                           timestamp_offset);
   // ResetParserState can possibly emit some buffers.
   // Need to check whether seeking can be completed.
-  if (old_waiting_for_data && !IsSeekWaitingForData_Locked() &&
-      !seek_cb_.is_null()) {
-    base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK);
+  if (old_waiting_for_data && !IsSeekWaitingForData_Locked() && seek_cb_) {
+    std::move(seek_cb_).Run(PIPELINE_OK);
   }
 }
 
@@ -1137,9 +1133,8 @@
   ChangeState_Locked(ENDED);
   DecreaseDurationIfNecessary();
 
-  if (old_waiting_for_data && !IsSeekWaitingForData_Locked() &&
-      !seek_cb_.is_null()) {
-    base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK);
+  if (old_waiting_for_data && !IsSeekWaitingForData_Locked() && seek_cb_) {
+    std::move(seek_cb_).Run(PIPELINE_OK);
   }
 }
 
@@ -1174,8 +1169,8 @@
 
   ChangeState_Locked(SHUTDOWN);
 
-  if (!seek_cb_.is_null())
-    base::ResetAndReturn(&seek_cb_).Run(PIPELINE_ERROR_ABORT);
+  if (seek_cb_)
+    std::move(seek_cb_).Run(PIPELINE_ERROR_ABORT);
 }
 
 void ChunkDemuxer::SetMemoryLimitsForTest(DemuxerStream::Type type,
@@ -1212,10 +1207,10 @@
 
   PipelineStatusCB cb;
 
-  if (!init_cb_.is_null()) {
+  if (init_cb_) {
     std::swap(cb, init_cb_);
   } else {
-    if (!seek_cb_.is_null())
+    if (seek_cb_)
       std::swap(cb, seek_cb_);
 
     ShutdownAllStreams();
@@ -1250,15 +1245,12 @@
 
   // TODO(wolenetz): Change these to DCHECKs once less verification in release
   // build is needed. See https://crbug.com/786975.
-  bool is_initializing = state_ == INITIALIZING;
-  bool init_cb_is_set = !init_cb_.is_null();
-  bool id_is_pending = pending_source_init_ids_.find(source_id) !=
-                       pending_source_init_ids_.end();
   CHECK(!pending_source_init_ids_.empty());
   CHECK(IsValidId(source_id));
-  CHECK(id_is_pending);
-  CHECK(init_cb_is_set);
-  CHECK(is_initializing);
+  CHECK(pending_source_init_ids_.find(source_id) !=
+        pending_source_init_ids_.end());
+  CHECK(init_cb_);
+  CHECK_EQ(state_, INITIALIZING);
   if (audio_streams_.empty() && video_streams_.empty()) {
     ReportError_Locked(DEMUXER_ERROR_COULD_NOT_OPEN);
     return;
@@ -1321,8 +1313,8 @@
   // build is needed. See https://crbug.com/786975.
   CHECK_EQ(state_, INITIALIZING);
   ChangeState_Locked(INITIALIZED);
-  CHECK(!init_cb_.is_null());
-  base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK);
+  CHECK(init_cb_);
+  std::move(init_cb_).Run(PIPELINE_OK);
 }
 
 // static
diff --git a/media/filters/decoder_stream.cc b/media/filters/decoder_stream.cc
index df32d6d..dbb2eb4 100644
--- a/media/filters/decoder_stream.cc
+++ b/media/filters/decoder_stream.cc
@@ -81,7 +81,7 @@
         base::BindOnce(std::move(read_cb_), ABORTED, scoped_refptr<Output>()));
   }
   if (reset_cb_)
-    task_runner_->PostTask(FROM_HERE, base::ResetAndReturn(&reset_cb_));
+    task_runner_->PostTask(FROM_HERE, std::move(reset_cb_));
 
   // Don't manually reset anything here; rely on the order of member variables
   // within the header, which enforces WeakPtrFactory invalidation first.
@@ -181,7 +181,7 @@
   // OnBufferReady() will handle the reset callback.
   // See crbug.com/597605 and crbug.com/607454.
   if (state_ == STATE_ERROR && !pending_demuxer_read_) {
-    task_runner_->PostTask(FROM_HERE, base::ResetAndReturn(&reset_cb_));
+    task_runner_->PostTask(FROM_HERE, std::move(reset_cb_));
     return;
   }
 
@@ -651,7 +651,7 @@
       // If we are using DecryptingDemuxerStream, we already called DDS::Reset()
       // which will continue the resetting process in its callback.
       if (!decrypting_demuxer_stream_)
-        Reset(base::ResetAndReturn(&reset_cb_));
+        Reset(std::move(reset_cb_));
     }
     return;
   }
@@ -698,7 +698,7 @@
       // If we are using DecryptingDemuxerStream, we already called DDS::Reset()
       // which will continue the resetting process in its callback.
       if (!decrypting_demuxer_stream_)
-        Reset(base::ResetAndReturn(&reset_cb_));
+        Reset(std::move(reset_cb_));
       // Reinitialization will continue after Reset() is done.
     } else {
       FlushDecoder();
@@ -710,7 +710,7 @@
     // If we are using DecryptingDemuxerStream, we already called DDS::Reset()
     // which will continue the resetting process in its callback.
     if (!decrypting_demuxer_stream_)
-      Reset(base::ResetAndReturn(&reset_cb_));
+      Reset(std::move(reset_cb_));
     return;
   }
 
@@ -780,7 +780,7 @@
   state_ = success ? STATE_NORMAL : STATE_ERROR;
 
   if (reset_cb_) {
-    base::ResetAndReturn(&reset_cb_).Run();
+    std::move(reset_cb_).Run();
     return;
   }
 
@@ -842,7 +842,7 @@
     state_ = STATE_NORMAL;
     // Pending read, on failure, could have fired the reset callback already.
     if (reset_cb_)
-      base::ResetAndReturn(&reset_cb_).Run();
+      std::move(reset_cb_).Run();
     return;
   }
 
diff --git a/media/filters/decrypting_audio_decoder.cc b/media/filters/decrypting_audio_decoder.cc
index 767b405..e93ca4c 100644
--- a/media/filters/decrypting_audio_decoder.cc
+++ b/media/filters/decrypting_audio_decoder.cc
@@ -57,19 +57,19 @@
     const WaitingForDecryptionKeyCB& waiting_for_decryption_key_cb) {
   DVLOG(2) << "Initialize()";
   DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(decode_cb_.is_null());
-  DCHECK(reset_cb_.is_null());
+  DCHECK(!decode_cb_);
+  DCHECK(!reset_cb_);
 
   init_cb_ = BindToCurrentLoop(init_cb);
   if (!cdm_context) {
     // Once we have a CDM context, one should always be present.
     DCHECK(!support_clear_content_);
-    base::ResetAndReturn(&init_cb_).Run(false);
+    std::move(init_cb_).Run(false);
     return;
   }
 
   if (!config.is_encrypted() && !support_clear_content_) {
-    base::ResetAndReturn(&init_cb_).Run(false);
+    std::move(init_cb_).Run(false);
     return;
   }
 
@@ -80,13 +80,13 @@
   weak_this_ = weak_factory_.GetWeakPtr();
   output_cb_ = BindToCurrentLoop(output_cb);
 
-  DCHECK(!waiting_for_decryption_key_cb.is_null());
+  DCHECK(waiting_for_decryption_key_cb);
   waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb;
 
   // TODO(xhwang): We should be able to DCHECK config.IsValidConfig().
   if (!config.IsValidConfig()) {
     DLOG(ERROR) << "Invalid audio stream config.";
-    base::ResetAndReturn(&init_cb_).Run(false);
+    std::move(init_cb_).Run(false);
     return;
   }
 
@@ -95,7 +95,7 @@
   if (state_ == kUninitialized) {
     if (!cdm_context->GetDecryptor()) {
       DVLOG(1) << __func__ << ": no decryptor";
-      base::ResetAndReturn(&init_cb_).Run(false);
+      std::move(init_cb_).Run(false);
       return;
     }
 
@@ -114,15 +114,15 @@
   DVLOG(3) << "Decode()";
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK(state_ == kIdle || state_ == kDecodeFinished) << state_;
-  DCHECK(!decode_cb.is_null());
-  CHECK(decode_cb_.is_null()) << "Overlapping decodes are not supported.";
+  DCHECK(decode_cb);
+  CHECK(!decode_cb_) << "Overlapping decodes are not supported.";
 
   decode_cb_ = BindToCurrentLoop(decode_cb);
 
   // Return empty (end-of-stream) frames if decoding has finished.
   if (state_ == kDecodeFinished) {
     output_cb_.Run(AudioBuffer::CreateEOSBuffer());
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::OK);
+    std::move(decode_cb_).Run(DecodeStatus::OK);
     return;
   }
 
@@ -144,8 +144,8 @@
   DCHECK(state_ == kIdle || state_ == kPendingDecode ||
          state_ == kWaitingForKey || state_ == kDecodeFinished)
       << state_;
-  DCHECK(init_cb_.is_null());  // No Reset() during pending initialization.
-  DCHECK(reset_cb_.is_null());
+  DCHECK(!init_cb_);  // No Reset() during pending initialization.
+  DCHECK(!reset_cb_);
 
   reset_cb_ = BindToCurrentLoop(closure);
 
@@ -156,17 +156,17 @@
   // after the read callback is fired - see DecryptAndDecodeBuffer() and
   // DeliverFrame().
   if (state_ == kPendingDecode) {
-    DCHECK(!decode_cb_.is_null());
+    DCHECK(decode_cb_);
     return;
   }
 
   if (state_ == kWaitingForKey) {
-    DCHECK(!decode_cb_.is_null());
+    DCHECK(decode_cb_);
     pending_buffer_to_decode_ = NULL;
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::ABORTED);
+    std::move(decode_cb_).Run(DecodeStatus::ABORTED);
   }
 
-  DCHECK(decode_cb_.is_null());
+  DCHECK(!decode_cb_);
   DoReset();
 }
 
@@ -182,12 +182,12 @@
     decryptor_ = NULL;
   }
   pending_buffer_to_decode_ = NULL;
-  if (!init_cb_.is_null())
-    base::ResetAndReturn(&init_cb_).Run(false);
-  if (!decode_cb_.is_null())
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::ABORTED);
-  if (!reset_cb_.is_null())
-    base::ResetAndReturn(&reset_cb_).Run();
+  if (init_cb_)
+    std::move(init_cb_).Run(false);
+  if (decode_cb_)
+    std::move(decode_cb_).Run(DecodeStatus::ABORTED);
+  if (reset_cb_)
+    std::move(reset_cb_).Run();
 }
 
 void DecryptingAudioDecoder::InitializeDecoder() {
@@ -201,13 +201,13 @@
   DVLOG(2) << "FinishInitialization()";
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK(state_ == kPendingDecoderInit) << state_;
-  DCHECK(!init_cb_.is_null());
-  DCHECK(reset_cb_.is_null());   // No Reset() before initialization finished.
-  DCHECK(decode_cb_.is_null());  // No Decode() before initialization finished.
+  DCHECK(init_cb_);
+  DCHECK(!reset_cb_);   // No Reset() before initialization finished.
+  DCHECK(!decode_cb_);  // No Decode() before initialization finished.
 
   if (!success) {
     DVLOG(1) << __func__ << ": failed to init audio decoder on decryptor";
-    base::ResetAndReturn(&init_cb_).Run(false);
+    std::move(init_cb_).Run(false);
     decryptor_ = NULL;
     state_ = kError;
     return;
@@ -222,7 +222,7 @@
                              &DecryptingAudioDecoder::OnKeyAdded, weak_this_)));
 
   state_ = kIdle;
-  base::ResetAndReturn(&init_cb_).Run(true);
+  std::move(init_cb_).Run(true);
 }
 
 void DecryptingAudioDecoder::DecodePendingBuffer() {
@@ -247,7 +247,7 @@
   DVLOG(3) << "DeliverFrame() - status: " << status;
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK_EQ(state_, kPendingDecode) << state_;
-  DCHECK(!decode_cb_.is_null());
+  DCHECK(decode_cb_);
   DCHECK(pending_buffer_to_decode_.get());
 
   bool need_to_try_again_if_nokey_is_returned = key_added_while_decode_pending_;
@@ -256,8 +256,8 @@
   scoped_refptr<DecoderBuffer> scoped_pending_buffer_to_decode =
       std::move(pending_buffer_to_decode_);
 
-  if (!reset_cb_.is_null()) {
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::ABORTED);
+  if (reset_cb_) {
+    std::move(decode_cb_).Run(DecodeStatus::ABORTED);
     DoReset();
     return;
   }
@@ -268,7 +268,7 @@
     DVLOG(2) << "DeliverFrame() - kError";
     MEDIA_LOG(ERROR, media_log_) << GetDisplayName() << ": decode error";
     state_ = kDecodeFinished;  // TODO add kError state
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::DECODE_ERROR);
+    std::move(decode_cb_).Run(DecodeStatus::DECODE_ERROR);
     return;
   }
 
@@ -302,7 +302,7 @@
     DVLOG(2) << "DeliverFrame() - kNeedMoreData";
     state_ = scoped_pending_buffer_to_decode->end_of_stream() ? kDecodeFinished
                                                               : kIdle;
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::OK);
+    std::move(decode_cb_).Run(DecodeStatus::OK);
     return;
   }
 
@@ -319,7 +319,7 @@
   }
 
   state_ = kIdle;
-  base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::OK);
+  std::move(decode_cb_).Run(DecodeStatus::OK);
 }
 
 void DecryptingAudioDecoder::OnKeyAdded() {
@@ -339,11 +339,11 @@
 }
 
 void DecryptingAudioDecoder::DoReset() {
-  DCHECK(init_cb_.is_null());
-  DCHECK(decode_cb_.is_null());
+  DCHECK(!init_cb_);
+  DCHECK(!decode_cb_);
   timestamp_helper_->SetBaseTimestamp(kNoTimestamp);
   state_ = kIdle;
-  base::ResetAndReturn(&reset_cb_).Run();
+  std::move(reset_cb_).Run();
 }
 
 void DecryptingAudioDecoder::ProcessDecodedFrames(
diff --git a/media/filters/decrypting_audio_decoder_unittest.cc b/media/filters/decrypting_audio_decoder_unittest.cc
index 8a5b4621..39d394a 100644
--- a/media/filters/decrypting_audio_decoder_unittest.cc
+++ b/media/filters/decrypting_audio_decoder_unittest.cc
@@ -178,7 +178,7 @@
 
   // Make the audio decode callback pending by saving and not firing it.
   void EnterPendingDecodeState() {
-    EXPECT_TRUE(pending_audio_decode_cb_.is_null());
+    EXPECT_TRUE(!pending_audio_decode_cb_);
     EXPECT_CALL(*decryptor_, DecryptAndDecodeAudio(encrypted_buffer_, _))
         .WillOnce(SaveArg<1>(&pending_audio_decode_cb_));
 
@@ -188,7 +188,7 @@
     base::RunLoop().RunUntilIdle();
     // Make sure the Decode() on the decoder triggers a DecryptAndDecode() on
     // the decryptor.
-    EXPECT_FALSE(pending_audio_decode_cb_.is_null());
+    EXPECT_FALSE(!pending_audio_decode_cb_);
   }
 
   void EnterWaitingForKeyState() {
@@ -204,16 +204,16 @@
   }
 
   void AbortPendingAudioDecodeCB() {
-    if (!pending_audio_decode_cb_.is_null()) {
-      base::ResetAndReturn(&pending_audio_decode_cb_)
+    if (pending_audio_decode_cb_) {
+      std::move(pending_audio_decode_cb_)
           .Run(Decryptor::kSuccess, Decryptor::AudioFrames());
     }
   }
 
   void AbortAllPendingCBs() {
-    if (!pending_init_cb_.is_null()) {
-      ASSERT_TRUE(pending_audio_decode_cb_.is_null());
-      base::ResetAndReturn(&pending_init_cb_).Run(false);
+    if (pending_init_cb_) {
+      ASSERT_TRUE(!pending_audio_decode_cb_);
+      std::move(pending_init_cb_).Run(false);
       return;
     }
 
@@ -420,7 +420,7 @@
   // The audio decode callback is returned after the correct decryption key is
   // added.
   key_added_cb_.Run();
-  base::ResetAndReturn(&pending_audio_decode_cb_)
+  std::move(pending_audio_decode_cb_)
       .Run(Decryptor::kNoKey, Decryptor::AudioFrames());
   base::RunLoop().RunUntilIdle();
 }
diff --git a/media/filters/decrypting_demuxer_stream.cc b/media/filters/decrypting_demuxer_stream.cc
index 12de15c..5f85443c 100644
--- a/media/filters/decrypting_demuxer_stream.cc
+++ b/media/filters/decrypting_demuxer_stream.cc
@@ -60,7 +60,7 @@
   if (!cdm_context->GetDecryptor()) {
     DVLOG(1) << __func__ << ": no decryptor";
     state_ = kUninitialized;
-    base::ResetAndReturn(&init_cb_).Run(DECODER_ERROR_NOT_SUPPORTED);
+    std::move(init_cb_).Run(DECODER_ERROR_NOT_SUPPORTED);
     return;
   }
 
@@ -72,15 +72,15 @@
           base::Bind(&DecryptingDemuxerStream::OnKeyAdded, weak_this_)));
 
   state_ = kIdle;
-  base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK);
+  std::move(init_cb_).Run(PIPELINE_OK);
 }
 
 void DecryptingDemuxerStream::Read(const ReadCB& read_cb) {
   DVLOG(3) << __func__;
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK_EQ(state_, kIdle) << state_;
-  DCHECK(!read_cb.is_null());
-  CHECK(read_cb_.is_null()) << "Overlapping reads are not supported.";
+  DCHECK(read_cb);
+  CHECK(!read_cb_) << "Overlapping reads are not supported.";
 
   read_cb_ = BindToCurrentLoop(read_cb);
   state_ = kPendingDemuxerRead;
@@ -92,7 +92,7 @@
   DVLOG(2) << __func__ << " - state: " << state_;
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK(state_ != kUninitialized) << state_;
-  DCHECK(reset_cb_.is_null());
+  DCHECK(!reset_cb_);
 
   reset_cb_ = BindToCurrentLoop(closure);
 
@@ -103,17 +103,17 @@
   // after the read callback is fired - see DoDecryptBuffer() and
   // DoDeliverBuffer().
   if (state_ == kPendingDemuxerRead || state_ == kPendingDecrypt) {
-    DCHECK(!read_cb_.is_null());
+    DCHECK(read_cb_);
     return;
   }
 
   if (state_ == kWaitingForKey) {
-    DCHECK(!read_cb_.is_null());
+    DCHECK(read_cb_);
     pending_buffer_to_decrypt_ = NULL;
-    base::ResetAndReturn(&read_cb_).Run(kAborted, NULL);
+    std::move(read_cb_).Run(kAborted, NULL);
   }
 
-  DCHECK(read_cb_.is_null());
+  DCHECK(!read_cb_);
   DoReset();
 }
 
@@ -158,12 +158,12 @@
     decryptor_->CancelDecrypt(GetDecryptorStreamType());
     decryptor_ = NULL;
   }
-  if (!init_cb_.is_null())
-    base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_ABORT);
-  if (!read_cb_.is_null())
-    base::ResetAndReturn(&read_cb_).Run(kAborted, NULL);
-  if (!reset_cb_.is_null())
-    base::ResetAndReturn(&reset_cb_).Run();
+  if (init_cb_)
+    std::move(init_cb_).Run(PIPELINE_ERROR_ABORT);
+  if (read_cb_)
+    std::move(read_cb_).Run(kAborted, NULL);
+  if (reset_cb_)
+    std::move(reset_cb_).Run();
   pending_buffer_to_decrypt_ = NULL;
 }
 
@@ -173,10 +173,10 @@
   DVLOG(3) << __func__ << ": status = " << status;
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK_EQ(state_, kPendingDemuxerRead) << state_;
-  DCHECK(!read_cb_.is_null());
+  DCHECK(read_cb_);
   DCHECK_EQ(buffer.get() != NULL, status == kOk) << status;
 
-  // Even when |!reset_cb_.is_null()|, we need to pass |kConfigChanged| back to
+  // Even when |reset_cb_|, we need to pass |kConfigChanged| back to
   // the caller so that the downstream decoder can be properly reinitialized.
   if (status == kConfigChanged) {
     DVLOG(2) << "DoDecryptBuffer() - kConfigChanged.";
@@ -188,14 +188,14 @@
     InitializeDecoderConfig();
 
     state_ = kIdle;
-    base::ResetAndReturn(&read_cb_).Run(kConfigChanged, NULL);
-    if (!reset_cb_.is_null())
+    std::move(read_cb_).Run(kConfigChanged, NULL);
+    if (reset_cb_)
       DoReset();
     return;
   }
 
-  if (!reset_cb_.is_null()) {
-    base::ResetAndReturn(&read_cb_).Run(kAborted, NULL);
+  if (reset_cb_) {
+    std::move(read_cb_).Run(kAborted, NULL);
     DoReset();
     return;
   }
@@ -206,7 +206,7 @@
           << GetDisplayName() << ": demuxer stream read error.";
     }
     state_ = kIdle;
-    base::ResetAndReturn(&read_cb_).Run(status, nullptr);
+    std::move(read_cb_).Run(status, nullptr);
     return;
   }
 
@@ -215,14 +215,14 @@
   if (buffer->end_of_stream()) {
     DVLOG(2) << "DoDecryptBuffer() - EOS buffer.";
     state_ = kIdle;
-    base::ResetAndReturn(&read_cb_).Run(kOk, std::move(buffer));
+    std::move(read_cb_).Run(kOk, std::move(buffer));
     return;
   }
 
   if (!buffer->decrypt_config()) {
     DVLOG(2) << "DoDecryptBuffer() - clear buffer.";
     state_ = kIdle;
-    base::ResetAndReturn(&read_cb_).Run(kOk, std::move(buffer));
+    std::move(read_cb_).Run(kOk, std::move(buffer));
     return;
   }
 
@@ -247,15 +247,15 @@
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK_EQ(state_, kPendingDecrypt) << state_;
   DCHECK_NE(status, Decryptor::kNeedMoreData);
-  DCHECK(!read_cb_.is_null());
+  DCHECK(read_cb_);
   DCHECK(pending_buffer_to_decrypt_);
 
   bool need_to_try_again_if_nokey = key_added_while_decrypt_pending_;
   key_added_while_decrypt_pending_ = false;
 
-  if (!reset_cb_.is_null()) {
+  if (reset_cb_) {
     pending_buffer_to_decrypt_ = NULL;
-    base::ResetAndReturn(&read_cb_).Run(kAborted, NULL);
+    std::move(read_cb_).Run(kAborted, NULL);
     DoReset();
     return;
   }
@@ -267,7 +267,7 @@
     MEDIA_LOG(ERROR, media_log_) << GetDisplayName() << ": decrypt error";
     pending_buffer_to_decrypt_ = NULL;
     state_ = kIdle;
-    base::ResetAndReturn(&read_cb_).Run(kError, nullptr);
+    std::move(read_cb_).Run(kError, nullptr);
     return;
   }
 
@@ -302,7 +302,7 @@
 
   pending_buffer_to_decrypt_ = NULL;
   state_ = kIdle;
-  base::ResetAndReturn(&read_cb_).Run(kOk, std::move(decrypted_buffer));
+  std::move(read_cb_).Run(kOk, std::move(decrypted_buffer));
 }
 
 void DecryptingDemuxerStream::OnKeyAdded() {
@@ -323,12 +323,12 @@
 
 void DecryptingDemuxerStream::DoReset() {
   DCHECK(state_ != kUninitialized);
-  DCHECK(init_cb_.is_null());
-  DCHECK(read_cb_.is_null());
+  DCHECK(!init_cb_);
+  DCHECK(!read_cb_);
 
   state_ = kIdle;
 
-  base::ResetAndReturn(&reset_cb_).Run();
+  std::move(reset_cb_).Run();
 }
 
 Decryptor::StreamType DecryptingDemuxerStream::GetDecryptorStreamType() const {
diff --git a/media/filters/decrypting_demuxer_stream_unittest.cc b/media/filters/decrypting_demuxer_stream_unittest.cc
index d156adc8..ab7d6a1 100644
--- a/media/filters/decrypting_demuxer_stream_unittest.cc
+++ b/media/filters/decrypting_demuxer_stream_unittest.cc
@@ -199,19 +199,19 @@
 
   // Make the read callback pending by saving and not firing it.
   void EnterPendingReadState() {
-    EXPECT_TRUE(pending_demuxer_read_cb_.is_null());
+    EXPECT_TRUE(!pending_demuxer_read_cb_);
     EXPECT_CALL(*input_audio_stream_, Read(_))
         .WillOnce(SaveArg<0>(&pending_demuxer_read_cb_));
     demuxer_stream_->Read(base::Bind(&DecryptingDemuxerStreamTest::BufferReady,
                                      base::Unretained(this)));
     base::RunLoop().RunUntilIdle();
     // Make sure the Read() triggers a Read() on the input demuxer stream.
-    EXPECT_FALSE(pending_demuxer_read_cb_.is_null());
+    EXPECT_FALSE(!pending_demuxer_read_cb_);
   }
 
   // Make the decrypt callback pending by saving and not firing it.
   void EnterPendingDecryptState() {
-    EXPECT_TRUE(pending_decrypt_cb_.is_null());
+    EXPECT_TRUE(!pending_decrypt_cb_);
     EXPECT_CALL(*input_audio_stream_, Read(_))
         .WillRepeatedly(ReturnBuffer(encrypted_buffer_));
     EXPECT_CALL(*decryptor_, Decrypt(_, encrypted_buffer_, _))
@@ -221,7 +221,7 @@
                                      base::Unretained(this)));
     base::RunLoop().RunUntilIdle();
     // Make sure Read() triggers a Decrypt() on the decryptor.
-    EXPECT_FALSE(pending_decrypt_cb_.is_null());
+    EXPECT_FALSE(!pending_decrypt_cb_);
   }
 
   void EnterWaitingForKeyState() {
@@ -239,15 +239,15 @@
   }
 
   void AbortPendingDecryptCB() {
-    if (!pending_decrypt_cb_.is_null()) {
-      base::ResetAndReturn(&pending_decrypt_cb_).Run(Decryptor::kSuccess, NULL);
+    if (pending_decrypt_cb_) {
+      std::move(pending_decrypt_cb_).Run(Decryptor::kSuccess, NULL);
     }
   }
 
   void SatisfyPendingDemuxerReadCB(DemuxerStream::Status status) {
     scoped_refptr<DecoderBuffer> buffer =
         (status == DemuxerStream::kOk) ? encrypted_buffer_ : NULL;
-    base::ResetAndReturn(&pending_demuxer_read_cb_).Run(status, buffer);
+    std::move(pending_demuxer_read_cb_).Run(status, buffer);
   }
 
   void Reset() {
@@ -393,7 +393,7 @@
   EXPECT_CALL(*this, BufferReady(DemuxerStream::kOk, decrypted_buffer_));
   // The decrypt callback is returned after the correct decryption key is added.
   key_added_cb_.Run();
-  base::ResetAndReturn(&pending_decrypt_cb_).Run(Decryptor::kNoKey, NULL);
+  std::move(pending_decrypt_cb_).Run(Decryptor::kNoKey, NULL);
   base::RunLoop().RunUntilIdle();
 }
 
diff --git a/media/filters/decrypting_video_decoder.cc b/media/filters/decrypting_video_decoder.cc
index 673c5591..8d9df2d6 100644
--- a/media/filters/decrypting_video_decoder.cc
+++ b/media/filters/decrypting_video_decoder.cc
@@ -50,20 +50,20 @@
   DCHECK(state_ == kUninitialized || state_ == kIdle ||
          state_ == kDecodeFinished)
       << state_;
-  DCHECK(decode_cb_.is_null());
-  DCHECK(reset_cb_.is_null());
+  DCHECK(!decode_cb_);
+  DCHECK(!reset_cb_);
   DCHECK(config.IsValidConfig());
 
   init_cb_ = BindToCurrentLoop(init_cb);
   if (!cdm_context) {
     // Once we have a CDM context, one should always be present.
     DCHECK(!support_clear_content_);
-    base::ResetAndReturn(&init_cb_).Run(false);
+    std::move(init_cb_).Run(false);
     return;
   }
 
   if (!config.is_encrypted() && !support_clear_content_) {
-    base::ResetAndReturn(&init_cb_).Run(false);
+    std::move(init_cb_).Run(false);
     return;
   }
 
@@ -75,13 +75,13 @@
   weak_this_ = weak_factory_.GetWeakPtr();
   config_ = config;
 
-  DCHECK(!waiting_for_decryption_key_cb.is_null());
+  DCHECK(waiting_for_decryption_key_cb);
   waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb;
 
   if (state_ == kUninitialized) {
     if (!cdm_context->GetDecryptor()) {
       DVLOG(1) << __func__ << ": no decryptor";
-      base::ResetAndReturn(&init_cb_).Run(false);
+      std::move(init_cb_).Run(false);
       return;
     }
 
@@ -104,19 +104,19 @@
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK(state_ == kIdle || state_ == kDecodeFinished || state_ == kError)
       << state_;
-  DCHECK(!decode_cb.is_null());
-  CHECK(decode_cb_.is_null()) << "Overlapping decodes are not supported.";
+  DCHECK(decode_cb);
+  CHECK(!decode_cb_) << "Overlapping decodes are not supported.";
 
   decode_cb_ = BindToCurrentLoop(decode_cb);
 
   if (state_ == kError) {
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::DECODE_ERROR);
+    std::move(decode_cb_).Run(DecodeStatus::DECODE_ERROR);
     return;
   }
 
   // Return empty frames if decoding has finished.
   if (state_ == kDecodeFinished) {
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::OK);
+    std::move(decode_cb_).Run(DecodeStatus::OK);
     return;
   }
 
@@ -132,8 +132,8 @@
          state_ == kWaitingForKey || state_ == kDecodeFinished ||
          state_ == kError)
       << state_;
-  DCHECK(init_cb_.is_null());  // No Reset() during pending initialization.
-  DCHECK(reset_cb_.is_null());
+  DCHECK(!init_cb_);  // No Reset() during pending initialization.
+  DCHECK(!reset_cb_);
 
   reset_cb_ = BindToCurrentLoop(closure);
 
@@ -144,17 +144,17 @@
   // after the decode callback is fired - see DecryptAndDecodeBuffer() and
   // DeliverFrame().
   if (state_ == kPendingDecode) {
-    DCHECK(!decode_cb_.is_null());
+    DCHECK(decode_cb_);
     return;
   }
 
   if (state_ == kWaitingForKey) {
-    DCHECK(!decode_cb_.is_null());
+    DCHECK(decode_cb_);
     pending_buffer_to_decode_ = NULL;
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::ABORTED);
+    std::move(decode_cb_).Run(DecodeStatus::ABORTED);
   }
 
-  DCHECK(decode_cb_.is_null());
+  DCHECK(!decode_cb_);
   DoReset();
 }
 
@@ -169,25 +169,25 @@
     decryptor_ = NULL;
   }
   pending_buffer_to_decode_ = NULL;
-  if (!init_cb_.is_null())
-    base::ResetAndReturn(&init_cb_).Run(false);
-  if (!decode_cb_.is_null())
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::ABORTED);
-  if (!reset_cb_.is_null())
-    base::ResetAndReturn(&reset_cb_).Run();
+  if (init_cb_)
+    std::move(init_cb_).Run(false);
+  if (decode_cb_)
+    std::move(decode_cb_).Run(DecodeStatus::ABORTED);
+  if (reset_cb_)
+    std::move(reset_cb_).Run();
 }
 
 void DecryptingVideoDecoder::FinishInitialization(bool success) {
   DVLOG(2) << "FinishInitialization()";
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK_EQ(state_, kPendingDecoderInit) << state_;
-  DCHECK(!init_cb_.is_null());
-  DCHECK(reset_cb_.is_null());   // No Reset() before initialization finished.
-  DCHECK(decode_cb_.is_null());  // No Decode() before initialization finished.
+  DCHECK(init_cb_);
+  DCHECK(!reset_cb_);   // No Reset() before initialization finished.
+  DCHECK(!decode_cb_);  // No Decode() before initialization finished.
 
   if (!success) {
     DVLOG(1) << __func__ << ": failed to init video decoder on decryptor";
-    base::ResetAndReturn(&init_cb_).Run(false);
+    std::move(init_cb_).Run(false);
     decryptor_ = NULL;
     state_ = kError;
     return;
@@ -199,7 +199,7 @@
 
   // Success!
   state_ = kIdle;
-  base::ResetAndReturn(&init_cb_).Run(true);
+  std::move(init_cb_).Run(true);
 }
 
 void DecryptingVideoDecoder::DecodePendingBuffer() {
@@ -226,7 +226,7 @@
   DVLOG(3) << "DeliverFrame() - status: " << status;
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK_EQ(state_, kPendingDecode) << state_;
-  DCHECK(!decode_cb_.is_null());
+  DCHECK(decode_cb_);
   DCHECK(pending_buffer_to_decode_.get());
 
   TRACE_EVENT_ASYNC_END2("media", "DecryptingVideoDecoder::DecodePendingBuffer",
@@ -239,8 +239,8 @@
   scoped_refptr<DecoderBuffer> scoped_pending_buffer_to_decode =
       std::move(pending_buffer_to_decode_);
 
-  if (!reset_cb_.is_null()) {
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::ABORTED);
+  if (reset_cb_) {
+    std::move(decode_cb_).Run(DecodeStatus::ABORTED);
     DoReset();
     return;
   }
@@ -251,7 +251,7 @@
     DVLOG(2) << "DeliverFrame() - kError";
     MEDIA_LOG(ERROR, media_log_) << GetDisplayName() << ": decode error";
     state_ = kError;
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::DECODE_ERROR);
+    std::move(decode_cb_).Run(DecodeStatus::DECODE_ERROR);
     return;
   }
 
@@ -285,7 +285,7 @@
     DVLOG(2) << "DeliverFrame() - kNeedMoreData";
     state_ = scoped_pending_buffer_to_decode->end_of_stream() ? kDecodeFinished
                                                               : kIdle;
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::OK);
+    std::move(decode_cb_).Run(DecodeStatus::OK);
     return;
   }
 
@@ -328,7 +328,7 @@
   }
 
   state_ = kIdle;
-  base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::OK);
+  std::move(decode_cb_).Run(DecodeStatus::OK);
 }
 
 void DecryptingVideoDecoder::OnKeyAdded() {
@@ -349,10 +349,10 @@
 }
 
 void DecryptingVideoDecoder::DoReset() {
-  DCHECK(init_cb_.is_null());
-  DCHECK(decode_cb_.is_null());
+  DCHECK(!init_cb_);
+  DCHECK(!decode_cb_);
   state_ = kIdle;
-  base::ResetAndReturn(&reset_cb_).Run();
+  std::move(reset_cb_).Run();
 }
 
 }  // namespace media
diff --git a/media/filters/decrypting_video_decoder_unittest.cc b/media/filters/decrypting_video_decoder_unittest.cc
index 90d131f..aac4077 100644
--- a/media/filters/decrypting_video_decoder_unittest.cc
+++ b/media/filters/decrypting_video_decoder_unittest.cc
@@ -155,7 +155,7 @@
 
   // Make the video decode callback pending by saving and not firing it.
   void EnterPendingDecodeState() {
-    EXPECT_TRUE(pending_video_decode_cb_.is_null());
+    EXPECT_TRUE(!pending_video_decode_cb_);
     EXPECT_CALL(*decryptor_, DecryptAndDecodeVideo(encrypted_buffer_, _))
         .WillOnce(SaveArg<1>(&pending_video_decode_cb_));
 
@@ -165,7 +165,7 @@
     base::RunLoop().RunUntilIdle();
     // Make sure the Decode() on the decoder triggers a DecryptAndDecode() on
     // the decryptor.
-    EXPECT_FALSE(pending_video_decode_cb_.is_null());
+    EXPECT_FALSE(!pending_video_decode_cb_);
   }
 
   void EnterWaitingForKeyState() {
@@ -179,16 +179,16 @@
   }
 
   void AbortPendingVideoDecodeCB() {
-    if (!pending_video_decode_cb_.is_null()) {
-      base::ResetAndReturn(&pending_video_decode_cb_)
+    if (pending_video_decode_cb_) {
+      std::move(pending_video_decode_cb_)
           .Run(Decryptor::kSuccess, scoped_refptr<VideoFrame>(NULL));
     }
   }
 
   void AbortAllPendingCBs() {
-    if (!pending_init_cb_.is_null()) {
-      ASSERT_TRUE(pending_video_decode_cb_.is_null());
-      base::ResetAndReturn(&pending_init_cb_).Run(false);
+    if (pending_init_cb_) {
+      ASSERT_TRUE(!pending_video_decode_cb_);
+      std::move(pending_init_cb_).Run(false);
       return;
     }
 
@@ -343,8 +343,7 @@
   // The video decode callback is returned after the correct decryption key is
   // added.
   key_added_cb_.Run();
-  base::ResetAndReturn(&pending_video_decode_cb_)
-      .Run(Decryptor::kNoKey, null_video_frame_);
+  std::move(pending_video_decode_cb_).Run(Decryptor::kNoKey, null_video_frame_);
   base::RunLoop().RunUntilIdle();
 }
 
@@ -407,7 +406,7 @@
       .WillOnce(SaveArg<1>(&pending_init_cb_));
 
   InitializeAndExpectResult(TestVideoConfig::NormalEncrypted(), false);
-  EXPECT_FALSE(pending_init_cb_.is_null());
+  EXPECT_FALSE(!pending_init_cb_);
 
   Destroy();
 }
diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc
index 11991c2..37728b0 100644
--- a/media/filters/ffmpeg_audio_decoder.cc
+++ b/media/filters/ffmpeg_audio_decoder.cc
@@ -96,7 +96,7 @@
 void FFmpegAudioDecoder::Decode(scoped_refptr<DecoderBuffer> buffer,
                                 const DecodeCB& decode_cb) {
   DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(!decode_cb.is_null());
+  DCHECK(decode_cb);
   CHECK_NE(state_, kUninitialized);
   DecodeCB decode_cb_bound = BindToCurrentLoop(decode_cb);
 
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index 7d10e11..8c0da97 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -356,7 +356,7 @@
 
 FFmpegDemuxerStream::~FFmpegDemuxerStream() {
   DCHECK(!demuxer_);
-  DCHECK(read_cb_.is_null());
+  DCHECK(!read_cb_);
   DCHECK(buffer_queue_.IsEmpty());
 }
 
@@ -671,7 +671,7 @@
 
 void FFmpegDemuxerStream::FlushBuffers(bool preserve_packet_position) {
   DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(preserve_packet_position || read_cb_.is_null())
+  DCHECK(preserve_packet_position || !read_cb_)
       << "There should be no pending read";
 
   // H264 and AAC require that we resend the header after flush.
@@ -693,16 +693,16 @@
 
 void FFmpegDemuxerStream::Abort() {
   aborted_ = true;
-  if (!read_cb_.is_null())
-    base::ResetAndReturn(&read_cb_).Run(DemuxerStream::kAborted, nullptr);
+  if (read_cb_)
+    std::move(read_cb_).Run(DemuxerStream::kAborted, nullptr);
 }
 
 void FFmpegDemuxerStream::Stop() {
   DCHECK(task_runner_->BelongsToCurrentThread());
   buffer_queue_.Clear();
-  if (!read_cb_.is_null()) {
-    base::ResetAndReturn(&read_cb_).Run(
-        DemuxerStream::kOk, DecoderBuffer::CreateEOSBuffer());
+  if (read_cb_) {
+    std::move(read_cb_).Run(DemuxerStream::kOk,
+                            DecoderBuffer::CreateEOSBuffer());
   }
   demuxer_ = NULL;
   stream_ = NULL;
@@ -721,7 +721,7 @@
 
 void FFmpegDemuxerStream::Read(const ReadCB& read_cb) {
   DCHECK(task_runner_->BelongsToCurrentThread());
-  CHECK(read_cb_.is_null()) << "Overlapping reads are not supported";
+  CHECK(!read_cb_) << "Overlapping reads are not supported";
   read_cb_ = BindToCurrentLoop(read_cb);
 
   // Don't accept any additional reads if we've been told to stop.
@@ -729,19 +729,19 @@
   //
   // TODO(scherkus): it would be cleaner to reply with an error message.
   if (!demuxer_) {
-    base::ResetAndReturn(&read_cb_).Run(
-        DemuxerStream::kOk, DecoderBuffer::CreateEOSBuffer());
+    std::move(read_cb_).Run(DemuxerStream::kOk,
+                            DecoderBuffer::CreateEOSBuffer());
     return;
   }
 
   if (!is_enabled_) {
     DVLOG(1) << "Read from disabled stream, returning EOS";
-    base::ResetAndReturn(&read_cb_).Run(kOk, DecoderBuffer::CreateEOSBuffer());
+    std::move(read_cb_).Run(kOk, DecoderBuffer::CreateEOSBuffer());
     return;
   }
 
   if (aborted_) {
-    base::ResetAndReturn(&read_cb_).Run(kAborted, nullptr);
+    std::move(read_cb_).Run(kAborted, nullptr);
     return;
   }
 
@@ -833,9 +833,9 @@
   if (is_enabled_) {
     waiting_for_keyframe_ = true;
   }
-  if (!is_enabled_ && !read_cb_.is_null()) {
+  if (!is_enabled_ && read_cb_) {
     DVLOG(1) << "Read from disabled stream, returning EOS";
-    base::ResetAndReturn(&read_cb_).Run(kOk, DecoderBuffer::CreateEOSBuffer());
+    std::move(read_cb_).Run(kOk, DecoderBuffer::CreateEOSBuffer());
   }
 }
 
@@ -851,13 +851,12 @@
 
 void FFmpegDemuxerStream::SatisfyPendingRead() {
   DCHECK(task_runner_->BelongsToCurrentThread());
-  if (!read_cb_.is_null()) {
+  if (read_cb_) {
     if (!buffer_queue_.IsEmpty()) {
-      base::ResetAndReturn(&read_cb_).Run(
-          DemuxerStream::kOk, buffer_queue_.Pop());
+      std::move(read_cb_).Run(DemuxerStream::kOk, buffer_queue_.Pop());
     } else if (end_of_stream_) {
-      base::ResetAndReturn(&read_cb_).Run(
-          DemuxerStream::kOk, DecoderBuffer::CreateEOSBuffer());
+      std::move(read_cb_).Run(DemuxerStream::kOk,
+                              DecoderBuffer::CreateEOSBuffer());
     }
   }
 
@@ -924,7 +923,7 @@
       weak_factory_(this) {
   DCHECK(task_runner_.get());
   DCHECK(data_source_);
-  DCHECK(!media_tracks_updated_cb_.is_null());
+  DCHECK(media_tracks_updated_cb_);
 }
 
 FFmpegDemuxer::~FFmpegDemuxer() {
@@ -1007,8 +1006,8 @@
   // TODO(dalecurtis): We probably should report PIPELINE_ERROR_ABORT here
   // instead to avoid any preroll work that may be started upon return, but
   // currently the PipelineImpl does not know how to handle this.
-  if (!pending_seek_cb_.is_null())
-    base::ResetAndReturn(&pending_seek_cb_).Run(PIPELINE_OK);
+  if (pending_seek_cb_)
+    std::move(pending_seek_cb_).Run(PIPELINE_OK);
 }
 
 void FFmpegDemuxer::Stop() {
@@ -1049,7 +1048,7 @@
 
 void FFmpegDemuxer::Seek(base::TimeDelta time, const PipelineStatusCB& cb) {
   DCHECK(task_runner_->BelongsToCurrentThread());
-  CHECK(pending_seek_cb_.is_null());
+  CHECK(!pending_seek_cb_);
 
   pending_seek_cb_ = cb;
   SeekInternal(time, base::BindOnce(&FFmpegDemuxer::OnSeekFrameSuccess,
@@ -1676,11 +1675,11 @@
 
 void FFmpegDemuxer::OnSeekFrameSuccess() {
   DCHECK(task_runner_->BelongsToCurrentThread());
-  CHECK(!pending_seek_cb_.is_null());
+  CHECK(pending_seek_cb_);
 
   if (stopped_) {
     MEDIA_LOG(ERROR, media_log_) << GetDisplayName() << ": bad state";
-    base::ResetAndReturn(&pending_seek_cb_).Run(PIPELINE_ERROR_ABORT);
+    std::move(pending_seek_cb_).Run(PIPELINE_ERROR_ABORT);
     return;
   }
 
@@ -1694,7 +1693,7 @@
   ReadFrameIfNeeded();
 
   // Notify we're finished seeking.
-  base::ResetAndReturn(&pending_seek_cb_).Run(PIPELINE_OK);
+  std::move(pending_seek_cb_).Run(PIPELINE_OK);
 }
 
 void FFmpegDemuxer::FindAndEnableProperTracks(
@@ -1784,7 +1783,7 @@
 
   // Make sure we have work to do before reading.
   if (stopped_ || !StreamsHaveAvailableCapacity() || pending_read_ ||
-      !pending_seek_cb_.is_null()) {
+      pending_seek_cb_) {
     return;
   }
 
@@ -1807,7 +1806,7 @@
   DCHECK(pending_read_);
   pending_read_ = false;
 
-  if (stopped_ || !pending_seek_cb_.is_null())
+  if (stopped_ || pending_seek_cb_)
     return;
 
   // Consider the stream as ended if:
diff --git a/media/filters/ffmpeg_video_decoder.cc b/media/filters/ffmpeg_video_decoder.cc
index 081f6dd..22983daf 100644
--- a/media/filters/ffmpeg_video_decoder.cc
+++ b/media/filters/ffmpeg_video_decoder.cc
@@ -256,7 +256,7 @@
     const WaitingForDecryptionKeyCB& /* waiting_for_decryption_key_cb */) {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(config.IsValidConfig());
-  DCHECK(!output_cb.is_null());
+  DCHECK(output_cb);
 
   InitCB bound_init_cb = BindToCurrentLoop(init_cb);
 
@@ -281,7 +281,7 @@
                                 const DecodeCB& decode_cb) {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(buffer.get());
-  DCHECK(!decode_cb.is_null());
+  DCHECK(decode_cb);
   CHECK_NE(state_, kUninitialized);
 
   DecodeCB decode_cb_bound = BindToCurrentLoop(decode_cb);
diff --git a/media/filters/frame_processor.cc b/media/filters/frame_processor.cc
index ccc93058..cbbe3ff 100644
--- a/media/filters/frame_processor.cc
+++ b/media/filters/frame_processor.cc
@@ -196,7 +196,7 @@
       media_log_(media_log),
       parse_warning_cb_(parse_warning_cb) {
   DCHECK(stream_);
-  DCHECK(!parse_warning_cb_.is_null());
+  DCHECK(parse_warning_cb_);
 }
 
 MseTrackBuffer::~MseTrackBuffer() {
@@ -243,7 +243,7 @@
         // warning's callback.
         media_log_->RecordRapporWithSecurityOrigin(
             "Media.OriginUrl.MSE.KeyframeTimeGreaterThanDependant");
-        DCHECK(!parse_warning_cb_.is_null());
+        DCHECK(parse_warning_cb_);
         parse_warning_cb_.Run(
             SourceBufferParseWarning::kKeyframeTimeGreaterThanDependant);
       }
@@ -298,7 +298,7 @@
       media_log_(media_log),
       range_api_(range_api) {
   DVLOG(2) << __func__ << "()";
-  DCHECK(!update_duration_cb.is_null());
+  DCHECK(update_duration_cb);
 }
 
 FrameProcessor::~FrameProcessor() {
@@ -307,8 +307,8 @@
 
 void FrameProcessor::SetParseWarningCallback(
     const SourceBufferParseWarningCB& parse_warning_cb) {
-  DCHECK(parse_warning_cb_.is_null());
-  DCHECK(!parse_warning_cb.is_null());
+  DCHECK(!parse_warning_cb_);
+  DCHECK(parse_warning_cb);
   parse_warning_cb_ = parse_warning_cb;
 }
 
@@ -353,7 +353,7 @@
       // callback.
       media_log_->RecordRapporWithSecurityOrigin(
           "Media.OriginUrl.MSE.MuxedSequenceModeSourceBuffer");
-      DCHECK(!parse_warning_cb_.is_null());
+      DCHECK(parse_warning_cb_);
       parse_warning_cb_.Run(SourceBufferParseWarning::kMuxedSequenceMode);
     }
 
diff --git a/media/filters/gpu_video_decoder.cc b/media/filters/gpu_video_decoder.cc
index 4752387..3b056561 100644
--- a/media/filters/gpu_video_decoder.cc
+++ b/media/filters/gpu_video_decoder.cc
@@ -110,7 +110,7 @@
     return;
   }
 
-  DCHECK(pending_reset_cb_.is_null());
+  DCHECK(!pending_reset_cb_);
   pending_reset_cb_ = BindToCurrentLoop(closure);
 
   vda_->Reset();
@@ -287,7 +287,7 @@
   const bool supports_external_output_surface = !!(
       capabilities.flags &
       VideoDecodeAccelerator::Capabilities::SUPPORTS_EXTERNAL_OUTPUT_SURFACE);
-  if (supports_external_output_surface && !request_overlay_info_cb_.is_null()) {
+  if (supports_external_output_surface && request_overlay_info_cb_) {
     const bool requires_restart_for_external_output_surface =
         !(capabilities.flags & VideoDecodeAccelerator::Capabilities::
                                    SUPPORTS_SET_EXTERNAL_OUTPUT_SURFACE);
@@ -334,7 +334,7 @@
 void GpuVideoDecoder::CompleteInitialization(const OverlayInfo& overlay_info) {
   DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent();
   DCHECK(vda_);
-  DCHECK(!init_cb_.is_null());
+  DCHECK(init_cb_);
   DCHECK(!vda_initialized_);
 
   VideoDecodeAccelerator::Config vda_config;
@@ -361,7 +361,7 @@
     // It's important to set |vda_| to null so that OnSurfaceAvailable() will
     // not call SetSurface() on a nonexistent remote VDA.
     DestroyVDA();
-    base::ResetAndReturn(&init_cb_).Run(false);
+    std::move(init_cb_).Run(false);
     return;
   }
 
@@ -369,14 +369,14 @@
   // Otherwise, a call to NotifyInitializationComplete will follow with the
   // result of deferred initialization.
   if (!supports_deferred_initialization_)
-    base::ResetAndReturn(&init_cb_).Run(true);
+    std::move(init_cb_).Run(true);
 }
 
 void GpuVideoDecoder::NotifyInitializationComplete(bool success) {
   DVLOG_IF(1, !success) << __func__ << " Deferred initialization failed.";
 
   if (init_cb_)
-    base::ResetAndReturn(&init_cb_).Run(success);
+    std::move(init_cb_).Run(success);
 }
 
 void GpuVideoDecoder::DestroyPictureBuffers(PictureBufferMap* buffers) {
@@ -405,7 +405,7 @@
 void GpuVideoDecoder::Decode(scoped_refptr<DecoderBuffer> buffer,
                              const DecodeCB& decode_cb) {
   DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent();
-  DCHECK(pending_reset_cb_.is_null());
+  DCHECK(!pending_reset_cb_);
 
   DVLOG(3) << __func__ << " " << buffer->AsHumanReadableString();
 
@@ -700,7 +700,7 @@
 
   // During a pending vda->Reset(), we don't accumulate frames.  Drop it on the
   // floor and return.
-  if (!pending_reset_cb_.is_null())
+  if (pending_reset_cb_)
     return;
 
   frame->metadata()->SetBoolean(VideoFrameMetadata::POWER_EFFICIENT, true);
@@ -821,11 +821,10 @@
     DestroyVDA();
   DCHECK(assigned_picture_buffers_.empty());
 
-  if (!init_cb_.is_null())
-    base::ResetAndReturn(&init_cb_).Run(false);
+  if (init_cb_)
+    std::move(init_cb_).Run(false);
   if (request_overlay_info_cb_ && overlay_info_requested_) {
-    base::ResetAndReturn(&request_overlay_info_cb_)
-        .Run(false, ProvideOverlayInfoCB());
+    std::move(request_overlay_info_cb_).Run(false, ProvideOverlayInfoCB());
   }
 
   for (std::map<int32_t, PendingDecoderBuffer>::iterator it =
@@ -835,8 +834,8 @@
   }
   bitstream_buffers_in_decoder_.clear();
 
-  if (!pending_reset_cb_.is_null())
-    base::ResetAndReturn(&pending_reset_cb_).Run();
+  if (pending_reset_cb_)
+    std::move(pending_reset_cb_).Run();
 }
 
 void GpuVideoDecoder::NotifyFlushDone() {
@@ -844,7 +843,7 @@
   DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent();
   DCHECK_EQ(state_, kDrainingDecoder);
   state_ = kDecoderDrained;
-  base::ResetAndReturn(&eos_decode_cb_).Run(DecodeStatus::OK);
+  std::move(eos_decode_cb_).Run(DecodeStatus::OK);
 
   // Assume flush is for a config change, so drop shared memory segments in
   // anticipation of a resize occurring.
@@ -860,8 +859,8 @@
   // delivered during the reset can find their time data.
   input_buffer_data_.clear();
 
-  if (!pending_reset_cb_.is_null())
-    base::ResetAndReturn(&pending_reset_cb_).Run();
+  if (pending_reset_cb_)
+    std::move(pending_reset_cb_).Run();
 }
 
 void GpuVideoDecoder::NotifyError(media::VideoDecodeAccelerator::Error error) {
@@ -870,7 +869,7 @@
     return;
 
   if (init_cb_)
-    base::ResetAndReturn(&init_cb_).Run(false);
+    std::move(init_cb_).Run(false);
 
   // If we have any bitstream buffers, then notify one that an error has
   // occurred.  This guarantees that somebody finds out about the error.  If
@@ -883,7 +882,7 @@
   }
 
   if (state_ == kDrainingDecoder)
-    base::ResetAndReturn(&eos_decode_cb_).Run(DecodeStatus::DECODE_ERROR);
+    std::move(eos_decode_cb_).Run(DecodeStatus::DECODE_ERROR);
 
   state_ = kError;
 
diff --git a/media/filters/memory_data_source.cc b/media/filters/memory_data_source.cc
index b1b96f9..2237adf 100644
--- a/media/filters/memory_data_source.cc
+++ b/media/filters/memory_data_source.cc
@@ -19,7 +19,7 @@
                             int size,
                             uint8_t* data,
                             const DataSource::ReadCB& read_cb) {
-  DCHECK(!read_cb.is_null());
+  DCHECK(read_cb);
 
   if (is_stopped_ || size < 0 || position < 0 ||
       static_cast<size_t>(position) > size_) {
diff --git a/media/filters/offloading_video_decoder.cc b/media/filters/offloading_video_decoder.cc
index 3ca8e3c9..da6f30ff 100644
--- a/media/filters/offloading_video_decoder.cc
+++ b/media/filters/offloading_video_decoder.cc
@@ -154,7 +154,7 @@
                                     const DecodeCB& decode_cb) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(buffer);
-  DCHECK(!decode_cb.is_null());
+  DCHECK(decode_cb);
 
   DecodeCB bound_decode_cb = BindToCurrentLoop(decode_cb);
   if (!offload_task_runner_) {
diff --git a/media/filters/pipeline_controller.cc b/media/filters/pipeline_controller.cc
index e204dc9..4627b84bc 100644
--- a/media/filters/pipeline_controller.cc
+++ b/media/filters/pipeline_controller.cc
@@ -26,12 +26,12 @@
       error_cb_(error_cb),
       weak_factory_(this) {
   DCHECK(pipeline_);
-  DCHECK(!renderer_factory_cb_.is_null());
-  DCHECK(!seeked_cb_.is_null());
-  DCHECK(!suspended_cb_.is_null());
-  DCHECK(!before_resume_cb_.is_null());
-  DCHECK(!resumed_cb_.is_null());
-  DCHECK(!error_cb_.is_null());
+  DCHECK(renderer_factory_cb_);
+  DCHECK(seeked_cb_);
+  DCHECK(suspended_cb_);
+  DCHECK(before_resume_cb_);
+  DCHECK(resumed_cb_);
+  DCHECK(error_cb_);
 }
 
 PipelineController::~PipelineController() {
diff --git a/media/filters/source_buffer_range.cc b/media/filters/source_buffer_range.cc
index 5472248..e1d45412 100644
--- a/media/filters/source_buffer_range.cc
+++ b/media/filters/source_buffer_range.cc
@@ -22,7 +22,7 @@
       next_buffer_index_(-1),
       interbuffer_distance_cb_(interbuffer_distance_cb),
       size_in_bytes_(0) {
-  DCHECK(!interbuffer_distance_cb.is_null());
+  DCHECK(interbuffer_distance_cb);
 }
 
 SourceBufferRange::~SourceBufferRange() = default;
diff --git a/media/filters/source_buffer_state.cc b/media/filters/source_buffer_state.cc
index 2c86688c..b13de7b 100644
--- a/media/filters/source_buffer_state.cc
+++ b/media/filters/source_buffer_state.cc
@@ -138,7 +138,7 @@
       create_demuxer_stream_cb_(create_demuxer_stream_cb),
       media_log_(media_log),
       state_(UNINITIALIZED) {
-  DCHECK(!create_demuxer_stream_cb_.is_null());
+  DCHECK(create_demuxer_stream_cb_);
   DCHECK(frame_processor_);
 }
 
@@ -190,8 +190,8 @@
 
 void SourceBufferState::SetTracksWatcher(
     const Demuxer::MediaTracksUpdatedCB& tracks_updated_cb) {
-  DCHECK(init_segment_received_cb_.is_null());
-  DCHECK(!tracks_updated_cb.is_null());
+  DCHECK(!init_segment_received_cb_);
+  DCHECK(tracks_updated_cb);
   init_segment_received_cb_ = tracks_updated_cb;
 }
 
@@ -570,7 +570,7 @@
                           base::Unretained(this), expected_codecs),
       base::BindRepeating(&SourceBufferState::OnNewBuffers,
                           base::Unretained(this)),
-      new_text_track_cb_.is_null(),
+      !new_text_track_cb_,
       base::BindRepeating(&SourceBufferState::OnEncryptedMediaInitData,
                           base::Unretained(this)),
       base::BindRepeating(&SourceBufferState::OnNewMediaSegment,
@@ -842,7 +842,7 @@
       state_ = PENDING_PARSER_INIT;
     if (state_ == PENDING_PARSER_RECONFIG)
       state_ = PENDING_PARSER_REINIT;
-    DCHECK(!init_segment_received_cb_.is_null());
+    DCHECK(init_segment_received_cb_);
     init_segment_received_cb_.Run(std::move(tracks));
   }
 
@@ -968,8 +968,8 @@
     const StreamParser::InitParameters& params) {
   // We've either yet-to-run |init_cb_| if pending init, or we've previously
   // run it if pending reinit.
-  DCHECK((!init_cb_.is_null() && state_ == PENDING_PARSER_INIT) ||
-         (init_cb_.is_null() && state_ == PENDING_PARSER_REINIT));
+  DCHECK((init_cb_ && state_ == PENDING_PARSER_INIT) ||
+         (!init_cb_ && state_ == PENDING_PARSER_REINIT));
   State old_state = state_;
   state_ = PARSER_INITIALIZED;
 
diff --git a/media/filters/video_renderer_algorithm.cc b/media/filters/video_renderer_algorithm.cc
index 68847a9..b7c5903 100644
--- a/media/filters/video_renderer_algorithm.cc
+++ b/media/filters/video_renderer_algorithm.cc
@@ -41,7 +41,7 @@
       wall_clock_time_cb_(wall_clock_time_cb),
       frame_duration_calculator_(kMovingAverageSamples),
       frame_dropping_disabled_(false) {
-  DCHECK(!wall_clock_time_cb_.is_null());
+  DCHECK(wall_clock_time_cb_);
   Reset();
 }
 
diff --git a/media/filters/vp9_parser_unittest.cc b/media/filters/vp9_parser_unittest.cc
index 4db8b11..f5d4fe6 100644
--- a/media/filters/vp9_parser_unittest.cc
+++ b/media/filters/vp9_parser_unittest.cc
@@ -184,7 +184,7 @@
 
     // test-25fps.vp9 doesn't need frame update from driver.
     auto context_refresh_cb = GetContextRefreshCb(fhdr);
-    EXPECT_TRUE(context_refresh_cb.is_null());
+    EXPECT_TRUE(!context_refresh_cb);
     ASSERT_FALSE(ReadShouldContextUpdate());
 
     ++num_parsed_frames;
@@ -220,7 +220,7 @@
 
     bool should_update = ReadShouldContextUpdate();
     auto context_refresh_cb = GetContextRefreshCb(fhdr);
-    if (context_refresh_cb.is_null()) {
+    if (!context_refresh_cb) {
       EXPECT_FALSE(should_update);
     } else {
       EXPECT_TRUE(should_update);
@@ -256,7 +256,7 @@
 
   // After update, parse should be ok.
   auto context_refresh_cb = GetContextRefreshCb(fhdr);
-  EXPECT_FALSE(context_refresh_cb.is_null());
+  EXPECT_FALSE(!context_refresh_cb);
   context_refresh_cb.Run(frame_context);
   EXPECT_EQ(Vp9Parser::kOk, ParseNextFrame(&fhdr));
 
diff --git a/media/filters/vpx_video_decoder.cc b/media/filters/vpx_video_decoder.cc
index dc4faa6..016fc991 100644
--- a/media/filters/vpx_video_decoder.cc
+++ b/media/filters/vpx_video_decoder.cc
@@ -161,7 +161,7 @@
   DVLOG(3) << __func__ << ": " << buffer->AsHumanReadableString();
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(buffer);
-  DCHECK(!decode_cb.is_null());
+  DCHECK(decode_cb);
   DCHECK_NE(state_, kUninitialized)
       << "Called Decode() before successful Initialize()";
 
diff --git a/media/formats/mp2t/es_parser_adts.cc b/media/formats/mp2t/es_parser_adts.cc
index 7a2dbb5c..05e63d2 100644
--- a/media/formats/mp2t/es_parser_adts.cc
+++ b/media/formats/mp2t/es_parser_adts.cc
@@ -139,7 +139,7 @@
       get_decrypt_config_cb_(get_decrypt_config_cb),
       use_hls_sample_aes_(use_hls_sample_aes),
       sbr_in_mimetype_(sbr_in_mimetype) {
-  DCHECK_EQ(!get_decrypt_config_cb_.is_null(), use_hls_sample_aes_);
+  DCHECK_EQ(!!get_decrypt_config_cb_, use_hls_sample_aes_);
 }
 #endif
 
diff --git a/media/formats/mp2t/es_parser_h264.cc b/media/formats/mp2t/es_parser_h264.cc
index 887b898..14bf0ee1 100644
--- a/media/formats/mp2t/es_parser_h264.cc
+++ b/media/formats/mp2t/es_parser_h264.cc
@@ -203,7 +203,7 @@
       next_access_unit_pos_(0),
       use_hls_sample_aes_(use_hls_sample_aes),
       get_decrypt_config_cb_(get_decrypt_config_cb) {
-  DCHECK_EQ(!get_decrypt_config_cb_.is_null(), use_hls_sample_aes_);
+  DCHECK_EQ(!!get_decrypt_config_cb_, use_hls_sample_aes_);
 }
 #endif
 
@@ -442,7 +442,7 @@
 #if BUILDFLAG(ENABLE_HLS_SAMPLE_AES)
   const DecryptConfig* base_decrypt_config = nullptr;
   if (use_hls_sample_aes_) {
-    DCHECK(!get_decrypt_config_cb_.is_null());
+    DCHECK(get_decrypt_config_cb_);
     base_decrypt_config = get_decrypt_config_cb_.Run();
   }
 
diff --git a/media/formats/mp2t/mp2t_stream_parser.cc b/media/formats/mp2t/mp2t_stream_parser.cc
index b9c4b73..92515ad 100644
--- a/media/formats/mp2t/mp2t_stream_parser.cc
+++ b/media/formats/mp2t/mp2t_stream_parser.cc
@@ -213,13 +213,13 @@
     const EndMediaSegmentCB& end_of_segment_cb,
     MediaLog* media_log) {
   DCHECK(!is_initialized_);
-  DCHECK(init_cb_.is_null());
-  DCHECK(!init_cb.is_null());
-  DCHECK(!config_cb.is_null());
-  DCHECK(!new_buffers_cb.is_null());
-  DCHECK(!encrypted_media_init_data_cb.is_null());
-  DCHECK(!new_segment_cb.is_null());
-  DCHECK(!end_of_segment_cb.is_null());
+  DCHECK(!init_cb_);
+  DCHECK(init_cb);
+  DCHECK(config_cb);
+  DCHECK(new_buffers_cb);
+  DCHECK(encrypted_media_init_data_cb);
+  DCHECK(new_segment_cb);
+  DCHECK(end_of_segment_cb);
 
   init_cb_ = std::move(init_cb);
   config_cb_ = config_cb;
diff --git a/media/formats/mp4/mp4_stream_parser.cc b/media/formats/mp4/mp4_stream_parser.cc
index 3ebb6454d..14c437af 100644
--- a/media/formats/mp4/mp4_stream_parser.cc
+++ b/media/formats/mp4/mp4_stream_parser.cc
@@ -106,13 +106,13 @@
     const EndMediaSegmentCB& end_of_segment_cb,
     MediaLog* media_log) {
   DCHECK_EQ(state_, kWaitingForInit);
-  DCHECK(init_cb_.is_null());
-  DCHECK(!init_cb.is_null());
-  DCHECK(!config_cb.is_null());
-  DCHECK(!new_buffers_cb.is_null());
-  DCHECK(!encrypted_media_init_data_cb.is_null());
-  DCHECK(!new_segment_cb.is_null());
-  DCHECK(!end_of_segment_cb.is_null());
+  DCHECK(!init_cb_);
+  DCHECK(init_cb);
+  DCHECK(config_cb);
+  DCHECK(new_buffers_cb);
+  DCHECK(encrypted_media_init_data_cb);
+  DCHECK(new_segment_cb);
+  DCHECK(end_of_segment_cb);
 
   ChangeState(kParsingBoxes);
   init_cb_ = std::move(init_cb);
@@ -637,7 +637,7 @@
 
   DVLOG(1) << "liveness: " << params.liveness;
 
-  if (!init_cb_.is_null()) {
+  if (init_cb_) {
     params.detected_audio_track_count = detected_audio_track_count;
     params.detected_video_track_count = detected_video_track_count;
     params.detected_text_track_count = detected_text_track_count;
diff --git a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc
index 5d79104..cea199095 100644
--- a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc
+++ b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc
@@ -230,7 +230,7 @@
     if (!config_cb_.Run(std::move(media_tracks), TextTrackConfigMap()))
       return -1;
 
-    if (!init_cb_.is_null()) {
+    if (init_cb_) {
       InitParameters params(kInfiniteDuration);
       params.detected_audio_track_count = 1;
       std::move(init_cb_).Run(params);
diff --git a/media/formats/webm/webm_stream_parser.cc b/media/formats/webm/webm_stream_parser.cc
index ee899fe..7178beb6 100644
--- a/media/formats/webm/webm_stream_parser.cc
+++ b/media/formats/webm/webm_stream_parser.cc
@@ -39,13 +39,13 @@
     const EndMediaSegmentCB& end_of_segment_cb,
     MediaLog* media_log) {
   DCHECK_EQ(state_, kWaitingForInit);
-  DCHECK(init_cb_.is_null());
-  DCHECK(!init_cb.is_null());
-  DCHECK(!config_cb.is_null());
-  DCHECK(!new_buffers_cb.is_null());
-  DCHECK(!encrypted_media_init_data_cb.is_null());
-  DCHECK(!new_segment_cb.is_null());
-  DCHECK(!end_of_segment_cb.is_null());
+  DCHECK(!init_cb_);
+  DCHECK(init_cb);
+  DCHECK(config_cb);
+  DCHECK(new_buffers_cb);
+  DCHECK(encrypted_media_init_data_cb);
+  DCHECK(new_segment_cb);
+  DCHECK(end_of_segment_cb);
 
   ChangeState(kParsingHeaders);
   init_cb_ = std::move(init_cb);
@@ -246,7 +246,7 @@
       tracks_parser.video_encryption_key_id(), audio_config.codec(),
       media_log_));
 
-  if (!init_cb_.is_null()) {
+  if (init_cb_) {
     params.detected_audio_track_count =
         tracks_parser.detected_audio_track_count();
     params.detected_video_track_count =
diff --git a/media/gpu/android/android_video_decode_accelerator.cc b/media/gpu/android/android_video_decode_accelerator.cc
index de902b1..d2377b52 100644
--- a/media/gpu/android/android_video_decode_accelerator.cc
+++ b/media/gpu/android/android_video_decode_accelerator.cc
@@ -316,7 +316,7 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   base::AutoReset<bool> scoper(&during_initialize_, true);
 
-  if (make_context_current_cb_.is_null() || get_context_group_cb_.is_null()) {
+  if (!make_context_current_cb_ || !get_context_group_cb_) {
     DLOG(ERROR) << "GL callbacks are required for this VDA";
     return false;
   }
diff --git a/media/gpu/ipc/service/vda_video_decoder.cc b/media/gpu/ipc/service/vda_video_decoder.cc
index 9aba7f33..b6b7ce5 100644
--- a/media/gpu/ipc/service/vda_video_decoder.cc
+++ b/media/gpu/ipc/service/vda_video_decoder.cc
@@ -213,9 +213,9 @@
   DVLOG(1) << __func__ << "(" << config.AsHumanReadableString() << ")";
   DCHECK(parent_task_runner_->BelongsToCurrentThread());
   DCHECK(config.IsValidConfig());
-  DCHECK(init_cb_.is_null());
-  DCHECK(flush_cb_.is_null());
-  DCHECK(reset_cb_.is_null());
+  DCHECK(!init_cb_);
+  DCHECK(!flush_cb_);
+  DCHECK(!reset_cb_);
   DCHECK(decode_cbs_.empty());
 
   if (has_error_) {
@@ -344,16 +344,16 @@
     return;
   }
 
-  base::ResetAndReturn(&init_cb_).Run(true);
+  std::move(init_cb_).Run(true);
 }
 
 void VdaVideoDecoder::Decode(scoped_refptr<DecoderBuffer> buffer,
                              const DecodeCB& decode_cb) {
   DVLOG(3) << __func__ << "(" << (buffer->end_of_stream() ? "EOS" : "") << ")";
   DCHECK(parent_task_runner_->BelongsToCurrentThread());
-  DCHECK(init_cb_.is_null());
-  DCHECK(flush_cb_.is_null());
-  DCHECK(reset_cb_.is_null());
+  DCHECK(!init_cb_);
+  DCHECK(!flush_cb_);
+  DCHECK(!reset_cb_);
   DCHECK(buffer->end_of_stream() || !buffer->decrypt_config());
 
   if (has_error_) {
@@ -401,10 +401,10 @@
 void VdaVideoDecoder::Reset(const base::RepeatingClosure& reset_cb) {
   DVLOG(2) << __func__;
   DCHECK(parent_task_runner_->BelongsToCurrentThread());
-  DCHECK(init_cb_.is_null());
+  DCHECK(!init_cb_);
   // Note: |flush_cb_| may be non-null. If so, the flush can be completed by
   // NotifyResetDone().
-  DCHECK(reset_cb_.is_null());
+  DCHECK(!reset_cb_);
 
   if (has_error_) {
     parent_task_runner_->PostTask(FROM_HERE, reset_cb);
@@ -620,11 +620,11 @@
     return;
 
   // Protect against incorrect calls from the VDA.
-  if (flush_cb_.is_null())
+  if (!flush_cb_)
     return;
 
   DCHECK(decode_cbs_.empty());
-  base::ResetAndReturn(&flush_cb_).Run(DecodeStatus::OK);
+  std::move(flush_cb_).Run(DecodeStatus::OK);
 }
 
 void VdaVideoDecoder::NotifyResetDone() {
@@ -662,11 +662,11 @@
       return;
   }
 
-  if (weak_this && !flush_cb_.is_null())
-    base::ResetAndReturn(&flush_cb_).Run(DecodeStatus::ABORTED);
+  if (weak_this && flush_cb_)
+    std::move(flush_cb_).Run(DecodeStatus::ABORTED);
 
   if (weak_this)
-    base::ResetAndReturn(&reset_cb_).Run();
+    std::move(reset_cb_).Run();
 }
 
 void VdaVideoDecoder::NotifyError(VideoDecodeAccelerator::Error error) {
@@ -738,16 +738,16 @@
       return;
   }
 
-  if (weak_this && !flush_cb_.is_null())
-    base::ResetAndReturn(&flush_cb_).Run(DecodeStatus::DECODE_ERROR);
+  if (weak_this && flush_cb_)
+    std::move(flush_cb_).Run(DecodeStatus::DECODE_ERROR);
 
   // Note: |reset_cb_| cannot return failure, so the client won't actually find
   // out about the error until another operation is attempted.
-  if (weak_this && !reset_cb_.is_null())
-    base::ResetAndReturn(&reset_cb_).Run();
+  if (weak_this && reset_cb_)
+    std::move(reset_cb_).Run();
 
-  if (weak_this && !init_cb_.is_null())
-    base::ResetAndReturn(&init_cb_).Run(false);
+  if (weak_this && init_cb_)
+    std::move(init_cb_).Run(false);
 }
 
 }  // namespace media
diff --git a/media/gpu/test/rendering_helper.cc b/media/gpu/test/rendering_helper.cc
index cf01a66..bf73c1f 100644
--- a/media/gpu/test/rendering_helper.cc
+++ b/media/gpu/test/rendering_helper.cc
@@ -77,11 +77,11 @@
     : texture_target_(texture_target),
       texture_id_(texture_id),
       no_longer_needed_cb_(no_longer_needed_cb) {
-  DCHECK(!no_longer_needed_cb_.is_null());
+  DCHECK(no_longer_needed_cb_);
 }
 
 VideoFrameTexture::~VideoFrameTexture() {
-  base::ResetAndReturn(&no_longer_needed_cb_).Run();
+  std::move(no_longer_needed_cb_).Run();
 }
 
 RenderingHelper::RenderedVideo::RenderedVideo() {}
diff --git a/media/gpu/v4l2/v4l2_image_processor.cc b/media/gpu/v4l2/v4l2_image_processor.cc
index 29b843b..43556db 100644
--- a/media/gpu/v4l2/v4l2_image_processor.cc
+++ b/media/gpu/v4l2/v4l2_image_processor.cc
@@ -127,7 +127,7 @@
                                     int num_buffers,
                                     const base::Closure& error_cb) {
   VLOGF(2);
-  DCHECK(!error_cb.is_null());
+  DCHECK(error_cb);
   DCHECK_GT(num_buffers, 0);
   error_cb_ = error_cb;
 
diff --git a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
index ca38a83..048fcb35 100644
--- a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
@@ -103,7 +103,7 @@
   // decoding into this surface is finished. The callback is reset afterwards,
   // so it needs to be set again before each decode operation.
   void SetDecodeDoneCallback(const base::Closure& done_cb) {
-    DCHECK(done_cb_.is_null());
+    DCHECK(!done_cb_);
     done_cb_ = done_cb;
   }
 
@@ -156,8 +156,8 @@
   reference_surfaces_.clear();
 
   // And finally execute and drop the decode done callback, if set.
-  if (!done_cb_.is_null())
-    base::ResetAndReturn(&done_cb_).Run();
+  if (done_cb_)
+    std::move(done_cb_).Run();
 }
 
 std::string V4L2DecodeSurface::ToString() const {
@@ -500,7 +500,7 @@
   }
 
   // We need the context to be initialized to query extensions.
-  if (!make_context_current_cb_.is_null()) {
+  if (make_context_current_cb_) {
     if (egl_display_ == EGL_NO_DISPLAY) {
       VLOGF(1) << "could not get EGLDisplay";
       return false;
@@ -1671,7 +1671,7 @@
   DCHECK(child_task_runner_->BelongsToCurrentThread());
   DCHECK_NE(texture_id, 0u);
 
-  if (make_context_current_cb_.is_null()) {
+  if (!make_context_current_cb_) {
     VLOGF(1) << "GL callbacks required for binding to GLImages";
     NOTIFY_ERROR(INVALID_ARGUMENT);
     return;
@@ -1838,7 +1838,7 @@
 
   std::unique_ptr<gl::GLFenceEGL> egl_fence;
 
-  if (!make_context_current_cb_.is_null()) {
+  if (make_context_current_cb_) {
     if (!make_context_current_cb_.Run()) {
       VLOGF(1) << "could not make context current";
       NOTIFY_ERROR(PLATFORM_FAILURE);
diff --git a/media/gpu/v4l2/v4l2_video_decode_accelerator.cc b/media/gpu/v4l2/v4l2_video_decode_accelerator.cc
index fc47dbe0..fa122376 100644
--- a/media/gpu/v4l2/v4l2_video_decode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_video_decode_accelerator.cc
@@ -210,7 +210,7 @@
   video_profile_ = config.profile;
 
   // We need the context to be initialized to query extensions.
-  if (!make_context_current_cb_.is_null()) {
+  if (make_context_current_cb_) {
     if (egl_display_ == EGL_NO_DISPLAY) {
       VLOGF(1) << "could not get EGLDisplay";
       return false;
@@ -447,7 +447,7 @@
   DCHECK(child_task_runner_->BelongsToCurrentThread());
   DCHECK_NE(texture_id, 0u);
 
-  if (get_gl_context_cb_.is_null() || make_context_current_cb_.is_null()) {
+  if (!get_gl_context_cb_ || !make_context_current_cb_) {
     VLOGF(1) << "GL callbacks required for binding to EGLImages";
     NOTIFY_ERROR(INVALID_ARGUMENT);
     return;
@@ -674,7 +674,7 @@
 
   std::unique_ptr<gl::GLFenceEGL> egl_fence;
 
-  if (!make_context_current_cb_.is_null()) {
+  if (make_context_current_cb_) {
     if (!make_context_current_cb_.Run()) {
       VLOGF(1) << "could not make context current";
       NOTIFY_ERROR(PLATFORM_FAILURE);
diff --git a/media/gpu/vaapi/va_surface.cc b/media/gpu/vaapi/va_surface.cc
index 61338ab..66006daf4 100644
--- a/media/gpu/vaapi/va_surface.cc
+++ b/media/gpu/vaapi/va_surface.cc
@@ -14,7 +14,7 @@
       size_(size),
       format_(format),
       release_cb_(release_cb) {
-  DCHECK(!release_cb_.is_null());
+  DCHECK(release_cb_);
 }
 
 VASurface::~VASurface() {
diff --git a/media/gpu/vaapi/vaapi_vp9_accelerator.cc b/media/gpu/vaapi/vaapi_vp9_accelerator.cc
index dcecffc..75eaed8 100644
--- a/media/gpu/vaapi/vaapi_vp9_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_vp9_accelerator.cc
@@ -49,7 +49,7 @@
     const base::Closure& done_cb) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   // |done_cb| should be null as we return false from IsFrameContextRequired().
-  DCHECK(done_cb.is_null());
+  DCHECK(!done_cb);
 
   VADecPictureParameterBufferVP9 pic_param;
   memset(&pic_param, 0, sizeof(pic_param));
diff --git a/media/gpu/vp9_decoder.cc b/media/gpu/vp9_decoder.cc
index 8909156..aefb38ba 100644
--- a/media/gpu/vp9_decoder.cc
+++ b/media/gpu/vp9_decoder.cc
@@ -187,7 +187,7 @@
 void VP9Decoder::UpdateFrameContext(
     const scoped_refptr<VP9Picture>& pic,
     const base::Callback<void(const Vp9FrameContext&)>& context_refresh_cb) {
-  DCHECK(!context_refresh_cb.is_null());
+  DCHECK(context_refresh_cb);
   Vp9FrameContext frame_ctx;
   memset(&frame_ctx, 0, sizeof(frame_ctx));
 
@@ -206,7 +206,7 @@
   base::Closure done_cb;
   const auto& context_refresh_cb =
       parser_.GetContextRefreshCb(pic->frame_hdr->frame_context_idx);
-  if (!context_refresh_cb.is_null())
+  if (context_refresh_cb)
     done_cb = base::Bind(&VP9Decoder::UpdateFrameContext,
                          base::Unretained(this), pic, context_refresh_cb);
 
diff --git a/media/gpu/vt_video_decode_accelerator_mac.cc b/media/gpu/vt_video_decode_accelerator_mac.cc
index 68dbfaff..32a7b93 100644
--- a/media/gpu/vt_video_decode_accelerator_mac.cc
+++ b/media/gpu/vt_video_decode_accelerator_mac.cc
@@ -444,7 +444,7 @@
       gpu_task_runner_(base::ThreadTaskRunnerHandle::Get()),
       decoder_thread_("VTDecoderThread"),
       weak_this_factory_(this) {
-  DCHECK(!bind_image_cb_.is_null());
+  DCHECK(bind_image_cb_);
 
   callback_.decompressionOutputCallback = OutputThunk;
   callback_.decompressionOutputRefCon = this;
diff --git a/media/gpu/windows/dxva_video_decode_accelerator_win.cc b/media/gpu/windows/dxva_video_decode_accelerator_win.cc
index e497bf1e..b06f0cbd 100644
--- a/media/gpu/windows/dxva_video_decode_accelerator_win.cc
+++ b/media/gpu/windows/dxva_video_decode_accelerator_win.cc
@@ -776,7 +776,7 @@
 
 bool DXVAVideoDecodeAccelerator::Initialize(const Config& config,
                                             Client* client) {
-  if (get_gl_context_cb_.is_null() || make_context_current_cb_.is_null()) {
+  if (!get_gl_context_cb_ || !make_context_current_cb_) {
     NOTREACHED() << "GL callbacks are required for this VDA";
     return false;
   }
diff --git a/media/mojo/clients/mojo_audio_decoder.cc b/media/mojo/clients/mojo_audio_decoder.cc
index ef89511..518ce49 100644
--- a/media/mojo/clients/mojo_audio_decoder.cc
+++ b/media/mojo/clients/mojo_audio_decoder.cc
@@ -101,7 +101,7 @@
     return;
   }
 
-  DCHECK(decode_cb_.is_null());
+  DCHECK(!decode_cb_);
   decode_cb_ = decode_cb;
 
   remote_decoder_->Decode(
@@ -114,17 +114,16 @@
   DCHECK(task_runner_->BelongsToCurrentThread());
 
   if (remote_decoder_.encountered_error()) {
-    if (!decode_cb_.is_null()) {
-      task_runner_->PostTask(FROM_HERE,
-                             base::Bind(base::ResetAndReturn(&decode_cb_),
-                                        DecodeStatus::DECODE_ERROR));
+    if (decode_cb_) {
+      task_runner_->PostTask(FROM_HERE, base::Bind(std::move(decode_cb_),
+                                                   DecodeStatus::DECODE_ERROR));
     }
 
     task_runner_->PostTask(FROM_HERE, closure);
     return;
   }
 
-  DCHECK(reset_cb_.is_null());
+  DCHECK(!reset_cb_);
   reset_cb_ = closure;
   remote_decoder_->Reset(
       base::Bind(&MojoAudioDecoder::OnResetDone, base::Unretained(this)));
@@ -166,15 +165,15 @@
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK(remote_decoder_.encountered_error());
 
-  if (!init_cb_.is_null()) {
-    base::ResetAndReturn(&init_cb_).Run(false);
+  if (init_cb_) {
+    std::move(init_cb_).Run(false);
     return;
   }
 
-  if (!decode_cb_.is_null())
-    base::ResetAndReturn(&decode_cb_).Run(DecodeStatus::DECODE_ERROR);
-  if (!reset_cb_.is_null())
-    base::ResetAndReturn(&reset_cb_).Run();
+  if (decode_cb_)
+    std::move(decode_cb_).Run(DecodeStatus::DECODE_ERROR);
+  if (reset_cb_)
+    std::move(reset_cb_).Run();
 }
 
 void MojoAudioDecoder::OnInitialized(bool success,
@@ -193,15 +192,15 @@
     remote_decoder_->SetDataSource(std::move(remote_consumer_handle));
   }
 
-  base::ResetAndReturn(&init_cb_).Run(success);
+  std::move(init_cb_).Run(success);
 }
 
 void MojoAudioDecoder::OnDecodeStatus(DecodeStatus status) {
   DVLOG(1) << __func__ << ": status:" << status;
   DCHECK(task_runner_->BelongsToCurrentThread());
 
-  DCHECK(!decode_cb_.is_null());
-  base::ResetAndReturn(&decode_cb_).Run(status);
+  DCHECK(decode_cb_);
+  std::move(decode_cb_).Run(status);
 }
 
 void MojoAudioDecoder::OnResetDone() {
@@ -209,10 +208,10 @@
   DCHECK(task_runner_->BelongsToCurrentThread());
 
   // For pending decodes OnDecodeStatus() should arrive before OnResetDone().
-  DCHECK(decode_cb_.is_null());
+  DCHECK(!decode_cb_);
 
-  DCHECK(!reset_cb_.is_null());
-  base::ResetAndReturn(&reset_cb_).Run();
+  DCHECK(reset_cb_);
+  std::move(reset_cb_).Run();
 }
 
 }  // namespace media
diff --git a/media/mojo/clients/mojo_cdm.cc b/media/mojo/clients/mojo_cdm.cc
index 782c342..8654081d 100644
--- a/media/mojo/clients/mojo_cdm.cc
+++ b/media/mojo/clients/mojo_cdm.cc
@@ -76,10 +76,10 @@
       session_expiration_update_cb_(session_expiration_update_cb),
       weak_factory_(this) {
   DVLOG(1) << __func__;
-  DCHECK(!session_message_cb_.is_null());
-  DCHECK(!session_closed_cb_.is_null());
-  DCHECK(!session_keys_change_cb_.is_null());
-  DCHECK(!session_expiration_update_cb_.is_null());
+  DCHECK(session_message_cb_);
+  DCHECK(session_closed_cb_);
+  DCHECK(session_keys_change_cb_);
+  DCHECK(session_expiration_update_cb_);
 
   mojom::ContentDecryptionModuleClientAssociatedPtrInfo client_ptr_info;
   client_binding_.Bind(mojo::MakeRequest(&client_ptr_info));
diff --git a/media/mojo/clients/mojo_decryptor.cc b/media/mojo/clients/mojo_decryptor.cc
index 8f95ccd..f19d1d7 100644
--- a/media/mojo/clients/mojo_decryptor.cc
+++ b/media/mojo/clients/mojo_decryptor.cc
@@ -211,10 +211,10 @@
   DVLOG(1) << __func__;
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  if (!new_audio_key_cb_.is_null())
+  if (new_audio_key_cb_)
     new_audio_key_cb_.Run();
 
-  if (!new_video_key_cb_.is_null())
+  if (new_video_key_cb_)
     new_video_key_cb_.Run();
 }
 
diff --git a/media/mojo/clients/mojo_renderer.cc b/media/mojo/clients/mojo_renderer.cc
index 275fe28..e006d13 100644
--- a/media/mojo/clients/mojo_renderer.cc
+++ b/media/mojo/clients/mojo_renderer.cc
@@ -132,8 +132,8 @@
   DVLOG(1) << __func__;
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK(cdm_context);
-  DCHECK(!cdm_attached_cb.is_null());
-  DCHECK(cdm_attached_cb_.is_null());
+  DCHECK(cdm_attached_cb);
+  DCHECK(!cdm_attached_cb_);
 
   if (encountered_error_) {
     task_runner_->PostTask(FROM_HERE, base::Bind(cdm_attached_cb, false));
@@ -159,8 +159,8 @@
   DVLOG(2) << __func__;
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK(remote_renderer_.is_bound());
-  DCHECK(!flush_cb.is_null());
-  DCHECK(flush_cb_.is_null());
+  DCHECK(flush_cb);
+  DCHECK(!flush_cb_);
 
   if (encountered_error_) {
     task_runner_->PostTask(FROM_HERE, flush_cb);
@@ -251,7 +251,7 @@
 void MojoRenderer::OnError() {
   DVLOG(1) << __func__;
   DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(init_cb_.is_null());
+  DCHECK(!init_cb_);
 
   encountered_error_ = true;
 
@@ -359,15 +359,15 @@
 void MojoRenderer::OnInitialized(media::RendererClient* client, bool success) {
   DVLOG(1) << __func__;
   DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(!init_cb_.is_null());
+  DCHECK(init_cb_);
 
   // Only set |client_| after initialization succeeded. No client methods should
   // be called before this.
   if (success)
     client_ = client;
 
-  base::ResetAndReturn(&init_cb_).Run(
-      success ? PIPELINE_OK : PIPELINE_ERROR_INITIALIZATION_FAILED);
+  std::move(init_cb_).Run(success ? PIPELINE_OK
+                                  : PIPELINE_ERROR_INITIALIZATION_FAILED);
 
   if (client_ && pending_stats_.has_value())
     client_->OnStatisticsUpdate(pending_stats_.value());
@@ -377,31 +377,31 @@
 void MojoRenderer::OnFlushed() {
   DVLOG(1) << __func__;
   DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(!flush_cb_.is_null());
+  DCHECK(flush_cb_);
 
-  base::ResetAndReturn(&flush_cb_).Run();
+  std::move(flush_cb_).Run();
 }
 
 void MojoRenderer::OnCdmAttached(bool success) {
   DVLOG(1) << __func__;
   DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(!cdm_attached_cb_.is_null());
+  DCHECK(cdm_attached_cb_);
 
-  base::ResetAndReturn(&cdm_attached_cb_).Run(success);
+  std::move(cdm_attached_cb_).Run(success);
 }
 
 void MojoRenderer::CancelPendingCallbacks() {
   DVLOG(1) << __func__;
   DCHECK(task_runner_->BelongsToCurrentThread());
 
-  if (!init_cb_.is_null())
-    base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_INITIALIZATION_FAILED);
+  if (init_cb_)
+    std::move(init_cb_).Run(PIPELINE_ERROR_INITIALIZATION_FAILED);
 
-  if (!flush_cb_.is_null())
-    base::ResetAndReturn(&flush_cb_).Run();
+  if (flush_cb_)
+    std::move(flush_cb_).Run();
 
-  if (!cdm_attached_cb_.is_null())
-    base::ResetAndReturn(&cdm_attached_cb_).Run(false);
+  if (cdm_attached_cb_)
+    std::move(cdm_attached_cb_).Run(false);
 }
 
 }  // namespace media
diff --git a/media/mojo/clients/mojo_renderer_factory.cc b/media/mojo/clients/mojo_renderer_factory.cc
index 4a2096a..55be954 100644
--- a/media/mojo/clients/mojo_renderer_factory.cc
+++ b/media/mojo/clients/mojo_renderer_factory.cc
@@ -43,7 +43,7 @@
 
   // |get_gpu_factories_cb_| can be null in the HLS/MediaPlayerRenderer case,
   // when we do not need to create video overlays.
-  if (!get_gpu_factories_cb_.is_null()) {
+  if (get_gpu_factories_cb_) {
     overlay_factory =
         std::make_unique<VideoOverlayFactory>(get_gpu_factories_cb_.Run());
   }
diff --git a/media/mojo/clients/mojo_video_decoder.cc b/media/mojo/clients/mojo_video_decoder.cc
index 04eaf20..515a1509 100644
--- a/media/mojo/clients/mojo_video_decoder.cc
+++ b/media/mojo/clients/mojo_video_decoder.cc
@@ -169,7 +169,7 @@
   initialized_ = status;
   needs_bitstream_conversion_ = needs_bitstream_conversion;
   max_decode_requests_ = max_decode_requests;
-  base::ResetAndReturn(&init_cb_).Run(status);
+  std::move(init_cb_).Run(status);
 }
 
 void MojoVideoDecoder::Decode(scoped_refptr<DecoderBuffer> buffer,
@@ -251,7 +251,7 @@
 void MojoVideoDecoder::OnResetDone() {
   DVLOG(2) << __func__;
   DCHECK(task_runner_->BelongsToCurrentThread());
-  base::ResetAndReturn(&reset_cb_).Run();
+  std::move(reset_cb_).Run();
 }
 
 bool MojoVideoDecoder::NeedsBitstreamConversion() const {
@@ -351,8 +351,8 @@
   // reentrancy is allowed, and therefore which callbacks must be posted.
   base::WeakPtr<MojoVideoDecoder> weak_this = weak_this_;
 
-  if (!init_cb_.is_null())
-    base::ResetAndReturn(&init_cb_).Run(false);
+  if (init_cb_)
+    std::move(init_cb_).Run(false);
   if (!weak_this)
     return;
 
@@ -363,8 +363,8 @@
   }
   pending_decodes_.clear();
 
-  if (!reset_cb_.is_null())
-    base::ResetAndReturn(&reset_cb_).Run();
+  if (reset_cb_)
+    std::move(reset_cb_).Run();
 }
 
 }  // namespace media
diff --git a/media/mojo/common/mojo_data_pipe_read_write.cc b/media/mojo/common/mojo_data_pipe_read_write.cc
index 87e5cb2..06230f5 100644
--- a/media/mojo/common/mojo_data_pipe_read_write.cc
+++ b/media/mojo/common/mojo_data_pipe_read_write.cc
@@ -41,7 +41,7 @@
 
 void MojoDataPipeReader::CompleteCurrentRead() {
   DVLOG(4) << __func__;
-  DCHECK(!done_cb_.is_null());
+  DCHECK(done_cb_);
   current_buffer_size_ = 0;
   std::move(done_cb_).Run(true);
 }
@@ -52,7 +52,7 @@
   DVLOG(3) << __func__;
   // Read() can not be called when there is another reading request in process.
   DCHECK(!current_buffer_size_);
-  DCHECK(!done_cb.is_null());
+  DCHECK(done_cb);
   if (!num_bytes) {
     std::move(done_cb).Run(true);
     return;
@@ -116,7 +116,7 @@
     bytes_read_ = 0;
     current_buffer_ = nullptr;
     current_buffer_size_ = 0;
-    DCHECK(!done_cb_.is_null());
+    DCHECK(done_cb_);
     std::move(done_cb_).Run(false);
   }
 }
@@ -160,7 +160,7 @@
   DVLOG(3) << __func__;
   // Write() can not be called when another writing request is in process.
   DCHECK(!current_buffer_);
-  DCHECK(!done_cb.is_null());
+  DCHECK(done_cb);
   if (!buffer_size) {
     std::move(done_cb).Run(true);
     return;
@@ -212,7 +212,7 @@
 
 void MojoDataPipeWriter::CompleteCurrentWrite() {
   DVLOG(4) << __func__;
-  DCHECK(!done_cb_.is_null());
+  DCHECK(done_cb_);
   current_buffer_ = nullptr;
   std::move(done_cb_).Run(true);
 }
@@ -230,7 +230,7 @@
     current_buffer_ = nullptr;
     current_buffer_size_ = 0;
     bytes_written_ = 0;
-    DCHECK(!done_cb_.is_null());
+    DCHECK(done_cb_);
     std::move(done_cb_).Run(false);
   }
 }
diff --git a/media/mojo/common/mojo_shared_buffer_video_frame.cc b/media/mojo/common/mojo_shared_buffer_video_frame.cc
index 82891ce..22268d6 100644
--- a/media/mojo/common/mojo_shared_buffer_video_frame.cc
+++ b/media/mojo/common/mojo_shared_buffer_video_frame.cc
@@ -185,7 +185,7 @@
 MojoSharedBufferVideoFrame::~MojoSharedBufferVideoFrame() {
   // Call |mojo_shared_buffer_done_cb_| to take ownership of
   // |shared_buffer_handle_|.
-  if (!mojo_shared_buffer_done_cb_.is_null())
+  if (mojo_shared_buffer_done_cb_)
     mojo_shared_buffer_done_cb_.Run(std::move(shared_buffer_handle_),
                                     shared_buffer_size_);
 }
diff --git a/media/mojo/services/media_resource_shim.cc b/media/mojo/services/media_resource_shim.cc
index 184f2a3..6d3f3b9c 100644
--- a/media/mojo/services/media_resource_shim.cc
+++ b/media/mojo/services/media_resource_shim.cc
@@ -19,7 +19,7 @@
       streams_ready_(0),
       weak_factory_(this) {
   DCHECK(!streams.empty());
-  DCHECK(!demuxer_ready_cb_.is_null());
+  DCHECK(demuxer_ready_cb_);
 
   for (auto& s : streams) {
     mojom::DemuxerStreamPtr stream(std::move(s));
@@ -32,7 +32,7 @@
 MediaResourceShim::~MediaResourceShim() = default;
 
 std::vector<DemuxerStream*> MediaResourceShim::GetAllStreams() {
-  DCHECK(demuxer_ready_cb_.is_null());
+  DCHECK(!demuxer_ready_cb_);
   std::vector<DemuxerStream*> result;
   for (auto& stream : streams_)
     result.push_back(stream.get());
@@ -41,7 +41,7 @@
 
 void MediaResourceShim::OnStreamReady() {
   if (++streams_ready_ == streams_.size())
-    base::ResetAndReturn(&demuxer_ready_cb_).Run();
+    std::move(demuxer_ready_cb_).Run();
 }
 
 }  // namespace media
diff --git a/media/mojo/services/mojo_audio_input_stream.cc b/media/mojo/services/mojo_audio_input_stream.cc
index 87518ab4..8bf129bd 100644
--- a/media/mojo/services/mojo_audio_input_stream.cc
+++ b/media/mojo/services/mojo_audio_input_stream.cc
@@ -90,7 +90,7 @@
 
   DCHECK(socket_handle.is_valid());
 
-  base::ResetAndReturn(&stream_created_callback_)
+  std::move(stream_created_callback_)
       .Run({base::in_place, std::move(shared_memory_region),
             std::move(socket_handle)},
            initially_muted);
diff --git a/media/mojo/services/mojo_cdm_allocator.cc b/media/mojo/services/mojo_cdm_allocator.cc
index 3506cf8..d94a6ba 100644
--- a/media/mojo/services/mojo_cdm_allocator.cc
+++ b/media/mojo/services/mojo_cdm_allocator.cc
@@ -48,7 +48,7 @@
       size_t capacity,
       const MojoSharedBufferDoneCB& mojo_shared_buffer_done_cb) {
     DCHECK(buffer.is_valid());
-    DCHECK(!mojo_shared_buffer_done_cb.is_null());
+    DCHECK(mojo_shared_buffer_done_cb);
 
     // cdm::Buffer interface limits capacity to uint32.
     DCHECK_LE(capacity, std::numeric_limits<uint32_t>::max());
diff --git a/media/mojo/services/mojo_demuxer_stream_adapter.cc b/media/mojo/services/mojo_demuxer_stream_adapter.cc
index db8b806f..9f2f7f7 100644
--- a/media/mojo/services/mojo_demuxer_stream_adapter.cc
+++ b/media/mojo/services/mojo_demuxer_stream_adapter.cc
@@ -36,7 +36,7 @@
 void MojoDemuxerStreamAdapter::Read(const ReadCB& read_cb) {
   DVLOG(3) << __func__;
   // We shouldn't be holding on to a previous callback if a new Read() came in.
-  DCHECK(read_cb_.is_null());
+  DCHECK(!read_cb_);
 
   read_cb_ = read_cb;
   demuxer_stream_->Read(base::Bind(&MojoDemuxerStreamAdapter::OnBufferReady,
@@ -91,17 +91,17 @@
     const base::Optional<AudioDecoderConfig>& audio_config,
     const base::Optional<VideoDecoderConfig>& video_config) {
   DVLOG(3) << __func__;
-  DCHECK(!read_cb_.is_null());
+  DCHECK(read_cb_);
   DCHECK_NE(type_, UNKNOWN);
 
   if (status == kConfigChanged) {
     UpdateConfig(std::move(audio_config), std::move(video_config));
-    base::ResetAndReturn(&read_cb_).Run(kConfigChanged, nullptr);
+    std::move(read_cb_).Run(kConfigChanged, nullptr);
     return;
   }
 
   if (status == kAborted) {
-    base::ResetAndReturn(&read_cb_).Run(kAborted, nullptr);
+    std::move(read_cb_).Run(kAborted, nullptr);
     return;
   }
 
@@ -114,11 +114,11 @@
 void MojoDemuxerStreamAdapter::OnBufferRead(
     scoped_refptr<DecoderBuffer> buffer) {
   if (!buffer) {
-    base::ResetAndReturn(&read_cb_).Run(kAborted, nullptr);
+    std::move(read_cb_).Run(kAborted, nullptr);
     return;
   }
 
-  base::ResetAndReturn(&read_cb_).Run(kOk, buffer);
+  std::move(read_cb_).Run(kOk, buffer);
 }
 
 void MojoDemuxerStreamAdapter::UpdateConfig(
diff --git a/media/mojo/services/mojo_renderer_service.cc b/media/mojo/services/mojo_renderer_service.cc
index f385149c..8f04efc 100644
--- a/media/mojo/services/mojo_renderer_service.cc
+++ b/media/mojo/services/mojo_renderer_service.cc
@@ -275,13 +275,13 @@
 
 void MojoRendererService::InitiateScopedSurfaceRequest(
     InitiateScopedSurfaceRequestCallback callback) {
-  if (initiate_surface_request_cb_.is_null()) {
+  if (!initiate_surface_request_cb_) {
     // |renderer_| is likely not of type MediaPlayerRenderer.
     // This is an unexpected call, and the connection should be closed.
     mojo::ReportBadMessage("Unexpected call to InitiateScopedSurfaceRequest.");
 
     // This may cause |this| to be destructed.
-    DCHECK(!bad_message_cb_.is_null());
+    DCHECK(bad_message_cb_);
     bad_message_cb_.Run();
 
     return;
diff --git a/media/mojo/services/video_decode_perf_history.cc b/media/mojo/services/video_decode_perf_history.cc
index 37807f02..cf6b4c5 100644
--- a/media/mojo/services/video_decode_perf_history.cc
+++ b/media/mojo/services/video_decode_perf_history.cc
@@ -135,7 +135,7 @@
     bool database_success,
     std::unique_ptr<VideoDecodeStatsDB::DecodeStatsEntry> stats) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK(!got_info_cb.is_null());
+  DCHECK(got_info_cb);
   DCHECK_EQ(db_init_status_, COMPLETE);
 
   bool is_power_efficient = false;
diff --git a/media/mojo/services/video_decode_perf_history_unittest.cc b/media/mojo/services/video_decode_perf_history_unittest.cc
index b4a6f3ec..43a1670 100644
--- a/media/mojo/services/video_decode_perf_history_unittest.cc
+++ b/media/mojo/services/video_decode_perf_history_unittest.cc
@@ -54,7 +54,7 @@
   // for success.
   void CompleteInitialize(bool success) {
     DVLOG(2) << __func__ << " running with success = " << success;
-    EXPECT_FALSE(pendnding_init_cb_.is_null());
+    EXPECT_FALSE(!pendnding_init_cb_);
     std::move(pendnding_init_cb_).Run(success);
   }
 
diff --git a/media/remoting/courier_renderer.cc b/media/remoting/courier_renderer.cc
index 6b3f0672..e7c66f60 100644
--- a/media/remoting/courier_renderer.cc
+++ b/media/remoting/courier_renderer.cc
@@ -160,7 +160,7 @@
 void CourierRenderer::Flush(const base::Closure& flush_cb) {
   VLOG(2) << __func__;
   DCHECK(media_task_runner_->BelongsToCurrentThread());
-  DCHECK(flush_cb_.is_null());
+  DCHECK(!flush_cb_);
 
   if (state_ != STATE_PLAYING) {
     DCHECK_EQ(state_, STATE_ERROR);
@@ -503,14 +503,14 @@
   metrics_recorder_.OnRendererInitialized();
 
   state_ = STATE_PLAYING;
-  base::ResetAndReturn(&init_workflow_done_callback_).Run(PIPELINE_OK);
+  std::move(init_workflow_done_callback_).Run(PIPELINE_OK);
 }
 
 void CourierRenderer::FlushUntilCallback() {
   DCHECK(media_task_runner_->BelongsToCurrentThread());
   VLOG(2) << __func__ << ": Received RPC_R_FLUSHUNTIL_CALLBACK";
 
-  if (state_ != STATE_FLUSHING || flush_cb_.is_null()) {
+  if (state_ != STATE_FLUSHING || !flush_cb_) {
     LOG(WARNING) << "Unexpected flushuntil callback RPC.";
     OnFatalError(PEERS_OUT_OF_SYNC);
     return;
@@ -521,7 +521,7 @@
     audio_demuxer_stream_adapter_->SignalFlush(false);
   if (video_demuxer_stream_adapter_)
     video_demuxer_stream_adapter_->SignalFlush(false);
-  base::ResetAndReturn(&flush_cb_).Run();
+  std::move(flush_cb_).Run();
   ResetMeasurements();
 }
 
@@ -733,17 +733,17 @@
   // This renderer will be shut down shortly. To prevent breaking the pipeline,
   // just run the callback without reporting error.
   if (!init_workflow_done_callback_.is_null()) {
-    base::ResetAndReturn(&init_workflow_done_callback_).Run(PIPELINE_OK);
+    std::move(init_workflow_done_callback_).Run(PIPELINE_OK);
     return;
   }
 
-  if (!flush_cb_.is_null())
-    base::ResetAndReturn(&flush_cb_).Run();
+  if (flush_cb_)
+    std::move(flush_cb_).Run();
 }
 
 void CourierRenderer::OnMediaTimeUpdated() {
   DCHECK(media_task_runner_->BelongsToCurrentThread());
-  if (!flush_cb_.is_null())
+  if (flush_cb_)
     return;  // Don't manage and check the queue when Flush() is on-going.
   if (receiver_is_blocked_on_local_demuxers_)
     return;  // Don't manage and check the queue when buffering is on-going.
@@ -785,7 +785,7 @@
 void CourierRenderer::UpdateVideoStatsQueue(int video_frames_decoded,
                                             int video_frames_dropped) {
   DCHECK(media_task_runner_->BelongsToCurrentThread());
-  if (!flush_cb_.is_null())
+  if (flush_cb_)
     return;  // Don't manage and check the queue when Flush() is on-going.
 
   if (!stats_updated_) {
diff --git a/media/remoting/demuxer_stream_adapter.cc b/media/remoting/demuxer_stream_adapter.cc
index d307169..84b96a3 100644
--- a/media/remoting/demuxer_stream_adapter.cc
+++ b/media/remoting/demuxer_stream_adapter.cc
@@ -399,7 +399,7 @@
 
   data_pipe_writer_.Close();
 
-  base::ResetAndReturn(&error_callback_).Run(stop_trigger);
+  std::move(error_callback_).Run(stop_trigger);
 }
 
 }  // namespace remoting
diff --git a/media/remoting/end2end_test_renderer.cc b/media/remoting/end2end_test_renderer.cc
index b227ec9..f81fe069 100644
--- a/media/remoting/end2end_test_renderer.cc
+++ b/media/remoting/end2end_test_renderer.cc
@@ -52,7 +52,7 @@
  private:
   void OnFrameRead(bool success) {
     DCHECK(success);
-    if (!send_frame_to_sink_cb_.is_null())
+    if (send_frame_to_sink_cb_)
       send_frame_to_sink_cb_.Run(next_frame_data_, type_);
     next_frame_data_.resize(0);
   }
@@ -106,7 +106,7 @@
   }
 
   void SendMessageToSink(const std::vector<uint8_t>& message) override {
-    if (!send_message_to_sink_cb_.is_null())
+    if (send_message_to_sink_cb_)
       send_message_to_sink_cb_.Run(message);
   }
 
diff --git a/media/remoting/fake_media_resource.cc b/media/remoting/fake_media_resource.cc
index e1789f8..dd31150 100644
--- a/media/remoting/fake_media_resource.cc
+++ b/media/remoting/fake_media_resource.cc
@@ -87,10 +87,10 @@
 
   // Sends frame out if there is pending read callback. Otherwise, stores it
   // in the buffer queue.
-  if (pending_read_cb_.is_null()) {
+  if (!pending_read_cb_) {
     buffer_queue_.push_back(input_buffer);
   } else {
-    base::ResetAndReturn(&pending_read_cb_).Run(kOk, input_buffer);
+    std::move(pending_read_cb_).Run(kOk, input_buffer);
   }
 }
 
diff --git a/media/remoting/stream_provider.cc b/media/remoting/stream_provider.cc
index 4f28082..df7482d1 100644
--- a/media/remoting/stream_provider.cc
+++ b/media/remoting/stream_provider.cc
@@ -129,7 +129,7 @@
 }
 
 void MediaStream::Initialize(const base::Closure& init_done_cb) {
-  DCHECK(!init_done_cb.is_null());
+  DCHECK(init_done_cb);
   if (!init_done_callback_.is_null()) {
     OnError("Duplicate initialization");
     return;
@@ -196,7 +196,7 @@
     OnError("config missing");
     return;
   }
-  base::ResetAndReturn(&init_done_callback_).Run();
+  std::move(init_done_callback_).Run();
 }
 
 void MediaStream::OnReadUntilCallback(std::unique_ptr<pb::RpcMessage> message) {
@@ -299,7 +299,7 @@
 
 void MediaStream::Read(const ReadCB& read_cb) {
   DCHECK(read_complete_callback_.is_null());
-  DCHECK(!read_cb.is_null());
+  DCHECK(read_cb);
   read_complete_callback_ = read_cb;
   if (buffers_.empty() && config_changed_) {
     CompleteRead(DemuxerStream::kConfigChanged);
@@ -333,17 +333,17 @@
 #endif  // DCHECK_IS_ON()
       }
       config_changed_ = false;
-      base::ResetAndReturn(&read_complete_callback_).Run(status, nullptr);
+      std::move(read_complete_callback_).Run(status, nullptr);
       return;
     case DemuxerStream::kAborted:
     case DemuxerStream::kError:
-      base::ResetAndReturn(&read_complete_callback_).Run(status, nullptr);
+      std::move(read_complete_callback_).Run(status, nullptr);
       return;
     case DemuxerStream::kOk:
       DCHECK(!buffers_.empty());
       scoped_refptr<DecoderBuffer> frame_data = buffers_.front();
       buffers_.pop_front();
-      base::ResetAndReturn(&read_complete_callback_).Run(status, frame_data);
+      std::move(read_complete_callback_).Run(status, frame_data);
       return;
   }
 }
@@ -383,7 +383,7 @@
   VLOG(1) << __func__ << ": " << error;
   if (error_callback_.is_null())
     return;
-  base::ResetAndReturn(&error_callback_).Run();
+  std::move(error_callback_).Run();
 }
 
 StreamProvider::StreamProvider(RpcBroker* rpc_broker,
@@ -432,21 +432,21 @@
   VLOG(1) << __func__ << ": " << error;
   if (error_callback_.is_null())
     return;
-  base::ResetAndReturn(&error_callback_).Run();
+  std::move(error_callback_).Run();
 }
 
 void StreamProvider::AudioStreamInitialized() {
   DCHECK(!init_done_callback_.is_null());
   audio_stream_initialized_ = true;
   if (video_stream_initialized_ || !video_stream_)
-    base::ResetAndReturn(&init_done_callback_).Run();
+    std::move(init_done_callback_).Run();
 }
 
 void StreamProvider::VideoStreamInitialized() {
   DCHECK(!init_done_callback_.is_null());
   video_stream_initialized_ = true;
   if (audio_stream_initialized_ || !audio_stream_)
-    base::ResetAndReturn(&init_done_callback_).Run();
+    std::move(init_done_callback_).Run();
 }
 
 std::vector<DemuxerStream*> StreamProvider::GetAllStreams() {
diff --git a/media/renderers/audio_renderer_impl.cc b/media/renderers/audio_renderer_impl.cc
index 4d37d14..c501f572 100644
--- a/media/renderers/audio_renderer_impl.cc
+++ b/media/renderers/audio_renderer_impl.cc
@@ -598,13 +598,13 @@
   DCHECK(init_cb_);
   TRACE_EVENT_ASYNC_END1("media", "AudioRendererImpl::Initialize", this,
                          "status", MediaLog::PipelineStatusToString(status));
-  base::ResetAndReturn(&init_cb_).Run(status);
+  std::move(init_cb_).Run(status);
 }
 
 void AudioRendererImpl::FinishFlush() {
   DCHECK(flush_cb_);
   TRACE_EVENT_ASYNC_END0("media", "AudioRendererImpl::Flush", this);
-  base::ResetAndReturn(&flush_cb_).Run();
+  std::move(flush_cb_).Run();
 }
 
 void AudioRendererImpl::OnPlaybackError(PipelineStatus error) {
diff --git a/media/renderers/audio_renderer_impl_unittest.cc b/media/renderers/audio_renderer_impl_unittest.cc
index 9f27429..0a52942 100644
--- a/media/renderers/audio_renderer_impl_unittest.cc
+++ b/media/renderers/audio_renderer_impl_unittest.cc
@@ -242,7 +242,7 @@
     event.RunAndWaitForStatus(expected);
 
     // We should have no reads.
-    EXPECT_TRUE(decode_cb_.is_null());
+    EXPECT_TRUE(!decode_cb_);
   }
 
   void InitializeAndDestroy() {
@@ -262,7 +262,7 @@
     WaitableMessageLoopEvent event;
     InitializeRenderer(&demuxer_stream_, event.GetPipelineStatusCB());
     base::RunLoop().RunUntilIdle();
-    DCHECK(!init_decoder_cb_.is_null());
+    DCHECK(init_decoder_cb_);
 
     renderer_.reset();
     event.RunAndWaitForStatus(PIPELINE_ERROR_ABORT);
@@ -309,29 +309,27 @@
 
   void StopTicking() { renderer_->StopTicking(); }
 
-  bool IsReadPending() const {
-    return !decode_cb_.is_null();
-  }
+  bool IsReadPending() const { return !!decode_cb_; }
 
   void WaitForPendingRead() {
     SCOPED_TRACE("WaitForPendingRead()");
-    if (!decode_cb_.is_null())
+    if (decode_cb_)
       return;
 
-    DCHECK(wait_for_pending_decode_cb_.is_null());
+    DCHECK(!wait_for_pending_decode_cb_);
 
     WaitableMessageLoopEvent event;
     wait_for_pending_decode_cb_ = event.GetClosure();
     event.RunAndWait();
 
-    DCHECK(!decode_cb_.is_null());
-    DCHECK(wait_for_pending_decode_cb_.is_null());
+    DCHECK(decode_cb_);
+    DCHECK(!wait_for_pending_decode_cb_);
   }
 
   // Delivers decoded frames to |renderer_|.
   void SatisfyPendingRead(InputFrames frames) {
     CHECK_GT(frames.value, 0);
-    CHECK(!decode_cb_.is_null());
+    CHECK(decode_cb_);
 
     scoped_refptr<AudioBuffer> buffer;
     if (hardware_params_.IsBitstreamFormat()) {
@@ -350,7 +348,7 @@
   }
 
   void DeliverEndOfStream() {
-    DCHECK(!decode_cb_.is_null());
+    DCHECK(decode_cb_);
 
     // Return EOS buffer to trigger EOS frame.
     EXPECT_CALL(demuxer_stream_, Read(_))
@@ -359,14 +357,12 @@
 
     // Satify pending |decode_cb_| to trigger a new DemuxerStream::Read().
     message_loop_.task_runner()->PostTask(
-        FROM_HERE,
-        base::Bind(base::ResetAndReturn(&decode_cb_), DecodeStatus::OK));
+        FROM_HERE, base::Bind(std::move(decode_cb_), DecodeStatus::OK));
 
     WaitForPendingRead();
 
     message_loop_.task_runner()->PostTask(
-        FROM_HERE,
-        base::Bind(base::ResetAndReturn(&decode_cb_), DecodeStatus::OK));
+        FROM_HERE, base::Bind(std::move(decode_cb_), DecodeStatus::OK));
 
     base::RunLoop().RunUntilIdle();
     EXPECT_EQ(last_statistics_.audio_memory_usage,
@@ -476,16 +472,16 @@
       return;
     }
 
-    CHECK(decode_cb_.is_null()) << "Overlapping decodes are not permitted";
+    CHECK(!decode_cb_) << "Overlapping decodes are not permitted";
     decode_cb_ = decode_cb;
 
     // Wake up WaitForPendingRead() if needed.
-    if (!wait_for_pending_decode_cb_.is_null())
-      base::ResetAndReturn(&wait_for_pending_decode_cb_).Run();
+    if (wait_for_pending_decode_cb_)
+      std::move(wait_for_pending_decode_cb_).Run();
   }
 
   void ResetDecoder(const base::Closure& reset_cb) {
-    if (!decode_cb_.is_null()) {
+    if (decode_cb_) {
       // |reset_cb| will be called in DeliverBuffer(), after the decoder is
       // flushed.
       reset_cb_ = reset_cb;
@@ -497,14 +493,14 @@
 
   void DeliverBuffer(DecodeStatus status,
                      const scoped_refptr<AudioBuffer>& buffer) {
-    CHECK(!decode_cb_.is_null());
+    CHECK(decode_cb_);
 
     if (buffer.get() && !buffer->end_of_stream())
       output_cb_.Run(buffer);
-    base::ResetAndReturn(&decode_cb_).Run(status);
+    std::move(decode_cb_).Run(status);
 
-    if (!reset_cb_.is_null())
-      base::ResetAndReturn(&reset_cb_).Run();
+    if (reset_cb_)
+      std::move(reset_cb_).Run();
 
     base::RunLoop().RunUntilIdle();
   }
diff --git a/media/renderers/default_renderer_factory.cc b/media/renderers/default_renderer_factory.cc
index f7c2f8d..6b379a6c 100644
--- a/media/renderers/default_renderer_factory.cc
+++ b/media/renderers/default_renderer_factory.cc
@@ -78,7 +78,7 @@
       media_log_));
 
   GpuVideoAcceleratorFactories* gpu_factories = nullptr;
-  if (!get_gpu_factories_cb_.is_null())
+  if (get_gpu_factories_cb_)
     gpu_factories = get_gpu_factories_cb_.Run();
 
   std::unique_ptr<GpuMemoryBufferVideoFramePool> gmb_pool;
diff --git a/media/renderers/renderer_impl.cc b/media/renderers/renderer_impl.cc
index c279075..2d9ebad 100644
--- a/media/renderers/renderer_impl.cc
+++ b/media/renderers/renderer_impl.cc
@@ -344,13 +344,13 @@
   DCHECK(init_cb_);
   TRACE_EVENT_ASYNC_END1("media", "RendererImpl::Initialize", this, "status",
                          MediaLog::PipelineStatusToString(status));
-  base::ResetAndReturn(&init_cb_).Run(status);
+  std::move(init_cb_).Run(status);
 }
 
 void RendererImpl::FinishFlush() {
   DCHECK(flush_cb_);
   TRACE_EVENT_ASYNC_END0("media", "RendererImpl::Flush", this);
-  base::ResetAndReturn(&flush_cb_).Run();
+  std::move(flush_cb_).Run();
 }
 
 void RendererImpl::InitializeAudioRenderer() {
diff --git a/media/renderers/video_renderer_impl.cc b/media/renderers/video_renderer_impl.cc
index 0e0e6d9..734e4f1 100644
--- a/media/renderers/video_renderer_impl.cc
+++ b/media/renderers/video_renderer_impl.cc
@@ -349,13 +349,13 @@
   DCHECK(init_cb_);
   TRACE_EVENT_ASYNC_END1("media", "VideoRendererImpl::Initialize", this,
                          "status", MediaLog::PipelineStatusToString(status));
-  base::ResetAndReturn(&init_cb_).Run(status);
+  std::move(init_cb_).Run(status);
 }
 
 void VideoRendererImpl::FinishFlush() {
   DCHECK(flush_cb_);
   TRACE_EVENT_ASYNC_END0("media", "VideoRendererImpl::Flush", this);
-  base::ResetAndReturn(&flush_cb_).Run();
+  std::move(flush_cb_).Run();
 }
 
 void VideoRendererImpl::OnPlaybackError(PipelineStatus error) {
diff --git a/media/renderers/video_renderer_impl_unittest.cc b/media/renderers/video_renderer_impl_unittest.cc
index 5ac2446f..c88dca0e 100644
--- a/media/renderers/video_renderer_impl_unittest.cc
+++ b/media/renderers/video_renderer_impl_unittest.cc
@@ -209,9 +209,7 @@
     decode_results_.push_back(std::make_pair(status, frame));
   }
 
-  bool IsReadPending() {
-    return !decode_cb_.is_null();
-  }
+  bool IsReadPending() { return !!decode_cb_; }
 
   void WaitForError(PipelineStatus expected) {
     SCOPED_TRACE(base::StringPrintf("WaitForError(%d)", expected));
@@ -232,21 +230,21 @@
 
   void WaitForPendingDecode() {
     SCOPED_TRACE("WaitForPendingDecode()");
-    if (!decode_cb_.is_null())
+    if (decode_cb_)
       return;
 
-    DCHECK(wait_for_pending_decode_cb_.is_null());
+    DCHECK(!wait_for_pending_decode_cb_);
 
     WaitableMessageLoopEvent event;
     wait_for_pending_decode_cb_ = event.GetClosure();
     event.RunAndWait();
 
-    DCHECK(!decode_cb_.is_null());
-    DCHECK(wait_for_pending_decode_cb_.is_null());
+    DCHECK(decode_cb_);
+    DCHECK(!wait_for_pending_decode_cb_);
   }
 
   void SatisfyPendingDecode() {
-    CHECK(!decode_cb_.is_null());
+    CHECK(decode_cb_);
     CHECK(!decode_results_.empty());
 
     // Post tasks for OutputCB and DecodeCB.
@@ -255,13 +253,13 @@
       message_loop_.task_runner()->PostTask(FROM_HERE,
                                             base::Bind(output_cb_, frame));
     message_loop_.task_runner()->PostTask(
-        FROM_HERE, base::Bind(base::ResetAndReturn(&decode_cb_),
-                              decode_results_.front().first));
+        FROM_HERE,
+        base::Bind(std::move(decode_cb_), decode_results_.front().first));
     decode_results_.pop_front();
   }
 
   void SatisfyPendingDecodeWithEndOfStream() {
-    DCHECK(!decode_cb_.is_null());
+    DCHECK(decode_cb_);
 
     // Return EOS buffer to trigger EOS frame.
     EXPECT_CALL(demuxer_stream_, Read(_))
@@ -270,14 +268,12 @@
 
     // Satify pending |decode_cb_| to trigger a new DemuxerStream::Read().
     message_loop_.task_runner()->PostTask(
-        FROM_HERE,
-        base::Bind(base::ResetAndReturn(&decode_cb_), DecodeStatus::OK));
+        FROM_HERE, base::Bind(std::move(decode_cb_), DecodeStatus::OK));
 
     WaitForPendingDecode();
 
     message_loop_.task_runner()->PostTask(
-        FROM_HERE,
-        base::Bind(base::ResetAndReturn(&decode_cb_), DecodeStatus::OK));
+        FROM_HERE, base::Bind(std::move(decode_cb_), DecodeStatus::OK));
   }
 
   void AdvanceWallclockTimeInMs(int time_ms) {
@@ -472,12 +468,12 @@
   void DecodeRequested(scoped_refptr<DecoderBuffer> buffer,
                        const VideoDecoder::DecodeCB& decode_cb) {
     DCHECK_EQ(&message_loop_, base::MessageLoopCurrent::Get());
-    CHECK(decode_cb_.is_null());
+    CHECK(!decode_cb_);
     decode_cb_ = decode_cb;
 
     // Wake up WaitForPendingDecode() if needed.
-    if (!wait_for_pending_decode_cb_.is_null())
-      base::ResetAndReturn(&wait_for_pending_decode_cb_).Run();
+    if (wait_for_pending_decode_cb_)
+      std::move(wait_for_pending_decode_cb_).Run();
 
     if (decode_results_.empty())
       return;
@@ -491,7 +487,7 @@
   void FlushRequested(const base::Closure& callback) {
     DCHECK_EQ(&message_loop_, base::MessageLoopCurrent::Get());
     decode_results_.clear();
-    if (!decode_cb_.is_null()) {
+    if (decode_cb_) {
       QueueFrames("abort");
       SatisfyPendingDecode();
     }
diff --git a/media/test/mock_media_source.cc b/media/test/mock_media_source.cc
index e225db6..9dc79ab 100644
--- a/media/test/mock_media_source.cc
+++ b/media/test/mock_media_source.cc
@@ -213,7 +213,7 @@
 void MockMediaSource::DemuxerOpenedTask() {
   ChunkDemuxer::Status status = AddId();
   if (status != ChunkDemuxer::kOk) {
-    CHECK(!demuxer_failure_cb_.is_null());
+    CHECK(demuxer_failure_cb_);
     demuxer_failure_cb_.Run(DEMUXER_ERROR_COULD_NOT_OPEN);
     return;
   }
@@ -250,7 +250,7 @@
     EmeInitDataType init_data_type,
     const std::vector<uint8_t>& init_data) {
   CHECK(!init_data.empty());
-  CHECK(!encrypted_media_init_data_cb_.is_null());
+  CHECK(encrypted_media_init_data_cb_);
   encrypted_media_init_data_cb_.Run(init_data_type, init_data);
 }
 
diff --git a/media/test/pipeline_integration_test_base.cc b/media/test/pipeline_integration_test_base.cc
index 9a8e3597..35d15bc 100644
--- a/media/test/pipeline_integration_test_base.cc
+++ b/media/test/pipeline_integration_test_base.cc
@@ -59,7 +59,7 @@
     CreateVideoDecodersCB prepend_video_decoders_cb) {
   std::vector<std::unique_ptr<VideoDecoder>> video_decoders;
 
-  if (!prepend_video_decoders_cb.is_null()) {
+  if (prepend_video_decoders_cb) {
     video_decoders = prepend_video_decoders_cb.Run();
     DCHECK(!video_decoders.empty());
   }
@@ -85,7 +85,7 @@
     CreateAudioDecodersCB prepend_audio_decoders_cb) {
   std::vector<std::unique_ptr<AudioDecoder>> audio_decoders;
 
-  if (!prepend_audio_decoders_cb.is_null()) {
+  if (prepend_audio_decoders_cb) {
     audio_decoders = prepend_audio_decoders_cb.Run();
     DCHECK(!audio_decoders.empty());
   }
@@ -176,7 +176,7 @@
     EmeInitDataType type,
     const std::vector<uint8_t>& init_data) {
   DCHECK(!init_data.empty());
-  CHECK(!encrypted_media_init_data_cb_.is_null());
+  CHECK(encrypted_media_init_data_cb_);
   encrypted_media_init_data_cb_.Run(type, init_data);
 }
 
@@ -198,7 +198,7 @@
   ended_ = true;
   pipeline_status_ = PIPELINE_OK;
   if (on_ended_closure_)
-    base::ResetAndReturn(&on_ended_closure_).Run();
+    std::move(on_ended_closure_).Run();
 }
 
 bool PipelineIntegrationTestBase::WaitUntilOnEnded() {
@@ -224,7 +224,7 @@
   pipeline_status_ = status;
   pipeline_->Stop();
   if (on_error_closure_)
-    base::ResetAndReturn(&on_error_closure_).Run();
+    std::move(on_error_closure_).Run();
 }
 
 PipelineStatus PipelineIntegrationTestBase::StartInternal(