// 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_