OLD | NEW |
---|---|
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" |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
133 } | 133 } |
134 | 134 |
135 // static | 135 // static |
136 void DownloadFeedbackService::RecordEligibleDownloadShown( | 136 void DownloadFeedbackService::RecordEligibleDownloadShown( |
137 content::DownloadDangerType danger_type) { | 137 content::DownloadDangerType danger_type) { |
138 UMA_HISTOGRAM_ENUMERATION("SBDownloadFeedback.Eligible", | 138 UMA_HISTOGRAM_ENUMERATION("SBDownloadFeedback.Eligible", |
139 danger_type, | 139 danger_type, |
140 content::DOWNLOAD_DANGER_TYPE_MAX); | 140 content::DOWNLOAD_DANGER_TYPE_MAX); |
141 } | 141 } |
142 | 142 |
143 | |
144 void DownloadFeedbackService::BeginFeedbackForDownload( | 143 void DownloadFeedbackService::BeginFeedbackForDownload( |
145 content::DownloadItem* download) { | 144 content::DownloadItem* download, |
145 DownloadCommands::Command download_command) { | |
146 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 146 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
147 | |
148 UMA_HISTOGRAM_ENUMERATION("SBDownloadFeedback.Activations", | 147 UMA_HISTOGRAM_ENUMERATION("SBDownloadFeedback.Activations", |
149 download->GetDangerType(), | 148 download->GetDangerType(), |
150 content::DOWNLOAD_DANGER_TYPE_MAX); | 149 content::DOWNLOAD_DANGER_TYPE_MAX); |
151 | 150 |
152 DownloadFeedbackPings* pings = DownloadFeedbackPings::FromDownload(*download); | 151 DownloadFeedbackPings* pings = DownloadFeedbackPings::FromDownload(*download); |
153 DCHECK(pings); | 152 DCHECK(pings); |
154 | 153 |
155 download->StealDangerousDownload( | 154 download->StealDangerousDownload( |
155 download_command == DownloadCommands::DISCARD, | |
156 base::Bind(&DownloadFeedbackService::BeginFeedbackOrDeleteFile, | 156 base::Bind(&DownloadFeedbackService::BeginFeedbackOrDeleteFile, |
157 file_task_runner_, | 157 file_task_runner_, weak_ptr_factory_.GetWeakPtr(), |
158 weak_ptr_factory_.GetWeakPtr(), | 158 pings->ping_request(), pings->ping_response())); |
159 pings->ping_request(), | 159 if (download_command == DownloadCommands::KEEP) { |
160 pings->ping_response())); | 160 DownloadCommands command(download); |
161 command.ExecuteCommand(download_command); | |
162 } | |
161 } | 163 } |
162 | 164 |
163 // static | 165 // static |
164 void DownloadFeedbackService::BeginFeedbackOrDeleteFile( | 166 void DownloadFeedbackService::BeginFeedbackOrDeleteFile( |
165 const scoped_refptr<base::TaskRunner>& file_task_runner, | 167 const scoped_refptr<base::TaskRunner>& file_task_runner, |
166 const base::WeakPtr<DownloadFeedbackService>& service, | 168 const base::WeakPtr<DownloadFeedbackService>& service, |
167 const std::string& ping_request, | 169 const std::string& ping_request, |
168 const std::string& ping_response, | 170 const std::string& ping_response, |
169 const base::FilePath& path) { | 171 const base::FilePath& path) { |
172 if (path.empty()) | |
asanka
2016/11/01 21:09:23
We should probably measure this. Not a big deal if
Jialiu Lin
2016/11/03 20:16:50
Done.
| |
173 return; | |
174 | |
170 if (service) { | 175 if (service) { |
171 service->BeginFeedback(ping_request, ping_response, path); | 176 service->BeginFeedback(ping_request, ping_response, path); |
172 } else { | 177 } else { |
173 base::FileUtilProxy::DeleteFile(file_task_runner.get(), | 178 base::FileUtilProxy::DeleteFile(file_task_runner.get(), |
174 path, | 179 path, |
175 false, | 180 false, |
176 base::FileUtilProxy::StatusCallback()); | 181 base::FileUtilProxy::StatusCallback()); |
177 } | 182 } |
178 } | 183 } |
179 | 184 |
180 void DownloadFeedbackService::StartPendingFeedback() { | 185 void DownloadFeedbackService::StartPendingFeedback() { |
181 DCHECK(!active_feedback_.empty()); | 186 DCHECK(!active_feedback_.empty()); |
182 active_feedback_.front()->Start(base::Bind( | 187 active_feedback_.front()->Start(base::Bind( |
183 &DownloadFeedbackService::FeedbackComplete, base::Unretained(this))); | 188 &DownloadFeedbackService::FeedbackComplete, base::Unretained(this))); |
184 } | 189 } |
185 | 190 |
186 void DownloadFeedbackService::BeginFeedback( | 191 void DownloadFeedbackService::BeginFeedback(const std::string& ping_request, |
187 const std::string& ping_request, | 192 const std::string& ping_response, |
188 const std::string& ping_response, | 193 const base::FilePath& path) { |
189 const base::FilePath& path) { | |
190 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 194 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
191 std::unique_ptr<DownloadFeedback> feedback(DownloadFeedback::Create( | 195 std::unique_ptr<DownloadFeedback> feedback(DownloadFeedback::Create( |
192 request_context_getter_.get(), file_task_runner_.get(), path, | 196 request_context_getter_.get(), file_task_runner_.get(), path, |
193 ping_request, ping_response)); | 197 ping_request, ping_response)); |
194 active_feedback_.push(std::move(feedback)); | 198 active_feedback_.push(std::move(feedback)); |
195 UMA_HISTOGRAM_COUNTS_100("SBDownloadFeedback.ActiveFeedbacks", | 199 UMA_HISTOGRAM_COUNTS_100("SBDownloadFeedback.ActiveFeedbacks", |
196 active_feedback_.size()); | 200 active_feedback_.size()); |
197 | 201 |
198 if (active_feedback_.size() == 1) | 202 if (active_feedback_.size() == 1) |
199 StartPendingFeedback(); | 203 StartPendingFeedback(); |
200 } | 204 } |
201 | 205 |
202 void DownloadFeedbackService::FeedbackComplete() { | 206 void DownloadFeedbackService::FeedbackComplete() { |
203 DVLOG(1) << __func__; | 207 DVLOG(1) << __func__; |
204 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 208 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
205 DCHECK(!active_feedback_.empty()); | 209 DCHECK(!active_feedback_.empty()); |
206 active_feedback_.pop(); | 210 active_feedback_.pop(); |
207 if (!active_feedback_.empty()) | 211 if (!active_feedback_.empty()) |
208 StartPendingFeedback(); | 212 StartPendingFeedback(); |
209 } | 213 } |
210 | 214 |
211 } // namespace safe_browsing | 215 } // namespace safe_browsing |
OLD | NEW |