chromium/ash/webui/eche_app_ui/eche_message_receiver.h

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

#ifndef ASH_WEBUI_ECHE_APP_UI_ECHE_MESSAGE_RECEIVER_H_
#define ASH_WEBUI_ECHE_APP_UI_ECHE_MESSAGE_RECEIVER_H_

#include "ash/webui/eche_app_ui/proto/exo_messages.pb.h"
#include "base/observer_list.h"
#include "base/observer_list_types.h"

namespace ash {
namespace eche_app {

class EcheMessageReceiver {
 public:
  class Observer : public base::CheckedObserver {
   public:
    ~Observer() override = default;

    // Called when the apps access state response sent by the remote phone.
    virtual void OnGetAppsAccessStateResponseReceived(
        proto::GetAppsAccessStateResponse apps_access_state_response) = 0;

    // Called when the apps setup response sent by the remote phone.
    virtual void OnSendAppsSetupResponseReceived(
        proto::SendAppsSetupResponse apps_setup_response) = 0;

    virtual void OnStatusChange(proto::StatusChangeType status_change_type) = 0;

    // Called when the app policy state changed sent by the remote phone.
    virtual void OnAppPolicyStateChange(
        proto::AppStreamingPolicy app_policy_state) = 0;
  };

  EcheMessageReceiver(const EcheMessageReceiver&) = delete;
  EcheMessageReceiver& operator=(const EcheMessageReceiver&) = delete;
  virtual ~EcheMessageReceiver();

  void AddObserver(Observer* observer);
  void RemoveObserver(Observer* observer);

 protected:
  EcheMessageReceiver();
  void NotifyGetAppsAccessStateResponse(
      proto::GetAppsAccessStateResponse apps_access_state_response);
  void NotifySendAppsSetupResponse(
      proto::SendAppsSetupResponse apps_setup_response);
  void NotifyStatusChange(proto::StatusChange status_change);
  void NotifyAppPolicyStateChange(proto::PolicyStateChange policy_state_change);

 private:
  friend class FakeEcheMessageReceiver;
  base::ObserverList<Observer> observer_list_;
};

}  // namespace eche_app
}  // namespace ash

#endif  // ASH_WEBUI_ECHE_APP_UI_ECHE_MESSAGE_RECEIVER_H_