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