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