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

Side by Side 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: Some typos corrected 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 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 #ifndef CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_CONDITIO N_ATTRIBUTE_H_ 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_CONDITIO N_ATTRIBUTE_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_CONDITIO N_ATTRIBUTE_H_ 6 #define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_CONDITIO N_ATTRIBUTE_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 14 matching lines...) Expand all
25 } 25 }
26 26
27 namespace extensions { 27 namespace extensions {
28 28
29 // Base class for all condition attributes of the declarative Web Request API 29 // Base class for all condition attributes of the declarative Web Request API
30 // except for condition attribute to test URLPatterns. 30 // except for condition attribute to test URLPatterns.
31 class WebRequestConditionAttribute { 31 class WebRequestConditionAttribute {
32 public: 32 public:
33 enum Type { 33 enum Type {
34 CONDITION_RESOURCE_TYPE, 34 CONDITION_RESOURCE_TYPE,
35 CONDITION_CONTENT_TYPE 35 CONDITION_CONTENT_TYPE,
36 CONDITION_CONTAINS_HEADERS
battre 2012/08/23 12:32:11 We need support for request and response headers.
vabr (Chromium) 2012/08/24 14:48:59 Done. I don't think a condition attribute for requ
36 }; 37 };
37 38
38 WebRequestConditionAttribute(); 39 WebRequestConditionAttribute();
39 virtual ~WebRequestConditionAttribute(); 40 virtual ~WebRequestConditionAttribute();
40 41
41 // Factory method that creates a WebRequestConditionAttribute for the JSON 42 // Factory method that creates a WebRequestConditionAttribute for the JSON
42 // dictionary {|name|: |value|} passed by the extension API. Sets |error| and 43 // dictionary {|name|: |value|} passed by the extension API. Sets |error| and
43 // returns NULL if something fails. 44 // returns NULL if something fails.
44 // The ownership of |value| remains at the caller. 45 // The ownership of |value| remains at the caller.
45 static scoped_ptr<WebRequestConditionAttribute> Create( 46 static scoped_ptr<WebRequestConditionAttribute> Create(
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 explicit WebRequestConditionAttributeContentType( 127 explicit WebRequestConditionAttributeContentType(
127 const std::vector<std::string>& include_content_types, 128 const std::vector<std::string>& include_content_types,
128 bool inclusive); 129 bool inclusive);
129 130
130 std::vector<std::string> content_types_; 131 std::vector<std::string> content_types_;
131 bool inclusive_; 132 bool inclusive_;
132 133
133 DISALLOW_COPY_AND_ASSIGN(WebRequestConditionAttributeContentType); 134 DISALLOW_COPY_AND_ASSIGN(WebRequestConditionAttributeContentType);
134 }; 135 };
135 136
137 // Condition that performs matches against response headers' names and values.
138 // In the comments below there is a distinction between when this condition is
139 // "satisfied" and when it is "fulfilled". See the comments at PushMatchTests
140 // and |tests_| for "satisfied" and the comment at |positive_test_| for
141 // "fulfilled".
142 class WebRequestConditionAttributeContainsHeaders
battre 2012/08/23 12:32:11 I would suggest to rename this to WebRequestCondit
vabr (Chromium) 2012/08/24 14:48:59 Done.
143 : public WebRequestConditionAttribute {
144 public:
145 virtual ~WebRequestConditionAttributeContainsHeaders();
146
147 static bool IsMatchingType(const std::string& instance_type);
148
149 // Factory method, see WebRequestConditionAttribute::Create.
150 static scoped_ptr<WebRequestConditionAttribute> Create(
151 const std::string& name,
152 const base::Value* value,
153 std::string* error);
154
155 // Implementation of WebRequestConditionAttribute:
156 virtual int GetStages() const OVERRIDE;
157 virtual bool IsFulfilled(const WebRequestRule::RequestData& request_data)
158 OVERRIDE;
159 virtual Type GetType() const OVERRIDE;
160
161 private:
162 enum MatchType { kPrefix, kSuffix, kEqual, kContains };
battre 2012/08/23 12:32:11 kEquals to match the parameter of the attribute
vabr (Chromium) 2012/08/24 14:48:59 Done.
163 class MatchTest {
164 public:
165 explicit MatchTest(MatchType type) : type_(type) {}
166 std::string& data() {
167 return data_;
battre 2012/08/23 12:32:11 I'd prefer if you moved this to the constructor, e
vabr (Chromium) 2012/08/24 14:48:59 Done. And retaining the number of copy operations
168 }
169 // Does |str| pass |*this| MatchTest?
170 bool Matches(const std::string& str);
battre 2012/08/23 12:32:11 nit: const
vabr (Chromium) 2012/08/24 14:48:59 Done.
171 private:
172 std::string data_;
173 MatchType type_;
battre 2012/08/23 12:32:11 nit: DISALLOW_COPY_AND_ASSIGN due to non-trivial d
vabr (Chromium) 2012/08/24 14:48:59 Done.
174 };
175 struct TestGroup {
176 TestGroup();
177 ~TestGroup();
178 // Tests to be passed by a header's name.
179 std::vector<MatchTest> name;
battre 2012/08/23 12:32:11 This should become a ScopedVector if you add the D
vabr (Chromium) 2012/08/24 14:48:59 Done.
180 // Tests to be passed by a header's value.
181 std::vector<MatchTest> value;
battre 2012/08/23 12:32:11 nit: DISALLOW_COPY_AND_ASSIGN due to non-trivial d
vabr (Chromium) 2012/08/24 14:48:59 Done.
182 };
183
184 explicit WebRequestConditionAttributeContainsHeaders(bool positive_test);
185
186 // Pushes another group of tests on our tests stack |tests_|. The whole
187 // condition is satisfied if there is a group of tests pushed by some call to
188 // PushMatchTests, and a header with a value which satisfies all of the tests
189 // from that group.
190 bool PushMatchTests(const base::DictionaryValue* tests, std::string* error);
battre 2012/08/23 12:32:11 How about s/Push/Append/ to match the ListValue no
vabr (Chromium) 2012/08/24 14:48:59 I ended up with GetTests and GetMatchTest, because
191 // Helper to PushMatchTests.
192 void PushOneMatchTest(
193 const Value* content, bool is_name_test, MatchType match_type);
194
195 // The condition is satisfied if there is a header and its value such that for
196 // some |i| the header passes all the tests from |tests_[i]|.
197 std::vector< TestGroup > tests_;
battre 2012/08/23 12:32:11 nit: no spaces
battre 2012/08/23 12:32:11 This should become a ScopedVector if you add the D
vabr (Chromium) 2012/08/24 14:48:59 Done.
vabr (Chromium) 2012/08/24 14:48:59 Done.
198
199 // True means that IsFulfilled() reports whether the condition is satisfied.
200 // False means that it reports whether the condition is NOT satisfied.
201 bool positive_test_;
202
203 DISALLOW_COPY_AND_ASSIGN(WebRequestConditionAttributeContainsHeaders);
204 };
205
136 } // namespace extensions 206 } // namespace extensions
137 207
138 #endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_CONDI TION_ATTRIBUTE_H_ 208 #endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_CONDI TION_ATTRIBUTE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698