| Index: extensions/browser/test_extension_registry_observer.cc
|
| diff --git a/extensions/browser/test_extension_registry_observer.cc b/extensions/browser/test_extension_registry_observer.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9982f2d925bcf07a6f045028039226d8a69ef235
|
| --- /dev/null
|
| +++ b/extensions/browser/test_extension_registry_observer.cc
|
| @@ -0,0 +1,103 @@
|
| +// 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.
|
| +
|
| +#include "extensions/browser/test_extension_registry_observer.h"
|
| +
|
| +#include "content/public/test/test_utils.h"
|
| +#include "extensions/browser/extension_registry.h"
|
| +
|
| +namespace extensions {
|
| +
|
| +class TestExtensionRegistryObserver::Waiter {
|
| + public:
|
| + Waiter(const std::string& extension_id) : observed_(false), runner_(NULL) {}
|
| +
|
| + void Wait() {
|
| + if (observed_)
|
| + return;
|
| +
|
| + runner_ = new content::MessageLoopRunner();
|
| + runner_->Run();
|
| + }
|
| +
|
| + void OnObserved() {
|
| + observed_ = true;
|
| +
|
| + if (runner_) {
|
| + runner_->Quit();
|
| + runner_ = NULL;
|
| + }
|
| + }
|
| +
|
| + private:
|
| + bool observed_;
|
| + scoped_refptr<content::MessageLoopRunner> runner_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(Waiter);
|
| +};
|
| +
|
| +TestExtensionRegistryObserver::TestExtensionRegistryObserver(
|
| + ExtensionRegistry* registry,
|
| + const std::string& extension_id)
|
| + : will_be_installed_waiter_(new Waiter(extension_id)),
|
| + uninstalled_waiter_(new Waiter(extension_id)),
|
| + loaded_waiter_(new Waiter(extension_id)),
|
| + unloaded_waiter_(new Waiter(extension_id)),
|
| + extension_registry_observer_(this),
|
| + extension_id_(extension_id) {
|
| + extension_registry_observer_.Add(registry);
|
| +}
|
| +
|
| +TestExtensionRegistryObserver::~TestExtensionRegistryObserver() {
|
| +}
|
| +
|
| +void TestExtensionRegistryObserver::WaitForExtensionUninstalled() {
|
| + uninstalled_waiter_->Wait();
|
| +}
|
| +
|
| +void TestExtensionRegistryObserver::WaitForExtensionWillBeInstalled() {
|
| + will_be_installed_waiter_->Wait();
|
| +}
|
| +
|
| +void TestExtensionRegistryObserver::WaitForExtensionLoaded() {
|
| + loaded_waiter_->Wait();
|
| +}
|
| +
|
| +void TestExtensionRegistryObserver::WaitForExtensionUnloaded() {
|
| + unloaded_waiter_->Wait();
|
| +}
|
| +
|
| +void TestExtensionRegistryObserver::OnExtensionWillBeInstalled(
|
| + content::BrowserContext* browser_context,
|
| + const Extension* extension,
|
| + bool is_update,
|
| + bool from_ephemeral,
|
| + const std::string& old_name) {
|
| + if (extension->id() == extension_id_)
|
| + will_be_installed_waiter_->OnObserved();
|
| +}
|
| +
|
| +void TestExtensionRegistryObserver::OnExtensionUninstalled(
|
| + content::BrowserContext* browser_context,
|
| + const Extension* extension) {
|
| + if (extension->id() == extension_id_)
|
| + uninstalled_waiter_->OnObserved();
|
| +}
|
| +
|
| +void TestExtensionRegistryObserver::OnExtensionLoaded(
|
| + content::BrowserContext* browser_context,
|
| + const Extension* extension) {
|
| + if (extension->id() == extension_id_)
|
| + loaded_waiter_->OnObserved();
|
| +}
|
| +
|
| +void TestExtensionRegistryObserver::OnExtensionUnloaded(
|
| + content::BrowserContext* browser_context,
|
| + const Extension* extension,
|
| + UnloadedExtensionInfo::Reason reason) {
|
| + if (extension->id() == extension_id_)
|
| + unloaded_waiter_->OnObserved();
|
| +}
|
| +
|
| +} // namespace extensions
|
|
|