// 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 "athena/content/public/app_registry.h" #include "athena/content/app_activity_registry.h" #include "base/logging.h" namespace athena { class AppRegistryImpl : public AppRegistry { public: AppRegistryImpl(); virtual ~AppRegistryImpl(); // AppRegistry: virtual AppActivityRegistry* GetAppActivityRegistry( const std::string& app_id, content::BrowserContext* browser_context) OVERRIDE; virtual int NumberOfApplications() const OVERRIDE { return app_list_.size(); } private: virtual void RemoveAppActivityRegistry( AppActivityRegistry* registry) OVERRIDE; std::vector app_list_; DISALLOW_COPY_AND_ASSIGN(AppRegistryImpl); }; namespace { AppRegistryImpl* instance = NULL; } // namespace AppRegistryImpl::AppRegistryImpl() { } AppRegistryImpl::~AppRegistryImpl() { DCHECK(app_list_.empty()); } AppActivityRegistry* AppRegistryImpl::GetAppActivityRegistry( const std::string& app_id, content::BrowserContext* browser_context) { // Search for an existing proxy. for (std::vector::iterator it = app_list_.begin(); it != app_list_.end(); ++it) { if ((*it)->app_id() == app_id && (*it)->browser_context() == browser_context) return *it; } // Create and return a new application object. AppActivityRegistry* app_activity_registry = new AppActivityRegistry(app_id, browser_context); app_list_.push_back(app_activity_registry); return app_activity_registry; } void AppRegistryImpl::RemoveAppActivityRegistry(AppActivityRegistry* registry) { std::vector::iterator item = std::find(app_list_.begin(), app_list_.end(), registry); CHECK(item != app_list_.end()); app_list_.erase(item); delete registry; } // static void AppRegistry::Create() { DCHECK(!instance); instance = new AppRegistryImpl(); } // static AppRegistry* AppRegistry::Get() { DCHECK(instance); return instance; } // static void AppRegistry::ShutDown() { DCHECK(instance); delete instance; } AppRegistry::AppRegistry() {} AppRegistry::~AppRegistry() { instance = NULL; } } // namespace athena