OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_RULE_H_ | |
6 #define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_RULE_H_ | |
7 | |
8 #include <list> | |
9 #include <vector> | |
10 | |
11 #include "base/compiler_specific.h" | |
12 #include "base/time.h" | |
13 #include "chrome/browser/extensions/api/declarative/rules_registry.h" | |
14 #include "chrome/browser/extensions/api/declarative_webrequest/request_stage.h" | |
15 | |
16 class ExtensionInfoMap; | |
17 class WebRequestPermissions; | |
18 | |
19 namespace extensions { | |
20 class Extension; | |
21 class URLMatcherConditionFactory; | |
22 class WebRequestActionSet; | |
23 class WebRequestConditionSet; | |
24 } | |
25 | |
26 namespace extension_web_request_api_helpers { | |
27 struct EventResponseDelta; | |
28 } | |
29 | |
30 namespace net { | |
31 class HttpResponseHeaders; | |
32 class URLRequest; | |
33 } | |
34 | |
35 namespace extensions { | |
36 | |
37 typedef linked_ptr<extension_web_request_api_helpers::EventResponseDelta> | |
38 LinkedPtrEventResponseDelta; | |
39 | |
40 // Representation of a rule of the declarative Web Request API | |
41 class WebRequestRule { | |
42 public: | |
43 typedef std::string ExtensionId; | |
44 typedef std::string RuleId; | |
45 typedef std::pair<ExtensionId, RuleId> GlobalRuleId; | |
46 typedef int Priority; | |
47 | |
48 struct RequestData { | |
49 RequestData(net::URLRequest* request, RequestStage stage) | |
50 : request(request), stage(stage), | |
51 original_response_headers(NULL) {} | |
52 RequestData(net::URLRequest* request, RequestStage stage, | |
53 const net::HttpResponseHeaders* original_response_headers) | |
54 : request(request), stage(stage), | |
55 original_response_headers(original_response_headers) {} | |
56 net::URLRequest* request; | |
57 RequestStage stage; | |
58 // Additional information about requests that is not | |
59 // available in all request stages. | |
60 const net::HttpResponseHeaders* original_response_headers; | |
61 }; | |
62 | |
63 WebRequestRule(const GlobalRuleId& id, | |
64 base::Time extension_installation_time, | |
65 scoped_ptr<WebRequestConditionSet> conditions, | |
66 scoped_ptr<WebRequestActionSet> actions, | |
67 Priority priority); | |
68 virtual ~WebRequestRule(); | |
69 | |
70 // If |error| is empty, the translation was successful and the returned | |
71 // rule is internally consistent. | |
72 static scoped_ptr<WebRequestRule> Create( | |
73 URLMatcherConditionFactory* url_matcher_condition_factory, | |
74 const std::string& extension_id, | |
75 base::Time extension_installation_time, | |
76 linked_ptr<RulesRegistry::Rule> rule, | |
77 std::string* error); | |
78 | |
79 const GlobalRuleId& id() const { return id_; } | |
80 const std::string& extension_id() const { return id_.first; } | |
81 const WebRequestConditionSet& conditions() const { return *conditions_; } | |
82 const WebRequestActionSet& actions() const { return *actions_; } | |
83 Priority priority() const { return priority_; } | |
84 | |
85 // Creates all deltas resulting from the ActionSet. This function should | |
86 // only be called when the conditions_ are fulfilled (from a semantic point | |
87 // of view; no harm is done if this function is called at other times for | |
88 // testing purposes). | |
89 // If |extension| is set, deltas are suppressed if the |extension| does not | |
90 // have have sufficient permissions to modify the request. The returned list | |
91 // may be empty in this case. | |
92 std::list<LinkedPtrEventResponseDelta> CreateDeltas( | |
93 const ExtensionInfoMap* extension_info_map, | |
94 const RequestData& request_data, | |
95 bool crosses_incognito) const; | |
96 | |
97 // Returns the minimum priority of rules that may be evaluated after | |
98 // this rule. Defaults to MAX_INT. Only valid if the conditions of this rule | |
99 // are fulfilled. | |
100 Priority GetMinimumPriority() const; | |
101 | |
102 private: | |
103 // Checks whether the set of |conditions| and |actions| are consistent, | |
104 // meaning for example that we do not allow combining an |action| that needs | |
105 // to be executed before the |condition| can be fulfilled. | |
106 // Returns true in case of consistency and MUST set |error| otherwise. | |
107 static bool CheckConsistency(WebRequestConditionSet* conditions, | |
108 WebRequestActionSet* actions, | |
109 std::string* error); | |
110 | |
111 GlobalRuleId id_; | |
112 base::Time extension_installation_time_; // For precedences of rules. | |
113 scoped_ptr<WebRequestConditionSet> conditions_; | |
114 scoped_ptr<WebRequestActionSet> actions_; | |
115 Priority priority_; | |
116 | |
117 DISALLOW_COPY_AND_ASSIGN(WebRequestRule); | |
118 }; | |
119 | |
120 } // namespace extensions | |
121 | |
122 #endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_RULE_
H_ | |
OLD | NEW |