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

Side by Side Diff: chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_runner_win.cc

Issue 2906493004: Chrome Cleaner UI: Use BrowserThread's DeleteOnIOThread for ChromePromptImpl (Closed)
Patch Set: Add comment explaining the use of bare new. Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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/chrome_cleaner/chrome_cleaner_runner_win. h" 5 #include "chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_runner_win. h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/base_paths.h" 9 #include "base/base_paths.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "base/feature_list.h" 12 #include "base/feature_list.h"
13 #include "base/location.h" 13 #include "base/location.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/path_service.h" 15 #include "base/path_service.h"
16 #include "base/strings/string_number_conversions.h" 16 #include "base/strings/string_number_conversions.h"
17 #include "base/task_scheduler/post_task.h" 17 #include "base/task_scheduler/post_task.h"
18 #include "chrome/browser/safe_browsing/chrome_cleaner/srt_client_info_win.h" 18 #include "chrome/browser/safe_browsing/chrome_cleaner/srt_client_info_win.h"
19 #include "chrome/browser/safe_browsing/chrome_cleaner/srt_field_trial_win.h" 19 #include "chrome/browser/safe_browsing/chrome_cleaner/srt_field_trial_win.h"
20 #include "chrome/installer/util/install_util.h" 20 #include "chrome/installer/util/install_util.h"
21 #include "components/chrome_cleaner/public/constants/constants.h" 21 #include "components/chrome_cleaner/public/constants/constants.h"
22 #include "components/chrome_cleaner/public/interfaces/chrome_prompt.mojom.h" 22 #include "components/chrome_cleaner/public/interfaces/chrome_prompt.mojom.h"
23 #include "components/version_info/version_info.h" 23 #include "components/version_info/version_info.h"
24 #include "content/public/browser/browser_thread.h"
25 #include "mojo/edk/embedder/connection_params.h" 24 #include "mojo/edk/embedder/connection_params.h"
26 #include "mojo/edk/embedder/embedder.h" 25 #include "mojo/edk/embedder/embedder.h"
27 #include "mojo/edk/embedder/outgoing_broker_client_invitation.h" 26 #include "mojo/edk/embedder/outgoing_broker_client_invitation.h"
28 #include "mojo/edk/embedder/platform_channel_pair.h" 27 #include "mojo/edk/embedder/platform_channel_pair.h"
29 #include "mojo/edk/embedder/transport_protocol.h" 28 #include "mojo/edk/embedder/transport_protocol.h"
30 #include "mojo/public/cpp/system/message_pipe.h" 29 #include "mojo/public/cpp/system/message_pipe.h"
31 30
32 using chrome_cleaner::mojom::ChromePrompt; 31 using chrome_cleaner::mojom::ChromePrompt;
33 using chrome_cleaner::mojom::ChromePromptRequest; 32 using chrome_cleaner::mojom::ChromePromptRequest;
34 using content::BrowserThread; 33 using content::BrowserThread;
35 34
36 namespace safe_browsing { 35 namespace safe_browsing {
37 36
38 namespace { 37 namespace {
39 38
40 // Global delegate used to override the launching of the Cleaner process during 39 // Global delegate used to override the launching of the Cleaner process during
41 // tests. 40 // tests.
42 ChromeCleanerRunnerTestDelegate* g_test_delegate = nullptr; 41 ChromeCleanerRunnerTestDelegate* g_test_delegate = nullptr;
43 42
44 void ReleaseChromePromptImpl(
45 std::unique_ptr<ChromePromptImpl> chrome_prompt_impl) {
46 DCHECK_CURRENTLY_ON(BrowserThread::IO);
47 DCHECK(chrome_prompt_impl);
48 chrome_prompt_impl.reset();
49 }
50
51 } // namespace 43 } // namespace
52 44
53 // static 45 // static
54 void ChromeCleanerRunner::RunChromeCleanerAndReplyWithExitCode( 46 void ChromeCleanerRunner::RunChromeCleanerAndReplyWithExitCode(
55 const base::FilePath& cleaner_executable_path, 47 const base::FilePath& cleaner_executable_path,
56 const SwReporterInvocation& reporter_invocation, 48 const SwReporterInvocation& reporter_invocation,
57 ChromeMetricsStatus metrics_status, 49 ChromeMetricsStatus metrics_status,
58 CleanerLogsStatus cleaner_logs_status, 50 CleanerLogsStatus cleaner_logs_status,
59 ChromePromptImpl::OnPromptUser on_prompt_user, 51 ChromePromptImpl::OnPromptUser on_prompt_user,
60 base::OnceClosure on_connection_closed, 52 base::OnceClosure on_connection_closed,
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 cleaner_process.Handle(), 177 cleaner_process.Handle(),
186 mojo::edk::ConnectionParams(mojo::edk::TransportProtocol::kLegacy, 178 mojo::edk::ConnectionParams(mojo::edk::TransportProtocol::kLegacy,
187 channel.PassServerHandle())); 179 channel.PassServerHandle()));
188 180
189 int exit_code = kBadProcessExitCode; 181 int exit_code = kBadProcessExitCode;
190 if (cleaner_process.WaitForExit(&exit_code)) 182 if (cleaner_process.WaitForExit(&exit_code))
191 return {true, exit_code}; 183 return {true, exit_code};
192 return {false, kBadProcessExitCode}; 184 return {false, kBadProcessExitCode};
193 } 185 }
194 186
195 ChromeCleanerRunner::~ChromeCleanerRunner() { 187 ChromeCleanerRunner::~ChromeCleanerRunner() = default;
196 if (chrome_prompt_impl_) {
197 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)
198 ->PostTask(FROM_HERE, base::Bind(&ReleaseChromePromptImpl,
199 base::Passed(&chrome_prompt_impl_)));
200 }
201 }
202 188
203 void ChromeCleanerRunner::CreateChromePromptImpl( 189 void ChromeCleanerRunner::CreateChromePromptImpl(
204 ChromePromptRequest chrome_prompt_request) { 190 ChromePromptRequest chrome_prompt_request) {
205 DCHECK_CURRENTLY_ON(BrowserThread::IO); 191 DCHECK_CURRENTLY_ON(BrowserThread::IO);
206 DCHECK(!chrome_prompt_impl_); 192 DCHECK(!chrome_prompt_impl_);
207 193
208 chrome_prompt_impl_ = base::MakeUnique<ChromePromptImpl>( 194 // Cannot use base::MakeUnique() since it does not support creating
195 // std::unique_ptrs with custom deleters.
196 chrome_prompt_impl_.reset(new ChromePromptImpl(
209 std::move(chrome_prompt_request), 197 std::move(chrome_prompt_request),
210 base::Bind(&ChromeCleanerRunner::OnConnectionClosed, 198 base::Bind(&ChromeCleanerRunner::OnConnectionClosed,
211 base::RetainedRef(this)), 199 base::RetainedRef(this)),
212 base::Bind(&ChromeCleanerRunner::OnPromptUser, base::RetainedRef(this))); 200 base::Bind(&ChromeCleanerRunner::OnPromptUser, base::RetainedRef(this))));
213 } 201 }
214 202
215 void ChromeCleanerRunner::OnPromptUser( 203 void ChromeCleanerRunner::OnPromptUser(
216 std::unique_ptr<std::set<base::FilePath>> files_to_delete, 204 std::unique_ptr<std::set<base::FilePath>> files_to_delete,
217 ChromePrompt::PromptUserCallback prompt_user_callback) { 205 ChromePrompt::PromptUserCallback prompt_user_callback) {
218 if (on_prompt_user_) { 206 if (on_prompt_user_) {
219 task_runner_->PostTask(FROM_HERE, 207 task_runner_->PostTask(FROM_HERE,
220 base::BindOnce(std::move(on_prompt_user_), 208 base::BindOnce(std::move(on_prompt_user_),
221 base::Passed(&files_to_delete), 209 base::Passed(&files_to_delete),
222 base::Passed(&prompt_user_callback))); 210 base::Passed(&prompt_user_callback)));
(...skipping 11 matching lines...) Expand all
234 FROM_HERE, base::BindOnce(std::move(on_process_done_), launch_status)); 222 FROM_HERE, base::BindOnce(std::move(on_process_done_), launch_status));
235 } 223 }
236 } 224 }
237 225
238 void SetChromeCleanerRunnerTestDelegateForTesting( 226 void SetChromeCleanerRunnerTestDelegateForTesting(
239 ChromeCleanerRunnerTestDelegate* test_delegate) { 227 ChromeCleanerRunnerTestDelegate* test_delegate) {
240 g_test_delegate = test_delegate; 228 g_test_delegate = test_delegate;
241 } 229 }
242 230
243 } // namespace safe_browsing 231 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698