test_extension_registry_observer.cc revision 116680a4aac90f2aa7413d9095a592090648e557
1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/browser/test_extension_registry_observer.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/test/test_utils.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/browser/extension_registry.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace extensions { 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass TestExtensionRegistryObserver::Waiter { 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Waiter(const std::string& extension_id) : observed_(false), runner_(NULL) {} 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void Wait() { 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (observed_) 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch runner_ = new content::MessageLoopRunner(); 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch runner_->Run(); 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnObserved() { 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch observed_ = true; 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (runner_) { 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch runner_->Quit(); 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch runner_ = NULL; 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool observed_; 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<content::MessageLoopRunner> runner_; 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(Waiter); 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 40116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTestExtensionRegistryObserver::TestExtensionRegistryObserver( 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionRegistry* registry, 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& extension_id) 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : will_be_installed_waiter_(new Waiter(extension_id)), 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch uninstalled_waiter_(new Waiter(extension_id)), 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch loaded_waiter_(new Waiter(extension_id)), 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch unloaded_waiter_(new Waiter(extension_id)), 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_registry_observer_(this), 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_id_(extension_id) { 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_registry_observer_.Add(registry); 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 52116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTestExtensionRegistryObserver::~TestExtensionRegistryObserver() { 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TestExtensionRegistryObserver::WaitForExtensionUninstalled() { 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch uninstalled_waiter_->Wait(); 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TestExtensionRegistryObserver::WaitForExtensionWillBeInstalled() { 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch will_be_installed_waiter_->Wait(); 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TestExtensionRegistryObserver::WaitForExtensionLoaded() { 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch loaded_waiter_->Wait(); 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TestExtensionRegistryObserver::WaitForExtensionUnloaded() { 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch unloaded_waiter_->Wait(); 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TestExtensionRegistryObserver::OnExtensionWillBeInstalled( 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserContext* browser_context, 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Extension* extension, 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool is_update, 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool from_ephemeral, 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& old_name) { 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (extension->id() == extension_id_) 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch will_be_installed_waiter_->OnObserved(); 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TestExtensionRegistryObserver::OnExtensionUninstalled( 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserContext* browser_context, 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Extension* extension) { 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (extension->id() == extension_id_) 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch uninstalled_waiter_->OnObserved(); 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TestExtensionRegistryObserver::OnExtensionLoaded( 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserContext* browser_context, 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Extension* extension) { 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (extension->id() == extension_id_) 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch loaded_waiter_->OnObserved(); 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TestExtensionRegistryObserver::OnExtensionUnloaded( 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserContext* browser_context, 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Extension* extension, 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UnloadedExtensionInfo::Reason reason) { 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (extension->id() == extension_id_) 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch unloaded_waiter_->OnObserved(); 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace extensions 104