Chromium Code Reviews| 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()); |