Index: content/browser/media/cdm/browser_cdm_manager.cc |
diff --git a/content/browser/media/cdm/browser_cdm_manager.cc b/content/browser/media/cdm/browser_cdm_manager.cc |
index d3d4630cb08b54547ac2494d541e47b9589d7875..583484bca0bdfa47d30f0fba918538a579c70549 100644 |
--- a/content/browser/media/cdm/browser_cdm_manager.cc |
+++ b/content/browser/media/cdm/browser_cdm_manager.cc |
@@ -122,16 +122,14 @@ media::BrowserCdm* BrowserCdmManager::GetCdm(int render_frame_id, int cdm_id) { |
} |
void BrowserCdmManager::RenderFrameDeleted(int render_frame_id) { |
damienv1
2014/11/16 00:00:46
nit: early return feels more natural here.
if (!t
gunsch
2014/11/17 16:17:37
Done.
|
- DCHECK(task_runner_->RunsTasksOnCurrentThread()); |
- |
- std::vector<uint64> ids_to_remove; |
- for (CdmMap::iterator it = cdm_map_.begin(); it != cdm_map_.end(); ++it) { |
- if (IdBelongsToFrame(it->first, render_frame_id)) |
- ids_to_remove.push_back(it->first); |
+ if (task_runner_->RunsTasksOnCurrentThread()) { |
+ RemoveCdmsForFrame(render_frame_id); |
+ } else { |
+ task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&BrowserCdmManager::RemoveCdmsForFrame, |
+ this, render_frame_id)); |
} |
- |
- for (size_t i = 0; i < ids_to_remove.size(); ++i) |
- RemoveCdm(ids_to_remove[i]); |
} |
void BrowserCdmManager::OnSessionCreated(int render_frame_id, |
@@ -345,6 +343,19 @@ void BrowserCdmManager::AddCdm(int render_frame_id, |
cdm_security_origin_map_[id] = security_origin; |
} |
+void BrowserCdmManager::RemoveCdmsForFrame(int render_frame_id) { |
+ DCHECK(task_runner_->RunsTasksOnCurrentThread()); |
+ |
+ std::vector<uint64> ids_to_remove; |
+ for (CdmMap::iterator it = cdm_map_.begin(); it != cdm_map_.end(); ++it) { |
+ if (IdBelongsToFrame(it->first, render_frame_id)) |
+ ids_to_remove.push_back(it->first); |
+ } |
+ |
+ for (size_t i = 0; i < ids_to_remove.size(); ++i) |
+ RemoveCdm(ids_to_remove[i]); |
+} |
+ |
void BrowserCdmManager::RemoveCdm(uint64 id) { |
DCHECK(task_runner_->RunsTasksOnCurrentThread()); |