1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_RENDERER_MOJO_SERVICE_REGISTRY_JS_WRAPPER_H_
6#define CONTENT_RENDERER_MOJO_SERVICE_REGISTRY_JS_WRAPPER_H_
7
8#include <string>
9
10#include "content/common/content_export.h"
11#include "gin/handle.h"
12#include "gin/object_template_builder.h"
13#include "gin/wrappable.h"
14#include "mojo/public/cpp/system/core.h"
15
16namespace content {
17
18class ServiceRegistry;
19
20// A JS wrapper around ServiceRegistry that allows connecting to remote
21// services.
22class CONTENT_EXPORT ServiceRegistryJsWrapper
23    : public gin::Wrappable<ServiceRegistryJsWrapper> {
24 public:
25  virtual ~ServiceRegistryJsWrapper();
26  static gin::Handle<ServiceRegistryJsWrapper> Create(
27      v8::Isolate* isolate,
28      ServiceRegistry* service_registry);
29
30  // gin::Wrappable<ServiceRegistryJsWrapper> overrides.
31  virtual gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
32      v8::Isolate* isolate) OVERRIDE;
33
34  // JS interface implementation.
35  mojo::Handle ConnectToService(const std::string& service_name);
36
37  static gin::WrapperInfo kWrapperInfo;
38  static const char kModuleName[];
39
40 private:
41  explicit ServiceRegistryJsWrapper(
42      base::WeakPtr<ServiceRegistry> service_registry);
43
44  base::WeakPtr<ServiceRegistry> service_registry_;
45
46  DISALLOW_COPY_AND_ASSIGN(ServiceRegistryJsWrapper);
47};
48
49}  // namespace content
50
51#endif  // CONTENT_RENDERER_MOJO_SERVICE_REGISTRY_JS_WRAPPER_H_
52