// 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.
#ifndef ATHENA_CONTENT_PUBLIC_APP_REGISTRY_H_
#define ATHENA_CONTENT_PUBLIC_APP_REGISTRY_H_
#include <string>
#include <vector>
#include "athena/athena_export.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
namespace content {
class BrowserContext;
}
namespace athena {
class AppActivityRegistry;
class AppRegistryImpl;
// This class holds for each application, held by a user, a list of activities.
// The list of activities can be retrieved as |AppActivityRegistry|. It is used
// to associate activities with applications and allow the resource manager to
// (re)start and stop applications.
class ATHENA_EXPORT AppRegistry {
public:
// Creates the AppRegistry instance.
static void Create();
// Gets the instance of the controller.
static AppRegistry* Get();
// Shuts down the registry (all applications should be shut down by then).
static void ShutDown();
// Returns an |AppActivityRegistry| for a given activity |app_id| and
// |browser_context|.
virtual AppActivityRegistry* GetAppActivityRegistry(
const std::string& app_id,
content::BrowserContext* browser_context) = 0;
// Returns the number of registered applications.
virtual int NumberOfApplications() const = 0;
protected:
// Only the |AppActivityRegistry| can remove itself.
friend AppActivityRegistry;
// Removes an activity registry for an application from the list of known
// applications.
virtual void RemoveAppActivityRegistry(AppActivityRegistry* registry) = 0;
// Constructor and destructor can only be called by the implementing class.
AppRegistry();
virtual ~AppRegistry();
};
} // namespace athena
#endif // ATHENA_CONTENT_PUBLIC_APP_REGISTRY_H_