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

Unified Diff: chrome/browser/extensions/api/declarative/declarative_rule_unittest.cc

Issue 11414230: Declarative Web Request: firstPartyForCookiesUrl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More checks and one more unit test 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/declarative/declarative_rule_unittest.cc
diff --git a/chrome/browser/extensions/api/declarative/declarative_rule_unittest.cc b/chrome/browser/extensions/api/declarative/declarative_rule_unittest.cc
index 5cadb74588932395790706defd11a7cd6258a4d3..db79f10cc860578dd35b2dc13db9590631807d5d 100644
--- a/chrome/browser/extensions/api/declarative/declarative_rule_unittest.cc
+++ b/chrome/browser/extensions/api/declarative/declarative_rule_unittest.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/extensions/api/declarative/declarative_rule.h"
+#include "base/basictypes.h"
#include "base/message_loop.h"
#include "base/test/values_test_util.h"
#include "base/values.h"
@@ -24,23 +25,90 @@ linked_ptr<T> ScopedToLinkedPtr(scoped_ptr<T> ptr) {
} // namespace
+struct MultipleFactoriesCondition {
vabr (Chromium) 2013/01/22 08:34:53 I don't think that the layout of this struct confo
+ typedef int MatchData;
+
+ static const char* kKey;
+
+ int number_of_factories_to_consider;
+
+ int GetURLMatcherConditionSets(
+ URLMatcherConditionSet::Vector* /*condition_sets*/,
+ int index) const {
+ if (0 <= index && index < number_of_factories_to_consider)
+ return index + 1;
+ return -1;
+ }
+
+ static scoped_ptr<MultipleFactoriesCondition> Create(
+ const std::vector<URLMatcherConditionFactory*>& /*factories*/,
+ const base::Value& condition,
+ std::string* error) {
+ const base::DictionaryValue* dict = NULL;
+ int value;
+ if (!condition.GetAsDictionary(&dict) || !dict->HasKey(kKey) ||
+ !dict->GetInteger(kKey, &value)) {
+ *error = "Invalid condition description.";
+ return scoped_ptr<MultipleFactoriesCondition>();
+ }
+
+ scoped_ptr<MultipleFactoriesCondition> result(
+ new MultipleFactoriesCondition());
+ result->number_of_factories_to_consider = value;
+ return result.Pass();
+ }
+};
+const char* MultipleFactoriesCondition::kKey = "numberOfFactoriesToConsider";
+typedef DeclarativeConditionSet<MultipleFactoriesCondition>
+ MultipleFactoriesConditionSet;
+
+namespace {
+
+void TestCorrectIndexHandling(int number_of_factories) {
+ MultipleFactoriesConditionSet::AnyVector conditions;
+ for (int i = 0; i <= number_of_factories; ++i) {
+ scoped_ptr<DictionaryValue> dict(new DictionaryValue);
+ dict->SetInteger(MultipleFactoriesCondition::kKey, i);
+ conditions.push_back(ScopedToLinkedPtr(dict.Pass()));
+ }
+ std::string error;
+ std::vector<URLMatcherConditionFactory*> null_factories(number_of_factories);
+ scoped_ptr<MultipleFactoriesConditionSet> result =
+ MultipleFactoriesConditionSet::Create(null_factories, conditions, &error);
+ EXPECT_TRUE(error.empty());
+ ASSERT_TRUE(result);
+
+ for (int i = 0; i < number_of_factories; ++i) {
+ EXPECT_EQ(i + 1, result->GetURLMatcherConditionSets(NULL, i));
+ }
+ EXPECT_EQ(-1, result->GetURLMatcherConditionSets(NULL, number_of_factories));
+}
+
+} // namespace
+
+TEST(DeclarativeConditionTest, GetURLMatcherConditionSets) {
+ static const int numbers_of_factories[] = { 0, 1, 2, 5, 20 };
+ for (size_t i = 0; i < arraysize(numbers_of_factories); ++i) {
+ TestCorrectIndexHandling(numbers_of_factories[i]);
+ }
+}
+
struct RecordingCondition {
typedef int MatchData;
- URLMatcherConditionFactory* factory;
+ std::vector<URLMatcherConditionFactory*> factories;
scoped_ptr<base::Value> value;
- void GetURLMatcherConditionSets(
- URLMatcherConditionSet::Vector* condition_sets) const {
+ int GetURLMatcherConditionSets(
+ URLMatcherConditionSet::Vector* condition_sets,
+ int index) const {
// No condition sets.
- }
-
- bool has_url_matcher_condition_set() const {
- return false;
+ return -1;
}
static scoped_ptr<RecordingCondition> Create(
- URLMatcherConditionFactory* url_matcher_condition_factory,
+ const std::vector<URLMatcherConditionFactory*>&
+ url_matcher_condition_factories,
const base::Value& condition,
std::string* error) {
const base::DictionaryValue* dict = NULL;
@@ -50,7 +118,7 @@ struct RecordingCondition {
}
scoped_ptr<RecordingCondition> result(new RecordingCondition());
- result->factory = url_matcher_condition_factory;
+ result->factories = url_matcher_condition_factories;
result->value.reset(condition.DeepCopy());
return result.Pass();
}
@@ -64,9 +132,10 @@ TEST(DeclarativeConditionTest, ErrorConditionSet) {
conditions.push_back(ScopedToLinkedPtr(ParseJson("{\"bad_key\": 2}")));
std::string error;
+ std::vector<URLMatcherConditionFactory*> factories;
+ factories.push_back(matcher.condition_factory());
scoped_ptr<RecordingConditionSet> result =
- RecordingConditionSet::Create(matcher.condition_factory(),
- conditions, &error);
+ RecordingConditionSet::Create(factories, conditions, &error);
EXPECT_EQ("Found error key", error);
ASSERT_FALSE(result);
}
@@ -79,14 +148,16 @@ TEST(DeclarativeConditionTest, CreateConditionSet) {
// Test insertion
std::string error;
+ std::vector<URLMatcherConditionFactory*> factories;
+ factories.push_back(matcher.condition_factory());
scoped_ptr<RecordingConditionSet> result =
- RecordingConditionSet::Create(matcher.condition_factory(),
- conditions, &error);
+ RecordingConditionSet::Create(factories, conditions, &error);
EXPECT_EQ("", error);
ASSERT_TRUE(result);
EXPECT_EQ(2u, result->conditions().size());
- EXPECT_EQ(matcher.condition_factory(), result->conditions()[0]->factory);
+ EXPECT_EQ(1u, result->conditions()[0]->factories.size());
+ EXPECT_EQ(matcher.condition_factory(), result->conditions()[0]->factories[0]);
EXPECT_TRUE(ParseJson("{\"key\": 1}")->Equals(
result->conditions()[0]->value.get()));
}
@@ -102,18 +173,16 @@ struct FulfillableCondition {
return condition_set_id;
}
- bool has_url_matcher_condition_set() const {
- return true;
- }
-
scoped_refptr<URLMatcherConditionSet> url_matcher_condition_set() const {
return condition_set;
}
- void GetURLMatcherConditionSets(
- URLMatcherConditionSet::Vector* condition_sets) const {
- if (condition_set)
+ int GetURLMatcherConditionSets(
+ URLMatcherConditionSet::Vector* condition_sets,
+ int index) const {
+ if (index == 0 && condition_set)
condition_sets->push_back(condition_set);
+ return -1;
}
bool IsFulfilled(const std::set<URLMatcherConditionSet::ID>& url_matches,
@@ -124,7 +193,8 @@ struct FulfillableCondition {
}
static scoped_ptr<FulfillableCondition> Create(
- URLMatcherConditionFactory* url_matcher_condition_factory,
+ const std::vector<URLMatcherConditionFactory*>&
+ url_matcher_condition_factories,
const base::Value& condition,
std::string* error) {
scoped_ptr<FulfillableCondition> result(new FulfillableCondition());
@@ -160,8 +230,9 @@ TEST(DeclarativeConditionTest, FulfillConditionSet) {
// Test insertion
std::string error;
+ std::vector<URLMatcherConditionFactory*> factories;
scoped_ptr<FulfillableConditionSet> result =
- FulfillableConditionSet::Create(NULL, conditions, &error);
+ FulfillableConditionSet::Create(factories, conditions, &error);
ASSERT_EQ("", error);
ASSERT_TRUE(result);
EXPECT_EQ(4u, result->conditions().size());
@@ -189,7 +260,7 @@ TEST(DeclarativeConditionTest, FulfillConditionSet) {
// Check the condition sets:
URLMatcherConditionSet::Vector condition_sets;
- result->GetURLMatcherConditionSets(&condition_sets);
+ result->GetURLMatcherConditionSets(&condition_sets, 0);
ASSERT_EQ(3U, condition_sets.size());
EXPECT_EQ(1, condition_sets[0]->id());
EXPECT_EQ(2, condition_sets[1]->id());
@@ -305,8 +376,10 @@ TEST(DeclarativeRuleTest, Create) {
base::Time install_time = base::Time::Now();
URLMatcher matcher;
+ std::vector<URLMatcherConditionFactory*> factories;
+ factories.push_back(matcher.condition_factory());
std::string error;
- scoped_ptr<Rule> rule(Rule::Create(matcher.condition_factory(), kExtensionId,
+ scoped_ptr<Rule> rule(Rule::Create(factories, kExtensionId,
install_time, json_rule, NULL, &error));
EXPECT_EQ("", error);
ASSERT_TRUE(rule.get());
@@ -350,6 +423,8 @@ TEST(DeclarativeRuleTest, CheckConsistency) {
std::string error;
linked_ptr<Rule::JsonRule> json_rule(new Rule::JsonRule);
const char kExtensionId[] = "ext1";
+ std::vector<URLMatcherConditionFactory*> factories;
+ factories.push_back(matcher.condition_factory());
ASSERT_TRUE(Rule::JsonRule::Populate(
*ParseJson("{ \n"
@@ -366,9 +441,8 @@ TEST(DeclarativeRuleTest, CheckConsistency) {
" \"priority\": 200 \n"
"}"),
json_rule.get()));
- scoped_ptr<Rule> rule(
- Rule::Create(matcher.condition_factory(), kExtensionId, base::Time(),
- json_rule, &AtLeastOneCondition, &error));
+ scoped_ptr<Rule> rule(Rule::Create(factories, kExtensionId, base::Time(),
+ json_rule, &AtLeastOneCondition, &error));
EXPECT_TRUE(rule);
EXPECT_EQ("", error);
@@ -385,7 +459,7 @@ TEST(DeclarativeRuleTest, CheckConsistency) {
" \"priority\": 200 \n"
"}"),
json_rule.get()));
- rule = Rule::Create(matcher.condition_factory(), kExtensionId, base::Time(),
+ rule = Rule::Create(factories, kExtensionId, base::Time(),
json_rule, &AtLeastOneCondition, &error);
EXPECT_FALSE(rule);
EXPECT_EQ("No conditions", error);

Powered by Google App Engine
This is Rietveld 408576698