chromium/fuchsia_web/runners/cast/application_controller_impl.h

// Copyright 2019 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_RUNNERS_CAST_APPLICATION_CONTROLLER_IMPL_H_
#define FUCHSIA_WEB_RUNNERS_CAST_APPLICATION_CONTROLLER_IMPL_H_

#include <fidl/chromium.cast/cpp/fidl.h>
#include <fuchsia/media/sessions2/cpp/fidl.h>
#include <fuchsia/web/cpp/fidl.h>
#include <lib/fidl/cpp/binding.h>
#include <lib/fidl/cpp/interface_request.h>

#include <optional>

class ApplicationControllerImpl final
    : public fidl::Server<chromium_cast::ApplicationController> {
 public:
  // `trace_flow_id` is used by the controller to report media blocking trace
  // event as a part of the application flow.
  ApplicationControllerImpl(
      fuchsia::web::Frame* frame,
      fidl::Client<chromium_cast::ApplicationContext>& context,
      uint64_t trace_flow_id);

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

  ~ApplicationControllerImpl() override;

 protected:
  // chromium_cast::ApplicationController implementation.
  void SetTouchInputEnabled(
      SetTouchInputEnabledRequest& request,
      SetTouchInputEnabledCompleter::Sync& completer) override;
  void GetMediaPlayer(GetMediaPlayerRequest& request,
                      GetMediaPlayerCompleter::Sync& completer) override;
  void SetBlockMediaLoading(
      SetBlockMediaLoadingRequest& request,
      SetBlockMediaLoadingCompleter::Sync& completer) override;
  void GetPrivateMemorySize(
      GetPrivateMemorySizeCompleter::Sync& completer) override;

 private:
  std::optional<fidl::ServerBinding<chromium_cast::ApplicationController>>
      binding_;
  fuchsia::web::Frame* const frame_;
  const uint64_t trace_flow_id_;
};

#endif  // FUCHSIA_WEB_RUNNERS_CAST_APPLICATION_CONTROLLER_IMPL_H_