2
2
// Use of this source code is governed by a BSD-style license that can be
3
3
// found in the LICENSE file.
4
4
5
- #include " chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win .h"
5
+ #include " chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win .h"
6
6
7
7
#include < windows.h>
8
8
9
+ #include < set>
9
10
#include < string>
10
11
#include < utility>
12
+ #include < vector>
11
13
12
14
#include " base/bind.h"
13
15
#include " base/bind_helpers.h"
@@ -49,7 +51,7 @@ using ::content::BrowserThread;
49
51
50
52
// The global singleton instance. Exposed outside of GetInstance() so that it
51
53
// can be reset by tests.
52
- ChromeCleanerController * g_controller = nullptr ;
54
+ ChromeCleanerControllerImpl * g_controller = nullptr ;
53
55
54
56
// TODO(alito): Move these shared exit codes to the chrome_cleaner component.
55
57
// https://crbug.com/727956
@@ -178,24 +180,34 @@ void ChromeCleanerControllerDelegate::ResetTaggedProfiles(
178
180
}
179
181
180
182
// static
181
- ChromeCleanerController* ChromeCleanerController ::GetInstance () {
183
+ ChromeCleanerControllerImpl* ChromeCleanerControllerImpl ::GetInstance () {
182
184
DCHECK_CURRENTLY_ON (content::BrowserThread::UI);
183
185
184
186
if (!g_controller)
185
- g_controller = new ChromeCleanerController ();
187
+ g_controller = new ChromeCleanerControllerImpl ();
186
188
187
189
return g_controller;
188
190
}
189
191
190
- bool ChromeCleanerController::ShouldShowCleanupInSettingsUI () {
192
+ // static
193
+ ChromeCleanerController* ChromeCleanerController::GetInstance () {
194
+ DCHECK_CURRENTLY_ON (content::BrowserThread::UI);
195
+ return ChromeCleanerControllerImpl::GetInstance ();
196
+ }
197
+
198
+ ChromeCleanerController::ChromeCleanerController () = default ;
199
+
200
+ ChromeCleanerController::~ChromeCleanerController () = default ;
201
+
202
+ bool ChromeCleanerControllerImpl::ShouldShowCleanupInSettingsUI () {
191
203
return state_ == State::kInfected || state_ == State::kCleaning ||
192
204
state_ == State::kRebootRequired ||
193
205
(state_ == State::kIdle &&
194
206
(idle_reason_ == IdleReason::kCleaningFailed ||
195
207
idle_reason_ == IdleReason::kConnectionLost ));
196
208
}
197
209
198
- bool ChromeCleanerController ::IsPoweredByPartner () {
210
+ bool ChromeCleanerControllerImpl ::IsPoweredByPartner () {
199
211
// |reporter_invocation_| is not expected to hold a value for the entire
200
212
// lifecycle of the ChromeCleanerController instance. To be consistent, use
201
213
// a cached return value if the |reporter_invocation_| has been cleaned up.
@@ -212,7 +224,16 @@ bool ChromeCleanerController::IsPoweredByPartner() {
212
224
return powered_by_partner_;
213
225
}
214
226
215
- void ChromeCleanerController::SetLogsEnabled (bool logs_enabled) {
227
+ ChromeCleanerController::State ChromeCleanerControllerImpl::state () const {
228
+ return state_;
229
+ }
230
+
231
+ ChromeCleanerController::IdleReason ChromeCleanerControllerImpl::idle_reason ()
232
+ const {
233
+ return idle_reason_;
234
+ }
235
+
236
+ void ChromeCleanerControllerImpl::SetLogsEnabled (bool logs_enabled) {
216
237
if (logs_enabled_ == logs_enabled)
217
238
return ;
218
239
@@ -221,7 +242,11 @@ void ChromeCleanerController::SetLogsEnabled(bool logs_enabled) {
221
242
observer.OnLogsEnabledChanged (logs_enabled_);
222
243
}
223
244
224
- void ChromeCleanerController::ResetIdleState () {
245
+ bool ChromeCleanerControllerImpl::logs_enabled () const {
246
+ return logs_enabled_;
247
+ }
248
+
249
+ void ChromeCleanerControllerImpl::ResetIdleState () {
225
250
if (state () != State::kIdle || idle_reason () == IdleReason::kInitial )
226
251
return ;
227
252
@@ -233,15 +258,15 @@ void ChromeCleanerController::ResetIdleState() {
233
258
NotifyObserver (&observer);
234
259
}
235
260
236
- void ChromeCleanerController ::SetDelegateForTesting (
261
+ void ChromeCleanerControllerImpl ::SetDelegateForTesting (
237
262
ChromeCleanerControllerDelegate* delegate) {
238
263
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
239
264
delegate_ = delegate ? delegate : real_delegate_.get ();
240
265
DCHECK (delegate_);
241
266
}
242
267
243
268
// static
244
- void ChromeCleanerController ::ResetInstanceForTesting () {
269
+ void ChromeCleanerControllerImpl ::ResetInstanceForTesting () {
245
270
DCHECK_CURRENTLY_ON (content::BrowserThread::UI);
246
271
247
272
if (g_controller) {
@@ -250,18 +275,18 @@ void ChromeCleanerController::ResetInstanceForTesting() {
250
275
}
251
276
}
252
277
253
- void ChromeCleanerController ::AddObserver (Observer* observer) {
278
+ void ChromeCleanerControllerImpl ::AddObserver (Observer* observer) {
254
279
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
255
280
observer_list_.AddObserver (observer);
256
281
NotifyObserver (observer);
257
282
}
258
283
259
- void ChromeCleanerController ::RemoveObserver (Observer* observer) {
284
+ void ChromeCleanerControllerImpl ::RemoveObserver (Observer* observer) {
260
285
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
261
286
observer_list_.RemoveObserver (observer);
262
287
}
263
288
264
- void ChromeCleanerController ::Scan (
289
+ void ChromeCleanerControllerImpl ::Scan (
265
290
const SwReporterInvocation& reporter_invocation) {
266
291
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
267
292
DCHECK (reporter_invocation.BehaviourIsSupported (
@@ -277,11 +302,11 @@ void ChromeCleanerController::Scan(
277
302
// base::Unretained is safe because the ChromeCleanerController instance is
278
303
// guaranteed to outlive the UI thread.
279
304
delegate_->FetchAndVerifyChromeCleaner (base::BindOnce (
280
- &ChromeCleanerController ::OnChromeCleanerFetchedAndVerified,
305
+ &ChromeCleanerControllerImpl ::OnChromeCleanerFetchedAndVerified,
281
306
base::Unretained (this )));
282
307
}
283
308
284
- void ChromeCleanerController ::ReplyWithUserResponse (
309
+ void ChromeCleanerControllerImpl ::ReplyWithUserResponse (
285
310
Profile* profile,
286
311
UserResponse user_response) {
287
312
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
@@ -329,7 +354,7 @@ void ChromeCleanerController::ReplyWithUserResponse(
329
354
SetStateAndNotifyObservers (new_state);
330
355
}
331
356
332
- void ChromeCleanerController ::Reboot () {
357
+ void ChromeCleanerControllerImpl ::Reboot () {
333
358
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
334
359
335
360
if (state () != State::kRebootRequired )
@@ -339,16 +364,16 @@ void ChromeCleanerController::Reboot() {
339
364
InitiateReboot ();
340
365
}
341
366
342
- ChromeCleanerController::ChromeCleanerController ()
367
+ ChromeCleanerControllerImpl::ChromeCleanerControllerImpl ()
343
368
: real_delegate_(base::MakeUnique<ChromeCleanerControllerDelegate>()),
344
369
delegate_ (real_delegate_.get()),
345
370
weak_factory_(this ) {
346
371
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
347
372
}
348
373
349
- ChromeCleanerController ::~ChromeCleanerController () = default ;
374
+ ChromeCleanerControllerImpl ::~ChromeCleanerControllerImpl () = default ;
350
375
351
- void ChromeCleanerController ::NotifyObserver (Observer* observer) const {
376
+ void ChromeCleanerControllerImpl ::NotifyObserver (Observer* observer) const {
352
377
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
353
378
354
379
switch (state_) {
@@ -370,7 +395,7 @@ void ChromeCleanerController::NotifyObserver(Observer* observer) const {
370
395
}
371
396
}
372
397
373
- void ChromeCleanerController ::SetStateAndNotifyObservers (State state) {
398
+ void ChromeCleanerControllerImpl ::SetStateAndNotifyObservers (State state) {
374
399
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
375
400
DCHECK_NE (state_, state);
376
401
@@ -383,7 +408,7 @@ void ChromeCleanerController::SetStateAndNotifyObservers(State state) {
383
408
NotifyObserver (&observer);
384
409
}
385
410
386
- void ChromeCleanerController ::ResetCleanerDataAndInvalidateWeakPtrs () {
411
+ void ChromeCleanerControllerImpl ::ResetCleanerDataAndInvalidateWeakPtrs () {
387
412
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
388
413
389
414
weak_factory_.InvalidateWeakPtrs ();
@@ -392,7 +417,7 @@ void ChromeCleanerController::ResetCleanerDataAndInvalidateWeakPtrs() {
392
417
prompt_user_callback_.Reset ();
393
418
}
394
419
395
- void ChromeCleanerController ::OnChromeCleanerFetchedAndVerified (
420
+ void ChromeCleanerControllerImpl ::OnChromeCleanerFetchedAndVerified (
396
421
base::FilePath executable_path) {
397
422
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
398
423
DCHECK_EQ (State::kScanning , state ());
@@ -415,11 +440,11 @@ void ChromeCleanerController::OnChromeCleanerFetchedAndVerified(
415
440
416
441
ChromeCleanerRunner::RunChromeCleanerAndReplyWithExitCode (
417
442
executable_path, *reporter_invocation_, metrics_status,
418
- base::Bind (&ChromeCleanerController ::WeakOnPromptUser,
443
+ base::Bind (&ChromeCleanerControllerImpl ::WeakOnPromptUser,
419
444
weak_factory_.GetWeakPtr ()),
420
- base::Bind (&ChromeCleanerController ::OnConnectionClosed,
445
+ base::Bind (&ChromeCleanerControllerImpl ::OnConnectionClosed,
421
446
weak_factory_.GetWeakPtr ()),
422
- base::Bind (&ChromeCleanerController ::OnCleanerProcessDone,
447
+ base::Bind (&ChromeCleanerControllerImpl ::OnCleanerProcessDone,
423
448
weak_factory_.GetWeakPtr ()),
424
449
// Our callbacks should be dispatched to the UI thread only.
425
450
base::ThreadTaskRunnerHandle::Get ());
@@ -428,8 +453,8 @@ void ChromeCleanerController::OnChromeCleanerFetchedAndVerified(
428
453
}
429
454
430
455
// static
431
- void ChromeCleanerController ::WeakOnPromptUser (
432
- const base::WeakPtr<ChromeCleanerController >& controller,
456
+ void ChromeCleanerControllerImpl ::WeakOnPromptUser (
457
+ const base::WeakPtr<ChromeCleanerControllerImpl >& controller,
433
458
std::unique_ptr<std::set<base::FilePath>> files_to_delete,
434
459
ChromePrompt::PromptUserCallback prompt_user_callback) {
435
460
DCHECK_CURRENTLY_ON (content::BrowserThread::UI);
@@ -446,7 +471,7 @@ void ChromeCleanerController::WeakOnPromptUser(
446
471
std::move (prompt_user_callback));
447
472
}
448
473
449
- void ChromeCleanerController ::OnPromptUser (
474
+ void ChromeCleanerControllerImpl ::OnPromptUser (
450
475
std::unique_ptr<std::set<base::FilePath>> files_to_delete,
451
476
ChromePrompt::PromptUserCallback prompt_user_callback) {
452
477
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
@@ -476,7 +501,7 @@ void ChromeCleanerController::OnPromptUser(
476
501
SetStateAndNotifyObservers (State::kInfected );
477
502
}
478
503
479
- void ChromeCleanerController ::OnConnectionClosed () {
504
+ void ChromeCleanerControllerImpl ::OnConnectionClosed () {
480
505
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
481
506
DCHECK_NE (State::kIdle , state ());
482
507
DCHECK_NE (State::kRebootRequired , state ());
@@ -504,7 +529,7 @@ void ChromeCleanerController::OnConnectionClosed() {
504
529
RecordIPCDisconnectedHistogram (IPC_DISCONNECTED_SUCCESS);
505
530
}
506
531
507
- void ChromeCleanerController ::OnCleanerProcessDone (
532
+ void ChromeCleanerControllerImpl ::OnCleanerProcessDone (
508
533
ChromeCleanerRunner::ProcessStatus process_status) {
509
534
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
510
535
@@ -547,7 +572,7 @@ void ChromeCleanerController::OnCleanerProcessDone(
547
572
g_browser_process->profile_manager ()->GetLoadedProfiles (),
548
573
// OnSettingsResetCompleted() will take care of transitioning to the
549
574
// kIdle state with IdleReason kCleaningSucceeded.
550
- base::BindOnce (&ChromeCleanerController ::OnSettingsResetCompleted,
575
+ base::BindOnce (&ChromeCleanerControllerImpl ::OnSettingsResetCompleted,
551
576
base::Unretained (this )));
552
577
ResetCleanerDataAndInvalidateWeakPtrs ();
553
578
return ;
@@ -559,7 +584,7 @@ void ChromeCleanerController::OnCleanerProcessDone(
559
584
SetStateAndNotifyObservers (State::kIdle );
560
585
}
561
586
562
- void ChromeCleanerController ::InitiateReboot () {
587
+ void ChromeCleanerControllerImpl ::InitiateReboot () {
563
588
DCHECK_CALLED_ON_VALID_THREAD (thread_checker_);
564
589
565
590
installer::ScopedTokenPrivilege scoped_se_shutdown_privilege (
@@ -573,7 +598,7 @@ void ChromeCleanerController::InitiateReboot() {
573
598
}
574
599
}
575
600
576
- void ChromeCleanerController ::OnSettingsResetCompleted () {
601
+ void ChromeCleanerControllerImpl ::OnSettingsResetCompleted () {
577
602
idle_reason_ = IdleReason::kCleaningSucceeded ;
578
603
SetStateAndNotifyObservers (State::kIdle );
579
604
}
0 commit comments