chromium/fuchsia_web/webengine/context_provider_impl.h

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

#ifndef FUCHSIA_WEB_WEBENGINE_CONTEXT_PROVIDER_IMPL_H_
#define FUCHSIA_WEB_WEBENGINE_CONTEXT_PROVIDER_IMPL_H_

#include <fuchsia/web/cpp/fidl.h>

#include "fuchsia_web/webengine/web_engine_export.h"
#include "fuchsia_web/webinstance_host/web_instance_host.h"

namespace sys {
class OutgoingDirectory;
}  // namespace sys

class WEB_ENGINE_EXPORT ContextProviderImpl
    : public fuchsia::web::ContextProvider {
 public:
  // The impl will offer capabilities to child instances via
  // `outgoing_directory`. ContextProviderImpl owners must serve the directory
  // before creating web instances, and must ensure that the directory outlives
  // the ContextProviderImpl instance.
  explicit ContextProviderImpl(sys::OutgoingDirectory& outgoing_directory);
  ~ContextProviderImpl() override;

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

  // fuchsia::web::ContextProvider implementation.
  void Create(
      fuchsia::web::CreateContextParams params,
      fidl::InterfaceRequest<fuchsia::web::Context> context_request) override;

  // Exposes the fuchsia.web.Debug API to offer to clients.
  fuchsia::web::Debug* debug_api();

 private:
  // Manages an isolated Environment, and the web instances hosted within it.
  // Services for each web instance are provided by the Service Directory
  // provided in the Create() call.
  WebInstanceHostWithoutServices web_instance_host_;
};

#endif  // FUCHSIA_WEB_WEBENGINE_CONTEXT_PROVIDER_IMPL_H_