extension_special_storage_policy.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// Use of this source code is governed by a BSD-style license that can be 3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// found in the LICENSE file. 4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_SPECIAL_STORAGE_POLICY_H_ 6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#define CHROME_BROWSER_EXTENSIONS_EXTENSION_SPECIAL_STORAGE_POLICY_H_ 7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <map> 9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <string> 10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "base/synchronization/lock.h" 12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "extensions/common/extension_set.h" 13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "url/gurl.h" 14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "webkit/browser/quota/special_storage_policy.h" 15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiclass CookieSettings; 17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskinamespace extensions { 19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiclass Extension; 20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// Special rights are granted to 'extensions' and 'applications'. The 23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// storage subsystems and the browsing data remover query this interface 24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// to determine which origins have these rights. 25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiclass ExtensionSpecialStoragePolicy : public quota::SpecialStoragePolicy { 26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski explicit ExtensionSpecialStoragePolicy(CookieSettings* cookie_settings); 28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // quota::SpecialStoragePolicy methods used by storage subsystems and the 30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // browsing data remover. These methods are safe to call on any thread. 31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool IsStorageProtected(const GURL& origin) OVERRIDE; 32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool IsStorageUnlimited(const GURL& origin) OVERRIDE; 33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool IsStorageSessionOnly(const GURL& origin) OVERRIDE; 34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool CanQueryDiskSize(const GURL& origin) OVERRIDE; 35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool IsFileHandler(const std::string& extension_id) OVERRIDE; 36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool HasIsolatedStorage(const GURL& origin) OVERRIDE; 37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool HasSessionOnlyOrigins() OVERRIDE; 38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Methods used by the ExtensionService to populate this class. 40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void GrantRightsForExtension(const extensions::Extension* extension); 41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void RevokeRightsForExtension(const extensions::Extension* extension); 42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void RevokeRightsForAllExtensions(); 43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Decides whether the storage for |extension|'s web extent needs protection. 45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool NeedsProtection(const extensions::Extension* extension); 46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Returns the set of extensions protecting this origin. The caller does not 48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // take ownership of the return value. 49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const extensions::ExtensionSet* ExtensionsProtectingOrigin( 50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const GURL& origin); 51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski protected: 53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~ExtensionSpecialStoragePolicy(); 54edc4664d60af1f124d05f0a2b6ba58b837630f51Alan Viverette 55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private: 56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski class SpecialCollection { 57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public: 58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SpecialCollection(); 59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ~SpecialCollection(); 60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool Contains(const GURL& origin); 62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const extensions::ExtensionSet* ExtensionsContaining(const GURL& origin); 63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool ContainsExtension(const std::string& extension_id); 64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool Add(const extensions::Extension* extension); 65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool Remove(const extensions::Extension* extension); 66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void Clear(); 67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private: 69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski typedef std::map<GURL, extensions::ExtensionSet*> CachedResults; 70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void ClearCache(); 72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski extensions::ExtensionSet extensions_; 74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski CachedResults cached_results_; 75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void NotifyGranted(const GURL& origin, int change_flags); 78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void NotifyRevoked(const GURL& origin, int change_flags); 79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void NotifyCleared(); 80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski base::Lock lock_; // Synchronize all access to the collections. 82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SpecialCollection protected_apps_; 83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SpecialCollection installed_apps_; 84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SpecialCollection unlimited_extensions_; 85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SpecialCollection file_handler_extensions_; 86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski SpecialCollection isolated_extensions_; 87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski scoped_refptr<CookieSettings> cookie_settings_; 88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SPECIAL_STORAGE_POLICY_H_ 91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski