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

Unified Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_condition.cc

Issue 11414230: Declarative Web Request: firstPartyForCookiesUrl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased on the new templates 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_webrequest/webrequest_condition.cc
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition.cc
index 4a80a5afb04f589d76f65ea5f9aa4c8f7639a0e4..73ede6fe7925192eeff85c992680381ca58a7e4f 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition.cc
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition.cc
@@ -45,8 +45,10 @@ namespace keys = declarative_webrequest_constants;
WebRequestCondition::WebRequestCondition(
scoped_refptr<URLMatcherConditionSet> url_matcher_conditions,
+ scoped_refptr<URLMatcherConditionSet> first_party_url_matcher_conditions,
const WebRequestConditionAttributes& condition_attributes)
: url_matcher_conditions_(url_matcher_conditions),
+ first_party_url_matcher_conditions_(first_party_url_matcher_conditions),
condition_attributes_(condition_attributes),
applicable_request_stages_(~0) {
for (WebRequestConditionAttributes::const_iterator i =
@@ -65,25 +67,47 @@ bool WebRequestCondition::IsFulfilled(
return false;
}
- // Check a UrlFilter attribute if present.
- if (url_matcher_conditions_.get() &&
- !ContainsKey(url_matches, url_matcher_conditions_->id()))
+ // Check URL attributes if present.
+ if ((url_matcher_conditions_.get() &&
+ !ContainsKey(url_matches, url_matcher_conditions_->id())) ||
+ (first_party_url_matcher_conditions_.get() &&
+ !ContainsKey(url_matches, first_party_url_matcher_conditions_->id())))
return false;
// All condition attributes must be fulfilled for a fulfilled condition.
for (WebRequestConditionAttributes::const_iterator i =
- condition_attributes_.begin(); i != condition_attributes_.end(); ++i) {
+ condition_attributes_.begin();
+ i != condition_attributes_.end(); ++i) {
if (!(*i)->IsFulfilled(request_data))
return false;
}
return true;
}
+int WebRequestCondition::GetURLMatcherConditionSets(
+ URLMatcherConditionSet::Vector* condition_sets,
+ int index) const {
+ switch (index) {
+ case 0:
+ if (url_matcher_conditions_)
+ condition_sets->push_back(url_matcher_conditions_);
+ return 1;
+ case 1:
+ if (first_party_url_matcher_conditions_)
+ condition_sets->push_back(first_party_url_matcher_conditions_);
+ return -1;
+ default:
battre 2013/01/21 17:32:08 nit: I would add a NOTREACHED(); here.
vabr (Chromium) 2013/01/21 18:39:29 Done.
+ return -1;
+ }
+}
+
// static
scoped_ptr<WebRequestCondition> WebRequestCondition::Create(
- URLMatcherConditionFactory* url_matcher_condition_factory,
+ const std::vector<URLMatcherConditionFactory*>&
+ url_matcher_condition_factories,
const base::Value& condition,
std::string* error) {
+ CHECK_EQ(2u, url_matcher_condition_factories.size());
const base::DictionaryValue* condition_dict = NULL;
if (!condition.GetAsDictionary(&condition_dict)) {
*error = kExpectedDictionary;
@@ -103,22 +127,31 @@ scoped_ptr<WebRequestCondition> WebRequestCondition::Create(
WebRequestConditionAttributes attributes;
scoped_refptr<URLMatcherConditionSet> url_matcher_condition_set;
+ scoped_refptr<URLMatcherConditionSet> first_party_url_matcher_condition_set;
for (base::DictionaryValue::Iterator iter(*condition_dict);
iter.HasNext(); iter.Advance()) {
const std::string& condition_attribute_name = iter.key();
const Value& condition_attribute_value = iter.value();
+ const bool name_is_url = condition_attribute_name == keys::kUrlKey;
if (condition_attribute_name == keys::kInstanceTypeKey) {
// Skip this.
- } else if (condition_attribute_name == keys::kUrlKey) {
+ } else if (name_is_url ||
+ condition_attribute_name == keys::kFirstPartyForCookiesUrlKey) {
const base::DictionaryValue* dict = NULL;
if (!condition_attribute_value.GetAsDictionary(&dict)) {
*error = base::StringPrintf(kInvalidTypeOfParamter,
condition_attribute_name.c_str());
} else {
- url_matcher_condition_set =
- URLMatcherFactory::CreateFromURLFilterDictionary(
- url_matcher_condition_factory, dict, ++g_next_id, error);
+ if (!name_is_url) {
+ first_party_url_matcher_condition_set =
+ URLMatcherFactory::CreateFromURLFilterDictionary(
+ url_matcher_condition_factories[1], dict, ++g_next_id, error);
+ } else {
+ url_matcher_condition_set =
+ URLMatcherFactory::CreateFromURLFilterDictionary(
+ url_matcher_condition_factories[0], dict, ++g_next_id, error);
+ }
}
} else if (WebRequestConditionAttribute::IsKnownType(
condition_attribute_name)) {
@@ -138,7 +171,9 @@ scoped_ptr<WebRequestCondition> WebRequestCondition::Create(
}
scoped_ptr<WebRequestCondition> result(
- new WebRequestCondition(url_matcher_condition_set, attributes));
+ new WebRequestCondition(url_matcher_condition_set,
+ first_party_url_matcher_condition_set,
+ attributes));
if (!result->stages()) {
*error = kConditionCannotBeFulfilled;

Powered by Google App Engine
This is Rietveld 408576698