OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 COMPONENTS_SAFE_BROWSING_DB_V4_UPDATE_PROTOCOL_MANAGER_H_ | 5 #ifndef COMPONENTS_SAFE_BROWSING_DB_V4_UPDATE_PROTOCOL_MANAGER_H_ |
6 #define COMPONENTS_SAFE_BROWSING_DB_V4_UPDATE_PROTOCOL_MANAGER_H_ | 6 #define COMPONENTS_SAFE_BROWSING_DB_V4_UPDATE_PROTOCOL_MANAGER_H_ |
7 | 7 |
8 // A class that implements Chrome's interface with the SafeBrowsing V4 update | 8 // A class that implements Chrome's interface with the SafeBrowsing V4 update |
9 // protocol. | 9 // protocol. |
10 // | 10 // |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 private: | 80 private: |
81 FRIEND_TEST_ALL_PREFIXES(V4UpdateProtocolManagerTest, | 81 FRIEND_TEST_ALL_PREFIXES(V4UpdateProtocolManagerTest, |
82 TestGetUpdatesErrorHandlingNetwork); | 82 TestGetUpdatesErrorHandlingNetwork); |
83 FRIEND_TEST_ALL_PREFIXES(V4UpdateProtocolManagerTest, | 83 FRIEND_TEST_ALL_PREFIXES(V4UpdateProtocolManagerTest, |
84 TestGetUpdatesErrorHandlingResponseCode); | 84 TestGetUpdatesErrorHandlingResponseCode); |
85 FRIEND_TEST_ALL_PREFIXES(V4UpdateProtocolManagerTest, TestGetUpdatesNoError); | 85 FRIEND_TEST_ALL_PREFIXES(V4UpdateProtocolManagerTest, TestGetUpdatesNoError); |
86 FRIEND_TEST_ALL_PREFIXES(V4UpdateProtocolManagerTest, | 86 FRIEND_TEST_ALL_PREFIXES(V4UpdateProtocolManagerTest, |
87 TestGetUpdatesWithOneBackoff); | 87 TestGetUpdatesWithOneBackoff); |
88 FRIEND_TEST_ALL_PREFIXES(V4UpdateProtocolManagerTest, | 88 FRIEND_TEST_ALL_PREFIXES(V4UpdateProtocolManagerTest, |
89 TestBase64EncodingUsesUrlEncoding); | 89 TestBase64EncodingUsesUrlEncoding); |
| 90 FRIEND_TEST_ALL_PREFIXES(V4UpdateProtocolManagerTest, |
| 91 TestGetUpdatesHasTimeout); |
90 friend class V4UpdateProtocolManagerFactoryImpl; | 92 friend class V4UpdateProtocolManagerFactoryImpl; |
91 | 93 |
92 // Fills a FetchThreatListUpdatesRequest protocol buffer for a request. | 94 // Fills a FetchThreatListUpdatesRequest protocol buffer for a request. |
93 // Returns the serialized and base64 URL encoded request as a string. | 95 // Returns the serialized and base64 URL encoded request as a string. |
94 std::string GetBase64SerializedUpdateRequestProto(); | 96 std::string GetBase64SerializedUpdateRequestProto(); |
95 | 97 |
96 // The method to populate |gurl| with the URL to be sent to the server. | 98 // The method to populate |gurl| with the URL to be sent to the server. |
97 // |request_base64| is the base64 encoded form of an instance of the protobuf | 99 // |request_base64| is the base64 encoded form of an instance of the protobuf |
98 // FetchThreatListUpdatesRequest. Also sets the appropriate header values for | 100 // FetchThreatListUpdatesRequest. Also sets the appropriate header values for |
99 // sending PVer4 requests in |headers|. | 101 // sending PVer4 requests in |headers|. |
100 void GetUpdateUrlAndHeaders(const std::string& request_base64, | 102 void GetUpdateUrlAndHeaders(const std::string& request_base64, |
101 GURL* gurl, | 103 GURL* gurl, |
102 net::HttpRequestHeaders* headers) const; | 104 net::HttpRequestHeaders* headers) const; |
103 | 105 |
104 // Parses the base64 encoded response received from the server as a | 106 // Parses the base64 encoded response received from the server as a |
105 // FetchThreatListUpdatesResponse protobuf and returns each of the | 107 // FetchThreatListUpdatesResponse protobuf and returns each of the |
106 // ListUpdateResponse protobufs contained in it as a vector. | 108 // ListUpdateResponse protobufs contained in it as a vector. |
107 // Returns true if parsing is successful, false otherwise. | 109 // Returns true if parsing is successful, false otherwise. |
108 bool ParseUpdateResponse(const std::string& data_base64, | 110 bool ParseUpdateResponse(const std::string& data_base64, |
109 ParsedServerResponse* parsed_server_response); | 111 ParsedServerResponse* parsed_server_response); |
110 | 112 |
111 // Resets the update error counter and multiplier. | 113 // Resets the update error counter and multiplier. |
112 void ResetUpdateErrors(); | 114 void ResetUpdateErrors(); |
113 | 115 |
| 116 // Called when update request times out. Cancels the existing request and |
| 117 // re-sends the update request. |
| 118 void HandleTimeout(); |
| 119 |
114 // Updates internal update and backoff state for each update response error, | 120 // Updates internal update and backoff state for each update response error, |
115 // assuming that the current time is |now|. | 121 // assuming that the current time is |now|. |
116 void HandleUpdateError(const base::Time& now); | 122 void HandleUpdateError(const base::Time& now); |
117 | 123 |
118 // Generates the URL for the update request and issues the request for the | 124 // Generates the URL for the update request and issues the request for the |
119 // lists passed to the constructor. | 125 // lists passed to the constructor. |
120 void IssueUpdateRequest(); | 126 void IssueUpdateRequest(); |
121 | 127 |
122 // Returns whether another update is currently scheduled. | 128 // Returns whether another update is currently scheduled. |
123 bool IsUpdateScheduled() const; | 129 bool IsUpdateScheduled() const; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 | 171 |
166 // The pending update request. The request must be canceled when the object is | 172 // The pending update request. The request must be canceled when the object is |
167 // destroyed. | 173 // destroyed. |
168 std::unique_ptr<net::URLFetcher> request_; | 174 std::unique_ptr<net::URLFetcher> request_; |
169 | 175 |
170 // Timer to setup the next update request. | 176 // Timer to setup the next update request. |
171 base::OneShotTimer update_timer_; | 177 base::OneShotTimer update_timer_; |
172 | 178 |
173 base::Time last_response_time_; | 179 base::Time last_response_time_; |
174 | 180 |
| 181 // Used to interrupt and re-issue update requests that take too long. |
| 182 base::OneShotTimer timeout_timer_; |
| 183 |
175 DISALLOW_COPY_AND_ASSIGN(V4UpdateProtocolManager); | 184 DISALLOW_COPY_AND_ASSIGN(V4UpdateProtocolManager); |
176 }; | 185 }; |
177 | 186 |
178 // Interface of a factory to create V4UpdateProtocolManager. Useful for tests. | 187 // Interface of a factory to create V4UpdateProtocolManager. Useful for tests. |
179 class V4UpdateProtocolManagerFactory { | 188 class V4UpdateProtocolManagerFactory { |
180 public: | 189 public: |
181 V4UpdateProtocolManagerFactory() {} | 190 V4UpdateProtocolManagerFactory() {} |
182 virtual ~V4UpdateProtocolManagerFactory() {} | 191 virtual ~V4UpdateProtocolManagerFactory() {} |
183 virtual std::unique_ptr<V4UpdateProtocolManager> CreateProtocolManager( | 192 virtual std::unique_ptr<V4UpdateProtocolManager> CreateProtocolManager( |
184 net::URLRequestContextGetter* request_context_getter, | 193 net::URLRequestContextGetter* request_context_getter, |
185 const V4ProtocolConfig& config, | 194 const V4ProtocolConfig& config, |
186 V4UpdateCallback callback) = 0; | 195 V4UpdateCallback callback) = 0; |
187 | 196 |
188 private: | 197 private: |
189 DISALLOW_COPY_AND_ASSIGN(V4UpdateProtocolManagerFactory); | 198 DISALLOW_COPY_AND_ASSIGN(V4UpdateProtocolManagerFactory); |
190 }; | 199 }; |
191 | 200 |
192 } // namespace safe_browsing | 201 } // namespace safe_browsing |
193 | 202 |
194 #endif // COMPONENTS_SAFE_BROWSING_DB_V4_UPDATE_PROTOCOL_MANAGER_H_ | 203 #endif // COMPONENTS_SAFE_BROWSING_DB_V4_UPDATE_PROTOCOL_MANAGER_H_ |
OLD | NEW |