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

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

Issue 52743002: Declarative rules should be removed on uninstalling, not unloading (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Further comments addressed Created 7 years 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 | Annotate | Revision Log
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 #include "chrome/browser/extensions/api/declarative/rules_registry.h" 5 #include "chrome/browser/extensions/api/declarative/rules_registry.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 std::string RulesRegistry::RemoveRules( 144 std::string RulesRegistry::RemoveRules(
145 const std::string& extension_id, 145 const std::string& extension_id,
146 const std::vector<std::string>& rule_identifiers) { 146 const std::vector<std::string>& rule_identifiers) {
147 DCHECK(content::BrowserThread::CurrentlyOn(owner_thread())); 147 DCHECK(content::BrowserThread::CurrentlyOn(owner_thread()));
148 148
149 std::string error = RemoveRulesImpl(extension_id, rule_identifiers); 149 std::string error = RemoveRulesImpl(extension_id, rule_identifiers);
150 150
151 if (!error.empty()) 151 if (!error.empty())
152 return error; 152 return error;
153 153
154 // Commit removal of rules from |rules_| on success. 154 for (std::vector<std::string>::const_iterator i = rule_identifiers.begin();
155 for (std::vector<std::string>::const_iterator i = 155 i != rule_identifiers.end();
156 rule_identifiers.begin(); i != rule_identifiers.end(); ++i) { 156 ++i) {
157 RulesDictionaryKey lookup_key(extension_id, *i); 157 RulesDictionaryKey lookup_key(extension_id, *i);
158 rules_.erase(lookup_key); 158 rules_.erase(lookup_key);
159 } 159 }
160 160
161 MaybeProcessChangedRules(extension_id); 161 MaybeProcessChangedRules(extension_id);
162 RemoveUsedRuleIdentifiers(extension_id, rule_identifiers); 162 RemoveUsedRuleIdentifiers(extension_id, rule_identifiers);
163 return kSuccess; 163 return kSuccess;
164 } 164 }
165 165
166 std::string RulesRegistry::RemoveAllRules(const std::string& extension_id) { 166 std::string RulesRegistry::RemoveAllRules(const std::string& extension_id) {
167 DCHECK(content::BrowserThread::CurrentlyOn(owner_thread())); 167 DCHECK(content::BrowserThread::CurrentlyOn(owner_thread()));
168 168
169 std::string error = RemoveAllRulesImpl(extension_id); 169 std::string error = RemoveAllRulesImpl(extension_id);
170 170
171 if (!error.empty()) 171 if (!error.empty())
172 return error; 172 return error;
173 173
174 // Commit removal of rules from |rules_| on success.
175 for (RulesDictionary::const_iterator i = rules_.begin(); 174 for (RulesDictionary::const_iterator i = rules_.begin();
176 i != rules_.end();) { 175 i != rules_.end();) {
177 const RulesDictionaryKey& key = i->first; 176 const RulesDictionaryKey& key = i->first;
178 ++i; 177 ++i;
179 if (key.first == extension_id) 178 if (key.first == extension_id)
180 rules_.erase(key); 179 rules_.erase(key);
181 } 180 }
182 181
183 MaybeProcessChangedRules(extension_id); 182 MaybeProcessChangedRules(extension_id);
184 RemoveAllUsedRuleIdentifiers(extension_id); 183 RemoveAllUsedRuleIdentifiers(extension_id);
(...skipping 21 matching lines...) Expand all
206 for (RulesDictionary::const_iterator i = rules_.begin(); 205 for (RulesDictionary::const_iterator i = rules_.begin();
207 i != rules_.end(); ++i) { 206 i != rules_.end(); ++i) {
208 const RulesDictionaryKey& key = i->first; 207 const RulesDictionaryKey& key = i->first;
209 if (key.first == extension_id) 208 if (key.first == extension_id)
210 out->push_back(i->second); 209 out->push_back(i->second);
211 } 210 }
212 } 211 }
213 212
214 void RulesRegistry::OnExtensionUnloaded(const std::string& extension_id) { 213 void RulesRegistry::OnExtensionUnloaded(const std::string& extension_id) {
215 DCHECK(content::BrowserThread::CurrentlyOn(owner_thread())); 214 DCHECK(content::BrowserThread::CurrentlyOn(owner_thread()));
215 std::string error = RemoveAllRulesImpl(extension_id);
216 if (!error.empty())
217 LOG(ERROR) << error;
218 }
219
220 void RulesRegistry::OnExtensionUninstalled(const std::string& extension_id) {
221 DCHECK(content::BrowserThread::CurrentlyOn(owner_thread()));
216 std::string error = RemoveAllRules(extension_id); 222 std::string error = RemoveAllRules(extension_id);
217 if (!error.empty()) 223 if (!error.empty())
218 LOG(ERROR) << error; 224 LOG(ERROR) << error;
219 used_rule_identifiers_.erase(extension_id); 225 }
226
227 void RulesRegistry::OnExtensionLoaded(const std::string& extension_id) {
228 DCHECK(content::BrowserThread::CurrentlyOn(owner_thread()));
229 std::vector<linked_ptr<Rule> > rules;
230 GetAllRules(extension_id, &rules);
231 std::string error = AddRulesImpl(extension_id, rules);
232 if (!error.empty())
233 LOG(ERROR) << error;
220 } 234 }
221 235
222 size_t RulesRegistry::GetNumberOfUsedRuleIdentifiersForTesting() const { 236 size_t RulesRegistry::GetNumberOfUsedRuleIdentifiersForTesting() const {
223 size_t entry_count = 0u; 237 size_t entry_count = 0u;
224 for (RuleIdentifiersMap::const_iterator extension = 238 for (RuleIdentifiersMap::const_iterator extension =
225 used_rule_identifiers_.begin(); 239 used_rule_identifiers_.begin();
226 extension != used_rule_identifiers_.end(); 240 extension != used_rule_identifiers_.end();
227 ++extension) { 241 ++extension) {
228 // Each extension is counted as 1 just for being there. Otherwise we miss 242 // Each extension is counted as 1 just for being there. Otherwise we miss
229 // keys with empty values. 243 // keys with empty values.
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 for (i = identifiers.begin(); i != identifiers.end(); ++i) 361 for (i = identifiers.begin(); i != identifiers.end(); ++i)
348 used_rule_identifiers_[extension_id].erase(*i); 362 used_rule_identifiers_[extension_id].erase(*i);
349 } 363 }
350 364
351 void RulesRegistry::RemoveAllUsedRuleIdentifiers( 365 void RulesRegistry::RemoveAllUsedRuleIdentifiers(
352 const std::string& extension_id) { 366 const std::string& extension_id) {
353 used_rule_identifiers_.erase(extension_id); 367 used_rule_identifiers_.erase(extension_id);
354 } 368 }
355 369
356 } // namespace extensions 370 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698