#ifndef UI_DISPLAY_MANAGER_TEST_TEST_NATIVE_DISPLAY_DELEGATE_H_
#define UI_DISPLAY_MANAGER_TEST_TEST_NATIVE_DISPLAY_DELEGATE_H_
#include <stdint.h>
#include <vector>
#include "base/containers/flat_map.h"
#include "base/memory/raw_ptr.h"
#include "base/observer_list.h"
#include "ui/display/manager/test/action_logger.h"
#include "ui/display/manager/test/action_logger_util.h"
#include "ui/display/types/display_constants.h"
#include "ui/display/types/native_display_delegate.h"
namespace display {
class ActionLogger;
class DisplaySnapshot;
class NativeDisplayObserver;
namespace test {
constexpr char kTestModesetStr[] = "test-modeset";
constexpr char kCommitModesetStr[] = "commit-modeset";
constexpr char kSeamlessModesetStr[] = "seamless-modeset";
constexpr char kModesetOutcomeFailure[] = "outcome: failure";
constexpr char kModesetOutcomeSuccess[] = "outcome: success";
class TestNativeDisplayDelegate : public NativeDisplayDelegate {
public:
explicit TestNativeDisplayDelegate(ActionLogger* log);
TestNativeDisplayDelegate(const TestNativeDisplayDelegate&) = delete;
TestNativeDisplayDelegate& operator=(const TestNativeDisplayDelegate&) =
delete;
~TestNativeDisplayDelegate() override;
void set_max_configurable_pixels(int pixels) {
max_configurable_pixels_ = pixels;
}
void set_system_bandwidth_limit(int bandwidth_limit) {
system_bandwidth_limit_ = bandwidth_limit;
}
void set_get_hdcp_state_expectation(bool success) {
get_hdcp_expectation_ = success;
}
void set_set_hdcp_state_expectation(bool success) {
set_hdcp_expectation_ = success;
}
HDCPState hdcp_state() const { return hdcp_state_; }
void set_hdcp_state(HDCPState state) { hdcp_state_ = state; }
ContentProtectionMethod content_protection_method() const {
return content_protection_method_;
}
void set_content_protection_method(
ContentProtectionMethod protection_method) {
content_protection_method_ = protection_method;
}
void set_run_async(bool run_async) { run_async_ = run_async; }
const std::vector<raw_ptr<DisplaySnapshot, VectorExperimental>> GetOutputs()
const;
void SetOutputs(std::vector<std::unique_ptr<DisplaySnapshot>> outputs);
void Initialize() override;
void TakeDisplayControl(DisplayControlCallback callback) override;
void RelinquishDisplayControl(DisplayControlCallback callback) override;
void GetDisplays(GetDisplaysCallback callback) override;
void Configure(
const std::vector<display::DisplayConfigurationParams>& config_requests,
ConfigureCallback callback,
display::ModesetFlags modeset_flags) override;
void SetHdcpKeyProp(int64_t display_id,
const std::string& key,
SetHdcpKeyPropCallback callback) override;
void GetHDCPState(const DisplaySnapshot& output,
GetHDCPStateCallback callback) override;
void SetHDCPState(const DisplaySnapshot& output,
HDCPState state,
ContentProtectionMethod protection_method,
SetHDCPStateCallback callback) override;
void SetColorTemperatureAdjustment(
int64_t display_id,
const ColorTemperatureAdjustment& cta) override;
void SetColorCalibration(int64_t display_id,
const ColorCalibration& calibration) override;
void SetGammaAdjustment(int64_t display_id,
const GammaAdjustment& gamma) override;
void SetPrivacyScreen(int64_t display_id,
bool enabled,
SetPrivacyScreenCallback callback) override;
void GetSeamlessRefreshRates(
int64_t display_id,
GetSeamlessRefreshRatesCallback callback) const override;
void AddObserver(NativeDisplayObserver* observer) override;
void RemoveObserver(NativeDisplayObserver* observer) override;
FakeDisplayController* GetFakeDisplayController() override;
private:
bool Configure(
const display::DisplayConfigurationParams& display_config_params);
void DoSetHDCPState(int64_t display_id,
HDCPState state,
ContentProtectionMethod protection_method,
SetHDCPStateCallback callback);
bool IsConfigurationWithinSystemBandwidth(
const std::vector<display::DisplayConfigurationParams>& config_requests);
void SaveCurrentConfigSystemBandwidth(
const std::vector<display::DisplayConfigurationParams>& config_requests);
std::vector<std::unique_ptr<DisplaySnapshot>> outputs_;
std::vector<std::unique_ptr<DisplaySnapshot>> cached_outputs_;
int max_configurable_pixels_;
int system_bandwidth_limit_ = 0;
base::flat_map<int64_t, int> display_id_to_used_system_bw_;
bool get_hdcp_expectation_;
bool set_hdcp_expectation_;
HDCPState hdcp_state_;
ContentProtectionMethod content_protection_method_;
bool run_async_;
raw_ptr<ActionLogger, DanglingUntriaged> log_;
base::ObserverList<NativeDisplayObserver>::Unchecked observers_;
};
}
}
#endif