| Index: chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.cc
|
| diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.cc b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.cc
|
| index 9eb9da33abb64205e1e5f25fb01353a712534561..330f905197bdf887a18d7a60d54d8b96d231918e 100644
|
| --- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.cc
|
| +++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.cc
|
| @@ -41,8 +41,9 @@ using ::chrome_cleaner::mojom::ChromePrompt;
|
| using ::chrome_cleaner::mojom::PromptAcceptance;
|
| using ::content::BrowserThread;
|
|
|
| -// Keeps track of whether GetInstance() has been called.
|
| -bool g_instance_exists = false;
|
| +// The global singleton instance. Exposed outside of GetInstance() so that it
|
| +// can be reset by tests.
|
| +ChromeCleanerController* g_controller = nullptr;
|
|
|
| // TODO(alito): Move these shared exit codes to the chrome_cleaner component.
|
| // https://crbug.com/727956
|
| @@ -139,17 +140,17 @@ void ChromeCleanerControllerDelegate::ResetTaggedProfiles(
|
| ChromeCleanerController* ChromeCleanerController::GetInstance() {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
|
| - static ChromeCleanerController* const kInstance =
|
| - new ChromeCleanerController();
|
| - g_instance_exists = true;
|
| - return kInstance;
|
| + if (!g_controller)
|
| + g_controller = new ChromeCleanerController();
|
| +
|
| + return g_controller;
|
| }
|
|
|
| // static
|
| bool ChromeCleanerController::ShouldShowCleanupInSettingsUI() {
|
| // Short-circuit if the instance doesn't exist to avoid creating it during
|
| // navigation to chrome://settings.
|
| - if (!g_instance_exists)
|
| + if (!g_controller)
|
| return false;
|
|
|
| State state = GetInstance()->state();
|
| @@ -157,6 +158,15 @@ bool ChromeCleanerController::ShouldShowCleanupInSettingsUI() {
|
| state == State::kRebootRequired;
|
| }
|
|
|
| +void ChromeCleanerController::SetLogsEnabled(bool logs_enabled) {
|
| + if (logs_enabled_ == logs_enabled)
|
| + return;
|
| +
|
| + logs_enabled_ = logs_enabled;
|
| + for (auto& observer : observer_list_)
|
| + observer.OnLogsEnabledChanged(logs_enabled_);
|
| +}
|
| +
|
| void ChromeCleanerController::SetDelegateForTesting(
|
| ChromeCleanerControllerDelegate* delegate) {
|
| DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
| @@ -170,6 +180,16 @@ void ChromeCleanerController::DismissRebootForTesting() {
|
| state_ = State::kIdle;
|
| }
|
|
|
| +// static
|
| +void ChromeCleanerController::ResetInstanceForTesting() {
|
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| +
|
| + if (g_controller) {
|
| + delete g_controller;
|
| + g_controller = nullptr;
|
| + }
|
| +}
|
| +
|
| void ChromeCleanerController::AddObserver(Observer* observer) {
|
| DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
| observer_list_.AddObserver(observer);
|
| @@ -214,8 +234,15 @@ void ChromeCleanerController::ReplyWithUserResponse(
|
| PromptAcceptance acceptance = PromptAcceptance::DENIED;
|
| State new_state = State::kIdle;
|
| switch (user_response) {
|
| - case UserResponse::kAccepted:
|
| - acceptance = PromptAcceptance::ACCEPTED;
|
| + case UserResponse::kAcceptedWithLogs:
|
| + acceptance = PromptAcceptance::ACCEPTED_WITH_LOGS;
|
| + SetLogsEnabled(true);
|
| + new_state = State::kCleaning;
|
| + delegate_->TagForResetting(profile);
|
| + break;
|
| + case UserResponse::kAcceptedWithoutLogs:
|
| + acceptance = PromptAcceptance::ACCEPTED_WITHOUT_LOGS;
|
| + SetLogsEnabled(false);
|
| new_state = State::kCleaning;
|
| delegate_->TagForResetting(profile);
|
| break;
|
|
|