// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_CHILD_SERVICE_FACTORY_H_
#define CONTENT_CHILD_SERVICE_FACTORY_H_

#include <map>
#include <memory>

#include "base/macros.h"
#include "content/public/common/service_info.h"
#include "services/service_manager/public/interfaces/service.mojom.h"
#include "services/service_manager/public/interfaces/service_factory.mojom.h"

namespace content {

class EmbeddedServiceRunner;

// Base class for child-process specific implementations of
// service_manager::mojom::ServiceFactory.
class ServiceFactory : public service_manager::mojom::ServiceFactory {
 public:
  using ServiceMap = std::map<std::string, ServiceInfo>;

  ServiceFactory();
  ~ServiceFactory() override;

  virtual void RegisterServices(ServiceMap* services) = 0;
  virtual void OnServiceQuit() {}

  // service_manager::mojom::ServiceFactory:
  void CreateService(service_manager::mojom::ServiceRequest request,
                     const std::string& name) override;

 private:
  // Called if CreateService fails to find a registered service.
  virtual void OnLoadFailed() {}

  bool has_registered_services_ = false;
  std::unordered_map<std::string, std::unique_ptr<EmbeddedServiceRunner>>
      services_;

  DISALLOW_COPY_AND_ASSIGN(ServiceFactory);
};

}  // namespace content

#endif  // CONTENT_CHILD_SERVICE_FACTORY_H_
