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

Unified Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_attribute.h

Issue 10874029: Adding condition attributes for response headers to Declarative WebRequest (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 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
« no previous file with comments | « no previous file | chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_attribute.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_attribute.h
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_attribute.h b/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_attribute.h
index f9aa4e058313d306bd499f82d71d7912451c96a3..8ee69d55cb9fcfb6f901c0f33b7b57f2fe52bd1f 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_attribute.h
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_attribute.h
@@ -11,6 +11,7 @@
#include "base/basictypes.h"
#include "base/memory/linked_ptr.h"
#include "base/memory/scoped_ptr.h"
+#include "base/memory/scoped_vector.h"
#include "chrome/browser/extensions/api/declarative_webrequest/request_stage.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h"
#include "chrome/common/extensions/api/events.h"
@@ -32,7 +33,8 @@ class WebRequestConditionAttribute {
public:
enum Type {
CONDITION_RESOURCE_TYPE,
- CONDITION_CONTENT_TYPE
+ CONDITION_CONTENT_TYPE,
+ CONDITION_REQUEST_HEADERS
};
WebRequestConditionAttribute();
@@ -53,7 +55,8 @@ class WebRequestConditionAttribute {
virtual int GetStages() const = 0;
// Returns whether the condition is fulfilled for this request.
- virtual bool IsFulfilled(const WebRequestRule::RequestData& request_data) = 0;
+ virtual bool IsFulfilled(
+ const WebRequestRule::RequestData& request_data) const = 0;
virtual Type GetType() const = 0;
@@ -88,8 +91,8 @@ class WebRequestConditionAttributeResourceType
// Implementation of WebRequestConditionAttribute:
virtual int GetStages() const OVERRIDE;
- virtual bool IsFulfilled(const WebRequestRule::RequestData& request_data)
- OVERRIDE;
+ virtual bool IsFulfilled(
+ const WebRequestRule::RequestData& request_data) const OVERRIDE;
virtual Type GetType() const OVERRIDE;
private:
@@ -118,8 +121,8 @@ class WebRequestConditionAttributeContentType
// Implementation of WebRequestConditionAttribute:
virtual int GetStages() const OVERRIDE;
- virtual bool IsFulfilled(const WebRequestRule::RequestData& request_data)
- OVERRIDE;
+ virtual bool IsFulfilled(
+ const WebRequestRule::RequestData& request_data) const OVERRIDE;
virtual Type GetType() const OVERRIDE;
private:
@@ -133,6 +136,87 @@ class WebRequestConditionAttributeContentType
DISALLOW_COPY_AND_ASSIGN(WebRequestConditionAttributeContentType);
};
+// Condition that performs matches against response headers' names and values.
+// In the comments below there is a distinction between when this condition is
+// "satisfied" and when it is "fulfilled". See the comments at |tests_| for
+// "satisfied" and the comment at |positive_test_| for "fulfilled".
+class WebRequestConditionAttributeResponseHeaders
+ : public WebRequestConditionAttribute {
+ public:
+ virtual ~WebRequestConditionAttributeResponseHeaders();
+
+ static bool IsMatchingType(const std::string& instance_type);
+
+ // Factory method, see WebRequestConditionAttribute::Create.
+ static scoped_ptr<WebRequestConditionAttribute> Create(
+ const std::string& name,
+ const base::Value* value,
+ std::string* error);
+
+ // Implementation of WebRequestConditionAttribute:
+ virtual int GetStages() const OVERRIDE;
+ virtual bool IsFulfilled(
+ const WebRequestRule::RequestData& request_data) const OVERRIDE;
+ virtual Type GetType() const OVERRIDE;
+
+ private:
+ enum MatchType { kPrefix, kSuffix, kEquals, kContains };
+
+ class StringMatchTest {
+ public:
+ StringMatchTest(const std::string& data, MatchType type);
+ ~StringMatchTest();
+
+ // Does |str| pass |*this| StringMatchTest?
+ bool Matches(const std::string& str) const;
+
+ private:
+ const std::string data_;
+ const MatchType type_;
+ DISALLOW_COPY_AND_ASSIGN(StringMatchTest);
+ };
+
+ class HeaderMatchTest {
+ public:
+ // Takes ownership of the content of both |name| and |value|.
+ HeaderMatchTest(ScopedVector<const StringMatchTest>* name,
+ ScopedVector<const StringMatchTest>* value);
+ ~HeaderMatchTest();
+ // Does the header |name|: |value| match all tests in this header test?
+ bool Matches(const std::string& name, const std::string& value) const;
+
+ private:
+ // Tests to be passed by a header's name.
+ const ScopedVector<const StringMatchTest> name_;
+ // Tests to be passed by a header's value.
+ const ScopedVector<const StringMatchTest> value_;
+ DISALLOW_COPY_AND_ASSIGN(HeaderMatchTest);
+ };
+
+ WebRequestConditionAttributeResponseHeaders(
+ bool positive_test, ScopedVector<const HeaderMatchTest>* tests);
+
+ // Gets the tests' description in |tests| and creates the corresponding
+ // HeaderMatchTest. Returns NULL on failure.
+ static scoped_ptr<const HeaderMatchTest> CreateTests(
+ const base::DictionaryValue* tests,
+ std::string* error);
+ // Helper to CreateTests. Never returns NULL, except for memory failures.
+ static scoped_ptr<const StringMatchTest> CreateMatchTest(const Value* content,
+ bool is_name_test,
+ MatchType match_type);
+
+ // The condition is satisfied if there is a header and its value such that for
+ // some |i| the header passes all the tests from |tests_[i]|.
+ ScopedVector<const HeaderMatchTest> tests_;
+
+ // True means that IsFulfilled() reports whether the condition is satisfied.
+ // False means that it reports whether the condition is NOT satisfied.
+ bool positive_test_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebRequestConditionAttributeResponseHeaders);
+};
+
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_CONDITION_ATTRIBUTE_H_
« no previous file with comments | « no previous file | chrome/browser/extensions/api/declarative_webrequest/webrequest_condition_attribute.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698