// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef EXTENSIONS_BROWSER_TEST_EXTENSION_REGISTRY_OBSERVER_H_ #define EXTENSIONS_BROWSER_TEST_EXTENSION_REGISTRY_OBSERVER_H_ #include #include #include "base/scoped_observation.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry_observer.h" namespace extensions { // A helper class that listen for ExtensionRegistry notifications. class TestExtensionRegistryObserver : public ExtensionRegistryObserver { public: // If |extension_id| is provided, listens only to events relating to that // extension. Otherwise, listens to all events. explicit TestExtensionRegistryObserver(ExtensionRegistry* registry); TestExtensionRegistryObserver(ExtensionRegistry* registry, const std::string& extension_id); TestExtensionRegistryObserver(const TestExtensionRegistryObserver&) = delete; TestExtensionRegistryObserver& operator=( const TestExtensionRegistryObserver&) = delete; ~TestExtensionRegistryObserver() override; // Waits for the notification, and returns the extension that caused it. scoped_refptr WaitForExtensionWillBeInstalled(); scoped_refptr WaitForExtensionInstalled(); scoped_refptr WaitForExtensionUninstalled(); scoped_refptr WaitForExtensionUninstallationDenied(); scoped_refptr WaitForExtensionLoaded(); scoped_refptr WaitForExtensionReady(); scoped_refptr WaitForExtensionUnloaded(); private: class Waiter; // ExtensionRegistryObserver. void OnExtensionWillBeInstalled(content::BrowserContext* browser_context, const Extension* extension, bool is_update, const std::string& old_name) override; void OnExtensionInstalled(content::BrowserContext* browser_context, const Extension* extension, bool is_update) override; void OnExtensionUninstalled(content::BrowserContext* browser_context, const Extension* extension, extensions::UninstallReason reason) override; void OnExtensionUninstallationDenied(content::BrowserContext* browser_context, const Extension* extension) override; void OnExtensionLoaded(content::BrowserContext* browser_context, const Extension* extension) override; void OnExtensionReady(content::BrowserContext* browser_context, const Extension* extension) override; void OnExtensionUnloaded(content::BrowserContext* browser_context, const Extension* extension, UnloadedExtensionReason reason) override; scoped_refptr Wait(std::unique_ptr* waiter); std::unique_ptr will_be_installed_waiter_; std::unique_ptr installed_waiter_; std::unique_ptr uninstalled_waiter_; std::unique_ptr uninstallation_denied_waiter_; std::unique_ptr loaded_waiter_; std::unique_ptr ready_waiter_; std::unique_ptr unloaded_waiter_; base::ScopedObservation extension_registry_observation_{this}; std::string extension_id_; }; } // namespace extensions #endif // EXTENSIONS_BROWSER_TEST_EXTENSION_REGISTRY_OBSERVER_H_