| // Copyright 2014 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #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: |
| // Ownership of |log| remains with the caller. |
| 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; |
| |
| // Sets and takes ownership of the provided |outputs|. |
| void SetOutputs(std::vector<std::unique_ptr<DisplaySnapshot>> outputs); |
| |
| // NativeDisplayDelegate overrides: |
| 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); |
| |
| // Outputs to be returned by GetDisplays(). |
| std::vector<std::unique_ptr<DisplaySnapshot>> outputs_; |
| // Outputs which are scheduled for deletion after the next invalidation. |
| std::vector<std::unique_ptr<DisplaySnapshot>> cached_outputs_; |
| |
| // |max_configurable_pixels_| represents the maximum number of pixels that |
| // Configure will support. Tests can use this to force Configure |
| // to fail if attempting to set a resolution that is higher than what |
| // a device might support under a given circumstance. |
| // A value of 0 means that no limit is enforced and Configure will |
| // return success regardless of the resolution. |
| 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_; |
| |
| // Result value of GetHDCPState(). |
| HDCPState hdcp_state_; |
| ContentProtectionMethod content_protection_method_; |
| |
| // If true, the callbacks are posted on the message loop. |
| bool run_async_; |
| |
| raw_ptr<ActionLogger, DanglingUntriaged> log_; // Not owned. |
| |
| base::ObserverList<NativeDisplayObserver>::Unchecked observers_; |
| }; |
| |
| } // namespace test |
| |
| } // namespace display |
| |
| #endif // UI_DISPLAY_MANAGER_TEST_TEST_NATIVE_DISPLAY_DELEGATE_H_ |