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

Side by Side Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_registry_unittest.cc

Issue 10905040: Clear in-memory caches of renderers when rules change (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Previous version was incomplete Created 8 years, 3 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 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_webrequest/webrequest_rules_ registry.h" 5 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rules_ registry.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/memory/linked_ptr.h" 9 #include "base/memory/linked_ptr.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
(...skipping 16 matching lines...) Expand all
27 } // namespace 27 } // namespace
28 28
29 namespace extensions { 29 namespace extensions {
30 30
31 namespace helpers = extension_web_request_api_helpers; 31 namespace helpers = extension_web_request_api_helpers;
32 namespace keys = declarative_webrequest_constants; 32 namespace keys = declarative_webrequest_constants;
33 namespace keys2 = url_matcher_constants; 33 namespace keys2 = url_matcher_constants;
34 34
35 class TestWebRequestRulesRegistry : public WebRequestRulesRegistry { 35 class TestWebRequestRulesRegistry : public WebRequestRulesRegistry {
36 public: 36 public:
37 TestWebRequestRulesRegistry() : WebRequestRulesRegistry(NULL, NULL) {} 37 TestWebRequestRulesRegistry()
38 : WebRequestRulesRegistry(NULL, NULL),
39 num_clear_cache_calls_(0) {}
40
41 // Returns how often the in-memory caches of the renderers were instructed
42 // to be cleared.
43 int num_clear_cache_calls() const { return num_clear_cache_calls_; }
38 44
39 protected: 45 protected:
40 virtual ~TestWebRequestRulesRegistry() {} 46 virtual ~TestWebRequestRulesRegistry() {}
41 47
42 virtual base::Time GetExtensionInstallationTime( 48 virtual base::Time GetExtensionInstallationTime(
43 const std::string& extension_id) const { 49 const std::string& extension_id) const {
44 if (extension_id == kExtensionId) 50 if (extension_id == kExtensionId)
45 return base::Time() + base::TimeDelta::FromDays(1); 51 return base::Time() + base::TimeDelta::FromDays(1);
46 else if (extension_id == kExtensionId2) 52 else if (extension_id == kExtensionId2)
47 return base::Time() + base::TimeDelta::FromDays(2); 53 return base::Time() + base::TimeDelta::FromDays(2);
48 else 54 else
49 return base::Time(); 55 return base::Time();
50 } 56 }
57
58 virtual void ClearCacheOnNavigation() {
59 ++num_clear_cache_calls_;
60 }
61
62 private:
63 int num_clear_cache_calls_;
51 }; 64 };
52 65
53 class WebRequestRulesRegistryTest : public testing::Test { 66 class WebRequestRulesRegistryTest : public testing::Test {
54 public: 67 public:
55 WebRequestRulesRegistryTest() 68 WebRequestRulesRegistryTest()
56 : message_loop(MessageLoop::TYPE_IO), 69 : message_loop(MessageLoop::TYPE_IO),
57 ui(content::BrowserThread::UI, &message_loop), 70 ui(content::BrowserThread::UI, &message_loop),
58 io(content::BrowserThread::IO, &message_loop) {} 71 io(content::BrowserThread::IO, &message_loop) {}
59 72
60 virtual ~WebRequestRulesRegistryTest() {} 73 virtual ~WebRequestRulesRegistryTest() {}
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 return rule; 205 return rule;
193 } 206 }
194 207
195 protected: 208 protected:
196 MessageLoop message_loop; 209 MessageLoop message_loop;
197 content::TestBrowserThread ui; 210 content::TestBrowserThread ui;
198 content::TestBrowserThread io; 211 content::TestBrowserThread io;
199 }; 212 };
200 213
201 TEST_F(WebRequestRulesRegistryTest, AddRulesImpl) { 214 TEST_F(WebRequestRulesRegistryTest, AddRulesImpl) {
202 scoped_refptr<WebRequestRulesRegistry> registry( 215 scoped_refptr<TestWebRequestRulesRegistry> registry(
203 new TestWebRequestRulesRegistry()); 216 new TestWebRequestRulesRegistry());
204 std::string error; 217 std::string error;
205 218
206 std::vector<linked_ptr<RulesRegistry::Rule> > rules; 219 std::vector<linked_ptr<RulesRegistry::Rule> > rules;
207 rules.push_back(CreateRule1()); 220 rules.push_back(CreateRule1());
208 rules.push_back(CreateRule2()); 221 rules.push_back(CreateRule2());
209 222
210 error = registry->AddRules(kExtensionId, rules); 223 error = registry->AddRules(kExtensionId, rules);
211 EXPECT_EQ("", error); 224 EXPECT_EQ("", error);
225 EXPECT_EQ(1, registry->num_clear_cache_calls());
212 226
213 std::set<WebRequestRule::GlobalRuleId> matches; 227 std::set<WebRequestRule::GlobalRuleId> matches;
214 228
215 GURL http_url("http://www.example.com"); 229 GURL http_url("http://www.example.com");
216 TestURLRequestContext context; 230 TestURLRequestContext context;
217 TestURLRequest http_request(http_url, NULL, &context); 231 TestURLRequest http_request(http_url, NULL, &context);
218 matches = registry->GetMatches( 232 matches = registry->GetMatches(
219 WebRequestRule::RequestData(&http_request, ON_BEFORE_REQUEST)); 233 WebRequestRule::RequestData(&http_request, ON_BEFORE_REQUEST));
220 EXPECT_EQ(2u, matches.size()); 234 EXPECT_EQ(2u, matches.size());
221 EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId1)) != 235 EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId1)) !=
222 matches.end()); 236 matches.end());
223 EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId2)) != 237 EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId2)) !=
224 matches.end()); 238 matches.end());
225 239
226 GURL foobar_url("http://www.foobar.com"); 240 GURL foobar_url("http://www.foobar.com");
227 TestURLRequest foobar_request(foobar_url, NULL, &context); 241 TestURLRequest foobar_request(foobar_url, NULL, &context);
228 matches = registry->GetMatches( 242 matches = registry->GetMatches(
229 WebRequestRule::RequestData(&foobar_request, ON_BEFORE_REQUEST)); 243 WebRequestRule::RequestData(&foobar_request, ON_BEFORE_REQUEST));
230 EXPECT_EQ(1u, matches.size()); 244 EXPECT_EQ(1u, matches.size());
231 EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId2)) != 245 EXPECT_TRUE(matches.find(std::make_pair(kExtensionId, kRuleId2)) !=
232 matches.end()); 246 matches.end());
233 } 247 }
234 248
235 TEST_F(WebRequestRulesRegistryTest, RemoveRulesImpl) { 249 TEST_F(WebRequestRulesRegistryTest, RemoveRulesImpl) {
236 scoped_refptr<WebRequestRulesRegistry> registry( 250 scoped_refptr<TestWebRequestRulesRegistry> registry(
237 new TestWebRequestRulesRegistry()); 251 new TestWebRequestRulesRegistry());
238 std::string error; 252 std::string error;
239 253
240 // Setup RulesRegistry to contain two rules. 254 // Setup RulesRegistry to contain two rules.
241 std::vector<linked_ptr<RulesRegistry::Rule> > rules_to_add; 255 std::vector<linked_ptr<RulesRegistry::Rule> > rules_to_add;
242 rules_to_add.push_back(CreateRule1()); 256 rules_to_add.push_back(CreateRule1());
243 rules_to_add.push_back(CreateRule2()); 257 rules_to_add.push_back(CreateRule2());
244 error = registry->AddRules(kExtensionId, rules_to_add); 258 error = registry->AddRules(kExtensionId, rules_to_add);
245 EXPECT_EQ("", error); 259 EXPECT_EQ("", error);
260 EXPECT_EQ(1, registry->num_clear_cache_calls());
246 261
247 // Verify initial state. 262 // Verify initial state.
248 std::vector<linked_ptr<RulesRegistry::Rule> > registered_rules; 263 std::vector<linked_ptr<RulesRegistry::Rule> > registered_rules;
249 registry->GetAllRules(kExtensionId, &registered_rules); 264 registry->GetAllRules(kExtensionId, &registered_rules);
250 EXPECT_EQ(2u, registered_rules.size()); 265 EXPECT_EQ(2u, registered_rules.size());
251 266
252 // Remove first rule. 267 // Remove first rule.
253 std::vector<std::string> rules_to_remove; 268 std::vector<std::string> rules_to_remove;
254 rules_to_remove.push_back(kRuleId1); 269 rules_to_remove.push_back(kRuleId1);
255 error = registry->RemoveRules(kExtensionId, rules_to_remove); 270 error = registry->RemoveRules(kExtensionId, rules_to_remove);
256 EXPECT_EQ("", error); 271 EXPECT_EQ("", error);
272 EXPECT_EQ(2, registry->num_clear_cache_calls());
257 273
258 // Verify that only one rule is left. 274 // Verify that only one rule is left.
259 registered_rules.clear(); 275 registered_rules.clear();
260 registry->GetAllRules(kExtensionId, &registered_rules); 276 registry->GetAllRules(kExtensionId, &registered_rules);
261 EXPECT_EQ(1u, registered_rules.size()); 277 EXPECT_EQ(1u, registered_rules.size());
262 278
263 // Now rules_to_remove contains both rules, i.e. one that does not exist in 279 // Now rules_to_remove contains both rules, i.e. one that does not exist in
264 // the rules registry anymore. Effectively we only remove the second rule. 280 // the rules registry anymore. Effectively we only remove the second rule.
265 rules_to_remove.push_back(kRuleId2); 281 rules_to_remove.push_back(kRuleId2);
266 error = registry->RemoveRules(kExtensionId, rules_to_remove); 282 error = registry->RemoveRules(kExtensionId, rules_to_remove);
267 EXPECT_EQ("", error); 283 EXPECT_EQ("", error);
284 EXPECT_EQ(3, registry->num_clear_cache_calls());
268 285
269 // Verify that everything is gone. 286 // Verify that everything is gone.
270 registered_rules.clear(); 287 registered_rules.clear();
271 registry->GetAllRules(kExtensionId, &registered_rules); 288 registry->GetAllRules(kExtensionId, &registered_rules);
272 EXPECT_EQ(0u, registered_rules.size()); 289 EXPECT_EQ(0u, registered_rules.size());
273 290
274 EXPECT_TRUE(registry->IsEmpty()); 291 EXPECT_TRUE(registry->IsEmpty());
275 } 292 }
276 293
277 TEST_F(WebRequestRulesRegistryTest, RemoveAllRulesImpl) { 294 TEST_F(WebRequestRulesRegistryTest, RemoveAllRulesImpl) {
278 scoped_refptr<WebRequestRulesRegistry> registry( 295 scoped_refptr<TestWebRequestRulesRegistry> registry(
279 new TestWebRequestRulesRegistry()); 296 new TestWebRequestRulesRegistry());
280 std::string error; 297 std::string error;
281 298
282 // Setup RulesRegistry to contain two rules, one for each extension. 299 // Setup RulesRegistry to contain two rules, one for each extension.
283 std::vector<linked_ptr<RulesRegistry::Rule> > rules_to_add(1); 300 std::vector<linked_ptr<RulesRegistry::Rule> > rules_to_add(1);
284 rules_to_add[0] = CreateRule1(); 301 rules_to_add[0] = CreateRule1();
285 error = registry->AddRules(kExtensionId, rules_to_add); 302 error = registry->AddRules(kExtensionId, rules_to_add);
286 EXPECT_EQ("", error); 303 EXPECT_EQ("", error);
304 EXPECT_EQ(1, registry->num_clear_cache_calls());
287 305
288 rules_to_add[0] = CreateRule2(); 306 rules_to_add[0] = CreateRule2();
289 error = registry->AddRules(kExtensionId2, rules_to_add); 307 error = registry->AddRules(kExtensionId2, rules_to_add);
290 EXPECT_EQ("", error); 308 EXPECT_EQ("", error);
309 EXPECT_EQ(2, registry->num_clear_cache_calls());
291 310
292 // Verify initial state. 311 // Verify initial state.
293 std::vector<linked_ptr<RulesRegistry::Rule> > registered_rules; 312 std::vector<linked_ptr<RulesRegistry::Rule> > registered_rules;
294 registry->GetAllRules(kExtensionId, &registered_rules); 313 registry->GetAllRules(kExtensionId, &registered_rules);
295 EXPECT_EQ(1u, registered_rules.size()); 314 EXPECT_EQ(1u, registered_rules.size());
296 registered_rules.clear(); 315 registered_rules.clear();
297 registry->GetAllRules(kExtensionId2, &registered_rules); 316 registry->GetAllRules(kExtensionId2, &registered_rules);
298 EXPECT_EQ(1u, registered_rules.size()); 317 EXPECT_EQ(1u, registered_rules.size());
299 318
300 // Remove rule of first extension. 319 // Remove rule of first extension.
301 error = registry->RemoveAllRules(kExtensionId); 320 error = registry->RemoveAllRules(kExtensionId);
302 EXPECT_EQ("", error); 321 EXPECT_EQ("", error);
322 EXPECT_EQ(3, registry->num_clear_cache_calls());
303 323
304 // Verify that only the first rule is deleted. 324 // Verify that only the first rule is deleted.
305 registered_rules.clear(); 325 registered_rules.clear();
306 registry->GetAllRules(kExtensionId, &registered_rules); 326 registry->GetAllRules(kExtensionId, &registered_rules);
307 EXPECT_EQ(0u, registered_rules.size()); 327 EXPECT_EQ(0u, registered_rules.size());
308 registered_rules.clear(); 328 registered_rules.clear();
309 registry->GetAllRules(kExtensionId2, &registered_rules); 329 registry->GetAllRules(kExtensionId2, &registered_rules);
310 EXPECT_EQ(1u, registered_rules.size()); 330 EXPECT_EQ(1u, registered_rules.size());
311 331
312 // Test removing rules if none exist. 332 // Test removing rules if none exist.
313 error = registry->RemoveAllRules(kExtensionId); 333 error = registry->RemoveAllRules(kExtensionId);
314 EXPECT_EQ("", error); 334 EXPECT_EQ("", error);
335 EXPECT_EQ(4, registry->num_clear_cache_calls());
315 336
316 // Remove rule from second extension. 337 // Remove rule from second extension.
317 error = registry->RemoveAllRules(kExtensionId2); 338 error = registry->RemoveAllRules(kExtensionId2);
318 EXPECT_EQ("", error); 339 EXPECT_EQ("", error);
340 EXPECT_EQ(5, registry->num_clear_cache_calls());
319 341
320 EXPECT_TRUE(registry->IsEmpty()); 342 EXPECT_TRUE(registry->IsEmpty());
321 } 343 }
322 344
323 // Test precedences between extensions. 345 // Test precedences between extensions.
324 TEST_F(WebRequestRulesRegistryTest, Precedences) { 346 TEST_F(WebRequestRulesRegistryTest, Precedences) {
325 scoped_refptr<WebRequestRulesRegistry> registry( 347 scoped_refptr<WebRequestRulesRegistry> registry(
326 new TestWebRequestRulesRegistry()); 348 new TestWebRequestRulesRegistry());
327 std::string error; 349 std::string error;
328 350
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 // The redirect by the first extension is ignored due to the ignore rule. 420 // The redirect by the first extension is ignored due to the ignore rule.
399 ASSERT_EQ(1u, deltas.size()); 421 ASSERT_EQ(1u, deltas.size());
400 LinkedPtrEventResponseDelta effective_rule = *(deltas.begin()); 422 LinkedPtrEventResponseDelta effective_rule = *(deltas.begin());
401 423
402 EXPECT_EQ(kExtensionId2, effective_rule->extension_id); 424 EXPECT_EQ(kExtensionId2, effective_rule->extension_id);
403 EXPECT_EQ(base::Time() + base::TimeDelta::FromDays(2), 425 EXPECT_EQ(base::Time() + base::TimeDelta::FromDays(2),
404 effective_rule->extension_install_time); 426 effective_rule->extension_install_time);
405 EXPECT_EQ(GURL("http://www.bar.com"), effective_rule->new_url); 427 EXPECT_EQ(GURL("http://www.bar.com"), effective_rule->new_url);
406 } 428 }
407 } // namespace extensions 429 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698