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

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

Issue 11419041: Add tests for redirect responses from SafeBrowsingProtocolManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Another merge Created 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/safe_browsing/protocol_manager.cc
diff --git a/chrome/browser/safe_browsing/protocol_manager.cc b/chrome/browser/safe_browsing/protocol_manager.cc
index 960b4fdb94ba5abcae00629c8f4fb969b7c5f08b..da98e804329aa3e8a3cc8b543afce739d4948f28 100644
--- a/chrome/browser/safe_browsing/protocol_manager.cc
+++ b/chrome/browser/safe_browsing/protocol_manager.cc
@@ -111,6 +111,10 @@ void SafeBrowsingProtocolManager::RecordGetHashResult(
}
}
+bool SafeBrowsingProtocolManager::IsUpdateScheduled() const {
+ return update_timer_.IsRunning();
+}
+
SafeBrowsingProtocolManager::~SafeBrowsingProtocolManager() {
// Delete in-progress SafeBrowsing requests.
STLDeleteContainerPairFirstPointers(hash_requests_.begin(),
@@ -170,7 +174,6 @@ void SafeBrowsingProtocolManager::OnURLFetchComplete(
DCHECK(CalledOnValidThread());
scoped_ptr<const net::URLFetcher> fetcher;
bool parsed_ok = true;
- bool must_back_off = false; // Reduce SafeBrowsing service query frequency.
HashRequests::iterator it = hash_requests_.find(source);
if (it != hash_requests_.end()) {
@@ -231,7 +234,7 @@ void SafeBrowsingProtocolManager::OnURLFetchComplete(
}
// Cancel the update response timeout now that we have the response.
- update_timer_.Stop();
+ timeout_timer_.Stop();
}
if (source->GetStatus().is_success() && source->GetResponseCode() == 200) {
@@ -243,15 +246,17 @@ void SafeBrowsingProtocolManager::OnURLFetchComplete(
if (!parsed_ok) {
VLOG(1) << "SafeBrowsing request for: " << source->GetURL()
<< " failed parse.";
- must_back_off = true;
chunk_request_urls_.clear();
UpdateFinished(false);
}
switch (request_type_) {
case CHUNK_REQUEST:
- if (parsed_ok)
+ if (parsed_ok) {
chunk_request_urls_.pop_front();
+ if (chunk_request_urls_.empty() && !chunk_pending_to_write_)
+ UpdateFinished(true);
+ }
break;
case UPDATE_REQUEST:
if (chunk_request_urls_.empty() && parsed_ok) {
@@ -266,7 +271,6 @@ void SafeBrowsingProtocolManager::OnURLFetchComplete(
}
} else {
// The SafeBrowsing service error, or very bad response code: back off.
- must_back_off = true;
if (request_type_ == CHUNK_REQUEST)
chunk_request_urls_.clear();
UpdateFinished(false);
@@ -280,13 +284,6 @@ void SafeBrowsingProtocolManager::OnURLFetchComplete(
}
}
- // Schedule a new update request if we've finished retrieving all the chunks
- // from the previous update. We treat the update request and the chunk URLs it
- // contains as an atomic unit as far as back off is concerned.
- if (chunk_request_urls_.empty() &&
- (request_type_ == CHUNK_REQUEST || request_type_ == UPDATE_REQUEST))
- ScheduleNextUpdate(must_back_off);
-
// Get the next chunk if available.
IssueChunkRequest();
}
@@ -372,7 +369,10 @@ bool SafeBrowsingProtocolManager::HandleServiceResponse(const GURL& url,
// Chunks to add to storage. Pass ownership of |chunks|.
if (!chunks->empty()) {
chunk_pending_to_write_ = true;
- delegate_->AddChunks(chunk_url.list_name, chunks.release());
+ delegate_->AddChunks(
+ chunk_url.list_name, chunks.release(),
+ base::Bind(&SafeBrowsingProtocolManager::OnAddChunksComplete,
+ base::Unretained(this)));
}
break;
@@ -493,8 +493,8 @@ void SafeBrowsingProtocolManager::OnGetChunksComplete(
DCHECK(CalledOnValidThread());
DCHECK_EQ(request_type_, UPDATE_REQUEST);
if (database_error) {
- UpdateFinished(false);
- ScheduleNextUpdate(false);
+ // The update was not successful, but don't back off.
+ UpdateFinished(false, false);
return;
}
@@ -530,9 +530,9 @@ void SafeBrowsingProtocolManager::OnGetChunksComplete(
request_->Start();
// Begin the update request timeout.
- update_timer_.Start(FROM_HERE, TimeDelta::FromSeconds(kSbMaxUpdateWaitSec),
- this,
- &SafeBrowsingProtocolManager::UpdateResponseTimeout);
+ timeout_timer_.Start(FROM_HERE, TimeDelta::FromSeconds(kSbMaxUpdateWaitSec),
+ this,
+ &SafeBrowsingProtocolManager::UpdateResponseTimeout);
}
// If we haven't heard back from the server with an update response, this method
@@ -542,10 +542,9 @@ void SafeBrowsingProtocolManager::UpdateResponseTimeout() {
DCHECK_EQ(request_type_, UPDATE_REQUEST);
request_.reset();
UpdateFinished(false);
- ScheduleNextUpdate(true);
}
-void SafeBrowsingProtocolManager::OnChunkInserted() {
+void SafeBrowsingProtocolManager::OnAddChunksComplete() {
DCHECK(CalledOnValidThread());
chunk_pending_to_write_ = false;
@@ -584,10 +583,15 @@ void SafeBrowsingProtocolManager::HandleGetHashError(const Time& now) {
}
void SafeBrowsingProtocolManager::UpdateFinished(bool success) {
+ UpdateFinished(success, !success);
+}
+
+void SafeBrowsingProtocolManager::UpdateFinished(bool success, bool back_off) {
DCHECK(CalledOnValidThread());
UMA_HISTOGRAM_COUNTS("SB2.UpdateSize", update_size_);
update_size_ = 0;
delegate_->UpdateFinished(success);
+ ScheduleNextUpdate(back_off);
}
GURL SafeBrowsingProtocolManager::UpdateUrl() const {
« 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