1// Copyright (c) 2011 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 CHROME_BROWSER_EXTENSIONS_EXTENSION_MANAGEMENT_API_H__
6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_MANAGEMENT_API_H__
7#pragma once
8
9#include "base/memory/singleton.h"
10#include "chrome/browser/extensions/extension_function.h"
11#include "content/common/notification_observer.h"
12#include "content/common/notification_registrar.h"
13
14class ExtensionService;
15
16class ExtensionManagementFunction : public SyncExtensionFunction {
17 protected:
18  ExtensionService* service();
19};
20
21class GetAllExtensionsFunction : public ExtensionManagementFunction {
22  ~GetAllExtensionsFunction() {}
23  virtual bool RunImpl();
24  DECLARE_EXTENSION_FUNCTION_NAME("management.getAll");
25};
26
27class GetExtensionByIdFunction : public ExtensionManagementFunction {
28  ~GetExtensionByIdFunction() {}
29  virtual bool RunImpl();
30  DECLARE_EXTENSION_FUNCTION_NAME("management.get");
31};
32
33class LaunchAppFunction : public ExtensionManagementFunction {
34  ~LaunchAppFunction() {}
35  virtual bool RunImpl();
36  DECLARE_EXTENSION_FUNCTION_NAME("management.launchApp");
37};
38
39class SetEnabledFunction : public ExtensionManagementFunction {
40  ~SetEnabledFunction() {}
41  virtual bool RunImpl();
42  DECLARE_EXTENSION_FUNCTION_NAME("management.setEnabled");
43};
44
45class UninstallFunction : public ExtensionManagementFunction {
46  ~UninstallFunction() {}
47  virtual bool RunImpl();
48  DECLARE_EXTENSION_FUNCTION_NAME("management.uninstall");
49};
50
51class ExtensionManagementEventRouter : public NotificationObserver {
52 public:
53  // Get the singleton instance of the event router.
54  static ExtensionManagementEventRouter* GetInstance();
55
56  // Performs one-time initialization of our singleton.
57  void Init();
58
59 private:
60  friend struct DefaultSingletonTraits<ExtensionManagementEventRouter>;
61
62  ExtensionManagementEventRouter();
63  virtual ~ExtensionManagementEventRouter();
64
65  // NotificationObserver implementation.
66  virtual void Observe(NotificationType type,
67                       const NotificationSource& source,
68                       const NotificationDetails& details);
69
70  NotificationRegistrar registrar_;
71
72  DISALLOW_COPY_AND_ASSIGN(ExtensionManagementEventRouter);
73};
74
75#endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_MANAGEMENT_API_H__
76