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

Unified Diff: chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win_unittest.cc

Issue 2966453002: Chrome Cleaner UI: Add logs upload permission checkbox to the dialog (Closed)
Patch Set: More comments Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win_unittest.cc
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win_unittest.cc b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win_unittest.cc
index 9b9a5cbbb67b2ef53059fe62b0edd28c5aa946e5..d63a48c9c94706a5f07a44b8019864825bd890b9 100644
--- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win_unittest.cc
+++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win_unittest.cc
@@ -27,6 +27,7 @@
#include "components/chrome_cleaner/public/constants/constants.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/test/test_browser_thread_bundle.h"
+#include "content/public/test/test_utils.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/multiprocess_func_list.h"
@@ -34,6 +35,7 @@
namespace safe_browsing {
namespace {
+using ::chrome_cleaner::mojom::PromptAcceptance;
using ::testing::Combine;
using ::testing::DoAll;
using ::testing::InvokeWithoutArgs;
@@ -47,6 +49,24 @@ using IdleReason = ChromeCleanerController::IdleReason;
using State = ChromeCleanerController::State;
using UserResponse = ChromeCleanerController::UserResponse;
+// Returns the PromptAcceptance value that ChromeCleanerController is supposed
+// to send to the Chrome Cleaner process when ReplyWithUserResponse() is
+// called with |user_response|.
+PromptAcceptance UserResponseToPromptAcceptance(UserResponse user_response) {
+ switch (user_response) {
+ case UserResponse::kAcceptedWithLogs:
+ return PromptAcceptance::ACCEPTED_WITH_LOGS;
+ case UserResponse::kAcceptedWithoutLogs:
+ return PromptAcceptance::ACCEPTED_WITHOUT_LOGS;
+ case UserResponse::kDenied: // Fallthrough
+ case UserResponse::kDismissed:
+ return PromptAcceptance::DENIED;
+ }
+
+ NOTREACHED();
+ return PromptAcceptance::UNSPECIFIED;
+}
+
class MockChromeCleanerControllerObserver
: public ChromeCleanerController::Observer {
public:
@@ -55,6 +75,8 @@ class MockChromeCleanerControllerObserver
MOCK_METHOD1(OnInfected, void(const std::set<base::FilePath>&));
MOCK_METHOD1(OnCleaning, void(const std::set<base::FilePath>&));
MOCK_METHOD0(OnRebootRequired, void());
+ MOCK_METHOD0(OnRebootFailed, void());
+ MOCK_METHOD1(OnLogsEnabledChanged, void(bool));
};
enum class MetricsStatus {
@@ -95,6 +117,7 @@ class ChromeCleanerControllerSimpleTest
scout_enabled_ = scout_status == ScoutStatus::kEnabled;
SetChromeCleanerRunnerTestDelegateForTesting(this);
+ ChromeCleanerController::ResetInstanceForTesting();
ChromeCleanerController::GetInstance()->SetDelegateForTesting(this);
scoped_feature_list_.InitAndEnableFeature(kInBrowserCleanerUIFeature);
}
@@ -140,6 +163,9 @@ class ChromeCleanerControllerSimpleTest
return base::Process();
}
+ void OnCleanerProcessDone(
+ const ChromeCleanerRunner::ProcessStatus& process_status) override {}
+
protected:
// We need this because we need UI and IO threads during tests. The thread
// bundle should be the first member of the class so that it will be destroyed
@@ -233,7 +259,12 @@ class ChromeCleanerControllerTest
cleaner_process_options_.set_reboot_required(
uws_found_status_ == UwsFoundStatus::kUwsFoundRebootRequired);
cleaner_process_options_.set_crash_point(crash_point_);
+ cleaner_process_options_.set_expected_user_response(
+ uws_found_status_ == UwsFoundStatus::kNoUwsFound
+ ? PromptAcceptance::DENIED
+ : UserResponseToPromptAcceptance(user_response_));
+ ChromeCleanerController::ResetInstanceForTesting();
controller_ = ChromeCleanerController::GetInstance();
ASSERT_TRUE(controller_);
@@ -243,9 +274,6 @@ class ChromeCleanerControllerTest
}
void TearDown() override {
- if (controller_->state() == State::kRebootRequired)
- controller_->DismissRebootForTesting();
-
controller_->SetDelegateForTesting(nullptr);
SetChromeCleanerRunnerTestDelegateForTesting(nullptr);
}
@@ -311,11 +339,17 @@ class ChromeCleanerControllerTest
return std::move(result.process);
}
+ void OnCleanerProcessDone(
+ const ChromeCleanerRunner::ProcessStatus& process_status) override {
+ cleaner_process_status_ = process_status;
+ }
+
ChromeCleanerController::State ExpectedFinalState() {
if (process_status_ == CleanerProcessStatus::kFetchSuccessValidProcess &&
crash_point_ == CrashPoint::kNone &&
uws_found_status_ == UwsFoundStatus::kUwsFoundRebootRequired &&
- user_response_ == UserResponse::kAccepted) {
+ (user_response_ == UserResponse::kAcceptedWithLogs ||
+ user_response_ == UserResponse::kAcceptedWithoutLogs)) {
return State::kRebootRequired;
}
return State::kIdle;
@@ -333,7 +367,8 @@ class ChromeCleanerControllerTest
bool ExpectedOnCleaningCalled() {
return ExpectedOnInfectedCalled() &&
crash_point_ != CrashPoint::kAfterRequestSent &&
- user_response_ == UserResponse::kAccepted;
+ (user_response_ == UserResponse::kAcceptedWithLogs ||
+ user_response_ == UserResponse::kAcceptedWithoutLogs);
}
bool ExpectedOnRebootRequiredCalled() {
@@ -348,14 +383,16 @@ class ChromeCleanerControllerTest
crash_point_ == CrashPoint::kAfterResponseReceived) &&
(uws_found_status_ == UwsFoundStatus::kUwsFoundNoRebootRequired ||
uws_found_status_ == UwsFoundStatus::kUwsFoundRebootRequired) &&
- user_response_ == UserResponse::kAccepted;
+ (user_response_ == UserResponse::kAcceptedWithLogs ||
+ user_response_ == UserResponse::kAcceptedWithoutLogs);
}
bool ExpectedToResetSettings() {
return process_status_ == CleanerProcessStatus::kFetchSuccessValidProcess &&
crash_point_ == CrashPoint::kNone &&
uws_found_status_ == UwsFoundStatus::kUwsFoundNoRebootRequired &&
- user_response_ == UserResponse::kAccepted;
+ (user_response_ == UserResponse::kAcceptedWithLogs ||
+ user_response_ == UserResponse::kAcceptedWithoutLogs);
}
ChromeCleanerController::IdleReason ExpectedIdleReason() {
@@ -377,7 +414,8 @@ class ChromeCleanerControllerTest
}
if (ExpectedOnInfectedCalled() &&
- user_response_ == UserResponse::kAccepted &&
+ (user_response_ == UserResponse::kAcceptedWithLogs ||
+ user_response_ == UserResponse::kAcceptedWithoutLogs) &&
crash_point_ == CrashPoint::kAfterResponseReceived) {
return IdleReason::kCleaningFailed;
}
@@ -401,6 +439,7 @@ class ChromeCleanerControllerTest
StrictMock<MockChromeCleanerControllerObserver> mock_observer_;
ChromeCleanerController* controller_;
+ ChromeCleanerRunner::ProcessStatus cleaner_process_status_;
std::vector<Profile*> profiles_tagged_;
std::vector<Profile*> profiles_to_reset_if_tagged_;
@@ -469,6 +508,10 @@ TEST_P(ChromeCleanerControllerTest, WithMockCleanerProcess) {
controller_->ReplyWithUserResponse(profile1,
user_response_);
})));
+ // Since logs upload is enabled by default, OnLogsEnabledChanged() will be
+ // called only if the user response is kAcceptedWithoutLogs.
+ if (user_response_ == UserResponse::kAcceptedWithoutLogs)
+ EXPECT_CALL(mock_observer_, OnLogsEnabledChanged(false));
}
if (ExpectedOnCleaningCalled()) {
@@ -487,7 +530,12 @@ TEST_P(ChromeCleanerControllerTest, WithMockCleanerProcess) {
// never stop.
ASSERT_TRUE(ExpectedOnIdleCalled() || ExpectedOnRebootRequiredCalled());
run_loop.Run();
+ // Also ensure that we wait until the mock cleaner process has finished and
+ // that all tasks that posted by ChromeCleanerRunner have run.
+ content::RunAllBlockingPoolTasksUntilIdle();
+ EXPECT_NE(cleaner_process_status_.exit_code,
+ MockChromeCleanerProcess::kInternalTestFailureExitCode);
EXPECT_EQ(controller_->state(), ExpectedFinalState());
EXPECT_EQ(!files_to_delete_on_infected.empty(), ExpectedUwsFound());
EXPECT_EQ(!files_to_delete_on_cleaning.empty(),
@@ -529,7 +577,8 @@ INSTANTIATE_TEST_CASE_P(
Values(UwsFoundStatus::kNoUwsFound,
UwsFoundStatus::kUwsFoundRebootRequired,
UwsFoundStatus::kUwsFoundNoRebootRequired),
- Values(UserResponse::kAccepted,
+ Values(UserResponse::kAcceptedWithLogs,
+ UserResponse::kAcceptedWithoutLogs,
UserResponse::kDenied,
UserResponse::kDismissed)));

Powered by Google App Engine
This is Rietveld 408576698