1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_EXO_TEST_EXO_TEST_HELPER_H_
#define COMPONENTS_EXO_TEST_EXO_TEST_HELPER_H_
#include <memory>
#include "base/compiler_specific.h"
#include "base/memory/raw_ptr.h"
#include "chromeos/ui/base/window_state_type.h"
#include "components/exo/client_controlled_shell_surface.h"
#include "ui/gfx/buffer_types.h"
#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/size.h"
namespace gfx {
class GpuMemoryBuffer;
}
namespace exo {
class ClientControlledShellSurface;
class InputMethodSurface;
class InputMethodSurfaceManager;
class Surface;
class ToastSurface;
class ToastSurfaceManager;
class Buffer;
namespace test {
class ClientControlledShellSurfaceDelegate
: public ClientControlledShellSurface::Delegate {
public:
explicit ClientControlledShellSurfaceDelegate(
ClientControlledShellSurface* shell_surface,
bool delay_commit = false);
~ClientControlledShellSurfaceDelegate() override;
ClientControlledShellSurfaceDelegate(
const ClientControlledShellSurfaceDelegate&) = delete;
ClientControlledShellSurfaceDelegate& operator=(
const ClientControlledShellSurfaceDelegate&) = delete;
enum Operation {
kStateChange,
kBoundsChange,
};
// Set the callback that will be called when the operation's task is executed.
void set_operation_signal_callback(
base::RepeatingCallback<void(Operation)> callback) {
operation_signal_callback_ = callback;
}
int pending_task_count() const { return pending_task_count_; }
protected:
// ClientControlledShellSurface::Delegate:
void OnGeometryChanged(const gfx::Rect& geometry) override;
void OnStateChanged(chromeos::WindowStateType old_state_type,
chromeos::WindowStateType new_state_type) override;
void OnBoundsChanged(chromeos::WindowStateType current_state,
chromeos::WindowStateType requested_state,
int64_t requested_display_id,
const gfx::Rect& requested_bounds_in_display,
bool is_resize,
int bounds_change,
bool is_adjusted_bounds) override;
void OnDragStarted(int component) override;
void OnDragFinished(int x, int y, bool canceled) override;
void OnZoomLevelChanged(ZoomChange zoom_change) override;
void Commit();
private:
void ApplyStateChange(chromeos::WindowStateType old_state_type,
chromeos::WindowStateType new_state_type);
void ApplyBoundsChange(chromeos::WindowStateType current_state,
chromeos::WindowStateType requested_state,
int64_t requested_display_id,
const gfx::Rect& requested_bounds_in_display,
bool is_resize,
int bounds_change,
bool is_adjusted_bounds);
raw_ptr<ClientControlledShellSurface> shell_surface_;
base::RepeatingCallback<void(Operation)> operation_signal_callback_;
bool delay_commit_;
int pending_task_count_ = 0;
};
// A helper class that does common initialization required for Exosphere.
class ExoTestHelper {
public:
ExoTestHelper();
ExoTestHelper(const ExoTestHelper&) = delete;
ExoTestHelper& operator=(const ExoTestHelper&) = delete;
~ExoTestHelper();
// Creates an exo::Buffer that has the size of the given
// shell surface.
static std::unique_ptr<Buffer> CreateBuffer(
ShellSurfaceBase* shell_surface,
gfx::BufferFormat format = gfx::BufferFormat::RGBA_8888);
// Creates an exo::Buffer that will be backed by either GpuMemoryBuffer or
// MappableSI if enabled.
static std::unique_ptr<Buffer> CreateBuffer(
gfx::Size buffer_size,
gfx::BufferFormat buffer_format = gfx::BufferFormat::RGBA_8888,
bool is_overlay_candidate = false);
// Creates an exo::Buffer from GMBHandle.
static std::unique_ptr<Buffer> CreateBufferFromGMBHandle(
gfx::GpuMemoryBufferHandle handle,
gfx::Size buffer_size,
gfx::BufferFormat buffer_format);
std::unique_ptr<ClientControlledShellSurface>
CreateClientControlledShellSurface(Surface* surface,
bool is_modal = false,
bool default_scale_cancellation = false);
std::unique_ptr<InputMethodSurface> CreateInputMethodSurface(
Surface* surface,
InputMethodSurfaceManager* surface_manager,
bool default_scale_cancellation = true);
std::unique_ptr<ToastSurface> CreateToastSurface(
Surface* surface,
ToastSurfaceManager* surface_manager,
bool default_scale_cancellation = true);
};
} // namespace test
} // namespace exo
#endif // COMPONENTS_EXO_TEST_EXO_TEST_HELPER_H_
|