| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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_ |
| OLD | NEW |