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

Side by Side Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h

Issue 10451071: Add support for response header manipulation in Declarative WebRequest API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Made header value comparison case-insensitive Created 8 years, 6 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_ACTION_H _ 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_ACTION_H _
6 #define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_ACTION_H _ 6 #define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_ACTION_H _
7 #pragma once 7 #pragma once
8 8
9 #include <list> 9 #include <list>
10 #include <string> 10 #include <string>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/memory/linked_ptr.h" 14 #include "base/memory/linked_ptr.h"
15 #include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h" 15 #include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h"
16 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h "
16 #include "chrome/common/extensions/api/events.h" 17 #include "chrome/common/extensions/api/events.h"
17 #include "googleurl/src/gurl.h" 18 #include "googleurl/src/gurl.h"
18 19
19 namespace base { 20 namespace base {
20 class DictionaryValue; 21 class DictionaryValue;
21 class Time; 22 class Time;
22 class Value; 23 class Value;
23 } 24 }
24 25
25 namespace extension_web_request_api_helpers { 26 namespace extension_web_request_api_helpers {
(...skipping 15 matching lines...) Expand all
41 class WebRequestAction { 42 class WebRequestAction {
42 public: 43 public:
43 // Type identifiers for concrete WebRequestActions. 44 // Type identifiers for concrete WebRequestActions.
44 enum Type { 45 enum Type {
45 ACTION_CANCEL_REQUEST, 46 ACTION_CANCEL_REQUEST,
46 ACTION_REDIRECT_REQUEST, 47 ACTION_REDIRECT_REQUEST,
47 ACTION_REDIRECT_TO_TRANSPARENT_IMAGE, 48 ACTION_REDIRECT_TO_TRANSPARENT_IMAGE,
48 ACTION_REDIRECT_TO_EMPTY_DOCUMENT, 49 ACTION_REDIRECT_TO_EMPTY_DOCUMENT,
49 ACTION_SET_REQUEST_HEADER, 50 ACTION_SET_REQUEST_HEADER,
50 ACTION_REMOVE_REQUEST_HEADER, 51 ACTION_REMOVE_REQUEST_HEADER,
52 ACTION_ADD_RESPONSE_HEADER,
53 ACTION_REMOVE_RESPONSE_HEADER,
51 ACTION_IGNORE_RULES, 54 ACTION_IGNORE_RULES,
52 }; 55 };
53 56
54 WebRequestAction(); 57 WebRequestAction();
55 virtual ~WebRequestAction(); 58 virtual ~WebRequestAction();
56 59
57 // Returns a bit vector representing extensions::RequestStages. The bit vector 60 // Returns a bit vector representing extensions::RequestStages. The bit vector
58 // contains a 1 for each request stage during which the condition can be 61 // contains a 1 for each request stage during which the condition can be
59 // tested. 62 // tested.
60 virtual int GetStages() const = 0; 63 virtual int GetStages() const = 0;
(...skipping 12 matching lines...) Expand all
73 // in case the input is syntactically unexpected. 76 // in case the input is syntactically unexpected.
74 static scoped_ptr<WebRequestAction> Create(const base::Value& json_action, 77 static scoped_ptr<WebRequestAction> Create(const base::Value& json_action,
75 std::string* error, 78 std::string* error,
76 bool* bad_message); 79 bool* bad_message);
77 80
78 // Returns a description of the modification to |request| caused by this 81 // Returns a description of the modification to |request| caused by this
79 // action. 82 // action.
80 virtual LinkedPtrEventResponseDelta CreateDelta( 83 virtual LinkedPtrEventResponseDelta CreateDelta(
81 net::URLRequest* request, 84 net::URLRequest* request,
82 RequestStages request_stage, 85 RequestStages request_stage,
86 const WebRequestRule::OptionalRequestData& optional_request_data,
83 const std::string& extension_id, 87 const std::string& extension_id,
84 const base::Time& extension_install_time) const = 0; 88 const base::Time& extension_install_time) const = 0;
85 }; 89 };
86 90
87 // Immutable container for multiple actions. 91 // Immutable container for multiple actions.
88 // 92 //
89 // TODO(battre): As WebRequestActionSet can become the single owner of all 93 // TODO(battre): As WebRequestActionSet can become the single owner of all
90 // actions, we can optimize here by making some of them singletons (e.g. Cancel 94 // actions, we can optimize here by making some of them singletons (e.g. Cancel
91 // actions). 95 // actions).
92 class WebRequestActionSet { 96 class WebRequestActionSet {
93 public: 97 public:
94 typedef std::vector<linked_ptr<json_schema_compiler::any::Any> > AnyVector; 98 typedef std::vector<linked_ptr<json_schema_compiler::any::Any> > AnyVector;
95 typedef std::vector<linked_ptr<WebRequestAction> > Actions; 99 typedef std::vector<linked_ptr<WebRequestAction> > Actions;
96 100
97 explicit WebRequestActionSet(const Actions& actions); 101 explicit WebRequestActionSet(const Actions& actions);
98 virtual ~WebRequestActionSet(); 102 virtual ~WebRequestActionSet();
99 103
100 // Factory method that instantiates a WebRequestActionSet according to 104 // Factory method that instantiates a WebRequestActionSet according to
101 // |actions| which represents the array of actions received from the 105 // |actions| which represents the array of actions received from the
102 // extension API. 106 // extension API.
103 static scoped_ptr<WebRequestActionSet> Create(const AnyVector& actions, 107 static scoped_ptr<WebRequestActionSet> Create(const AnyVector& actions,
104 std::string* error, 108 std::string* error,
105 bool* bad_message); 109 bool* bad_message);
106 110
107 // Returns a description of the modifications to |request| caused by the 111 // Returns a description of the modifications to |request| caused by the
108 // |actions_| that can be executed at |request_stage|. 112 // |actions_| that can be executed at |request_stage|.
109 std::list<LinkedPtrEventResponseDelta> CreateDeltas( 113 std::list<LinkedPtrEventResponseDelta> CreateDeltas(
110 net::URLRequest* request, 114 net::URLRequest* request,
111 RequestStages request_stage, 115 RequestStages request_stage,
116 const WebRequestRule::OptionalRequestData& optional_request_data,
112 const std::string& extension_id, 117 const std::string& extension_id,
113 const base::Time& extension_install_time) const; 118 const base::Time& extension_install_time) const;
114 119
115 // Returns the minimum priority of rules that may be evaluated after 120 // Returns the minimum priority of rules that may be evaluated after
116 // this rule. Defaults to MIN_INT. 121 // this rule. Defaults to MIN_INT.
117 int GetMinimumPriority() const; 122 int GetMinimumPriority() const;
118 123
119 const Actions& actions() const { return actions_; } 124 const Actions& actions() const { return actions_; }
120 125
121 private: 126 private:
(...skipping 11 matching lines...) Expand all
133 public: 138 public:
134 WebRequestCancelAction(); 139 WebRequestCancelAction();
135 virtual ~WebRequestCancelAction(); 140 virtual ~WebRequestCancelAction();
136 141
137 // Implementation of WebRequestAction: 142 // Implementation of WebRequestAction:
138 virtual int GetStages() const OVERRIDE; 143 virtual int GetStages() const OVERRIDE;
139 virtual Type GetType() const OVERRIDE; 144 virtual Type GetType() const OVERRIDE;
140 virtual LinkedPtrEventResponseDelta CreateDelta( 145 virtual LinkedPtrEventResponseDelta CreateDelta(
141 net::URLRequest* request, 146 net::URLRequest* request,
142 RequestStages request_stage, 147 RequestStages request_stage,
148 const WebRequestRule::OptionalRequestData& optional_request_data,
143 const std::string& extension_id, 149 const std::string& extension_id,
144 const base::Time& extension_install_time) const OVERRIDE; 150 const base::Time& extension_install_time) const OVERRIDE;
145 151
146 private: 152 private:
147 DISALLOW_COPY_AND_ASSIGN(WebRequestCancelAction); 153 DISALLOW_COPY_AND_ASSIGN(WebRequestCancelAction);
148 }; 154 };
149 155
150 // Action that instructs to redirect a network request. 156 // Action that instructs to redirect a network request.
151 class WebRequestRedirectAction : public WebRequestAction { 157 class WebRequestRedirectAction : public WebRequestAction {
152 public: 158 public:
153 explicit WebRequestRedirectAction(const GURL& redirect_url); 159 explicit WebRequestRedirectAction(const GURL& redirect_url);
154 virtual ~WebRequestRedirectAction(); 160 virtual ~WebRequestRedirectAction();
155 161
156 // Implementation of WebRequestAction: 162 // Implementation of WebRequestAction:
157 virtual int GetStages() const OVERRIDE; 163 virtual int GetStages() const OVERRIDE;
158 virtual Type GetType() const OVERRIDE; 164 virtual Type GetType() const OVERRIDE;
159 virtual LinkedPtrEventResponseDelta CreateDelta( 165 virtual LinkedPtrEventResponseDelta CreateDelta(
160 net::URLRequest* request, 166 net::URLRequest* request,
161 RequestStages request_stage, 167 RequestStages request_stage,
168 const WebRequestRule::OptionalRequestData& optional_request_data,
162 const std::string& extension_id, 169 const std::string& extension_id,
163 const base::Time& extension_install_time) const OVERRIDE; 170 const base::Time& extension_install_time) const OVERRIDE;
164 171
165 private: 172 private:
166 GURL redirect_url_; // Target to which the request shall be redirected. 173 GURL redirect_url_; // Target to which the request shall be redirected.
167 174
168 DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectAction); 175 DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectAction);
169 }; 176 };
170 177
171 // Action that instructs to redirect a network request to a transparent image. 178 // Action that instructs to redirect a network request to a transparent image.
172 class WebRequestRedirectToTransparentImageAction : public WebRequestAction { 179 class WebRequestRedirectToTransparentImageAction : public WebRequestAction {
173 public: 180 public:
174 WebRequestRedirectToTransparentImageAction(); 181 WebRequestRedirectToTransparentImageAction();
175 virtual ~WebRequestRedirectToTransparentImageAction(); 182 virtual ~WebRequestRedirectToTransparentImageAction();
176 183
177 // Implementation of WebRequestAction: 184 // Implementation of WebRequestAction:
178 virtual int GetStages() const OVERRIDE; 185 virtual int GetStages() const OVERRIDE;
179 virtual Type GetType() const OVERRIDE; 186 virtual Type GetType() const OVERRIDE;
180 virtual LinkedPtrEventResponseDelta CreateDelta( 187 virtual LinkedPtrEventResponseDelta CreateDelta(
181 net::URLRequest* request, 188 net::URLRequest* request,
182 RequestStages request_stage, 189 RequestStages request_stage,
190 const WebRequestRule::OptionalRequestData& optional_request_data,
183 const std::string& extension_id, 191 const std::string& extension_id,
184 const base::Time& extension_install_time) const OVERRIDE; 192 const base::Time& extension_install_time) const OVERRIDE;
185 193
186 private: 194 private:
187 DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectToTransparentImageAction); 195 DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectToTransparentImageAction);
188 }; 196 };
189 197
190 198
191 // Action that instructs to redirect a network request to an empty document. 199 // Action that instructs to redirect a network request to an empty document.
192 class WebRequestRedirectToEmptyDocumentAction : public WebRequestAction { 200 class WebRequestRedirectToEmptyDocumentAction : public WebRequestAction {
193 public: 201 public:
194 WebRequestRedirectToEmptyDocumentAction(); 202 WebRequestRedirectToEmptyDocumentAction();
195 virtual ~WebRequestRedirectToEmptyDocumentAction(); 203 virtual ~WebRequestRedirectToEmptyDocumentAction();
196 204
197 // Implementation of WebRequestAction: 205 // Implementation of WebRequestAction:
198 virtual int GetStages() const OVERRIDE; 206 virtual int GetStages() const OVERRIDE;
199 virtual Type GetType() const OVERRIDE; 207 virtual Type GetType() const OVERRIDE;
200 virtual LinkedPtrEventResponseDelta CreateDelta( 208 virtual LinkedPtrEventResponseDelta CreateDelta(
201 net::URLRequest* request, 209 net::URLRequest* request,
202 RequestStages request_stage, 210 RequestStages request_stage,
211 const WebRequestRule::OptionalRequestData& optional_request_data,
203 const std::string& extension_id, 212 const std::string& extension_id,
204 const base::Time& extension_install_time) const OVERRIDE; 213 const base::Time& extension_install_time) const OVERRIDE;
205 214
206 private: 215 private:
207 DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectToEmptyDocumentAction); 216 DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectToEmptyDocumentAction);
208 }; 217 };
209 218
210 // Action that instructs to set a request header. 219 // Action that instructs to set a request header.
211 class WebRequestSetRequestHeaderAction : public WebRequestAction { 220 class WebRequestSetRequestHeaderAction : public WebRequestAction {
212 public: 221 public:
213 WebRequestSetRequestHeaderAction(const std::string& name, 222 WebRequestSetRequestHeaderAction(const std::string& name,
214 const std::string& value); 223 const std::string& value);
215 virtual ~WebRequestSetRequestHeaderAction(); 224 virtual ~WebRequestSetRequestHeaderAction();
216 225
217 // Implementation of WebRequestAction: 226 // Implementation of WebRequestAction:
218 virtual int GetStages() const OVERRIDE; 227 virtual int GetStages() const OVERRIDE;
219 virtual Type GetType() const OVERRIDE; 228 virtual Type GetType() const OVERRIDE;
220 virtual LinkedPtrEventResponseDelta CreateDelta( 229 virtual LinkedPtrEventResponseDelta CreateDelta(
221 net::URLRequest* request, 230 net::URLRequest* request,
222 RequestStages request_stage, 231 RequestStages request_stage,
232 const WebRequestRule::OptionalRequestData& optional_request_data,
223 const std::string& extension_id, 233 const std::string& extension_id,
224 const base::Time& extension_install_time) const OVERRIDE; 234 const base::Time& extension_install_time) const OVERRIDE;
225 235
226 private: 236 private:
227 std::string name_; 237 std::string name_;
228 std::string value_; 238 std::string value_;
229 DISALLOW_COPY_AND_ASSIGN(WebRequestSetRequestHeaderAction); 239 DISALLOW_COPY_AND_ASSIGN(WebRequestSetRequestHeaderAction);
230 }; 240 };
231 241
232 // Action that instructs to remove a request header. 242 // Action that instructs to remove a request header.
233 class WebRequestRemoveRequestHeaderAction : public WebRequestAction { 243 class WebRequestRemoveRequestHeaderAction : public WebRequestAction {
234 public: 244 public:
235 explicit WebRequestRemoveRequestHeaderAction(const std::string& name); 245 explicit WebRequestRemoveRequestHeaderAction(const std::string& name);
236 virtual ~WebRequestRemoveRequestHeaderAction(); 246 virtual ~WebRequestRemoveRequestHeaderAction();
237 247
238 // Implementation of WebRequestAction: 248 // Implementation of WebRequestAction:
239 virtual int GetStages() const OVERRIDE; 249 virtual int GetStages() const OVERRIDE;
240 virtual Type GetType() const OVERRIDE; 250 virtual Type GetType() const OVERRIDE;
241 virtual LinkedPtrEventResponseDelta CreateDelta( 251 virtual LinkedPtrEventResponseDelta CreateDelta(
242 net::URLRequest* request, 252 net::URLRequest* request,
243 RequestStages request_stage, 253 RequestStages request_stage,
254 const WebRequestRule::OptionalRequestData& optional_request_data,
244 const std::string& extension_id, 255 const std::string& extension_id,
245 const base::Time& extension_install_time) const OVERRIDE; 256 const base::Time& extension_install_time) const OVERRIDE;
246 257
247 private: 258 private:
248 std::string name_; 259 std::string name_;
249 DISALLOW_COPY_AND_ASSIGN(WebRequestRemoveRequestHeaderAction); 260 DISALLOW_COPY_AND_ASSIGN(WebRequestRemoveRequestHeaderAction);
250 }; 261 };
251 262
263 // Action that instructs to add a response header.
264 class WebRequestAddResponseHeaderAction : public WebRequestAction {
265 public:
266 WebRequestAddResponseHeaderAction(const std::string& name,
267 const std::string& value);
268 virtual ~WebRequestAddResponseHeaderAction();
269
270 // Implementation of WebRequestAction:
271 virtual int GetStages() const OVERRIDE;
272 virtual Type GetType() const OVERRIDE;
273 virtual LinkedPtrEventResponseDelta CreateDelta(
274 net::URLRequest* request,
275 RequestStages request_stage,
276 const WebRequestRule::OptionalRequestData& optional_request_data,
277 const std::string& extension_id,
278 const base::Time& extension_install_time) const OVERRIDE;
279
280 private:
281 std::string name_;
282 std::string value_;
283 DISALLOW_COPY_AND_ASSIGN(WebRequestAddResponseHeaderAction);
284 };
285
286 // Action that instructs to remove a response header.
287 class WebRequestRemoveResponseHeaderAction : public WebRequestAction {
288 public:
289 explicit WebRequestRemoveResponseHeaderAction(const std::string& name,
290 const std::string& value,
291 bool has_value);
292 virtual ~WebRequestRemoveResponseHeaderAction();
293
294 // Implementation of WebRequestAction:
295 virtual int GetStages() const OVERRIDE;
296 virtual Type GetType() const OVERRIDE;
297 virtual LinkedPtrEventResponseDelta CreateDelta(
298 net::URLRequest* request,
299 RequestStages request_stage,
300 const WebRequestRule::OptionalRequestData& optional_request_data,
301 const std::string& extension_id,
302 const base::Time& extension_install_time) const OVERRIDE;
303
304 private:
305 std::string name_;
306 std::string value_;
307 bool has_value_;
308 DISALLOW_COPY_AND_ASSIGN(WebRequestRemoveResponseHeaderAction);
309 };
310
252 // Action that instructs to ignore rules below a certain priority. 311 // Action that instructs to ignore rules below a certain priority.
253 class WebRequestIgnoreRulesAction : public WebRequestAction { 312 class WebRequestIgnoreRulesAction : public WebRequestAction {
254 public: 313 public:
255 explicit WebRequestIgnoreRulesAction(int minimum_priority); 314 explicit WebRequestIgnoreRulesAction(int minimum_priority);
256 virtual ~WebRequestIgnoreRulesAction(); 315 virtual ~WebRequestIgnoreRulesAction();
257 316
258 // Implementation of WebRequestAction: 317 // Implementation of WebRequestAction:
259 virtual int GetStages() const OVERRIDE; 318 virtual int GetStages() const OVERRIDE;
260 virtual Type GetType() const OVERRIDE; 319 virtual Type GetType() const OVERRIDE;
261 virtual int GetMinimumPriority() const OVERRIDE; 320 virtual int GetMinimumPriority() const OVERRIDE;
262 virtual LinkedPtrEventResponseDelta CreateDelta( 321 virtual LinkedPtrEventResponseDelta CreateDelta(
263 net::URLRequest* request, 322 net::URLRequest* request,
264 RequestStages request_stage, 323 RequestStages request_stage,
324 const WebRequestRule::OptionalRequestData& optional_request_data,
265 const std::string& extension_id, 325 const std::string& extension_id,
266 const base::Time& extension_install_time) const OVERRIDE; 326 const base::Time& extension_install_time) const OVERRIDE;
267 327
268 private: 328 private:
269 int minimum_priority_; 329 int minimum_priority_;
270 DISALLOW_COPY_AND_ASSIGN(WebRequestIgnoreRulesAction); 330 DISALLOW_COPY_AND_ASSIGN(WebRequestIgnoreRulesAction);
271 }; 331 };
272 332
273 // TODO(battre) Implement further actions: 333 // TODO(battre) Implement further actions:
274 // Redirect to constant url, Redirect by RegEx, Set header, Remove header, ... 334 // Redirect by RegEx, Cookie manipulations, ...
275 335
276 } // namespace extensions 336 } // namespace extensions
277 337
278 #endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_ACTIO N_H_ 338 #endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_ACTIO N_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698