view_drawn_waiter.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef ASH_TEST_VIEW_DRAWN_WAITER_H_
  5. #define ASH_TEST_VIEW_DRAWN_WAITER_H_
  6. #include <memory>
  7. #include "ash/ash_export.h"
  8. #include "base/scoped_observation.h"
  9. #include "ui/views/view.h"
  10. #include "ui/views/view_observer.h"
  11. namespace base {
  12. class RunLoop;
  13. }
  14. namespace ash {
  15. // Helper that allows waiting for a view to be drawn. See `Wait()` below. An
  16. // instance can be used more than once (i.e. to wait on a different view).
  17. class ViewDrawnWaiter : public views::ViewObserver {
  18. public:
  19. ViewDrawnWaiter();
  20. ViewDrawnWaiter(const ViewDrawnWaiter&) = delete;
  21. ViewDrawnWaiter& operator=(const ViewDrawnWaiter&) = delete;
  22. ~ViewDrawnWaiter() override;
  23. // Waits for `view` to be drawn (implying visible) and have non-zero size
  24. // (implying layout is complete).
  25. void Wait(views::View* view);
  26. private:
  27. // views::ViewObserver:
  28. void OnViewVisibilityChanged(views::View* view,
  29. views::View* starting_view) override;
  30. void OnViewBoundsChanged(views::View* view) override;
  31. void OnViewIsDeleting(views::View* view) override;
  32. std::unique_ptr<base::RunLoop> wait_loop_;
  33. base::ScopedObservation<views::View, views::ViewObserver> view_observer_{
  34. this};
  35. };
  36. } // namespace ash
  37. #endif // ASH_TEST_VIEW_DRAWN_WAITER_H_