diff options
author | xhwang <xhwang@chromium.org> | 2016-03-01 14:57:58 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-01 22:59:15 +0000 |
commit | bce64ffe322ab1730a4aa81e47ab85ceb30e2971 (patch) | |
tree | aa6e2bb18e32da109697117c58639514e92978f9 /chromecast | |
parent | 7a2979b2b929465d5b65920825ea72f7ae65a47b (diff) | |
download | chromium_src-bce64ffe322ab1730a4aa81e47ab85ceb30e2971.zip chromium_src-bce64ffe322ab1730a4aa81e47ab85ceb30e2971.tar.gz chromium_src-bce64ffe322ab1730a4aa81e47ab85ceb30e2971.tar.bz2 |
media: Reject pending CDM promise during destruction.
There are legit cases where a CDM promise could be destructed before
it's fulfilled. For example, a promise could be bound into a callback
and the callback is dropped.
BUG=585356
Review URL: https://codereview.chromium.org/1729063003
Cr-Commit-Position: refs/heads/master@{#378588}
Diffstat (limited to 'chromecast')
-rw-r--r-- | chromecast/media/cdm/browser_cdm_cast.cc | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/chromecast/media/cdm/browser_cdm_cast.cc b/chromecast/media/cdm/browser_cdm_cast.cc index 380c362..e5585c5 100644 --- a/chromecast/media/cdm/browser_cdm_cast.cc +++ b/chromecast/media/cdm/browser_cdm_cast.cc @@ -29,8 +29,11 @@ class CdmPromiseInternal : public ::media::CdmPromiseTemplate<T...> { promise_(std::move(promise)) {} ~CdmPromiseInternal() final { - // Promise must be resolved or rejected before destruction. - DCHECK(!promise_); + if (IsPromiseSettled()) + return; + + DCHECK(promise_); + RejectPromiseOnDestruction(); } // CdmPromiseTemplate<> implementation. @@ -48,7 +51,9 @@ class CdmPromiseInternal : public ::media::CdmPromiseTemplate<T...> { } private: + using ::media::CdmPromiseTemplate<T...>::IsPromiseSettled; using ::media::CdmPromiseTemplate<T...>::MarkPromiseSettled; + using ::media::CdmPromiseTemplate<T...>::RejectPromiseOnDestruction; scoped_refptr<base::SingleThreadTaskRunner> task_runner_; scoped_ptr<::media::CdmPromiseTemplate<T...>> promise_; |