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

Unified Diff: chrome/browser/safe_browsing/protocol_manager.cc

Issue 2868030: Add switches and apis in safebrowsing code to allow tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/safe_browsing/protocol_manager.cc
===================================================================
--- chrome/browser/safe_browsing/protocol_manager.cc (revision 51059)
+++ chrome/browser/safe_browsing/protocol_manager.cc (working copy)
@@ -34,26 +34,6 @@
// The maximum time, in seconds, to wait for a response to an update request.
static const int kSbMaxUpdateWaitSec = 10;
-// Update URL for querying about the latest set of chunk updates.
-static const char* const kSbUpdateUrl =
- "http://safebrowsing.clients.google.com/safebrowsing/downloads?client=%s"
- "&appver=%s&pver=2.2";
-
-// GetHash request URL for retrieving full hashes.
-static const char* const kSbGetHashUrl =
- "http://safebrowsing.clients.google.com/safebrowsing/gethash?client=%s"
- "&appver=%s&pver=2.2";
-
-// New MAC client key requests URL.
-static const char* const kSbNewKeyUrl =
- "https://sb-ssl.google.com/safebrowsing/newkey?client=%s&appver=%s"
- "&pver=2.2";
-
-// URL for reporting malware pages.
-static const char* const kSbMalwareReportUrl =
- "http://safebrowsing.clients.google.com/safebrowsing/report?evts=malblhit"
- "&evtd=%s&evtr=%s&evhr=%s&client=%s&appver=%s";
-
// Maximum back off multiplier.
static const int kSbMaxBackOff = 8;
@@ -65,7 +45,10 @@
const std::string& client_name,
const std::string& client_key,
const std::string& wrapped_key,
- URLRequestContextGetter* request_context_getter)
+ URLRequestContextGetter* request_context_getter,
+ const std::string& info_url_prefix,
+ const std::string& mackey_url_prefix,
+ bool disable_auto_update)
: sb_service_(sb_service),
request_type_(NO_REQUEST),
update_error_count_(0),
@@ -80,15 +63,18 @@
wrapped_key_(wrapped_key),
update_size_(0),
client_name_(client_name),
- request_context_getter_(request_context_getter) {
+ request_context_getter_(request_context_getter),
+ info_url_prefix_(info_url_prefix),
+ mackey_url_prefix_(mackey_url_prefix),
+ disable_auto_update_(disable_auto_update) {
+ DCHECK(!info_url_prefix_.empty() && !mackey_url_prefix_.empty());
+
// Set the backoff multiplier fuzz to a random value between 0 and 1.
back_off_fuzz_ = static_cast<float>(base::RandDouble());
-
// The first update must happen between 1-5 minutes of start up.
next_update_sec_ = base::RandInt(60, kSbTimerStartIntervalSec);
- scoped_ptr<FileVersionInfo> version_info(
- chrome_app::GetChromeVersionInfo());
+ scoped_ptr<FileVersionInfo> version_info(chrome_app::GetChromeVersionInfo());
if (!version_info.get())
version_ = "0.1";
else
@@ -122,16 +108,8 @@
sb_service_->HandleGetHashResults(check, full_hashes, false);
return;
}
-
- std::string url = StringPrintf(kSbGetHashUrl,
- client_name_.c_str(),
- version_.c_str());
- if (!client_key_.empty()) {
- url.append("&wrkey=");
- url.append(wrapped_key_);
- }
-
- GURL gethash_url(url);
+ bool use_mac = !client_key_.empty();
+ GURL gethash_url = GetHashUrl(use_mac);
URLFetcher* fetcher = new URLFetcher(gethash_url, URLFetcher::POST, this);
hash_requests_[fetcher] = check;
@@ -448,14 +426,24 @@
}
void SafeBrowsingProtocolManager::ScheduleNextUpdate(bool back_off) {
- DCHECK(next_update_sec_ > 0);
+ DCHECK_GT(next_update_sec_, 0);
+ if (disable_auto_update_) {
+ // Unschedule any current timer.
+ update_timer_.Stop();
+ return;
+ }
+ // Reschedule with the new update.
+ const int next_update = GetNextUpdateTime(back_off);
+ ForceScheduleNextUpdate(next_update);
+}
+
+void SafeBrowsingProtocolManager::ForceScheduleNextUpdate(
+ const int next_update_msec) {
+ DCHECK_GE(next_update_msec, 0);
// Unschedule any current timer.
update_timer_.Stop();
-
- // Reschedule with the new update.
- const int next_update = GetNextUpdateTime(back_off);
- update_timer_.Start(TimeDelta::FromMilliseconds(next_update), this,
+ update_timer_.Start(TimeDelta::FromMilliseconds(next_update_msec), this,
&SafeBrowsingProtocolManager::GetNextUpdate);
}
@@ -513,10 +501,7 @@
ChunkUrl next_chunk = chunk_request_urls_.front();
DCHECK(!next_chunk.url.empty());
- if (!StartsWithASCII(next_chunk.url, "http://", false) &&
- !StartsWithASCII(next_chunk.url, "https://", false))
- next_chunk.url = "http://" + next_chunk.url;
- GURL chunk_url(next_chunk.url);
+ GURL chunk_url = NextChunkUrl(next_chunk.url);
request_type_ = CHUNK_REQUEST;
request_.reset(new URLFetcher(chunk_url, URLFetcher::GET, this));
request_->set_load_flags(net::LOAD_DISABLE_CACHE);
@@ -526,9 +511,7 @@
}
void SafeBrowsingProtocolManager::IssueKeyRequest() {
- GURL key_url(StringPrintf(kSbNewKeyUrl,
- client_name_.c_str(),
- version_.c_str()));
+ GURL key_url = MacKeyUrl();
request_type_ = GETKEY_REQUEST;
request_.reset(new URLFetcher(key_url, URLFetcher::GET, this));
request_->set_load_flags(net::LOAD_DISABLE_CACHE);
@@ -538,7 +521,7 @@
void SafeBrowsingProtocolManager::OnGetChunksComplete(
const std::vector<SBListChunkRanges>& lists, bool database_error) {
- DCHECK(request_type_ == UPDATE_REQUEST);
+ DCHECK_EQ(request_type_, UPDATE_REQUEST);
if (database_error) {
UpdateFinished(false);
ScheduleNextUpdate(false);
@@ -570,15 +553,7 @@
list_data.append(FormatList(
SBListChunkRanges(safe_browsing_util::kMalwareList), use_mac));
- std::string url = StringPrintf(kSbUpdateUrl,
- client_name_.c_str(),
- version_.c_str());
- if (use_mac) {
- url.append("&wrkey=");
- url.append(wrapped_key_);
- }
-
- GURL update_url(url);
+ GURL update_url = UpdateUrl(use_mac);
request_.reset(new URLFetcher(update_url, URLFetcher::POST, this));
request_->set_load_flags(net::LOAD_DISABLE_CACHE);
request_->set_request_context(request_context_getter_);
@@ -593,7 +568,7 @@
// If we haven't heard back from the server with an update response, this method
// will run. Close the current update session and schedule another update.
void SafeBrowsingProtocolManager::UpdateResponseTimeout() {
- DCHECK(request_type_ == UPDATE_REQUEST);
+ DCHECK_EQ(request_type_, UPDATE_REQUEST);
request_.reset();
UpdateFinished(false);
ScheduleNextUpdate(false);
@@ -613,14 +588,7 @@
void SafeBrowsingProtocolManager::ReportMalware(const GURL& malware_url,
const GURL& page_url,
const GURL& referrer_url) {
- std::string report_str = StringPrintf(
- kSbMalwareReportUrl,
- EscapeQueryParamValue(malware_url.spec(), true).c_str(),
- EscapeQueryParamValue(page_url.spec(), true).c_str(),
- EscapeQueryParamValue(referrer_url.spec(), true).c_str(),
- client_name_.c_str(),
- version_.c_str());
- GURL report_url(report_str);
+ GURL report_url = MalwareReportUrl(malware_url, page_url, referrer_url);
URLFetcher* report = new URLFetcher(report_url, URLFetcher::GET, this);
report->set_load_flags(net::LOAD_DISABLE_CACHE);
report->set_request_context(request_context_getter_);
@@ -667,3 +635,67 @@
update_size_ = 0;
sb_service_->UpdateFinished(success);
}
+
+std::string SafeBrowsingProtocolManager::ComposeUrl(
+ const std::string& prefix, const std::string& method,
+ const std::string& client_name, const std::string& version,
+ const std::string& additional_query) {
+ DCHECK(!prefix.empty() && !method.empty() &&
+ !client_name.empty() && !version.empty());
+ std::string url = StringPrintf("%s/%s?client=%s&appver=%s&pver=2.2",
+ prefix.c_str(), method.c_str(),
+ client_name.c_str(), version.c_str());
+ if (!additional_query.empty()) {
+ url.append(additional_query);
+ }
+ return url;
+}
+
+GURL SafeBrowsingProtocolManager::UpdateUrl(bool use_mac) const {
+ std::string url = ComposeUrl(info_url_prefix_, "downloads", client_name_,
+ version_, additional_query_);
+ if (use_mac) {
+ url.append("&wrkey=");
+ url.append(wrapped_key_);
+ }
+ return GURL(url);
+}
+
+GURL SafeBrowsingProtocolManager::GetHashUrl(bool use_mac) const {
+ std::string url= ComposeUrl(info_url_prefix_, "gethash", client_name_,
+ version_, additional_query_);
+ if (use_mac) {
+ url.append("&wrkey=");
+ url.append(wrapped_key_);
+ }
+ return GURL(url);
+}
+
+GURL SafeBrowsingProtocolManager::MacKeyUrl() const {
+ return GURL(ComposeUrl(mackey_url_prefix_, "newkey", client_name_, version_,
+ additional_query_));
+}
+
+GURL SafeBrowsingProtocolManager::MalwareReportUrl(
+ const GURL& malware_url, const GURL& page_url,
+ const GURL& referrer_url) const {
+ std::string url = ComposeUrl(info_url_prefix_, "report", client_name_,
+ version_, additional_query_);
+ return GURL(StringPrintf("%s&evts=malblhit&evtd=%s&evtr=%s&evhr=%s",
+ url.c_str(), EscapeQueryParamValue(malware_url.spec(), true).c_str(),
+ EscapeQueryParamValue(page_url.spec(), true).c_str(),
+ EscapeQueryParamValue(referrer_url.spec(), true).c_str()));
+}
+
+GURL SafeBrowsingProtocolManager::NextChunkUrl(const std::string& url) const {
+ std::string next_url;
+ if (!StartsWithASCII(url, "http://", false) &&
+ !StartsWithASCII(url, "https://", false)) {
+ next_url = "http://" + url;
+ } else {
+ next_url = url;
+ }
+ if (!additional_query_.empty())
+ next_url += additional_query_;
+ return GURL(next_url);
+}
« no previous file with comments | « chrome/browser/safe_browsing/protocol_manager.h ('k') | chrome/browser/safe_browsing/protocol_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698