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