| 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 | 5 |
| 6 #include "base/logging.h" | 6 #include "base/logging.h" |
| 7 #include "base/stringprintf.h" |
| 7 #include "base/time.h" | 8 #include "base/time.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 9 #include "chrome/browser/safe_browsing/protocol_manager.h" | 10 #include "chrome/browser/safe_browsing/protocol_manager.h" |
| 11 #include "google_apis/google_api_keys.h" |
| 12 #include "net/base/escape.h" |
| 10 | 13 |
| 11 using base::Time; | 14 using base::Time; |
| 12 using base::TimeDelta; | 15 using base::TimeDelta; |
| 13 | 16 |
| 14 static const char kUrlPrefix[] = "https://prefix.com/foo"; | 17 static const char kUrlPrefix[] = "https://prefix.com/foo"; |
| 15 static const char kClient[] = "unittest"; | 18 static const char kClient[] = "unittest"; |
| 16 static const char kAppVer[] = "1.0"; | 19 static const char kAppVer[] = "1.0"; |
| 17 static const char kAdditionalQuery[] = "additional_query"; | 20 static const char kAdditionalQuery[] = "additional_query"; |
| 18 | 21 |
| 19 class SafeBrowsingProtocolManagerTest : public testing::Test { | 22 class SafeBrowsingProtocolManagerTest : public testing::Test { |
| 23 protected: |
| 24 std::string key_param_; |
| 25 |
| 26 virtual void SetUp() { |
| 27 std::string key = google_apis::GetAPIKey(); |
| 28 if (!key.empty()) { |
| 29 key_param_ = base::StringPrintf( |
| 30 "&key=%s", |
| 31 net::EscapeQueryParamValue(key, true).c_str()); |
| 32 } |
| 33 } |
| 20 }; | 34 }; |
| 21 | 35 |
| 22 // Ensure that we respect section 5 of the SafeBrowsing protocol specification. | 36 // Ensure that we respect section 5 of the SafeBrowsing protocol specification. |
| 23 TEST_F(SafeBrowsingProtocolManagerTest, TestBackOffTimes) { | 37 TEST_F(SafeBrowsingProtocolManagerTest, TestBackOffTimes) { |
| 24 SafeBrowsingProtocolManager pm(NULL, kClient, NULL, kUrlPrefix, false); | 38 SafeBrowsingProtocolManager pm(NULL, kClient, NULL, kUrlPrefix, false); |
| 25 pm.next_update_sec_ = 1800; | 39 pm.next_update_sec_ = 1800; |
| 26 DCHECK(pm.back_off_fuzz_ >= 0.0 && pm.back_off_fuzz_ <= 1.0); | 40 DCHECK(pm.back_off_fuzz_ >= 0.0 && pm.back_off_fuzz_ <= 1.0); |
| 27 | 41 |
| 28 // No errors received so far. | 42 // No errors received so far. |
| 29 EXPECT_EQ(pm.GetNextUpdateTime(false), 1800 * 1000); | 43 EXPECT_EQ(pm.GetNextUpdateTime(false), 1800 * 1000); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 // 7 errors. | 145 // 7 errors. |
| 132 pm.HandleGetHashError(now); | 146 pm.HandleGetHashError(now); |
| 133 EXPECT_EQ(pm.gethash_error_count_, 7); | 147 EXPECT_EQ(pm.gethash_error_count_, 7); |
| 134 EXPECT_TRUE(pm.next_gethash_time_== now + TimeDelta::FromMinutes(480)); | 148 EXPECT_TRUE(pm.next_gethash_time_== now + TimeDelta::FromMinutes(480)); |
| 135 } | 149 } |
| 136 | 150 |
| 137 TEST_F(SafeBrowsingProtocolManagerTest, TestGetHashUrl) { | 151 TEST_F(SafeBrowsingProtocolManagerTest, TestGetHashUrl) { |
| 138 SafeBrowsingProtocolManager pm(NULL, kClient, NULL, kUrlPrefix, false); | 152 SafeBrowsingProtocolManager pm(NULL, kClient, NULL, kUrlPrefix, false); |
| 139 pm.version_ = kAppVer; | 153 pm.version_ = kAppVer; |
| 140 EXPECT_EQ("https://prefix.com/foo/gethash?client=unittest&appver=1.0&" | 154 EXPECT_EQ("https://prefix.com/foo/gethash?client=unittest&appver=1.0&" |
| 141 "pver=2.2", pm.GetHashUrl().spec()); | 155 "pver=2.2" + key_param_, pm.GetHashUrl().spec()); |
| 142 | 156 |
| 143 pm.set_additional_query(kAdditionalQuery); | 157 pm.set_additional_query(kAdditionalQuery); |
| 144 EXPECT_EQ("https://prefix.com/foo/gethash?client=unittest&appver=1.0&" | 158 EXPECT_EQ("https://prefix.com/foo/gethash?client=unittest&appver=1.0&" |
| 145 "pver=2.2&additional_query", | 159 "pver=2.2" + key_param_ + "&additional_query", |
| 146 pm.GetHashUrl().spec()); | 160 pm.GetHashUrl().spec()); |
| 147 } | 161 } |
| 148 | 162 |
| 149 TEST_F(SafeBrowsingProtocolManagerTest, TestUpdateUrl) { | 163 TEST_F(SafeBrowsingProtocolManagerTest, TestUpdateUrl) { |
| 150 SafeBrowsingProtocolManager pm(NULL, kClient, NULL, kUrlPrefix, false); | 164 SafeBrowsingProtocolManager pm(NULL, kClient, NULL, kUrlPrefix, false); |
| 151 pm.version_ = kAppVer; | 165 pm.version_ = kAppVer; |
| 152 | 166 |
| 153 EXPECT_EQ("https://prefix.com/foo/downloads?client=unittest&appver=1.0&" | 167 EXPECT_EQ("https://prefix.com/foo/downloads?client=unittest&appver=1.0&" |
| 154 "pver=2.2", pm.UpdateUrl().spec()); | 168 "pver=2.2" + key_param_, pm.UpdateUrl().spec()); |
| 155 | 169 |
| 156 pm.set_additional_query(kAdditionalQuery); | 170 pm.set_additional_query(kAdditionalQuery); |
| 157 EXPECT_EQ("https://prefix.com/foo/downloads?client=unittest&appver=1.0&" | 171 EXPECT_EQ("https://prefix.com/foo/downloads?client=unittest&appver=1.0&" |
| 158 "pver=2.2&additional_query", pm.UpdateUrl().spec()); | 172 "pver=2.2" + key_param_ + "&additional_query", |
| 173 pm.UpdateUrl().spec()); |
| 159 } | 174 } |
| 160 | 175 |
| 161 TEST_F(SafeBrowsingProtocolManagerTest, TestSafeBrowsingHitUrl) { | 176 TEST_F(SafeBrowsingProtocolManagerTest, TestSafeBrowsingHitUrl) { |
| 162 SafeBrowsingProtocolManager pm(NULL, kClient, NULL, kUrlPrefix, false); | 177 SafeBrowsingProtocolManager pm(NULL, kClient, NULL, kUrlPrefix, false); |
| 163 pm.version_ = kAppVer; | 178 pm.version_ = kAppVer; |
| 164 | 179 |
| 165 GURL malicious_url("http://malicious.url.com"); | 180 GURL malicious_url("http://malicious.url.com"); |
| 166 GURL page_url("http://page.url.com"); | 181 GURL page_url("http://page.url.com"); |
| 167 GURL referrer_url("http://referrer.url.com"); | 182 GURL referrer_url("http://referrer.url.com"); |
| 168 EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&" | 183 EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&" |
| 169 "pver=2.2&evts=malblhit&evtd=http%3A%2F%2Fmalicious.url.com%2F&" | 184 "pver=2.2" + key_param_ + |
| 185 "&evts=malblhit&evtd=http%3A%2F%2Fmalicious.url.com%2F&" |
| 170 "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer." | 186 "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer." |
| 171 "url.com%2F&evtb=1", | 187 "url.com%2F&evtb=1", |
| 172 pm.SafeBrowsingHitUrl( | 188 pm.SafeBrowsingHitUrl( |
| 173 malicious_url, page_url, referrer_url, | 189 malicious_url, page_url, referrer_url, |
| 174 true, SafeBrowsingService::URL_MALWARE).spec()); | 190 true, SafeBrowsingService::URL_MALWARE).spec()); |
| 175 | 191 |
| 176 pm.set_additional_query(kAdditionalQuery); | 192 pm.set_additional_query(kAdditionalQuery); |
| 177 EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&" | 193 EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&" |
| 178 "pver=2.2&additional_query&evts=phishblhit&" | 194 "pver=2.2" + key_param_ + "&additional_query&evts=phishblhit&" |
| 179 "evtd=http%3A%2F%2Fmalicious.url.com%2F&" | 195 "evtd=http%3A%2F%2Fmalicious.url.com%2F&" |
| 180 "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer." | 196 "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer." |
| 181 "url.com%2F&evtb=0", | 197 "url.com%2F&evtb=0", |
| 182 pm.SafeBrowsingHitUrl( | 198 pm.SafeBrowsingHitUrl( |
| 183 malicious_url, page_url, referrer_url, | 199 malicious_url, page_url, referrer_url, |
| 184 false, SafeBrowsingService::URL_PHISHING).spec()); | 200 false, SafeBrowsingService::URL_PHISHING).spec()); |
| 185 | 201 |
| 186 EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&" | 202 EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&" |
| 187 "pver=2.2&additional_query&evts=binurlhit&" | 203 "pver=2.2" + key_param_ + "&additional_query&evts=binurlhit&" |
| 188 "evtd=http%3A%2F%2Fmalicious.url.com%2F&" | 204 "evtd=http%3A%2F%2Fmalicious.url.com%2F&" |
| 189 "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer." | 205 "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer." |
| 190 "url.com%2F&evtb=0", | 206 "url.com%2F&evtb=0", |
| 191 pm.SafeBrowsingHitUrl( | 207 pm.SafeBrowsingHitUrl( |
| 192 malicious_url, page_url, referrer_url, | 208 malicious_url, page_url, referrer_url, |
| 193 false, SafeBrowsingService::BINARY_MALWARE_URL).spec()); | 209 false, SafeBrowsingService::BINARY_MALWARE_URL).spec()); |
| 194 | 210 |
| 195 EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&" | 211 EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&" |
| 196 "pver=2.2&additional_query&evts=binhashhit&" | 212 "pver=2.2" + key_param_ + "&additional_query&evts=binhashhit&" |
| 197 "evtd=http%3A%2F%2Fmalicious.url.com%2F&" | 213 "evtd=http%3A%2F%2Fmalicious.url.com%2F&" |
| 198 "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer." | 214 "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer." |
| 199 "url.com%2F&evtb=0", | 215 "url.com%2F&evtb=0", |
| 200 pm.SafeBrowsingHitUrl( | 216 pm.SafeBrowsingHitUrl( |
| 201 malicious_url, page_url, referrer_url, | 217 malicious_url, page_url, referrer_url, |
| 202 false, SafeBrowsingService::BINARY_MALWARE_HASH).spec()); | 218 false, SafeBrowsingService::BINARY_MALWARE_HASH).spec()); |
| 203 | 219 |
| 204 EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&" | 220 EXPECT_EQ("https://prefix.com/foo/report?client=unittest&appver=1.0&" |
| 205 "pver=2.2&additional_query&evts=phishcsdhit&" | 221 "pver=2.2" + key_param_ + "&additional_query&evts=phishcsdhit&" |
| 206 "evtd=http%3A%2F%2Fmalicious.url.com%2F&" | 222 "evtd=http%3A%2F%2Fmalicious.url.com%2F&" |
| 207 "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer." | 223 "evtr=http%3A%2F%2Fpage.url.com%2F&evhr=http%3A%2F%2Freferrer." |
| 208 "url.com%2F&evtb=0", | 224 "url.com%2F&evtb=0", |
| 209 pm.SafeBrowsingHitUrl( | 225 pm.SafeBrowsingHitUrl( |
| 210 malicious_url, page_url, referrer_url, | 226 malicious_url, page_url, referrer_url, |
| 211 false, SafeBrowsingService::CLIENT_SIDE_PHISHING_URL).spec()); | 227 false, SafeBrowsingService::CLIENT_SIDE_PHISHING_URL).spec()); |
| 212 } | 228 } |
| 213 | 229 |
| 214 TEST_F(SafeBrowsingProtocolManagerTest, TestMalwareDetailsUrl) { | 230 TEST_F(SafeBrowsingProtocolManagerTest, TestMalwareDetailsUrl) { |
| 215 SafeBrowsingProtocolManager pm(NULL, kClient, NULL, kUrlPrefix, false); | 231 SafeBrowsingProtocolManager pm(NULL, kClient, NULL, kUrlPrefix, false); |
| 216 | 232 |
| 217 pm.version_ = kAppVer; | 233 pm.version_ = kAppVer; |
| 218 pm.set_additional_query(kAdditionalQuery); // AdditionalQuery is not used. | 234 pm.set_additional_query(kAdditionalQuery); // AdditionalQuery is not used. |
| 219 EXPECT_EQ("https://prefix.com/foo/clientreport/malware?" | 235 EXPECT_EQ("https://prefix.com/foo/clientreport/malware?" |
| 220 "client=unittest&appver=1.0&pver=1.0", | 236 "client=unittest&appver=1.0&pver=1.0" + key_param_, |
| 221 pm.MalwareDetailsUrl().spec()); | 237 pm.MalwareDetailsUrl().spec()); |
| 222 } | 238 } |
| 223 | 239 |
| 224 TEST_F(SafeBrowsingProtocolManagerTest, TestNextChunkUrl) { | 240 TEST_F(SafeBrowsingProtocolManagerTest, TestNextChunkUrl) { |
| 225 SafeBrowsingProtocolManager pm(NULL, kClient, NULL, kUrlPrefix, false); | 241 SafeBrowsingProtocolManager pm(NULL, kClient, NULL, kUrlPrefix, false); |
| 226 pm.version_ = kAppVer; | 242 pm.version_ = kAppVer; |
| 227 | 243 |
| 228 std::string url_partial = "localhost:1234/foo/bar?foo"; | 244 std::string url_partial = "localhost:1234/foo/bar?foo"; |
| 229 std::string url_http_full = "http://localhost:1234/foo/bar?foo"; | 245 std::string url_http_full = "http://localhost:1234/foo/bar?foo"; |
| 230 std::string url_https_full = "https://localhost:1234/foo/bar?foo"; | 246 std::string url_https_full = "https://localhost:1234/foo/bar?foo"; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 242 pm.set_additional_query(kAdditionalQuery); | 258 pm.set_additional_query(kAdditionalQuery); |
| 243 EXPECT_EQ("https://localhost:1234/foo/bar?foo&additional_query", | 259 EXPECT_EQ("https://localhost:1234/foo/bar?foo&additional_query", |
| 244 pm.NextChunkUrl(url_partial).spec()); | 260 pm.NextChunkUrl(url_partial).spec()); |
| 245 EXPECT_EQ("http://localhost:1234/foo/bar?foo&additional_query", | 261 EXPECT_EQ("http://localhost:1234/foo/bar?foo&additional_query", |
| 246 pm.NextChunkUrl(url_http_full).spec()); | 262 pm.NextChunkUrl(url_http_full).spec()); |
| 247 EXPECT_EQ("https://localhost:1234/foo/bar?foo&additional_query", | 263 EXPECT_EQ("https://localhost:1234/foo/bar?foo&additional_query", |
| 248 pm.NextChunkUrl(url_https_full).spec()); | 264 pm.NextChunkUrl(url_https_full).spec()); |
| 249 EXPECT_EQ("https://localhost:1234/foo/bar?additional_query", | 265 EXPECT_EQ("https://localhost:1234/foo/bar?additional_query", |
| 250 pm.NextChunkUrl(url_https_no_query).spec()); | 266 pm.NextChunkUrl(url_https_no_query).spec()); |
| 251 } | 267 } |
| OLD | NEW |