// 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 CHROMECAST_BROWSER_SERVICE_MANAGER_CONTEXT_H_
#define CHROMECAST_BROWSER_SERVICE_MANAGER_CONTEXT_H_

#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/task/single_thread_task_runner.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "services/service_manager/public/cpp/identity.h"
#include "services/service_manager/public/mojom/service.mojom.h"

namespace service_manager {
class Connector;
}

namespace chromecast {

namespace shell {
class CastContentBrowserClient;
}

// ServiceManagerContext manages the browser's connection to the ServiceManager,
// hosting a new in-process ServiceManagerContext if the browser was not
// launched from an external one.
class ServiceManagerContext {
 public:
  static const char kBrowserServiceName[];

  ServiceManagerContext(
      shell::CastContentBrowserClient* cast_content_browser_client,
      scoped_refptr<base::SingleThreadTaskRunner>
          service_manager_thread_task_runner);

  ServiceManagerContext(const ServiceManagerContext&) = delete;
  ServiceManagerContext& operator=(const ServiceManagerContext&) = delete;

  ~ServiceManagerContext();

  // Returns a service_manager::Connector that can be used on the IO thread.
  static service_manager::Connector* GetConnectorForIOThread();

  // Shutdowns the ServiceManager and the connections to the ServiceManager.
  void ShutDown();

 private:
  class InProcessServiceManagerContext;

  void RunServiceInstance(
      const service_manager::Identity& identity,
      mojo::PendingReceiver<service_manager::mojom::Service> receiver);

  shell::CastContentBrowserClient* const cast_content_browser_client_;
  scoped_refptr<base::SingleThreadTaskRunner>
      service_manager_thread_task_runner_;
  scoped_refptr<InProcessServiceManagerContext> in_process_context_;
  base::WeakPtrFactory<ServiceManagerContext> weak_ptr_factory_{this};
};

}  // namespace chromecast

#endif  // CHROMECAST_BROWSER_SERVICE_MANAGER_CONTEXT_H_
