blob: 590d64eeefcf3ce118eb319b12371d60cc1d1796 [file] [log] [blame]
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_MEDIA_SESSION_MOCK_MEDIA_SESSION_PLAYER_OBSERVER_H_
#define CONTENT_BROWSER_MEDIA_SESSION_MOCK_MEDIA_SESSION_PLAYER_OBSERVER_H_
#include <stddef.h>
#include <vector>
#include "base/memory/raw_ptr.h"
#include "base/time/time.h"
#include "content/browser/media/session/media_session_player_observer.h"
#include "content/public/browser/global_routing_id.h"
#include "media/audio/audio_device_description.h"
#include "media/base/picture_in_picture_events_info.h"
#include "services/media_session/public/cpp/media_position.h"
namespace content {
// MockMediaSessionPlayerObserver is a mock implementation of
// MediaSessionPlayerObserver to be used in tests.
class MockMediaSessionPlayerObserver : public MediaSessionPlayerObserver {
public:
MockMediaSessionPlayerObserver(RenderFrameHost* render_frame_host,
media::MediaContentType media_content_type);
explicit MockMediaSessionPlayerObserver(
media::MediaContentType media_content_type);
~MockMediaSessionPlayerObserver() override;
// Implements MediaSessionPlayerObserver.
void OnSuspend(int player_id) override;
void OnResume(int player_id) override;
void OnSeekForward(int player_id, base::TimeDelta seek_time) override;
void OnSeekBackward(int player_id, base::TimeDelta seek_time) override;
void OnSeekTo(int player_id, base::TimeDelta seek_time) override;
void OnSetVolumeMultiplier(int player_id, double volume_multiplier) override;
void OnEnterPictureInPicture(int player_id) override;
void OnSetAudioSinkId(int player_id,
const std::string& raw_device_id) override;
void OnSetMute(int player_id, bool mute) override;
void OnRequestMediaRemoting(int player_id) override;
void OnRequestVisibility(
int player_id,
RequestVisibilityCallback request_visibility_callback) override;
std::optional<media_session::MediaPosition> GetPosition(
int player_id) const override;
bool IsPictureInPictureAvailable(int player_id) const override;
bool HasSufficientlyVisibleVideo(int player_id) const override;
RenderFrameHost* render_frame_host() const override;
bool HasAudio(int player_id) const override;
bool HasVideo(int player_id) const override;
bool IsPaused(int player_id) const override;
std::string GetAudioOutputSinkId(int player_id) const override;
bool SupportsAudioOutputDeviceSwitching(int player_id) const override;
media::MediaContentType GetMediaContentType() const override;
void OnAutoPictureInPictureInfoChanged(
int player_id,
const media::PictureInPictureEventsInfo::AutoPipInfo&
auto_picture_in_picture_info) override;
void SetMediaContentType(media::MediaContentType media_content_type);
// Simulate that a new player started.
// Returns the player_id.
int StartNewPlayer(bool is_playing = true);
// Returns whether |player_id| is playing.
bool IsPlaying(size_t player_id);
// Returns the volume multiplier of |player_id|.
double GetVolumeMultiplier(size_t player_id);
// Changes the audio output sink id of |player_id|.
void SetAudioSinkId(size_t player_id, std::string sink_id);
// Simulate a play state change for |player_id|.
void SetPlaying(size_t player_id, bool playing);
// Set the position for |player_id|.
void SetPosition(size_t player_id, media_session::MediaPosition& position);
// Set |has_sufficiently_visible_video| for |player_id|.
void SetHasSufficientlyVisibleVideo(size_t player_id,
bool has_sufficiently_visible_video);
// Simulate picture in picture availability for |player_id|.
void SetIsPictureInPictureAvailable(size_t player_id,
bool is_picture_in_picture_available);
int received_suspend_calls() const;
int received_resume_calls() const;
int received_seek_forward_calls() const;
int received_seek_backward_calls() const;
int received_seek_to_calls() const;
int received_enter_picture_in_picture_calls() const;
int received_exit_picture_in_picture_calls() const;
int received_set_audio_sink_id_calls() const;
int received_request_visibility_calls() const;
int received_auto_picture_in_picture_info_changed_calls() const;
private:
// Internal representation of the players to keep track of their statuses.
struct MockPlayer {
public:
explicit MockPlayer(bool is_playing = true,
double volume_multiplier = 1.0f);
~MockPlayer();
MockPlayer(const MockPlayer&);
bool is_playing_;
double volume_multiplier_;
std::optional<media_session::MediaPosition> position_;
bool is_in_picture_in_picture_;
std::string audio_sink_id_ =
media::AudioDeviceDescription::kDefaultDeviceId;
bool supports_device_switching_ = true;
bool has_sufficiently_visible_video_ = false;
media::PictureInPictureEventsInfo::AutoPipInfo
auto_picture_in_picture_info_;
bool is_picture_in_picture_available_ = false;
};
// Basic representation of the players. The position in the vector is the
// player_id. The value of the vector is the playing status and volume.
std::vector<MockPlayer> players_;
std::optional<GlobalRenderFrameHostId> render_frame_host_global_id_;
int received_resume_calls_ = 0;
int received_suspend_calls_ = 0;
int received_seek_forward_calls_ = 0;
int received_seek_backward_calls_ = 0;
int received_seek_to_calls_ = 0;
int received_enter_picture_in_picture_calls_ = 0;
int received_exit_picture_in_picture_calls_ = 0;
int received_set_audio_sink_id_calls_ = 0;
int received_request_visibility_calls_ = 0;
int received_auto_picture_in_picture_info_changed_calls_ = 0;
media::MediaContentType media_content_type_;
};
} // namespace content
#endif // CONTENT_BROWSER_MEDIA_SESSION_MOCK_MEDIA_SESSION_PLAYER_OBSERVER_H_