Index: sky/shell/linux/platform_service_provider_linux.cc |
diff --git a/sky/shell/linux/platform_service_provider_linux.cc b/sky/shell/linux/platform_service_provider_linux.cc |
index e0199163d6b3430a95c1f98e7eaf3ad50655b604..8bc64cc336758c703b2bdc0efc7d09d5c42c7028 100644 |
--- a/sky/shell/linux/platform_service_provider_linux.cc |
+++ b/sky/shell/linux/platform_service_provider_linux.cc |
@@ -3,17 +3,36 @@ |
// found in the LICENSE file. |
#include "base/bind.h" |
-#include "base/trace_event/trace_event.h" |
-#include "mojo/public/cpp/bindings/interface_request.h" |
+#include "base/bind_helpers.h" |
+#include "base/lazy_instance.h" |
+#include "base/location.h" |
+#include "base/single_thread_task_runner.h" |
+#include "mojo/public/cpp/application/service_provider_impl.h" |
#include "sky/shell/service_provider.h" |
+#include "sky/shell/testing/test_runner.h" |
namespace sky { |
namespace shell { |
+namespace { |
+ |
+base::LazyInstance<scoped_ptr<mojo::ServiceProviderImpl>> g_service_provider = |
+ LAZY_INSTANCE_INITIALIZER; |
+ |
+static void CreateServiceProviderImpl( |
+ mojo::InterfaceRequest<mojo::ServiceProvider> request) { |
+ g_service_provider.Get().reset(new mojo::ServiceProviderImpl(request.Pass())); |
+ g_service_provider.Get()->AddService(&TestRunner::Shared()); |
+} |
+ |
+} // namespace |
mojo::ServiceProviderPtr CreateServiceProvider( |
ServiceProviderContext* context) { |
+ DCHECK(context); |
mojo::MessagePipe pipe; |
- // TODO(abarth): Wire pipe.handle1 up to something. |
+ auto request = mojo::MakeRequest<mojo::ServiceProvider>(pipe.handle1.Pass()); |
+ context->platform_task_runner->PostTask( |
+ FROM_HERE, base::Bind(CreateServiceProviderImpl, base::Passed(&request))); |
return mojo::MakeProxy( |
mojo::InterfacePtrInfo<mojo::ServiceProvider>(pipe.handle0.Pass(), 0u)); |
} |