test_extension_registry_observer.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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#include "extensions/browser/test_extension_registry_observer.h"
6
7#include "content/public/test/test_utils.h"
8#include "extensions/browser/extension_registry.h"
9
10namespace extensions {
11
12class TestExtensionRegistryObserver::Waiter {
13 public:
14  Waiter(const std::string& extension_id) : observed_(false), runner_(NULL) {}
15
16  void Wait() {
17    if (observed_)
18      return;
19
20    runner_ = new content::MessageLoopRunner();
21    runner_->Run();
22  }
23
24  void OnObserved() {
25    observed_ = true;
26
27    if (runner_) {
28      runner_->Quit();
29      runner_ = NULL;
30    }
31  }
32
33 private:
34  bool observed_;
35  scoped_refptr<content::MessageLoopRunner> runner_;
36
37  DISALLOW_COPY_AND_ASSIGN(Waiter);
38};
39
40TestExtensionRegistryObserver::TestExtensionRegistryObserver(
41    ExtensionRegistry* registry,
42    const std::string& extension_id)
43    : will_be_installed_waiter_(new Waiter(extension_id)),
44      uninstalled_waiter_(new Waiter(extension_id)),
45      loaded_waiter_(new Waiter(extension_id)),
46      unloaded_waiter_(new Waiter(extension_id)),
47      extension_registry_observer_(this),
48      extension_id_(extension_id) {
49  extension_registry_observer_.Add(registry);
50}
51
52TestExtensionRegistryObserver::~TestExtensionRegistryObserver() {
53}
54
55void TestExtensionRegistryObserver::WaitForExtensionUninstalled() {
56  uninstalled_waiter_->Wait();
57}
58
59void TestExtensionRegistryObserver::WaitForExtensionWillBeInstalled() {
60  will_be_installed_waiter_->Wait();
61}
62
63void TestExtensionRegistryObserver::WaitForExtensionLoaded() {
64  loaded_waiter_->Wait();
65}
66
67void TestExtensionRegistryObserver::WaitForExtensionUnloaded() {
68  unloaded_waiter_->Wait();
69}
70
71void TestExtensionRegistryObserver::OnExtensionWillBeInstalled(
72    content::BrowserContext* browser_context,
73    const Extension* extension,
74    bool is_update,
75    bool from_ephemeral,
76    const std::string& old_name) {
77  if (extension->id() == extension_id_)
78    will_be_installed_waiter_->OnObserved();
79}
80
81void TestExtensionRegistryObserver::OnExtensionUninstalled(
82    content::BrowserContext* browser_context,
83    const Extension* extension,
84    extensions::UninstallReason reason) {
85  if (extension->id() == extension_id_)
86    uninstalled_waiter_->OnObserved();
87}
88
89void TestExtensionRegistryObserver::OnExtensionLoaded(
90    content::BrowserContext* browser_context,
91    const Extension* extension) {
92  if (extension->id() == extension_id_)
93    loaded_waiter_->OnObserved();
94}
95
96void TestExtensionRegistryObserver::OnExtensionUnloaded(
97    content::BrowserContext* browser_context,
98    const Extension* extension,
99    UnloadedExtensionInfo::Reason reason) {
100  if (extension->id() == extension_id_)
101    unloaded_waiter_->OnObserved();
102}
103
104}  // namespace extensions
105