blob: eedd58e053c7ef51b8d25801bac48f1dd0652054 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_BROWSER_API_TEST_TEST_API_OBSERVER_REGISTRY_H_
#define EXTENSIONS_BROWSER_API_TEST_TEST_API_OBSERVER_REGISTRY_H_
#include <string>
#include "base/no_destructor.h"
#include "base/observer_list.h"
#include "extensions/browser/api/test/test_api_observer.h"
namespace base {
class Value;
}
namespace content {
class BrowserContext;
}
namespace extensions {
class TestSendMessageFunction;
class TestApiObserverRegistry {
public:
TestApiObserverRegistry(const TestApiObserverRegistry&) = delete;
TestApiObserverRegistry& operator=(const TestApiObserverRegistry&) = delete;
// Unfortunately, most existing observers do not specify a BrowserContext for
// which they intend to listen for events, so we resort to having a global
// registry. Observers in tests where multiple BrowserContexts exist should
// check which BrowserContext is associated with an event.
static TestApiObserverRegistry* GetInstance();
void NotifyTestPassed(content::BrowserContext* browser_context);
void NotifyTestFailed(content::BrowserContext* browser_context,
const std::string& message);
// Returns true if one of the TestApiObservers has indicated that it will
// respond to the message.
bool NotifyTestMessage(TestSendMessageFunction* function,
const std::string& message);
// Notifies observers of a result sent via sendScriptResult.
void NotifyScriptResult(const base::Value& result_value);
void AddObserver(TestApiObserver* observer);
void RemoveObserver(TestApiObserver* observer);
private:
friend class base::NoDestructor<TestApiObserverRegistry>;
TestApiObserverRegistry();
~TestApiObserverRegistry();
base::ObserverList<TestApiObserver> observers_;
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_TEST_TEST_API_OBSERVER_REGISTRY_H_