chromium/components/cast_receiver/browser/public/runtime_application.h

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

#ifndef COMPONENTS_CAST_RECEIVER_BROWSER_PUBLIC_RUNTIME_APPLICATION_H_
#define COMPONENTS_CAST_RECEIVER_BROWSER_PUBLIC_RUNTIME_APPLICATION_H_

#include <ostream>
#include <string>

#include "base/functional/callback.h"
#include "components/cast_receiver/common/public/status.h"
#include "components/url_rewrite/mojom/url_request_rewrite.mojom.h"

namespace cast_receiver {

// Provides accessors for information about an application running in this
// runtime.
class RuntimeApplication {
 public:
  using StatusCallback = base::OnceCallback<void(cast_receiver::Status)>;

  virtual ~RuntimeApplication();

  // Returns the display name of the application.
  virtual const std::string& GetDisplayName() const = 0;

  // Returns the application ID of the application.
  virtual const std::string& GetAppId() const = 0;

  // Returns the session id for this cast session.
  virtual const std::string& GetCastSessionId() const = 0;

  // Returns whether this instance is associated with cast streaming.
  virtual bool IsStreamingApplication() const = 0;

  // Returns whether this application is currently running.
  virtual bool IsApplicationRunning() const = 0;

  // Called before Launch() to perform any pre-launch loading that is
  // necessary. The |callback| will be called indicating if the operation
  // succeeded or not. If Load fails, |this| should be destroyed since it's
  // not necessarily valid to retry Load with a new request.
  virtual void Load(StatusCallback callback) = 0;

  // Called to launch the application. The |callback| will be called
  // indicating if the operation succeeded or not.
  virtual void Launch(StatusCallback callback) = 0;

  // Called to stop the application. The |callback| will be called indicating
  // if the operation succeeded or not.
  virtual void Stop(StatusCallback callback) = 0;

  // Sets URL rewrite rules.
  virtual void SetUrlRewriteRules(
      url_rewrite::mojom::UrlRequestRewriteRulesPtr mojom_rules) = 0;

  // Sets media playback state.
  virtual void SetMediaBlocking(bool load_blocked, bool start_blocked) = 0;

  // Sets visibility state.
  virtual void SetVisibility(bool is_visible) = 0;

  // Sets touch input.
  virtual void SetTouchInputEnabled(bool enabled) = 0;
};

std::ostream& operator<<(std::ostream& os, const RuntimeApplication& app);

}  // namespace cast_receiver

#endif  // COMPONENTS_CAST_RECEIVER_BROWSER_PUBLIC_RUNTIME_APPLICATION_H_