Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /chromium /src /refs/heads/main /. /ash /shell_test_api.cc
blob: 3752ba0e3fa808f0a7460fe38bc029f7b00af3a2 [file] [log] [blame] [edit]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include"ash/public/cpp/test/shell_test_api.h"
#include"base/memory/raw_ptr.h"
#include<memory>
#include"ash/accelerators/accelerator_commands.h"
#include"ash/accelerators/accelerator_controller_impl.h"
#include"ash/accelerometer/accelerometer_reader.h"
#include"ash/hud_display/hud_display.h"
#include"ash/keyboard/keyboard_controller_impl.h"
#include"ash/public/cpp/autotest_private_api_utils.h"
#include"ash/public/cpp/tablet_mode_observer.h"
#include"ash/root_window_controller.h"
#include"ash/shell.h"
#include"ash/system/notification_center/session_state_notification_blocker.h"
#include"ash/system/power/backlights_forced_off_setter.h"
#include"ash/system/power/power_button_controller.h"
#include"ash/wm/overview/overview_animation_state_waiter.h"
#include"ash/wm/overview/overview_controller.h"
#include"ash/wm/splitview/split_view_controller.h"
#include"ash/wm/tablet_mode/tablet_mode_controller.h"
#include"ash/wm/workspace_controller.h"
#include"base/functional/bind.h"
#include"base/run_loop.h"
#include"components/prefs/testing_pref_service.h"
#include"ui/compositor/compositor.h"
#include"ui/compositor/layer.h"
#include"ui/compositor/layer_animation_observer.h"
#include"ui/compositor/layer_animator.h"
#include"ui/display/manager/display_manager.h"
#include"ui/events/devices/device_data_manager_test_api.h"
#include"ui/events/gesture_detection/gesture_configuration.h"
namespace ash{
namespace{
classWindowAnimationWaiter:public ui::LayerAnimationObserver{
public:
explicitWindowAnimationWaiter(aura::Window* window)
: animator_(window->layer()->GetAnimator()){
animator_->AddObserver(this);
}
~WindowAnimationWaiter() override=default;
WindowAnimationWaiter(constWindowAnimationWaiter& other)=delete;
WindowAnimationWaiter&operator=(constWindowAnimationWaiter& rhs)=delete;
// ui::LayerAnimationObserver:
voidOnLayerAnimationEnded(ui::LayerAnimationSequence* sequence) override{
if(!animator_->is_animating()){
animator_->RemoveObserver(this);
run_loop_.Quit();
}
}
voidOnLayerAnimationAborted(ui::LayerAnimationSequence* sequence) override{}
voidOnLayerAnimationScheduled(
ui::LayerAnimationSequence* sequence) override{}
voidWait(){ run_loop_.Run();}
private:
raw_ptr<ui::LayerAnimator,DanglingUntriaged> animator_;
base::RunLoop run_loop_;
};
}// namespace
ShellTestApi::ShellTestApi(): shell_(Shell::Get()){}
ShellTestApi::~ShellTestApi()=default;
// static
voidShellTestApi::SetTabletControllerUseScreenshotForTest(
bool use_screenshot){
TabletModeController::SetUseScreenshotForTest(use_screenshot);
}
// static
voidShellTestApi::SetUseLoginNotificationDelayForTest(bool use_delay){
SessionStateNotificationBlocker::SetUseLoginNotificationDelayForTest(
use_delay);
}
MessageCenterController*ShellTestApi::message_center_controller(){
return shell_->message_center_controller_.get();
}
WorkspaceController*ShellTestApi::workspace_controller(){
// TODO(afakhry): Split this into two, one for root, and one for context.
returnGetActiveWorkspaceController(shell_->GetPrimaryRootWindow());
}
ScreenPositionController*ShellTestApi::screen_position_controller(){
return shell_->screen_position_controller_.get();
}
NativeCursorManagerAsh*ShellTestApi::native_cursor_manager_ash(){
return shell_->native_cursor_manager_;
}
DragDropController*ShellTestApi::drag_drop_controller(){
return shell_->drag_drop_controller_.get();
}
PowerPrefs*ShellTestApi::power_prefs(){
return shell_->power_prefs_.get();
}
display::DisplayManager*ShellTestApi::display_manager(){
return shell_->display_manager();
}
voidShellTestApi::ResetPowerButtonControllerForTest(){
shell_->backlights_forced_off_setter_->ResetForTest();
shell_->power_button_controller_.reset();
shell_->power_button_controller_= std::make_unique<PowerButtonController>(
shell_->backlights_forced_off_setter_.get());
}
voidShellTestApi::SimulateModalWindowOpenForTest(bool modal_window_open){
shell_->simulate_modal_window_open_for_test_= modal_window_open;
}
boolShellTestApi::IsSystemModalWindowOpen(){
returnShell::IsSystemModalWindowOpen();
}
voidShellTestApi::SetTabletModeEnabledForTest(bool enable){
// Detach mouse devices, so we can enter tablet mode.
// Calling RunUntilIdle() here is necessary before setting the mouse devices
// to prevent the callback from evdev thread from overwriting whatever we set
// here below. See `InputDeviceFactoryEvdevProxy::OnStartupScanComplete()`.
base::RunLoop().RunUntilIdle();
ui::DeviceDataManagerTestApi().OnDeviceListsComplete();
ui::DeviceDataManagerTestApi().SetMouseDevices({});
TabletMode::Waiter waiter(enable);
shell_->tablet_mode_controller()->SetEnabledForTest(enable);
waiter.Wait();
}
voidShellTestApi::EnableVirtualKeyboard(){
shell_->keyboard_controller()->SetEnableFlag(
keyboard::KeyboardEnableFlag::kCommandLineEnabled);
}
voidShellTestApi::ToggleFullscreen(){
accelerators::ToggleFullscreen();
}
voidShellTestApi::AddRemoveDisplay(){
shell_->display_manager()->AddRemoveDisplay();
}
voidShellTestApi::WaitForOverviewAnimationState(OverviewAnimationState state){
auto* overview_controller= shell_->overview_controller();
if(state==OverviewAnimationState::kEnterAnimationComplete&&
overview_controller->InOverviewSession()&&
!overview_controller->IsInStartAnimation()){
// If there is no animation applied, call the callback immediately.
return;
}
if(state==OverviewAnimationState::kExitAnimationComplete&&
!overview_controller->InOverviewSession()&&
!overview_controller->IsCompletingShutdownAnimations()){
// If there is no animation applied, call the callback immediately.
return;
}
base::RunLoop run_loop;
newOverviewAnimationStateWaiter(
state, base::BindOnce([](base::RunLoop* run_loop,
bool finished){ run_loop->QuitWhenIdle();},
base::Unretained(&run_loop)));
run_loop.Run();
}
voidShellTestApi::WaitForWindowFinishAnimating(aura::Window* window){
WindowAnimationWaiter waiter(window);
waiter.Wait();
}
boolShellTestApi::IsContextMenuShown()const{
returnShell::GetPrimaryRootWindowController()->IsContextMenuShownForTest();
}
boolShellTestApi::IsActionForAcceleratorEnabled(
const ui::Accelerator& accelerator)const{
auto* controller=Shell::Get()->accelerator_controller();
returnAcceleratorControllerImpl::TestApi(controller)
.IsActionForAcceleratorEnabled(accelerator);
}
boolShellTestApi::PressAccelerator(const ui::Accelerator& accelerator){
returnShell::Get()->accelerator_controller()->AcceleratorPressed(
accelerator);
}
boolShellTestApi::IsHUDShown(){
return hud_display::HUDDisplayView::IsShown();
}
}// namespace ash

[8]ページ先頭

©2009-2025 Movatter.jp