Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3297)

Unified Diff: chrome/browser/extensions/api/declarative/rules_registry_with_cache.h

Issue 49693003: Refactor RulesRegistryWithCache to RulesRegistry (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed nits Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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__

Powered by Google App Engine
This is Rietveld 408576698