Index: chrome/browser/extensions/api/declarative/rules_registry_with_cache.h |
diff --git a/chrome/browser/extensions/api/declarative/rules_registry_with_cache.h b/chrome/browser/extensions/api/declarative/rules_registry_with_cache.h |
deleted file mode 100644 |
index fd88cd70a45b48f405273444d456578f89037b18..0000000000000000000000000000000000000000 |
--- a/chrome/browser/extensions/api/declarative/rules_registry_with_cache.h |
+++ /dev/null |
@@ -1,246 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_WITH_CACHE_H__ |
-#define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_WITH_CACHE_H__ |
- |
-#include "chrome/browser/extensions/api/declarative/rules_registry.h" |
- |
-#include <map> |
-#include <set> |
-#include <string> |
-#include <vector> |
- |
-#include "base/compiler_specific.h" |
-#include "base/callback_forward.h" |
-#include "base/gtest_prod_util.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/memory/weak_ptr.h" |
-#include "content/public/browser/notification_observer.h" |
-#include "content/public/browser/notification_registrar.h" |
-#include "extensions/common/one_shot_event.h" |
- |
-class Profile; |
- |
-namespace base { |
-class Value; |
-} // namespace base |
- |
-namespace extensions { |
- |
-// A base class for RulesRegistries that takes care of storing the |
-// RulesRegistry::Rule objects. It contains all the methods that need to run on |
-// the registry thread; methods that need to run on the UI thread are separated |
-// in the RuleStorageOnUI object. |
-class RulesRegistryWithCache : public RulesRegistry { |
- public: |
- // RuleStorageOnUI implements the part of the RulesRegistry which works on |
- // the UI thread. It should only be used on the UI thread. It gets created |
- // by the RulesRegistry, but right after that it changes owner to the |
- // RulesRegistryService, and is deleted by the service. |
- // If |log_storage_init_delay| is set, the delay caused by loading and |
- // registering rules on initialization will be logged with UMA. |
- class RuleStorageOnUI : public content::NotificationObserver { |
- public: |
- // |event_name| identifies the JavaScript event for which rules are |
- // registered. For example, for WebRequestRulesRegistry the name is |
- // "declarativeWebRequest.onRequest". |
- RuleStorageOnUI(Profile* profile, |
- const std::string& event_name, |
- content::BrowserThread::ID rules_registry_thread, |
- base::WeakPtr<RulesRegistryWithCache> registry, |
- bool log_storage_init_delay); |
- |
- virtual ~RuleStorageOnUI(); |
- |
- // Returns a key for the state store. The associated preference is a boolean |
- // indicating whether there are some declarative rules stored in the rule |
- // store. |
- static std::string GetRulesStoredKey(const std::string& event_name, |
- bool incognito); |
- |
- // Initialize the storage functionality. |
- void Init(); |
- |
- void WriteToStorage(const std::string& extension_id, |
- scoped_ptr<base::Value> value); |
- |
- base::WeakPtr<RuleStorageOnUI> GetWeakPtr() { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- return weak_ptr_factory_.GetWeakPtr(); |
- } |
- |
- private: |
- FRIEND_TEST_ALL_PREFIXES(RulesRegistryWithCacheTest, |
- DeclarativeRulesStored); |
- FRIEND_TEST_ALL_PREFIXES(RulesRegistryWithCacheTest, |
- RulesStoredFlagMultipleRegistries); |
- |
- static const char kRulesStoredKey[]; |
- |
- // NotificationObserver |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) OVERRIDE; |
- |
- // Check if we are done reading all data from storage on startup, and notify |
- // the RulesRegistry on its thread if so. The notification is delivered |
- // exactly once. |
- void CheckIfReady(); |
- |
- // Schedules retrieving rules for already loaded extensions where |
- // appropriate. |
- void ReadRulesForInstalledExtensions(); |
- |
- // Read/write a list of rules serialized to Values. |
- void ReadFromStorage(const std::string& extension_id); |
- void ReadFromStorageCallback(const std::string& extension_id, |
- scoped_ptr<base::Value> value); |
- |
- // Check the preferences whether the extension with |extension_id| has some |
- // rules stored on disk. If this information is not in the preferences, true |
- // is returned as a safe default value. |
- bool GetDeclarativeRulesStored(const std::string& extension_id) const; |
- // Modify the preference to |rules_stored|. |
- void SetDeclarativeRulesStored(const std::string& extension_id, |
- bool rules_stored); |
- |
- content::NotificationRegistrar registrar_; |
- |
- Profile* profile_; |
- |
- // The key under which rules are stored. |
- const std::string storage_key_; |
- |
- // The key under which we store whether the rules have been stored. |
- const std::string rules_stored_key_; |
- |
- // A set of extension IDs that have rules we are reading from storage. |
- std::set<std::string> waiting_for_extensions_; |
- |
- // We measure the time spent on loading rules on init. The result is logged |
- // with UMA once per each RuleStorageOnUI instance, unless in Incognito. |
- base::Time storage_init_time_; |
- bool log_storage_init_delay_; |
- |
- // Weak pointer to post tasks to the owning rules registry. |
- const base::WeakPtr<RulesRegistryWithCache> registry_; |
- |
- // The thread |registry_| lives on. |
- const content::BrowserThread::ID rules_registry_thread_; |
- |
- // We notified the RulesRegistry that the rules are loaded. |
- bool notified_registry_; |
- |
- // Use this factory to generate weak pointers bound to the UI thread. |
- base::WeakPtrFactory<RuleStorageOnUI> weak_ptr_factory_; |
- }; |
- |
- // After the RuleStorageOnUI object (the part of the registry which runs on |
- // the UI thread) is created, a pointer to it is passed to |*ui_part|. |
- // If |log_storage_init_delay| is set, the delay caused by loading and |
- // registering rules on initialization will be logged with UMA. |
- // In tests, |profile| and |ui_part| can be NULL (at the same time). In that |
- // case the storage functionality disabled (no RuleStorageOnUI object |
- // created) and the |log_storage_init_delay| flag is ignored. |
- RulesRegistryWithCache(Profile* profile, |
- const std::string& event_name, |
- content::BrowserThread::ID owner_thread, |
- bool log_storage_init_delay, |
- scoped_ptr<RuleStorageOnUI>* ui_part); |
- |
- const OneShotEvent& ready() const { |
- return ready_; |
- } |
- |
- // RulesRegistry implementation: |
- virtual std::string AddRules( |
- const std::string& extension_id, |
- const std::vector<linked_ptr<RulesRegistry::Rule> >& rules) OVERRIDE; |
- virtual std::string RemoveRules( |
- const std::string& extension_id, |
- const std::vector<std::string>& rule_identifiers) OVERRIDE; |
- virtual std::string RemoveAllRules( |
- const std::string& extension_id) OVERRIDE; |
- virtual std::string GetRules( |
- const std::string& extension_id, |
- const std::vector<std::string>& rule_identifiers, |
- std::vector<linked_ptr<RulesRegistry::Rule> >* out) OVERRIDE; |
- virtual std::string GetAllRules( |
- const std::string& extension_id, |
- std::vector<linked_ptr<RulesRegistry::Rule> >* out) OVERRIDE; |
- virtual void OnExtensionUnloaded(const std::string& extension_id) OVERRIDE; |
- |
- protected: |
- virtual ~RulesRegistryWithCache(); |
- |
- // These functions need to provide the same functionality as their |
- // RulesRegistry counterparts. They need to be atomic. |
- virtual std::string AddRulesImpl( |
- const std::string& extension_id, |
- const std::vector<linked_ptr<RulesRegistry::Rule> >& rules) = 0; |
- virtual std::string RemoveRulesImpl( |
- const std::string& extension_id, |
- const std::vector<std::string>& rule_identifiers) = 0; |
- virtual std::string RemoveAllRulesImpl( |
- const std::string& extension_id) = 0; |
- |
- private: |
- typedef std::string ExtensionId; |
- typedef std::string RuleId; |
- typedef std::pair<ExtensionId, RuleId> RulesDictionaryKey; |
- typedef std::map<RulesDictionaryKey, linked_ptr<RulesRegistry::Rule> > |
- RulesDictionary; |
- enum ProcessChangedRulesState { |
- // ProcessChangedRules can never be called, |storage_on_ui_| is NULL. |
- NEVER_PROCESS, |
- // A task to call ProcessChangedRules is scheduled for future execution. |
- SCHEDULED_FOR_PROCESSING, |
- // No task to call ProcessChangedRules is scheduled yet, but it is possible |
- // to schedule one. |
- NOT_SCHEDULED_FOR_PROCESSING |
- }; |
- |
- // Common processing after extension's rules have changed. |
- void ProcessChangedRules(const std::string& extension_id); |
- |
- // Calls ProcessChangedRules if |process_changed_rules_requested_| == |
- // NOT_SCHEDULED_FOR_PROCESSING. |
- void MaybeProcessChangedRules(const std::string& extension_id); |
- |
- // Process the callbacks once the registry gets ready. |
- void MarkReady(base::Time storage_init_time); |
- |
- // Deserialize the rules from the given Value object and add them to the |
- // RulesRegistry. |
- void DeserializeAndAddRules(const std::string& extension_id, |
- scoped_ptr<base::Value> rules); |
- |
- |
- RulesDictionary rules_; |
- |
- // Signaled when we have finished reading from storage for all extensions that |
- // are loaded on startup. |
- OneShotEvent ready_; |
- |
- // The factory needs to be declared before |storage_on_ui_|, so that it can |
- // produce a pointer as a construction argument for |storage_on_ui_|. |
- base::WeakPtrFactory<RulesRegistryWithCache> weak_ptr_factory_; |
- |
- // |storage_on_ui_| is owned by the registry service. If |storage_on_ui_| is |
- // NULL, then the storage functionality is disabled (this is used in tests). |
- // This registry cannot own |storage_on_ui_| because during the time after |
- // rules registry service shuts down on UI thread, and the registry is |
- // destroyed on its thread, the use of the |storage_on_ui_| would not be |
- // safe. The registry only ever associates with one RuleStorageOnUI instance. |
- const base::WeakPtr<RuleStorageOnUI> storage_on_ui_; |
- |
- ProcessChangedRulesState process_changed_rules_requested_; |
- |
- DISALLOW_COPY_AND_ASSIGN(RulesRegistryWithCache); |
-}; |
- |
-} // namespace extensions |
- |
-#endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_WITH_CACHE_H__ |