15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_API_STORAGE_STORAGE_API_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_API_STORAGE_STORAGE_API_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/storage/settings_namespace.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/storage/settings_observer.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_function.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/value_store/value_store.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Superclass of all settings functions. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SettingsFunction : public AsyncExtensionFunction { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettingsFunction(); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SettingsFunction(); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionFunction: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ShouldSkipQuotaLimiting() const OVERRIDE; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool RunImpl() OVERRIDE; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extension settings function implementations should do their work here. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The SettingsFrontend makes sure this is posted to the appropriate thread. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementations should fill in args themselves, though (like RunImpl) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // may return false to imply failure. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool RunWithStorage(ValueStore* storage) = 0; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets error_ or result_ depending on the value of a storage ReadResult, and 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returns whether the result implies success (i.e. !error). 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool UseReadResult(ValueStore::ReadResult result); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets error_ depending on the value of a storage WriteResult, sends a 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // change notification if needed, and returns whether the result implies 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // success (i.e. !error). 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool UseWriteResult(ValueStore::WriteResult result); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called via PostTask from RunImpl. Calls RunWithStorage and then 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // SendResponse with its success value. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AsyncRunWithStorage(ValueStore* storage); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The settings namespace the call was for. For example, SYNC if the API 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // call was chrome.settings.experimental.sync..., LOCAL if .local, etc. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings_namespace::Namespace settings_namespace_; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Observers, cached so that it's only grabbed from the UI thread. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<SettingsObserverList> observers_; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class StorageStorageAreaGetFunction : public SettingsFunction { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("storage.get", STORAGE_GET) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~StorageStorageAreaGetFunction() {} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SettingsFunction: 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool RunWithStorage(ValueStore* storage) OVERRIDE; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class StorageStorageAreaSetFunction : public SettingsFunction { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("storage.set", STORAGE_SET) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~StorageStorageAreaSetFunction() {} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SettingsFunction: 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool RunWithStorage(ValueStore* storage) OVERRIDE; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionFunction: 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetQuotaLimitHeuristics( 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaLimitHeuristics* heuristics) const OVERRIDE; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class StorageStorageAreaRemoveFunction : public SettingsFunction { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("storage.remove", STORAGE_REMOVE) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~StorageStorageAreaRemoveFunction() {} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SettingsFunction: 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool RunWithStorage(ValueStore* storage) OVERRIDE; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionFunction: 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetQuotaLimitHeuristics( 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaLimitHeuristics* heuristics) const OVERRIDE; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class StorageStorageAreaClearFunction : public SettingsFunction { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("storage.clear", STORAGE_CLEAR) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~StorageStorageAreaClearFunction() {} 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SettingsFunction: 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool RunWithStorage(ValueStore* storage) OVERRIDE; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionFunction: 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetQuotaLimitHeuristics( 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaLimitHeuristics* heuristics) const OVERRIDE; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class StorageStorageAreaGetBytesInUseFunction : public SettingsFunction { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("storage.getBytesInUse", STORAGE_GETBYTESINUSE) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~StorageStorageAreaGetBytesInUseFunction() {} 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SettingsFunction: 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool RunWithStorage(ValueStore* storage) OVERRIDE; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_API_STORAGE_STORAGE_API_H_ 125