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

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

Issue 11572061: Create DeclarativeConditionSet, DeclarativeActionSet, and DeclarativeRule templates (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix kalman's nit Created 7 years, 11 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/json/json_reader.h"
9 #include "base/memory/linked_ptr.h" 10 #include "base/memory/linked_ptr.h"
10 #include "base/message_loop.h" 11 #include "base/message_loop.h"
11 #include "base/stl_util.h" 12 #include "base/stl_util.h"
12 #include "base/test/values_test_util.h" 13 #include "base/test/values_test_util.h"
13 #include "base/values.h" 14 #include "base/values.h"
15 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_consta nts.h"
16 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
14 #include "chrome/common/extensions/matcher/url_matcher_constants.h" 17 #include "chrome/common/extensions/matcher/url_matcher_constants.h"
15 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_consta nts.h"
16 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h "
17 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
18 #include "content/public/test/test_browser_thread.h" 18 #include "content/public/test/test_browser_thread.h"
19 #include "net/url_request/url_request_test_util.h" 19 #include "net/url_request/url_request_test_util.h"
20 #include "testing/gmock/include/gmock/gmock.h"
20 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
21 22
22 namespace { 23 namespace {
23 const char kExtensionId[] = "ext1"; 24 const char kExtensionId[] = "ext1";
24 const char kExtensionId2[] = "ext2"; 25 const char kExtensionId2[] = "ext2";
25 const char kRuleId1[] = "rule1"; 26 const char kRuleId1[] = "rule1";
26 const char kRuleId2[] = "rule2"; 27 const char kRuleId2[] = "rule2";
27 const char kRuleId3[] = "rule3"; 28 const char kRuleId3[] = "rule3";
28 const char kRuleId4[] = "rule4"; 29 const char kRuleId4[] = "rule4";
29 } // namespace 30 } // namespace
30 31
31 namespace extensions { 32 namespace extensions {
32 33
34 using testing::HasSubstr;
35
33 namespace helpers = extension_web_request_api_helpers; 36 namespace helpers = extension_web_request_api_helpers;
34 namespace keys = declarative_webrequest_constants; 37 namespace keys = declarative_webrequest_constants;
35 namespace keys2 = url_matcher_constants; 38 namespace keys2 = url_matcher_constants;
36 39
37 class TestWebRequestRulesRegistry : public WebRequestRulesRegistry { 40 class TestWebRequestRulesRegistry : public WebRequestRulesRegistry {
38 public: 41 public:
39 TestWebRequestRulesRegistry() 42 TestWebRequestRulesRegistry()
40 : WebRequestRulesRegistry(NULL, NULL), 43 : WebRequestRulesRegistry(NULL, NULL),
41 num_clear_cache_calls_(0) {} 44 num_clear_cache_calls_(0) {}
42 45
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 error = registry->AddRules(kExtensionId, rules); 313 error = registry->AddRules(kExtensionId, rules);
311 EXPECT_EQ("", error); 314 EXPECT_EQ("", error);
312 EXPECT_EQ(1, registry->num_clear_cache_calls()); 315 EXPECT_EQ(1, registry->num_clear_cache_calls());
313 316
314 std::set<const WebRequestRule*> matches; 317 std::set<const WebRequestRule*> matches;
315 318
316 GURL http_url("http://www.example.com"); 319 GURL http_url("http://www.example.com");
317 net::TestURLRequestContext context; 320 net::TestURLRequestContext context;
318 net::TestURLRequest http_request(http_url, NULL, &context); 321 net::TestURLRequest http_request(http_url, NULL, &context);
319 matches = registry->GetMatches( 322 matches = registry->GetMatches(
320 WebRequestRule::RequestData(&http_request, ON_BEFORE_REQUEST)); 323 DeclarativeWebRequestData(&http_request, ON_BEFORE_REQUEST));
321 EXPECT_EQ(2u, matches.size()); 324 EXPECT_EQ(2u, matches.size());
322 325
323 std::set<WebRequestRule::GlobalRuleId> matches_ids; 326 std::set<WebRequestRule::GlobalRuleId> matches_ids;
324 for (std::set<const WebRequestRule*>::const_iterator it = matches.begin(); 327 for (std::set<const WebRequestRule*>::const_iterator it = matches.begin();
325 it != matches.end(); ++it) 328 it != matches.end(); ++it)
326 matches_ids.insert((*it)->id()); 329 matches_ids.insert((*it)->id());
327 EXPECT_TRUE(ContainsKey(matches_ids, std::make_pair(kExtensionId, kRuleId1))); 330 EXPECT_TRUE(ContainsKey(matches_ids, std::make_pair(kExtensionId, kRuleId1)));
328 EXPECT_TRUE(ContainsKey(matches_ids, std::make_pair(kExtensionId, kRuleId2))); 331 EXPECT_TRUE(ContainsKey(matches_ids, std::make_pair(kExtensionId, kRuleId2)));
329 332
330 GURL foobar_url("http://www.foobar.com"); 333 GURL foobar_url("http://www.foobar.com");
331 net::TestURLRequest foobar_request(foobar_url, NULL, &context); 334 net::TestURLRequest foobar_request(foobar_url, NULL, &context);
332 matches = registry->GetMatches( 335 matches = registry->GetMatches(
333 WebRequestRule::RequestData(&foobar_request, ON_BEFORE_REQUEST)); 336 DeclarativeWebRequestData(&foobar_request, ON_BEFORE_REQUEST));
334 EXPECT_EQ(1u, matches.size()); 337 EXPECT_EQ(1u, matches.size());
335 WebRequestRule::GlobalRuleId expected_pair = 338 WebRequestRule::GlobalRuleId expected_pair =
336 std::make_pair(kExtensionId, kRuleId2); 339 std::make_pair(kExtensionId, kRuleId2);
337 EXPECT_EQ(expected_pair, (*matches.begin())->id()); 340 EXPECT_EQ(expected_pair, (*matches.begin())->id());
338 } 341 }
339 342
340 TEST_F(WebRequestRulesRegistryTest, RemoveRulesImpl) { 343 TEST_F(WebRequestRulesRegistryTest, RemoveRulesImpl) {
341 scoped_refptr<TestWebRequestRulesRegistry> registry( 344 scoped_refptr<TestWebRequestRulesRegistry> registry(
342 new TestWebRequestRulesRegistry()); 345 new TestWebRequestRulesRegistry());
343 std::string error; 346 std::string error;
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 rules_to_add_2[0] = CreateRedirectRule("http://www.bar.com"); 454 rules_to_add_2[0] = CreateRedirectRule("http://www.bar.com");
452 error = registry->AddRules(kExtensionId2, rules_to_add_2); 455 error = registry->AddRules(kExtensionId2, rules_to_add_2);
453 EXPECT_EQ("", error); 456 EXPECT_EQ("", error);
454 457
455 GURL url("http://www.google.com"); 458 GURL url("http://www.google.com");
456 net::TestURLRequestContext context; 459 net::TestURLRequestContext context;
457 net::TestURLRequest request(url, NULL, &context); 460 net::TestURLRequest request(url, NULL, &context);
458 std::list<LinkedPtrEventResponseDelta> deltas = 461 std::list<LinkedPtrEventResponseDelta> deltas =
459 registry->CreateDeltas( 462 registry->CreateDeltas(
460 NULL, 463 NULL,
461 WebRequestRule::RequestData(&request, ON_BEFORE_REQUEST), 464 DeclarativeWebRequestData(&request, ON_BEFORE_REQUEST),
462 false); 465 false);
463 466
464 // The second extension is installed later and will win for this reason 467 // The second extension is installed later and will win for this reason
465 // in conflict resolution. 468 // in conflict resolution.
466 ASSERT_EQ(2u, deltas.size()); 469 ASSERT_EQ(2u, deltas.size());
467 deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder); 470 deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder);
468 471
469 std::list<LinkedPtrEventResponseDelta>::iterator i = deltas.begin(); 472 std::list<LinkedPtrEventResponseDelta>::iterator i = deltas.begin();
470 LinkedPtrEventResponseDelta winner = *i++; 473 LinkedPtrEventResponseDelta winner = *i++;
471 LinkedPtrEventResponseDelta loser = *i; 474 LinkedPtrEventResponseDelta loser = *i;
(...skipping 29 matching lines...) Expand all
501 rules_to_add_3[0] = CreateIgnoreRule(); 504 rules_to_add_3[0] = CreateIgnoreRule();
502 error = registry->AddRules(kExtensionId, rules_to_add_3); 505 error = registry->AddRules(kExtensionId, rules_to_add_3);
503 EXPECT_EQ("", error); 506 EXPECT_EQ("", error);
504 507
505 GURL url("http://www.google.com/index.html"); 508 GURL url("http://www.google.com/index.html");
506 net::TestURLRequestContext context; 509 net::TestURLRequestContext context;
507 net::TestURLRequest request(url, NULL, &context); 510 net::TestURLRequest request(url, NULL, &context);
508 std::list<LinkedPtrEventResponseDelta> deltas = 511 std::list<LinkedPtrEventResponseDelta> deltas =
509 registry->CreateDeltas( 512 registry->CreateDeltas(
510 NULL, 513 NULL,
511 WebRequestRule::RequestData(&request, ON_BEFORE_REQUEST), 514 DeclarativeWebRequestData(&request, ON_BEFORE_REQUEST),
512 false); 515 false);
513 516
514 // The redirect by the first extension is ignored due to the ignore rule. 517 // The redirect by the first extension is ignored due to the ignore rule.
515 ASSERT_EQ(1u, deltas.size()); 518 ASSERT_EQ(1u, deltas.size());
516 LinkedPtrEventResponseDelta effective_rule = *(deltas.begin()); 519 LinkedPtrEventResponseDelta effective_rule = *(deltas.begin());
517 520
518 EXPECT_EQ(kExtensionId2, effective_rule->extension_id); 521 EXPECT_EQ(kExtensionId2, effective_rule->extension_id);
519 EXPECT_EQ(base::Time() + base::TimeDelta::FromDays(2), 522 EXPECT_EQ(base::Time() + base::TimeDelta::FromDays(2),
520 effective_rule->extension_install_time); 523 effective_rule->extension_install_time);
521 EXPECT_EQ(GURL("http://www.bar.com"), effective_rule->new_url); 524 EXPECT_EQ(GURL("http://www.bar.com"), effective_rule->new_url);
(...skipping 21 matching lines...) Expand all
543 error = registry->AddRules(kExtensionId, rules); 546 error = registry->AddRules(kExtensionId, rules);
544 EXPECT_EQ("", error); 547 EXPECT_EQ("", error);
545 EXPECT_EQ(1, registry->num_clear_cache_calls()); 548 EXPECT_EQ(1, registry->num_clear_cache_calls());
546 549
547 std::set<const WebRequestRule*> matches; 550 std::set<const WebRequestRule*> matches;
548 551
549 GURL http_url("http://www.example.com"); 552 GURL http_url("http://www.example.com");
550 net::TestURLRequestContext context; 553 net::TestURLRequestContext context;
551 net::TestURLRequest http_request(http_url, NULL, &context); 554 net::TestURLRequest http_request(http_url, NULL, &context);
552 matches = registry->GetMatches( 555 matches = registry->GetMatches(
553 WebRequestRule::RequestData(&http_request, ON_BEFORE_REQUEST)); 556 DeclarativeWebRequestData(&http_request, ON_BEFORE_REQUEST));
554 EXPECT_EQ(1u, matches.size()); 557 EXPECT_EQ(1u, matches.size());
555 WebRequestRule::GlobalRuleId expected_pair = std::make_pair(kExtensionId, 558 WebRequestRule::GlobalRuleId expected_pair = std::make_pair(kExtensionId,
556 kRuleId3); 559 kRuleId3);
557 EXPECT_EQ(expected_pair, (*matches.begin())->id()); 560 EXPECT_EQ(expected_pair, (*matches.begin())->id());
558 } 561 }
559 562
563 TEST_F(WebRequestRulesRegistryTest, CheckConsistency) {
564 // The contentType condition can only be evaluated during ON_HEADERS_RECEIVED
565 // but the redirect action can only be executed during ON_BEFORE_REQUEST.
566 // Therefore, this is an inconsistent rule that needs to be flagged.
567 const char kRule[] =
568 "{ \n"
569 " \"id\": \"rule1\", \n"
570 " \"conditions\": [ \n"
571 " { \n"
572 " \"instanceType\": \"declarativeWebRequest.RequestMatcher\", \n"
573 " \"url\": {\"hostSuffix\": \"foo.com\"}, \n"
574 " \"contentType\": [\"image/jpeg\"] \n"
575 " } \n"
576 " ], \n"
577 " \"actions\": [ \n"
578 " { \n"
579 " \"instanceType\": \"declarativeWebRequest.RedirectRequest\",\n"
580 " \"redirectUrl\": \"http://bar.com\" \n"
581 " } \n"
582 " ], \n"
583 " \"priority\": 200 \n"
584 "} ";
585
586 scoped_ptr<Value> value(base::JSONReader::Read(kRule));
587 ASSERT_TRUE(value.get());
588
589 std::vector<linked_ptr<RulesRegistry::Rule> > rules;
590 rules.push_back(make_linked_ptr(new RulesRegistry::Rule));
591 ASSERT_TRUE(RulesRegistry::Rule::Populate(*value, rules.back().get()));
592
593 scoped_refptr<WebRequestRulesRegistry> registry(
594 new TestWebRequestRulesRegistry());
595
596 URLMatcher matcher;
597 std::string error = registry->AddRulesImpl(kExtensionId, rules);
598 EXPECT_THAT(error, HasSubstr("no time in the request life-cycle"));
599 EXPECT_TRUE(registry->IsEmpty());
600 }
601
602
560 } // namespace extensions 603 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698