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 CHROME_BROWSER_EXTENSIONS_EXTENSION_ACTION_STORAGE_MANAGER_H_
6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_ACTION_STORAGE_MANAGER_H_
7
8#include <string>
9
10#include "base/memory/weak_ptr.h"
11#include "base/scoped_observer.h"
12#include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
13#include "extensions/browser/extension_registry_observer.h"
14
15class ExtensionAction;
16
17namespace content {
18class BrowserContext;
19}
20
21namespace extensions {
22class ExtensionRegistry;
23class StateStore;
24
25// This class manages reading and writing browser action values from storage.
26class ExtensionActionStorageManager : public ExtensionActionAPI::Observer,
27                                      public ExtensionRegistryObserver {
28 public:
29  explicit ExtensionActionStorageManager(content::BrowserContext* context);
30  virtual ~ExtensionActionStorageManager();
31
32 private:
33  // ExtensionActionAPI::Observer:
34  virtual void OnExtensionActionUpdated(
35      ExtensionAction* extension_action,
36      content::WebContents* web_contents,
37      content::BrowserContext* browser_context) OVERRIDE;
38  virtual void OnExtensionActionAPIShuttingDown() OVERRIDE;
39
40  // ExtensionRegistryObserver:
41  virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
42                                 const Extension* extension) OVERRIDE;
43
44  // Reads/Writes the ExtensionAction's default values to/from storage.
45  void WriteToStorage(ExtensionAction* extension_action);
46  void ReadFromStorage(
47      const std::string& extension_id, scoped_ptr<base::Value> value);
48
49  // Returns the Extensions StateStore for the |browser_context_|.
50  // May return NULL.
51  StateStore* GetStateStore();
52
53  content::BrowserContext* browser_context_;
54
55  ScopedObserver<ExtensionActionAPI, ExtensionActionAPI::Observer>
56      extension_action_observer_;
57
58  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
59      extension_registry_observer_;
60
61  base::WeakPtrFactory<ExtensionActionStorageManager> weak_factory_;
62
63  DISALLOW_COPY_AND_ASSIGN(ExtensionActionStorageManager);
64};
65
66}  // namespace extensions
67
68#endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_ACTION_STORAGE_MANAGER_H_
69