#ifndef APPS_TEST_APP_WINDOW_WAITER_H_
#define APPS_TEST_APP_WINDOW_WAITER_H_
#include <memory>
#include <string>
#include "base/compiler_specific.h"
#include "base/memory/raw_ptr.h"
#include "base/run_loop.h"
#include "extensions/browser/app_window/app_window_registry.h"
namespace extensions {
class AppWindow;
}
namespace apps {
class AppWindowWaiter : public extensions::AppWindowRegistry::Observer {
public:
AppWindowWaiter(extensions::AppWindowRegistry* registry,
const std::string& app_id);
AppWindowWaiter(const AppWindowWaiter&) = delete;
AppWindowWaiter& operator=(const AppWindowWaiter&) = delete;
~AppWindowWaiter() override;
extensions::AppWindow* Wait();
extensions::AppWindow* WaitForShown();
extensions::AppWindow* WaitForShownWithTimeout(base::TimeDelta timeout);
extensions::AppWindow* WaitForActivated();
void OnAppWindowAdded(extensions::AppWindow* app_window) override;
void OnAppWindowShown(extensions::AppWindow* app_window,
bool was_hidden) override;
void OnAppWindowActivated(extensions::AppWindow* app_window) override;
private:
enum WaitType {
WAIT_FOR_NONE,
WAIT_FOR_ADDED,
WAIT_FOR_SHOWN,
WAIT_FOR_ACTIVATED,
};
const raw_ptr<extensions::AppWindowRegistry> registry_;
const std::string app_id_;
std::unique_ptr<base::RunLoop> run_loop_;
WaitType wait_type_ = WAIT_FOR_NONE;
raw_ptr<extensions::AppWindow> window_ = nullptr;
};
}
#endif