Chromium Code Reviews| Index: media/mojo/services/mojo_media_application.cc |
| diff --git a/media/mojo/services/mojo_media_application.cc b/media/mojo/services/mojo_media_application.cc |
| index 8925e9985eb7658b227bea0def5df91504c46dbd..705c58e7d2cdcc46540ed58d132f0f184806cfbb 100644 |
| --- a/media/mojo/services/mojo_media_application.cc |
| +++ b/media/mojo/services/mojo_media_application.cc |
| @@ -6,6 +6,7 @@ |
| #include <utility> |
| +#include "base/bind_helpers.h" |
| #include "media/base/media_log.h" |
| #include "media/mojo/services/mojo_media_client.h" |
| #include "media/mojo/services/service_factory_impl.h" |
| @@ -40,10 +41,19 @@ bool MojoMediaApplication::AcceptConnection(mojo::Connection* connection) { |
| void MojoMediaApplication::Create( |
| mojo::Connection* connection, |
| mojo::InterfaceRequest<interfaces::ServiceFactory> request) { |
| - // The created object is owned by the pipe. |
| - new ServiceFactoryImpl(std::move(request), connection->GetRemoteInterfaces(), |
| - media_log_, ref_factory_.CreateRef(), |
| - mojo_media_client_.get()); |
| + base::SingleThreadTaskRunner* media_task_runner = |
| + mojo_media_client_->media_task_runner(); |
| + if (!media_task_runner || media_task_runner->BelongsToCurrentThread()) { |
| + // The created object is owned by the pipe. |
| + new ServiceFactoryImpl(std::move(request), |
| + connection->GetRemoteInterfaces(), media_log_, |
| + ref_factory_.CreateRef(), mojo_media_client_.get()); |
| + } else { |
| + media_task_runner->PostTask( |
| + FROM_HERE, |
| + base::Bind(&MojoMediaApplication::Create, base::Unretained(this), |
| + connection, base::Passed(&request))); |
|
xhwang
2016/04/01 20:10:05
As far as I understand, a new thread will be creat
alokp
2016/04/01 20:44:48
That would work for our use case. In fact it will
|
| + } |
| } |
| } // namespace media |