15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/renderer/mojo/service_registry_js_wrapper.h"
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/common/mojo/service_registry_impl.h"
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/common/service_registry.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/bindings/js/handle.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace content {
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)gin::WrapperInfo ServiceRegistryJsWrapper::kWrapperInfo = {
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    gin::kEmbedderNativeGin};
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const char ServiceRegistryJsWrapper::kModuleName[] =
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    "content/public/renderer/service_provider";
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ServiceRegistryJsWrapper::~ServiceRegistryJsWrapper() {
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)gin::Handle<ServiceRegistryJsWrapper> ServiceRegistryJsWrapper::Create(
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    v8::Isolate* isolate,
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ServiceRegistry* service_registry) {
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return gin::CreateHandle(
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      isolate,
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      new ServiceRegistryJsWrapper(
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          static_cast<ServiceRegistryImpl*>(service_registry)->GetWeakPtr()));
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)gin::ObjectTemplateBuilder ServiceRegistryJsWrapper::GetObjectTemplateBuilder(
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    v8::Isolate* isolate) {
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return Wrappable<ServiceRegistryJsWrapper>::GetObjectTemplateBuilder(isolate).
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      SetMethod("connectToService",
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                &ServiceRegistryJsWrapper::ConnectToService);
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)mojo::Handle ServiceRegistryJsWrapper::ConnectToService(
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& service_name) {
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  mojo::MessagePipe pipe;
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (service_registry_)
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    service_registry_->ConnectToRemoteService(service_name,
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                              pipe.handle0.Pass());
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return pipe.handle1.release();
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ServiceRegistryJsWrapper::ServiceRegistryJsWrapper(
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    base::WeakPtr<ServiceRegistry> service_registry)
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : service_registry_(service_registry) {
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace content
53