Index: media/gpu/ipc/service/media_gpu_channel_manager.cc |
diff --git a/media/gpu/ipc/service/media_gpu_channel_manager.cc b/media/gpu/ipc/service/media_gpu_channel_manager.cc |
index 684c05afc54282f0c7efe5c96a835fac1ac9a05f..06cb1d06d39ac44301cd8a832ab641f6ac794990 100644 |
--- a/media/gpu/ipc/service/media_gpu_channel_manager.cc |
+++ b/media/gpu/ipc/service/media_gpu_channel_manager.cc |
@@ -26,18 +26,36 @@ MediaGpuChannelManager::~MediaGpuChannelManager() {} |
void MediaGpuChannelManager::AddChannel(int32_t client_id) { |
gpu::GpuChannel* gpu_channel = channel_manager_->LookupChannel(client_id); |
DCHECK(gpu_channel); |
+ base::UnguessableToken channel_token = base::UnguessableToken::Create(); |
std::unique_ptr<MediaGpuChannel> media_gpu_channel( |
- new MediaGpuChannel(gpu_channel)); |
+ new MediaGpuChannel(gpu_channel, channel_token)); |
gpu_channel->SetUnhandledMessageListener(media_gpu_channel.get()); |
media_gpu_channels_[client_id] = std::move(media_gpu_channel); |
+ channel_to_token_[client_id] = channel_token; |
+ token_to_channel_[channel_token] = client_id; |
} |
void MediaGpuChannelManager::RemoveChannel(int32_t client_id) { |
media_gpu_channels_.erase(client_id); |
+ const auto it = channel_to_token_.find(client_id); |
+ if (it != channel_to_token_.end()) { |
+ token_to_channel_.erase(it->second); |
+ channel_to_token_.erase(it); |
+ } |
} |
void MediaGpuChannelManager::DestroyAllChannels() { |
media_gpu_channels_.clear(); |
+ token_to_channel_.clear(); |
+ channel_to_token_.clear(); |
+} |
+ |
+gpu::GpuChannel* MediaGpuChannelManager::LookupChannel( |
+ base::UnguessableToken channel_token) { |
+ const auto it = token_to_channel_.find(channel_token); |
+ if (it == token_to_channel_.end()) |
+ return nullptr; |
+ return channel_manager_->LookupChannel(it->second); |
} |
} // namespace media |