| Index: media/gpu/ipc/service/media_channel.cc
|
| diff --git a/media/gpu/ipc/service/media_channel.cc b/media/gpu/ipc/service/media_channel.cc
|
| index 0d1023180190ed3a1377e1406d32dd9c94e445e5..54a0f0f6b19c960d50e6944855c248a13c14bbd3 100644
|
| --- a/media/gpu/ipc/service/media_channel.cc
|
| +++ b/media/gpu/ipc/service/media_channel.cc
|
| @@ -4,7 +4,9 @@
|
|
|
| #include "media/gpu/ipc/service/media_channel.h"
|
|
|
| +#include "base/rand_util.h"
|
| #include "gpu/ipc/service/gpu_channel.h"
|
| +#include "ipc/message_filter.h"
|
| #include "media/gpu/ipc/common/media_messages.h"
|
| #include "media/gpu/ipc/service/gpu_video_decode_accelerator.h"
|
| #include "media/gpu/ipc/service/gpu_video_encode_accelerator.h"
|
| @@ -55,7 +57,44 @@ class MediaChannelDispatchHelper {
|
| DISALLOW_COPY_AND_ASSIGN(MediaChannelDispatchHelper);
|
| };
|
|
|
| -MediaChannel::MediaChannel(gpu::GpuChannel* channel) : channel_(channel) {}
|
| +// Filter to respond to GetChannelToken on the IO thread.
|
| +class MediaChannelFilter : public IPC::MessageFilter {
|
| + public:
|
| + explicit MediaChannelFilter(uint64_t channel_token)
|
| + : channel_token_(channel_token) {}
|
| +
|
| + void OnFilterAdded(IPC::Sender* sender) override { sender_ = sender; }
|
| + bool Send(IPC::Message* msg) { return sender_->Send(msg); }
|
| +
|
| + bool OnMessageReceived(const IPC::Message& msg) override {
|
| + bool handled = true;
|
| + IPC_BEGIN_MESSAGE_MAP(MediaChannelFilter, msg)
|
| + IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_GetChannelToken,
|
| + OnGetChannelToken)
|
| + IPC_MESSAGE_UNHANDLED(handled = false)
|
| + IPC_END_MESSAGE_MAP()
|
| + return handled;
|
| + }
|
| +
|
| + void OnGetChannelToken(IPC::Message* reply_message) {
|
| + GpuCommandBufferMsg_GetChannelToken::WriteReplyParams(reply_message,
|
| + channel_token_);
|
| + Send(reply_message);
|
| + }
|
| +
|
| + private:
|
| + ~MediaChannelFilter() override {}
|
| +
|
| + IPC::Sender* sender_;
|
| + uint64_t channel_token_;
|
| +};
|
| +
|
| +MediaChannel::MediaChannel(gpu::GpuChannel* channel) : channel_(channel) {
|
| + uint64_t channel_token;
|
| + base::RandBytes(&channel_token, sizeof(channel_token));
|
| + channel_filter_ = new MediaChannelFilter(channel_token);
|
| + channel_->AddFilter(channel_filter_.get());
|
| +}
|
|
|
| MediaChannel::~MediaChannel() {}
|
|
|
|
|