blob: 38e19c9b7aef7eb1ed923a441aca8ab8c695a987 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_BLOCKED_ACTION_WAITER_H_
#define CHROME_BROWSER_EXTENSIONS_BLOCKED_ACTION_WAITER_H_
#include "base/run_loop.h"
#include "base/scoped_observation.h"
#include "chrome/browser/extensions/extension_action_runner.h"
#include "extensions/buildflags/buildflags.h"
static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE));
namespace extensions {
// Can be used to wait for blocked actions (pending scripts, web requests, etc.)
// to be noticed in tests. Blocked actions recording initiates in the renderer
// so this helps when waiting from the browser side. This should be used on the
// stack for proper destruction.
class BlockedActionWaiter : public ExtensionActionRunner::TestObserver {
public:
// `runner` must outlive this object.
explicit BlockedActionWaiter(ExtensionActionRunner* runner);
BlockedActionWaiter(const BlockedActionWaiter&) = delete;
BlockedActionWaiter& operator=(const BlockedActionWaiter&) = delete;
~BlockedActionWaiter() override;
// Wait for the blocked action until the observer is called with the blocked
// action being added.
void Wait();
private:
// ExtensionActionRunner::TestObserver:
void OnBlockedActionAdded() override;
base::ScopedObservation<ExtensionActionRunner,
ExtensionActionRunner::TestObserver>
action_runner_observation_{this};
base::RunLoop run_loop_;
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_BLOCKED_ACTION_WAITER_H_