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

Side by Side Diff: chrome/browser/safe_browsing/download_feedback_service.cc

Issue 2439533002: Download Feedback Service should upload all eligible downloads (Closed)
Patch Set: make windows bots happy Created 4 years, 1 month 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #include "chrome/browser/safe_browsing/download_feedback_service.h" 5 #include "chrome/browser/safe_browsing/download_feedback_service.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
11 #include "base/files/file_util.h"
11 #include "base/files/file_util_proxy.h" 12 #include "base/files/file_util_proxy.h"
12 #include "base/metrics/histogram_macros.h" 13 #include "base/metrics/histogram_macros.h"
13 #include "base/supports_user_data.h" 14 #include "base/supports_user_data.h"
14 #include "base/task_runner.h" 15 #include "base/task_runner.h"
15 #include "chrome/browser/safe_browsing/download_feedback.h" 16 #include "chrome/browser/safe_browsing/download_feedback.h"
16 #include "content/public/browser/download_danger_type.h" 17 #include "content/public/browser/download_danger_type.h"
17 #include "content/public/browser/download_item.h" 18 #include "content/public/browser/download_item.h"
18 19
19 namespace safe_browsing { 20 namespace safe_browsing {
20 21
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 } 134 }
134 135
135 // static 136 // static
136 void DownloadFeedbackService::RecordEligibleDownloadShown( 137 void DownloadFeedbackService::RecordEligibleDownloadShown(
137 content::DownloadDangerType danger_type) { 138 content::DownloadDangerType danger_type) {
138 UMA_HISTOGRAM_ENUMERATION("SBDownloadFeedback.Eligible", 139 UMA_HISTOGRAM_ENUMERATION("SBDownloadFeedback.Eligible",
139 danger_type, 140 danger_type,
140 content::DOWNLOAD_DANGER_TYPE_MAX); 141 content::DOWNLOAD_DANGER_TYPE_MAX);
141 } 142 }
142 143
143
144 void DownloadFeedbackService::BeginFeedbackForDownload( 144 void DownloadFeedbackService::BeginFeedbackForDownload(
145 content::DownloadItem* download) { 145 content::DownloadItem* download,
146 DownloadCommands::Command download_command) {
146 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 147 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
147
148 UMA_HISTOGRAM_ENUMERATION("SBDownloadFeedback.Activations", 148 UMA_HISTOGRAM_ENUMERATION("SBDownloadFeedback.Activations",
149 download->GetDangerType(), 149 download->GetDangerType(),
150 content::DOWNLOAD_DANGER_TYPE_MAX); 150 content::DOWNLOAD_DANGER_TYPE_MAX);
151 151
152 DownloadFeedbackPings* pings = DownloadFeedbackPings::FromDownload(*download); 152 DownloadFeedbackPings* pings = DownloadFeedbackPings::FromDownload(*download);
153 DCHECK(pings); 153 DCHECK(pings);
154 154
155 download->StealDangerousDownload( 155 download->StealDangerousDownload(
156 download_command == DownloadCommands::DISCARD,
156 base::Bind(&DownloadFeedbackService::BeginFeedbackOrDeleteFile, 157 base::Bind(&DownloadFeedbackService::BeginFeedbackOrDeleteFile,
157 file_task_runner_, 158 file_task_runner_, weak_ptr_factory_.GetWeakPtr(),
158 weak_ptr_factory_.GetWeakPtr(), 159 pings->ping_request(), pings->ping_response()));
159 pings->ping_request(), 160 if (download_command == DownloadCommands::KEEP)
160 pings->ping_response())); 161 DownloadCommands(download).ExecuteCommand(download_command);
161 } 162 }
162 163
163 // static 164 // static
164 void DownloadFeedbackService::BeginFeedbackOrDeleteFile( 165 void DownloadFeedbackService::BeginFeedbackOrDeleteFile(
165 const scoped_refptr<base::TaskRunner>& file_task_runner, 166 const scoped_refptr<base::TaskRunner>& file_task_runner,
166 const base::WeakPtr<DownloadFeedbackService>& service, 167 const base::WeakPtr<DownloadFeedbackService>& service,
167 const std::string& ping_request, 168 const std::string& ping_request,
168 const std::string& ping_response, 169 const std::string& ping_response,
169 const base::FilePath& path) { 170 const base::FilePath& path) {
170 if (service) { 171 if (service) {
172 bool is_path_empty = path.empty();
173 UMA_HISTOGRAM_BOOLEAN("SBDownloadFeedback.EmptyFilePathFailure",
174 is_path_empty);
175 if (is_path_empty)
176 return;
171 service->BeginFeedback(ping_request, ping_response, path); 177 service->BeginFeedback(ping_request, ping_response, path);
172 } else { 178 } else {
173 base::FileUtilProxy::DeleteFile(file_task_runner.get(), 179 base::FileUtilProxy::DeleteFile(file_task_runner.get(),
174 path, 180 path,
175 false, 181 false,
176 base::FileUtilProxy::StatusCallback()); 182 base::FileUtilProxy::StatusCallback());
177 } 183 }
178 } 184 }
179 185
180 void DownloadFeedbackService::StartPendingFeedback() { 186 void DownloadFeedbackService::StartPendingFeedback() {
181 DCHECK(!active_feedback_.empty()); 187 DCHECK(!active_feedback_.empty());
182 active_feedback_.front()->Start(base::Bind( 188 active_feedback_.front()->Start(base::Bind(
183 &DownloadFeedbackService::FeedbackComplete, base::Unretained(this))); 189 &DownloadFeedbackService::FeedbackComplete, base::Unretained(this)));
184 } 190 }
185 191
186 void DownloadFeedbackService::BeginFeedback( 192 void DownloadFeedbackService::BeginFeedback(const std::string& ping_request,
187 const std::string& ping_request, 193 const std::string& ping_response,
188 const std::string& ping_response, 194 const base::FilePath& path) {
189 const base::FilePath& path) {
190 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 195 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
191 std::unique_ptr<DownloadFeedback> feedback(DownloadFeedback::Create( 196 std::unique_ptr<DownloadFeedback> feedback(DownloadFeedback::Create(
192 request_context_getter_.get(), file_task_runner_.get(), path, 197 request_context_getter_.get(), file_task_runner_.get(), path,
193 ping_request, ping_response)); 198 ping_request, ping_response));
194 active_feedback_.push(std::move(feedback)); 199 active_feedback_.push(std::move(feedback));
195 UMA_HISTOGRAM_COUNTS_100("SBDownloadFeedback.ActiveFeedbacks", 200 UMA_HISTOGRAM_COUNTS_100("SBDownloadFeedback.ActiveFeedbacks",
196 active_feedback_.size()); 201 active_feedback_.size());
197 202
198 if (active_feedback_.size() == 1) 203 if (active_feedback_.size() == 1)
199 StartPendingFeedback(); 204 StartPendingFeedback();
200 } 205 }
201 206
202 void DownloadFeedbackService::FeedbackComplete() { 207 void DownloadFeedbackService::FeedbackComplete() {
203 DVLOG(1) << __func__; 208 DVLOG(1) << __func__;
204 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 209 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
205 DCHECK(!active_feedback_.empty()); 210 DCHECK(!active_feedback_.empty());
206 active_feedback_.pop(); 211 active_feedback_.pop();
207 if (!active_feedback_.empty()) 212 if (!active_feedback_.empty())
208 StartPendingFeedback(); 213 StartPendingFeedback();
209 } 214 }
210 215
211 } // namespace safe_browsing 216 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698