1// Copyright 2014 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
5#ifndef EXTENSIONS_BROWSER_TEST_EXTENSION_REGISTRY_OBSERVER_H_
6#define EXTENSIONS_BROWSER_TEST_EXTENSION_REGISTRY_OBSERVER_H_
7
8#include "base/scoped_observer.h"
9#include "extensions/browser/extension_registry_observer.h"
10
11namespace extensions {
12class ExtensionRegistry;
13
14// A helper class that listen for ExtensionRegistry notifications.
15class TestExtensionRegistryObserver : public ExtensionRegistryObserver {
16 public:
17  explicit TestExtensionRegistryObserver(ExtensionRegistry* registry,
18                                         const std::string& extension_id);
19  virtual ~TestExtensionRegistryObserver();
20
21  void WaitForExtensionWillBeInstalled();
22  void WaitForExtensionUninstalled();
23  void WaitForExtensionLoaded();
24  void WaitForExtensionUnloaded();
25
26 private:
27  class Waiter;
28
29  // ExtensionRegistryObserver.
30  virtual void OnExtensionWillBeInstalled(
31      content::BrowserContext* browser_context,
32      const Extension* extension,
33      bool is_update,
34      bool from_ephemeral,
35      const std::string& old_name) OVERRIDE;
36  virtual void OnExtensionUninstalled(
37      content::BrowserContext* browser_context,
38      const Extension* extension,
39      extensions::UninstallReason reason) OVERRIDE;
40  virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
41                                 const Extension* extension) OVERRIDE;
42  virtual void OnExtensionUnloaded(
43      content::BrowserContext* browser_context,
44      const Extension* extension,
45      UnloadedExtensionInfo::Reason reason) OVERRIDE;
46
47  scoped_ptr<Waiter> will_be_installed_waiter_;
48  scoped_ptr<Waiter> uninstalled_waiter_;
49  scoped_ptr<Waiter> loaded_waiter_;
50  scoped_ptr<Waiter> unloaded_waiter_;
51
52  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
53      extension_registry_observer_;
54
55  std::string extension_id_;
56
57  DISALLOW_COPY_AND_ASSIGN(TestExtensionRegistryObserver);
58};
59
60}  // namespace extensions
61
62#endif  // EXTENSIONS_BROWSER_TEST_EXTENSION_REGISTRY_OBSERVER_H_
63