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

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

Issue 10831008: Refactor and fix declarative webRequest API permissions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed license headers 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_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 7
8 #include <list> 8 #include <list>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/memory/linked_ptr.h" 13 #include "base/memory/linked_ptr.h"
14 #include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h" 14 #include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h"
15 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h " 15 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h "
16 #include "chrome/common/extensions/api/events.h" 16 #include "chrome/common/extensions/api/events.h"
17 #include "googleurl/src/gurl.h" 17 #include "googleurl/src/gurl.h"
18 #include "unicode/regex.h" 18 #include "unicode/regex.h"
19 19
20 class WebRequestPermission;
21
20 namespace base { 22 namespace base {
21 class DictionaryValue; 23 class DictionaryValue;
22 class Time; 24 class Time;
23 class Value; 25 class Value;
24 } 26 }
25 27
26 namespace extension_web_request_api_helpers { 28 namespace extension_web_request_api_helpers {
27 struct EventResponseDelta; 29 struct EventResponseDelta;
28 } 30 }
29 31
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 // contains a 1 for each request stage during which the condition can be 67 // contains a 1 for each request stage during which the condition can be
66 // tested. 68 // tested.
67 virtual int GetStages() const = 0; 69 virtual int GetStages() const = 0;
68 70
69 virtual Type GetType() const = 0; 71 virtual Type GetType() const = 0;
70 72
71 // Returns the minimum priority of rules that may be evaluated after 73 // Returns the minimum priority of rules that may be evaluated after
72 // this rule. Defaults to MIN_INT. 74 // this rule. Defaults to MIN_INT.
73 virtual int GetMinimumPriority() const; 75 virtual int GetMinimumPriority() const;
74 76
75 // Returns whether |extension| has permission to execute this action 77 // Returns whether the specified extension has permission to execute this
76 // on |request|. Defaults to checking the host permission. 78 // action on |request|. Checks the host permission if
77 // |extension| may only be NULL for during testing, in which case 79 // ShouldEnforceHostPermissions instructs to do that.
78 // host permissions are ignored. 80 // |extension_info_map| may only be NULL for during testing, in which case
79 virtual bool HasPermission(const extensions::Extension* extension, 81 // host permissions are ignored. |crosses_incognito| specifies
80 const net::URLRequest* request) const; 82 // whether the request comes from a different profile than |extension_id|
83 // but was processed because the extension is in spanning mode.
84 virtual bool HasPermission(const ExtensionInfoMap* extension_info_map,
85 const std::string& extension_id,
86 const net::URLRequest* request,
87 bool crosses_incognito) const;
88
89 // Returns whether host permissions shall be enforced by this actions.
90 // Used by the standard implementation of HasPermission. Defaults to true.
91 virtual bool ShouldEnforceHostPermissions() const;
81 92
82 // Factory method that instantiates a concrete WebRequestAction 93 // Factory method that instantiates a concrete WebRequestAction
83 // implementation according to |json_action|, the representation of the 94 // implementation according to |json_action|, the representation of the
84 // WebRequestAction as received from the extension API. 95 // WebRequestAction as received from the extension API.
85 // Sets |error| and returns NULL in case of a semantic error that cannot 96 // Sets |error| and returns NULL in case of a semantic error that cannot
86 // be caught by schema validation. Sets |bad_message| and returns NULL 97 // be caught by schema validation. Sets |bad_message| and returns NULL
87 // in case the input is syntactically unexpected. 98 // in case the input is syntactically unexpected.
88 static scoped_ptr<WebRequestAction> Create(const base::Value& json_action, 99 static scoped_ptr<WebRequestAction> Create(const base::Value& json_action,
89 std::string* error, 100 std::string* error,
90 bool* bad_message); 101 bool* bad_message);
(...skipping 25 matching lines...) Expand all
116 // |actions| which represents the array of actions received from the 127 // |actions| which represents the array of actions received from the
117 // extension API. 128 // extension API.
118 static scoped_ptr<WebRequestActionSet> Create(const AnyVector& actions, 129 static scoped_ptr<WebRequestActionSet> Create(const AnyVector& actions,
119 std::string* error, 130 std::string* error,
120 bool* bad_message); 131 bool* bad_message);
121 132
122 // Returns a description of the modifications to |request| caused by the 133 // Returns a description of the modifications to |request| caused by the
123 // |actions_| that can be executed at |request_stage|. If |extension| 134 // |actions_| that can be executed at |request_stage|. If |extension|
124 // is not NULL, permissions of extensions are checked. 135 // is not NULL, permissions of extensions are checked.
125 std::list<LinkedPtrEventResponseDelta> CreateDeltas( 136 std::list<LinkedPtrEventResponseDelta> CreateDeltas(
126 const extensions::Extension* extension, 137 const ExtensionInfoMap* extension_info_map,
138 const std::string& extension_id,
127 net::URLRequest* request, 139 net::URLRequest* request,
140 bool crosses_incognito,
128 RequestStages request_stage, 141 RequestStages request_stage,
129 const WebRequestRule::OptionalRequestData& optional_request_data, 142 const WebRequestRule::OptionalRequestData& optional_request_data,
130 const std::string& extension_id,
131 const base::Time& extension_install_time) const; 143 const base::Time& extension_install_time) const;
132 144
133 // Returns the minimum priority of rules that may be evaluated after 145 // Returns the minimum priority of rules that may be evaluated after
134 // this rule. Defaults to MIN_INT. 146 // this rule. Defaults to MIN_INT.
135 int GetMinimumPriority() const; 147 int GetMinimumPriority() const;
136 148
137 const Actions& actions() const { return actions_; } 149 const Actions& actions() const { return actions_; }
138 150
139 private: 151 private:
140 Actions actions_; 152 Actions actions_;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 202
191 // Action that instructs to redirect a network request to a transparent image. 203 // Action that instructs to redirect a network request to a transparent image.
192 class WebRequestRedirectToTransparentImageAction : public WebRequestAction { 204 class WebRequestRedirectToTransparentImageAction : public WebRequestAction {
193 public: 205 public:
194 WebRequestRedirectToTransparentImageAction(); 206 WebRequestRedirectToTransparentImageAction();
195 virtual ~WebRequestRedirectToTransparentImageAction(); 207 virtual ~WebRequestRedirectToTransparentImageAction();
196 208
197 // Implementation of WebRequestAction: 209 // Implementation of WebRequestAction:
198 virtual int GetStages() const OVERRIDE; 210 virtual int GetStages() const OVERRIDE;
199 virtual Type GetType() const OVERRIDE; 211 virtual Type GetType() const OVERRIDE;
200 virtual bool HasPermission(const extensions::Extension* extension, 212 virtual bool ShouldEnforceHostPermissions() const OVERRIDE;
201 const net::URLRequest* request) const OVERRIDE;
202 virtual LinkedPtrEventResponseDelta CreateDelta( 213 virtual LinkedPtrEventResponseDelta CreateDelta(
203 net::URLRequest* request, 214 net::URLRequest* request,
204 RequestStages request_stage, 215 RequestStages request_stage,
205 const WebRequestRule::OptionalRequestData& optional_request_data, 216 const WebRequestRule::OptionalRequestData& optional_request_data,
206 const std::string& extension_id, 217 const std::string& extension_id,
207 const base::Time& extension_install_time) const OVERRIDE; 218 const base::Time& extension_install_time) const OVERRIDE;
208 219
209 private: 220 private:
210 DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectToTransparentImageAction); 221 DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectToTransparentImageAction);
211 }; 222 };
212 223
213 224
214 // Action that instructs to redirect a network request to an empty document. 225 // Action that instructs to redirect a network request to an empty document.
215 class WebRequestRedirectToEmptyDocumentAction : public WebRequestAction { 226 class WebRequestRedirectToEmptyDocumentAction : public WebRequestAction {
216 public: 227 public:
217 WebRequestRedirectToEmptyDocumentAction(); 228 WebRequestRedirectToEmptyDocumentAction();
218 virtual ~WebRequestRedirectToEmptyDocumentAction(); 229 virtual ~WebRequestRedirectToEmptyDocumentAction();
219 230
220 // Implementation of WebRequestAction: 231 // Implementation of WebRequestAction:
221 virtual int GetStages() const OVERRIDE; 232 virtual int GetStages() const OVERRIDE;
222 virtual Type GetType() const OVERRIDE; 233 virtual Type GetType() const OVERRIDE;
223 virtual bool HasPermission(const extensions::Extension* extension, 234 virtual bool ShouldEnforceHostPermissions() const OVERRIDE;
224 const net::URLRequest* request) const OVERRIDE;
225 virtual LinkedPtrEventResponseDelta CreateDelta( 235 virtual LinkedPtrEventResponseDelta CreateDelta(
226 net::URLRequest* request, 236 net::URLRequest* request,
227 RequestStages request_stage, 237 RequestStages request_stage,
228 const WebRequestRule::OptionalRequestData& optional_request_data, 238 const WebRequestRule::OptionalRequestData& optional_request_data,
229 const std::string& extension_id, 239 const std::string& extension_id,
230 const base::Time& extension_install_time) const OVERRIDE; 240 const base::Time& extension_install_time) const OVERRIDE;
231 241
232 private: 242 private:
233 DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectToEmptyDocumentAction); 243 DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectToEmptyDocumentAction);
234 }; 244 };
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 // Action that instructs to ignore rules below a certain priority. 369 // Action that instructs to ignore rules below a certain priority.
360 class WebRequestIgnoreRulesAction : public WebRequestAction { 370 class WebRequestIgnoreRulesAction : public WebRequestAction {
361 public: 371 public:
362 explicit WebRequestIgnoreRulesAction(int minimum_priority); 372 explicit WebRequestIgnoreRulesAction(int minimum_priority);
363 virtual ~WebRequestIgnoreRulesAction(); 373 virtual ~WebRequestIgnoreRulesAction();
364 374
365 // Implementation of WebRequestAction: 375 // Implementation of WebRequestAction:
366 virtual int GetStages() const OVERRIDE; 376 virtual int GetStages() const OVERRIDE;
367 virtual Type GetType() const OVERRIDE; 377 virtual Type GetType() const OVERRIDE;
368 virtual int GetMinimumPriority() const OVERRIDE; 378 virtual int GetMinimumPriority() const OVERRIDE;
369 virtual bool HasPermission(const extensions::Extension* extension, 379 virtual bool ShouldEnforceHostPermissions() const OVERRIDE;
370 const net::URLRequest* request) const OVERRIDE;
371 virtual LinkedPtrEventResponseDelta CreateDelta( 380 virtual LinkedPtrEventResponseDelta CreateDelta(
372 net::URLRequest* request, 381 net::URLRequest* request,
373 RequestStages request_stage, 382 RequestStages request_stage,
374 const WebRequestRule::OptionalRequestData& optional_request_data, 383 const WebRequestRule::OptionalRequestData& optional_request_data,
375 const std::string& extension_id, 384 const std::string& extension_id,
376 const base::Time& extension_install_time) const OVERRIDE; 385 const base::Time& extension_install_time) const OVERRIDE;
377 386
378 private: 387 private:
379 int minimum_priority_; 388 int minimum_priority_;
380 DISALLOW_COPY_AND_ASSIGN(WebRequestIgnoreRulesAction); 389 DISALLOW_COPY_AND_ASSIGN(WebRequestIgnoreRulesAction);
381 }; 390 };
382 391
383 // TODO(battre) Implement further actions: 392 // TODO(battre) Implement further actions:
384 // Redirect by RegEx, Cookie manipulations, ... 393 // Redirect by RegEx, Cookie manipulations, ...
385 394
386 } // namespace extensions 395 } // namespace extensions
387 396
388 #endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_ACTIO N_H_ 397 #endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_ACTIO N_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698