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

Side by Side Diff: chrome/browser/extensions/api/declarative/rules_registry.h

Issue 53273002: Decouple RulesCacheDelegate from RulesRegistry (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@refactor_rules_registry_with_cache
Patch Set: Updated Created 7 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_H__ 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_H__
6 #define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_H__ 6 #define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_H__
7 7
8 #include "chrome/browser/extensions/api/declarative/rules_registry.h" 8 #include "chrome/browser/extensions/api/declarative/rules_registry.h"
9 9
10 #include <map> 10 #include <map>
(...skipping 26 matching lines...) Expand all
37 // RulesRegistry::Rule objects. It contains all the methods that need to run on 37 // RulesRegistry::Rule objects. It contains all the methods that need to run on
38 // the registry thread; methods that need to run on the UI thread are separated 38 // the registry thread; methods that need to run on the UI thread are separated
39 // in the RulesCacheDelegate object. 39 // in the RulesCacheDelegate object.
40 class RulesRegistry : public base::RefCountedThreadSafe<RulesRegistry> { 40 class RulesRegistry : public base::RefCountedThreadSafe<RulesRegistry> {
41 public: 41 public:
42 typedef extensions::api::events::Rule Rule; 42 typedef extensions::api::events::Rule Rule;
43 43
44 enum Defaults { DEFAULT_PRIORITY = 100 }; 44 enum Defaults { DEFAULT_PRIORITY = 100 };
45 // After the RulesCacheDelegate object (the part of the registry which runs on 45 // After the RulesCacheDelegate object (the part of the registry which runs on
46 // the UI thread) is created, a pointer to it is passed to |*ui_part|. 46 // the UI thread) is created, a pointer to it is passed to |*ui_part|.
47 // If |log_storage_init_delay| is set, the delay caused by loading and
48 // registering rules on initialization will be logged with UMA.
49 // In tests, |profile| and |ui_part| can be NULL (at the same time). In that 47 // In tests, |profile| and |ui_part| can be NULL (at the same time). In that
50 // case the storage functionality disabled (no RulesCacheDelegate object 48 // case the storage functionality disabled (no RulesCacheDelegate object
51 // created) and the |log_storage_init_delay| flag is ignored. 49 // created).
52 RulesRegistry(Profile* profile, 50 RulesRegistry(Profile* profile,
53 const std::string& event_name, 51 const std::string& event_name,
54 content::BrowserThread::ID owner_thread, 52 content::BrowserThread::ID owner_thread,
55 bool log_storage_init_delay, 53 RulesCacheDelegate* cache_delegate);
56 scoped_ptr<RulesCacheDelegate>* ui_part);
57 54
58 const OneShotEvent& ready() const { 55 const OneShotEvent& ready() const {
59 return ready_; 56 return ready_;
60 } 57 }
61 58
62 // RulesRegistry implementation: 59 // RulesRegistry implementation:
63 60
64 // Registers |rules|, owned by |extension_id| to this RulesRegistry. 61 // Registers |rules|, owned by |extension_id| to this RulesRegistry.
65 // If a concrete RuleRegistry does not support some of the rules, 62 // If a concrete RuleRegistry does not support some of the rules,
66 // it may ignore them. 63 // it may ignore them.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 std::vector<linked_ptr<RulesRegistry::Rule> >* out); 113 std::vector<linked_ptr<RulesRegistry::Rule> >* out);
117 114
118 // Called to notify the RulesRegistry that an extension has been unloaded 115 // Called to notify the RulesRegistry that an extension has been unloaded
119 // and all rules of this extension need to be removed. 116 // and all rules of this extension need to be removed.
120 void OnExtensionUnloaded(const std::string& extension_id); 117 void OnExtensionUnloaded(const std::string& extension_id);
121 118
122 // Returns the number of entries in used_rule_identifiers_ for leak detection. 119 // Returns the number of entries in used_rule_identifiers_ for leak detection.
123 // Every ExtensionId counts as one entry, even if it contains no rules. 120 // Every ExtensionId counts as one entry, even if it contains no rules.
124 size_t GetNumberOfUsedRuleIdentifiersForTesting() const; 121 size_t GetNumberOfUsedRuleIdentifiersForTesting() const;
125 122
123 // Returns the profile where the rules registry lives.
124 Profile* profile() const { return profile_; }
125
126 // Returns the ID of the thread on which the rules registry lives. 126 // Returns the ID of the thread on which the rules registry lives.
127 // It is safe to call this function from any thread. 127 // It is safe to call this function from any thread.
128 content::BrowserThread::ID owner_thread() const { return owner_thread_; } 128 content::BrowserThread::ID owner_thread() const { return owner_thread_; }
129 129
130 // The name of the event with which rules are registered. 130 // The name of the event with which rules are registered.
131 const std::string& event_name() const { return event_name_; } 131 const std::string& event_name() const { return event_name_; }
132 132
133 protected: 133 protected:
134 virtual ~RulesRegistry(); 134 virtual ~RulesRegistry();
135 135
(...skipping 21 matching lines...) Expand all
157 enum ProcessChangedRulesState { 157 enum ProcessChangedRulesState {
158 // ProcessChangedRules can never be called, |cache_delegate_| is NULL. 158 // ProcessChangedRules can never be called, |cache_delegate_| is NULL.
159 NEVER_PROCESS, 159 NEVER_PROCESS,
160 // A task to call ProcessChangedRules is scheduled for future execution. 160 // A task to call ProcessChangedRules is scheduled for future execution.
161 SCHEDULED_FOR_PROCESSING, 161 SCHEDULED_FOR_PROCESSING,
162 // No task to call ProcessChangedRules is scheduled yet, but it is possible 162 // No task to call ProcessChangedRules is scheduled yet, but it is possible
163 // to schedule one. 163 // to schedule one.
164 NOT_SCHEDULED_FOR_PROCESSING 164 NOT_SCHEDULED_FOR_PROCESSING
165 }; 165 };
166 166
167 base::WeakPtr<RulesRegistry> GetWeakPtr() {
168 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
169 return weak_ptr_factory_.GetWeakPtr();
170 }
171
167 // Common processing after extension's rules have changed. 172 // Common processing after extension's rules have changed.
168 void ProcessChangedRules(const std::string& extension_id); 173 void ProcessChangedRules(const std::string& extension_id);
169 174
170 // Calls ProcessChangedRules if |process_changed_rules_requested_| == 175 // Calls ProcessChangedRules if |process_changed_rules_requested_| ==
171 // NOT_SCHEDULED_FOR_PROCESSING. 176 // NOT_SCHEDULED_FOR_PROCESSING.
172 void MaybeProcessChangedRules(const std::string& extension_id); 177 void MaybeProcessChangedRules(const std::string& extension_id);
173 178
174 // Process the callbacks once the registry gets ready.
175 void MarkReady(base::Time storage_init_time); 179 void MarkReady(base::Time storage_init_time);
176 180
177 // Deserialize the rules from the given Value object and add them to the 181 // Deserialize the rules from the given Value object and add them to the
178 // RulesRegistry. 182 // RulesRegistry.
179 void DeserializeAndAddRules(const std::string& extension_id, 183 void DeserializeAndAddRules(const std::string& extension_id,
180 scoped_ptr<base::Value> rules); 184 scoped_ptr<base::Value> rules);
181 185
186 // The profile to which this rules registry belongs.
187 Profile* profile_;
182 188
183 // The ID of the thread on which the rules registry lives. 189 // The ID of the thread on which the rules registry lives.
184 const content::BrowserThread::ID owner_thread_; 190 const content::BrowserThread::ID owner_thread_;
185 191
186 // The name of the event with which rules are registered. 192 // The name of the event with which rules are registered.
187 const std::string event_name_; 193 const std::string event_name_;
188 194
189 RulesDictionary rules_; 195 RulesDictionary rules_;
190 196
191 // Signaled when we have finished reading from storage for all extensions that 197 // Signaled when we have finished reading from storage for all extensions that
192 // are loaded on startup. 198 // are loaded on startup.
193 OneShotEvent ready_; 199 OneShotEvent ready_;
194 200
195 // The factory needs to be declared before |cache_delegate_|, so that it can 201 // The factory needs to be declared before |cache_delegate_|, so that it can
196 // produce a pointer as a construction argument for |cache_delegate_|. 202 // produce a pointer as a construction argument for |cache_delegate_|.
197 base::WeakPtrFactory<RulesRegistry> weak_ptr_factory_; 203 base::WeakPtrFactory<RulesRegistry> weak_ptr_factory_;
198 204
199 // |cache_delegate_| is owned by the registry service. If |cache_delegate_| is 205 // |cache_delegate_| is owned by the registry service. If |cache_delegate_| is
200 // NULL, then the storage functionality is disabled (this is used in tests). 206 // NULL, then the storage functionality is disabled (this is used in tests).
201 // This registry cannot own |cache_delegate_| because during the time after 207 // This registry cannot own |cache_delegate_| because during the time after
202 // rules registry service shuts down on UI thread, and the registry is 208 // rules registry service shuts down on UI thread, and the registry is
203 // destroyed on its thread, the use of the |cache_delegate_| would not be 209 // destroyed on its thread, the use of the |cache_delegate_| would not be
204 // safe. The registry only ever associates with one RulesCacheDelegate 210 // safe. The registry only ever associates with one RulesCacheDelegate
205 // instance. 211 // instance.
206 const base::WeakPtr<RulesCacheDelegate> cache_delegate_; 212 base::WeakPtr<RulesCacheDelegate> cache_delegate_;
207 213
208 ProcessChangedRulesState process_changed_rules_requested_; 214 ProcessChangedRulesState process_changed_rules_requested_;
209 215
210 // Returns whether any existing rule is registered with identifier |rule_id| 216 // Returns whether any existing rule is registered with identifier |rule_id|
211 // for extension |extension_id|. 217 // for extension |extension_id|.
212 bool IsUniqueId(const std::string& extension_id, 218 bool IsUniqueId(const std::string& extension_id,
213 const std::string& rule_id) const; 219 const std::string& rule_id) const;
214 220
215 // Creates an ID that is unique within the scope of|extension_id|. 221 // Creates an ID that is unique within the scope of|extension_id|.
216 std::string GenerateUniqueId(const std::string& extension_id); 222 std::string GenerateUniqueId(const std::string& extension_id);
(...skipping 21 matching lines...) Expand all
238 typedef std::map<ExtensionId, std::set<RuleIdentifier> > RuleIdentifiersMap; 244 typedef std::map<ExtensionId, std::set<RuleIdentifier> > RuleIdentifiersMap;
239 RuleIdentifiersMap used_rule_identifiers_; 245 RuleIdentifiersMap used_rule_identifiers_;
240 int last_generated_rule_identifier_id_; 246 int last_generated_rule_identifier_id_;
241 247
242 DISALLOW_COPY_AND_ASSIGN(RulesRegistry); 248 DISALLOW_COPY_AND_ASSIGN(RulesRegistry);
243 }; 249 };
244 250
245 } // namespace extensions 251 } // namespace extensions
246 252
247 #endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_H__ 253 #endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_H__
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698