summaryrefslogtreecommitdiffstats
path: root/chromecast
diff options
context:
space:
mode:
authorxhwang <xhwang@chromium.org>2016-03-01 14:57:58 -0800
committerCommit bot <commit-bot@chromium.org>2016-03-01 22:59:15 +0000
commitbce64ffe322ab1730a4aa81e47ab85ceb30e2971 (patch)
treeaa6e2bb18e32da109697117c58639514e92978f9 /chromecast
parent7a2979b2b929465d5b65920825ea72f7ae65a47b (diff)
downloadchromium_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.cc9
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_;