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

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: Sync with trunk 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..fce9d7099794ebc22f56f27d59ebb1c9f691c680 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition.cc
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition.cc
@@ -40,13 +40,33 @@ namespace extensions {
namespace keys = declarative_webrequest_constants;
//
+// DeclarativeWebRequestData
+//
+
+DeclarativeWebRequestData::DeclarativeWebRequestData(net::URLRequest* request,
+ RequestStage stage)
+ : request(request), stage(stage), original_response_headers(NULL) {}
+
+DeclarativeWebRequestData::DeclarativeWebRequestData(
+ net::URLRequest* request,
+ RequestStage stage,
+ const net::HttpResponseHeaders* original_response_headers)
+ : request(request),
+ stage(stage),
+ original_response_headers(original_response_headers) {}
+
+DeclarativeWebRequestData::~DeclarativeWebRequestData() {}
+
+//
// WebRequestCondition
//
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 =
@@ -58,27 +78,39 @@ WebRequestCondition::WebRequestCondition(
WebRequestCondition::~WebRequestCondition() {}
bool WebRequestCondition::IsFulfilled(
- const std::set<URLMatcherConditionSet::ID>& url_matches,
const DeclarativeWebRequestData& request_data) const {
if (!(request_data.stage & applicable_request_stages_)) {
// A condition that cannot be evaluated is considered as violated.
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(request_data.url_match_ids,
+ url_matcher_conditions_->id())) ||
Jeffrey Yasskin 2013/01/24 00:39:17 nit: I would generally split ||'ed conditions like
vabr (Chromium) 2013/01/24 18:24:08 Done. I agree, it's more readable, and since the b
+ (first_party_url_matcher_conditions_.get() &&
+ !ContainsKey(request_data.first_party_url_match_ids,
+ 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;
}
+void WebRequestCondition::GetURLMatcherConditionSets(
+ URLMatcherConditionSet::Vector* condition_sets) const {
+ if (url_matcher_conditions_)
+ condition_sets->push_back(url_matcher_conditions_);
+ if (first_party_url_matcher_conditions_)
+ condition_sets->push_back(first_party_url_matcher_conditions_);
+}
+
// static
scoped_ptr<WebRequestCondition> WebRequestCondition::Create(
URLMatcherConditionFactory* url_matcher_condition_factory,
@@ -103,22 +135,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) {
Jeffrey Yasskin 2013/01/24 00:39:17 To avoid double-negatives (the else block happens
vabr (Chromium) 2013/01/24 18:24:08 Done.
+ first_party_url_matcher_condition_set =
+ URLMatcherFactory::CreateFromURLFilterDictionary(
+ url_matcher_condition_factory, dict, ++g_next_id, error);
+ } else {
+ url_matcher_condition_set =
+ URLMatcherFactory::CreateFromURLFilterDictionary(
+ url_matcher_condition_factory, dict, ++g_next_id, error);
+ }
}
} else if (WebRequestConditionAttribute::IsKnownType(
condition_attribute_name)) {
@@ -138,7 +179,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