app_registry.h revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
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#ifndef ATHENA_CONTENT_PUBLIC_APP_REGISTRY_H_
6#define ATHENA_CONTENT_PUBLIC_APP_REGISTRY_H_
7
8#include <string>
9#include <vector>
10
11#include "athena/athena_export.h"
12#include "base/macros.h"
13#include "base/memory/scoped_ptr.h"
14
15namespace content {
16class BrowserContext;
17}
18
19namespace athena {
20
21class AppActivityRegistry;
22class AppContentControlDelegate;
23class AppRegistryImpl;
24
25// This class holds for each application, held by a user, a list of activities.
26// The list of activities can be retrieved as |AppActivityRegistry|. It is used
27// to associate activities with applications and allow the resource manager to
28// (re)start and stop applications.
29class ATHENA_EXPORT AppRegistry {
30 public:
31  // Creates the AppRegistry instance.
32  static void Create();
33
34  // Gets the instance of the controller.
35  static AppRegistry* Get();
36
37  // Shuts down the registry (all applications should be shut down by then).
38  static void ShutDown();
39
40  // Overrides the used AppContentDelegate. This function will own it
41  // afterwards. A value of NULL is invalid.
42  virtual void SetDelegate(AppContentControlDelegate* delegate) = 0;
43
44  // Retrieves the application content delegate. The ownership remains with this
45  // class.
46  virtual AppContentControlDelegate* GetDelegate() = 0;
47
48  // Returns an |AppActivityRegistry| for a given activity |app_id| and
49  // |browser_context|.
50  virtual AppActivityRegistry* GetAppActivityRegistry(
51      const std::string& app_id,
52      content::BrowserContext* browser_context) = 0;
53
54  // Returns the number of registered applications.
55  virtual int NumberOfApplications() const = 0;
56
57 protected:
58  // Only the |AppActivityRegistry| can remove itself.
59  friend AppActivityRegistry;
60
61  // Removes an activity registry for an application from the list of known
62  // applications.
63  virtual void RemoveAppActivityRegistry(AppActivityRegistry* registry) = 0;
64
65  // Constructor and destructor can only be called by the implementing class.
66  AppRegistry();
67  virtual ~AppRegistry();
68};
69
70}  // namespace athena
71
72#endif  // ATHENA_CONTENT_PUBLIC_APP_REGISTRY_H_
73