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

Side by Side Diff: chrome/browser/safe_browsing/protocol_manager.h

Issue 5544008: Add a browser test for safebrowsing service.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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_SAFE_BROWSING_PROTOCOL_MANAGER_H_ 5 #ifndef CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_
6 #define CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_ 6 #define CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_
7 #pragma once 7 #pragma once
8 8
9 // A class that implements Chrome's interface with the SafeBrowsing protocol. 9 // A class that implements Chrome's interface with the SafeBrowsing protocol.
10 // The SafeBrowsingProtocolManager handles formatting and making requests of, 10 // The SafeBrowsingProtocolManager handles formatting and making requests of,
(...skipping 24 matching lines...) Expand all
35 namespace __gnu_cxx { 35 namespace __gnu_cxx {
36 template<> 36 template<>
37 struct hash<const URLFetcher*> { 37 struct hash<const URLFetcher*> {
38 size_t operator()(const URLFetcher* fetcher) const { 38 size_t operator()(const URLFetcher* fetcher) const {
39 return reinterpret_cast<size_t>(fetcher); 39 return reinterpret_cast<size_t>(fetcher);
40 } 40 }
41 }; 41 };
42 } 42 }
43 #endif 43 #endif
44 44
45 class SafeBrowsingProtocolManager;
46 // Interface of a factory to create ProtocolManager. Useful for tests.
47 class SBProtocolManagerFactory {
48 public:
49 SBProtocolManagerFactory() {}
50 virtual ~SBProtocolManagerFactory() {}
51 virtual SafeBrowsingProtocolManager* CreateProtocolManager(
52 SafeBrowsingService* sb_service,
53 const std::string& client_name,
54 const std::string& client_key,
55 const std::string& wrapped_key,
56 URLRequestContextGetter* request_context_getter,
57 const std::string& info_url_prefix,
58 const std::string& mackey_url_prefix,
59 bool disable_auto_update) = 0;
60 private:
61 DISALLOW_COPY_AND_ASSIGN(SBProtocolManagerFactory);
62 };
63
45 class SafeBrowsingProtocolManager : public URLFetcher::Delegate { 64 class SafeBrowsingProtocolManager : public URLFetcher::Delegate {
46 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestBackOffTimes); 65 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestBackOffTimes);
47 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestChunkStrings); 66 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestChunkStrings);
48 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestGetHashUrl); 67 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestGetHashUrl);
49 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, 68 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest,
50 TestGetHashBackOffTimes); 69 TestGetHashBackOffTimes);
51 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestMacKeyUrl); 70 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestMacKeyUrl);
52 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, 71 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest,
53 TestSafeBrowsingReportUrl); 72 TestSafeBrowsingReportUrl);
54 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestNextChunkUrl); 73 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestNextChunkUrl);
55 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestUpdateUrl); 74 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestUpdateUrl);
56 friend class SafeBrowsingServiceTest; 75 friend class SafeBrowsingServiceTest;
57 76
58 public: 77 public:
59 // Constructs a SafeBrowsingProtocolManager for |sb_service| that issues
60 // network requests using |request_context_getter|. When |disable_auto_update|
61 // is true, protocol manager won't schedule next update until
62 // ForceScheduleNextUpdate is called.
63 SafeBrowsingProtocolManager(SafeBrowsingService* sb_service,
64 const std::string& client_name,
65 const std::string& client_key,
66 const std::string& wrapped_key,
67 URLRequestContextGetter* request_context_getter,
68 const std::string& info_url_prefix,
69 const std::string& mackey_url_prefix,
70 bool disable_auto_update);
71 virtual ~SafeBrowsingProtocolManager(); 78 virtual ~SafeBrowsingProtocolManager();
72 79
80 // Makes the passed |factory| the factory used to instantiate
81 // a SafeBrowsingService. Useful for tests.
82 static void RegisterFactory(SBProtocolManagerFactory* factory) {
83 factory_ = factory;
84 }
85
86 // Create an instance of the safe browsing service.
87 static SafeBrowsingProtocolManager* Create(
88 SafeBrowsingService* sb_service,
89 const std::string& client_name,
90 const std::string& client_key,
91 const std::string& wrapped_key,
92 URLRequestContextGetter* request_context_getter,
93 const std::string& info_url_prefix,
94 const std::string& mackey_url_prefix,
95 bool disable_auto_update);
96
73 // Sets up the update schedule and internal state for making periodic requests 97 // Sets up the update schedule and internal state for making periodic requests
74 // of the SafeBrowsing service. 98 // of the SafeBrowsing service.
75 void Initialize(); 99 virtual void Initialize();
76 100
77 // URLFetcher::Delegate interface. 101 // URLFetcher::Delegate interface.
78 virtual void OnURLFetchComplete(const URLFetcher* source, 102 virtual void OnURLFetchComplete(const URLFetcher* source,
79 const GURL& url, 103 const GURL& url,
80 const URLRequestStatus& status, 104 const URLRequestStatus& status,
81 int response_code, 105 int response_code,
82 const ResponseCookies& cookies, 106 const ResponseCookies& cookies,
83 const std::string& data); 107 const std::string& data);
84 108
85 // API used by the SafeBrowsingService for issuing queries. When the results 109 // API used by the SafeBrowsingService for issuing queries. When the results
86 // are available, SafeBrowsingService::HandleGetHashResults is called. 110 // are available, SafeBrowsingService::HandleGetHashResults is called.
87 void GetFullHash(SafeBrowsingService::SafeBrowsingCheck* check, 111 virtual void GetFullHash(SafeBrowsingService::SafeBrowsingCheck* check,
88 const std::vector<SBPrefix>& prefixes); 112 const std::vector<SBPrefix>& prefixes);
89 113
90 // Forces the start of next update after |next_update_msec| in msec. 114 // Forces the start of next update after |next_update_msec| in msec.
91 void ForceScheduleNextUpdate(int next_update_msec); 115 void ForceScheduleNextUpdate(int next_update_msec);
92 116
93 bool is_initial_request() const { return initial_request_; }
94
95 // Scheduled update callback. 117 // Scheduled update callback.
96 void GetNextUpdate(); 118 void GetNextUpdate();
97 119
98 // Called by the SafeBrowsingService when our request for a list of all chunks 120 // Called by the SafeBrowsingService when our request for a list of all chunks
99 // for each list is done. If database_error is true, that means the protocol 121 // for each list is done. If database_error is true, that means the protocol
100 // manager shouldn't fetch updates since they can't be written to disk. It 122 // manager shouldn't fetch updates since they can't be written to disk. It
101 // should try again later to open the database. 123 // should try again later to open the database.
102 void OnGetChunksComplete(const std::vector<SBListChunkRanges>& list, 124 void OnGetChunksComplete(const std::vector<SBListChunkRanges>& list,
103 bool database_error); 125 bool database_error);
104 126
105 // Called after the chunks that were parsed were inserted in the database. 127 // Called after the chunks that were parsed were inserted in the database.
106 void OnChunkInserted(); 128 void OnChunkInserted();
107 129
108 // The last time we received an update.
109 base::Time last_update() const { return last_update_; }
110
111 // For UMA users we report to Google when a SafeBrowsing interstitial is shown 130 // For UMA users we report to Google when a SafeBrowsing interstitial is shown
112 // to the user. We assume that the threat type is either URL_MALWARE or 131 // to the user. We assume that the threat type is either URL_MALWARE or
113 // URL_PHISHING. 132 // URL_PHISHING.
114 void ReportSafeBrowsingHit(const GURL& malicious_url, 133 void ReportSafeBrowsingHit(const GURL& malicious_url,
115 const GURL& page_url, 134 const GURL& page_url,
116 const GURL& referrer_url, 135 const GURL& referrer_url,
117 bool is_subresource, 136 bool is_subresource,
118 SafeBrowsingService::UrlCheckResult threat_type); 137 SafeBrowsingService::UrlCheckResult threat_type);
119 138
120 139 bool is_initial_request() const { return initial_request_; }
140 // The last time we received an update.
141 base::Time last_update() const { return last_update_; }
Scott Hess - ex-Googler 2010/12/10 22:20:59 Whitespace between comment+fn groups.
lzheng 2010/12/11 01:15:20 Done.
121 // Setter for additional_query_. To make sure the additional_query_ won't 142 // Setter for additional_query_. To make sure the additional_query_ won't
122 // be changed in the middle of an update, caller (e.g.: SafeBrowsingService) 143 // be changed in the middle of an update, caller (e.g.: SafeBrowsingService)
123 // should call this after callbacks triggered in UpdateFinished() or before 144 // should call this after callbacks triggered in UpdateFinished() or before
124 // IssueUpdateRequest(). 145 // IssueUpdateRequest().
125 void set_additional_query(const std::string& query) { 146 void set_additional_query(const std::string& query) {
126 additional_query_ = query; 147 additional_query_ = query;
127 } 148 }
128 const std::string& additional_query() const { 149 const std::string& additional_query() const {
129 return additional_query_; 150 return additional_query_;
130 } 151 }
131 152
153 protected:
154 // Constructs a SafeBrowsingProtocolManager for |sb_service| that issues
155 // network requests using |request_context_getter|. When |disable_auto_update|
156 // is true, protocol manager won't schedule next update until
157 // ForceScheduleNextUpdate is called.
158 SafeBrowsingProtocolManager(SafeBrowsingService* sb_service,
159 const std::string& client_name,
160 const std::string& client_key,
161 const std::string& wrapped_key,
162 URLRequestContextGetter* request_context_getter,
163 const std::string& info_url_prefix,
164 const std::string& mackey_url_prefix,
165 bool disable_auto_update);
132 private: 166 private:
167 friend class SBProtocolManagerFactoryImpl;
168
133 // Internal API for fetching information from the SafeBrowsing servers. The 169 // Internal API for fetching information from the SafeBrowsing servers. The
134 // GetHash requests are higher priority since they can block user requests 170 // GetHash requests are higher priority since they can block user requests
135 // so are handled separately. 171 // so are handled separately.
136 enum SafeBrowsingRequestType { 172 enum SafeBrowsingRequestType {
137 NO_REQUEST = 0, // No requests in progress 173 NO_REQUEST = 0, // No requests in progress
138 UPDATE_REQUEST, // Request for redirect URLs 174 UPDATE_REQUEST, // Request for redirect URLs
139 CHUNK_REQUEST, // Request for a specific chunk 175 CHUNK_REQUEST, // Request for a specific chunk
140 GETKEY_REQUEST // Update the client's MAC key 176 GETKEY_REQUEST // Update the client's MAC key
141 }; 177 };
142 178
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 void HandleGetHashError(const base::Time& now); 251 void HandleGetHashError(const base::Time& now);
216 252
217 // Helper function for update completion. 253 // Helper function for update completion.
218 void UpdateFinished(bool success); 254 void UpdateFinished(bool success);
219 255
220 // A callback that runs if we timeout waiting for a response to an update 256 // A callback that runs if we timeout waiting for a response to an update
221 // request. We use this to properly set our update state. 257 // request. We use this to properly set our update state.
222 void UpdateResponseTimeout(); 258 void UpdateResponseTimeout();
223 259
224 private: 260 private:
261 // The factory that controls the creation of SafeBrowsingProtocolManager.
262 // This is used by tests.
263 static SBProtocolManagerFactory* factory_;
264
225 // Main SafeBrowsing interface object. 265 // Main SafeBrowsing interface object.
226 SafeBrowsingService* sb_service_; 266 SafeBrowsingService* sb_service_;
227 267
228 // Current active request (in case we need to cancel) for updates or chunks 268 // Current active request (in case we need to cancel) for updates or chunks
229 // from the SafeBrowsing service. We can only have one of these outstanding 269 // from the SafeBrowsing service. We can only have one of these outstanding
230 // at any given time unlike GetHash requests, which are tracked separately. 270 // at any given time unlike GetHash requests, which are tracked separately.
231 scoped_ptr<URLFetcher> request_; 271 scoped_ptr<URLFetcher> request_;
232 272
233 // The kind of request that is currently in progress. 273 // The kind of request that is currently in progress.
234 SafeBrowsingRequestType request_type_; 274 SafeBrowsingRequestType request_type_;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 std::string mackey_url_prefix_; 357 std::string mackey_url_prefix_;
318 358
319 // When true, protocol manager will not start an update unless 359 // When true, protocol manager will not start an update unless
320 // ForceScheduleNextUpdate() is called. This is set for testing purpose. 360 // ForceScheduleNextUpdate() is called. This is set for testing purpose.
321 bool disable_auto_update_; 361 bool disable_auto_update_;
322 362
323 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingProtocolManager); 363 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingProtocolManager);
324 }; 364 };
325 365
326 #endif // CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_ 366 #endif // CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698