| Index: chrome/browser/extensions/extension_install_checker_unittest.cc
|
| diff --git a/chrome/browser/extensions/extension_install_checker_unittest.cc b/chrome/browser/extensions/extension_install_checker_unittest.cc
|
| index f70d9ddce34242be4c5b38bee2b6ca13b7b94b3f..fb6b9e6253dc6a06005031cc30dd56ebb44467ec 100644
|
| --- a/chrome/browser/extensions/extension_install_checker_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_install_checker_unittest.cc
|
| @@ -18,10 +18,6 @@ const BlacklistState kBlacklistStateError = BLACKLISTED_MALWARE;
|
| const char kDummyRequirementsError[] = "Requirements error";
|
| const char kDummyPolicyError[] = "Cannot install extension";
|
|
|
| -const char kDummyPolicyError2[] = "Another policy error";
|
| -const char kDummyRequirementsError2[] = "Another requirements error";
|
| -const BlacklistState kBlacklistState2 = BLACKLISTED_SECURITY_VULNERABILITY;
|
| -
|
| } // namespace
|
|
|
| // Stubs most of the checks since we are interested in validating the logic in
|
| @@ -29,8 +25,8 @@ const BlacklistState kBlacklistState2 = BLACKLISTED_SECURITY_VULNERABILITY;
|
| // checks.
|
| class ExtensionInstallCheckerForTest : public ExtensionInstallChecker {
|
| public:
|
| - ExtensionInstallCheckerForTest()
|
| - : ExtensionInstallChecker(NULL),
|
| + ExtensionInstallCheckerForTest(int enabled_checks, bool fail_fast)
|
| + : ExtensionInstallChecker(nullptr, nullptr, enabled_checks, fail_fast),
|
| requirements_check_called_(false),
|
| blacklist_check_called_(false),
|
| policy_check_called_(false),
|
| @@ -50,21 +46,25 @@ class ExtensionInstallCheckerForTest : public ExtensionInstallChecker {
|
| bool blacklist_check_called() const { return blacklist_check_called_; }
|
| bool policy_check_called() const { return policy_check_called_; }
|
|
|
| - void MockCheckRequirements(int sequence_number) {
|
| + void MockCheckRequirements() {
|
| + if (!is_running())
|
| + return;
|
| std::vector<std::string> errors;
|
| if (!requirements_error_.empty())
|
| errors.push_back(requirements_error_);
|
| - OnRequirementsCheckDone(sequence_number, errors);
|
| + OnRequirementsCheckDone(errors);
|
| }
|
|
|
| - void MockCheckBlacklistState(int sequence_number) {
|
| - OnBlacklistStateCheckDone(sequence_number, blacklist_state_);
|
| + void MockCheckBlacklistState() {
|
| + if (!is_running())
|
| + return;
|
| + OnBlacklistStateCheckDone(blacklist_state_);
|
| }
|
|
|
| protected:
|
| void CheckRequirements() override {
|
| requirements_check_called_ = true;
|
| - MockCheckRequirements(current_sequence_number());
|
| + MockCheckRequirements();
|
| }
|
|
|
| void CheckManagementPolicy() override {
|
| @@ -75,15 +75,7 @@ class ExtensionInstallCheckerForTest : public ExtensionInstallChecker {
|
|
|
| void CheckBlacklistState() override {
|
| blacklist_check_called_ = true;
|
| - MockCheckBlacklistState(current_sequence_number());
|
| - }
|
| -
|
| - void ResetResults() override {
|
| - ExtensionInstallChecker::ResetResults();
|
| -
|
| - requirements_check_called_ = false;
|
| - blacklist_check_called_ = false;
|
| - policy_check_called_ = false;
|
| + MockCheckBlacklistState();
|
| }
|
|
|
| bool requirements_check_called_;
|
| @@ -99,6 +91,10 @@ class ExtensionInstallCheckerForTest : public ExtensionInstallChecker {
|
| // This class implements asynchronous mocks of the requirements and blacklist
|
| // checks.
|
| class ExtensionInstallCheckerAsync : public ExtensionInstallCheckerForTest {
|
| + public:
|
| + ExtensionInstallCheckerAsync(int enabled_checks, bool fail_fast)
|
| + : ExtensionInstallCheckerForTest(enabled_checks, fail_fast) {}
|
| +
|
| protected:
|
| void CheckRequirements() override {
|
| requirements_check_called_ = true;
|
| @@ -106,7 +102,7 @@ class ExtensionInstallCheckerAsync : public ExtensionInstallCheckerForTest {
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&ExtensionInstallCheckerForTest::MockCheckRequirements,
|
| - base::Unretained(this), current_sequence_number()));
|
| + base::Unretained(this)));
|
| }
|
|
|
| void CheckBlacklistState() override {
|
| @@ -115,7 +111,7 @@ class ExtensionInstallCheckerAsync : public ExtensionInstallCheckerForTest {
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&ExtensionInstallCheckerForTest::MockCheckBlacklistState,
|
| - base::Unretained(this), current_sequence_number()));
|
| + base::Unretained(this)));
|
| }
|
| };
|
|
|
| @@ -148,40 +144,6 @@ class ExtensionInstallCheckerTest : public testing::Test {
|
| ExtensionInstallCheckerTest() {}
|
| ~ExtensionInstallCheckerTest() override {}
|
|
|
| - void RunSecondInvocation(ExtensionInstallCheckerForTest* checker,
|
| - int checks_failed) {
|
| - EXPECT_GT(checks_failed, 0);
|
| - EXPECT_FALSE(checker->is_running());
|
| - ValidateExpectedCalls(ExtensionInstallChecker::CHECK_ALL, *checker);
|
| -
|
| - // Set up different return values.
|
| - checker->set_blacklist_state(kBlacklistState2);
|
| - checker->set_policy_check_error(kDummyPolicyError2);
|
| - checker->set_requirements_error(kDummyRequirementsError2);
|
| -
|
| - // Run the install checker again and ensure the second set of return values
|
| - // is received.
|
| - checker->Start(
|
| - ExtensionInstallChecker::CHECK_ALL,
|
| - false /* fail fast */,
|
| - base::Bind(&ExtensionInstallCheckerTest::ValidateSecondInvocation,
|
| - base::Unretained(this),
|
| - checker));
|
| - }
|
| -
|
| - void ValidateSecondInvocation(ExtensionInstallCheckerForTest* checker,
|
| - int checks_failed) {
|
| - EXPECT_FALSE(checker->is_running());
|
| - EXPECT_EQ(ExtensionInstallChecker::CHECK_REQUIREMENTS |
|
| - ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY,
|
| - checks_failed);
|
| - ValidateExpectedCalls(ExtensionInstallChecker::CHECK_ALL, *checker);
|
| -
|
| - EXPECT_EQ(kBlacklistState2, checker->blacklist_state());
|
| - ExpectPolicyError(kDummyPolicyError2, *checker);
|
| - ExpectRequirementsError(kDummyRequirementsError2, *checker);
|
| - }
|
| -
|
| protected:
|
| void SetAllErrors(ExtensionInstallCheckerForTest* checker) {
|
| checker->set_blacklist_state(kBlacklistStateError);
|
| @@ -242,14 +204,10 @@ class ExtensionInstallCheckerTest : public testing::Test {
|
| }
|
|
|
| void RunChecker(ExtensionInstallCheckerForTest* checker,
|
| - bool fail_fast,
|
| - int checks_to_run,
|
| int expected_checks_run,
|
| int expected_result) {
|
| CheckObserver observer;
|
| - checker->Start(checks_to_run,
|
| - fail_fast,
|
| - base::Bind(&CheckObserver::OnChecksComplete,
|
| + checker->Start(base::Bind(&CheckObserver::OnChecksComplete,
|
| base::Unretained(&observer)));
|
| observer.Wait();
|
|
|
| @@ -261,8 +219,6 @@ class ExtensionInstallCheckerTest : public testing::Test {
|
|
|
| void DoRunAllChecksPass(ExtensionInstallCheckerForTest* checker) {
|
| RunChecker(checker,
|
| - false /* fail fast */,
|
| - ExtensionInstallChecker::CHECK_ALL,
|
| ExtensionInstallChecker::CHECK_ALL,
|
| 0);
|
|
|
| @@ -274,8 +230,6 @@ class ExtensionInstallCheckerTest : public testing::Test {
|
| void DoRunAllChecksFail(ExtensionInstallCheckerForTest* checker) {
|
| SetAllErrors(checker);
|
| RunChecker(checker,
|
| - false /* fail fast */,
|
| - ExtensionInstallChecker::CHECK_ALL,
|
| ExtensionInstallChecker::CHECK_ALL,
|
| ExtensionInstallChecker::CHECK_ALL);
|
|
|
| @@ -284,35 +238,34 @@ class ExtensionInstallCheckerTest : public testing::Test {
|
| ExpectBlacklistError(*checker);
|
| }
|
|
|
| - void DoRunSubsetOfChecks(ExtensionInstallCheckerForTest* checker) {
|
| - // Test check set 1.
|
| - int tests_to_run = ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY |
|
| - ExtensionInstallChecker::CHECK_REQUIREMENTS;
|
| - SetAllErrors(checker);
|
| - RunChecker(checker, false, tests_to_run, tests_to_run, tests_to_run);
|
| -
|
| - ExpectRequirementsError(*checker);
|
| - ExpectPolicyError(*checker);
|
| - ExpectBlacklistPass(*checker);
|
| -
|
| - // Test check set 2.
|
| - tests_to_run = ExtensionInstallChecker::CHECK_BLACKLIST |
|
| - ExtensionInstallChecker::CHECK_REQUIREMENTS;
|
| - SetAllErrors(checker);
|
| - RunChecker(checker, false, tests_to_run, tests_to_run, tests_to_run);
|
| -
|
| - ExpectRequirementsError(*checker);
|
| - ExpectPolicyPass(*checker);
|
| - ExpectBlacklistError(*checker);
|
| -
|
| - // Test a single check.
|
| - tests_to_run = ExtensionInstallChecker::CHECK_BLACKLIST;
|
| - SetAllErrors(checker);
|
| - RunChecker(checker, false, tests_to_run, tests_to_run, tests_to_run);
|
| -
|
| - ExpectRequirementsPass(*checker);
|
| - ExpectPolicyPass(*checker);
|
| - ExpectBlacklistError(*checker);
|
| + void DoRunSubsetOfChecks(int checks_to_run) {
|
| + ExtensionInstallCheckerForTest sync_checker(checks_to_run,
|
| + /*fail_fast=*/false);
|
| + ExtensionInstallCheckerAsync async_checker(checks_to_run,
|
| + /*fail_fast=*/false);
|
| + ExtensionInstallCheckerForTest* checkers[] = {
|
| + &sync_checker, &async_checker,
|
| + };
|
| +
|
| + for (auto* checker : checkers) {
|
| + SetAllErrors(checker);
|
| + RunChecker(checker, checks_to_run, checks_to_run);
|
| +
|
| + if (checks_to_run & ExtensionInstallChecker::CHECK_REQUIREMENTS)
|
| + ExpectRequirementsError(*checker);
|
| + else
|
| + ExpectRequirementsPass(*checker);
|
| +
|
| + if (checks_to_run & ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY)
|
| + ExpectPolicyError(*checker);
|
| + else
|
| + ExpectPolicyPass(*checker);
|
| +
|
| + if (checks_to_run & ExtensionInstallChecker::CHECK_BLACKLIST)
|
| + ExpectBlacklistError(*checker);
|
| + else
|
| + ExpectBlacklistPass(*checker);
|
| + }
|
| }
|
|
|
| private:
|
| @@ -320,108 +273,66 @@ class ExtensionInstallCheckerTest : public testing::Test {
|
| base::MessageLoop message_loop;
|
| };
|
|
|
| -class ExtensionInstallCheckerMultipleInvocationTest
|
| - : public ExtensionInstallCheckerTest {
|
| - public:
|
| - ExtensionInstallCheckerMultipleInvocationTest() : callback_count_(0) {}
|
| - ~ExtensionInstallCheckerMultipleInvocationTest() override {}
|
| -
|
| - void RunSecondInvocation(ExtensionInstallCheckerForTest* checker,
|
| - int checks_failed) {
|
| - ASSERT_EQ(0, callback_count_);
|
| - ++callback_count_;
|
| - EXPECT_FALSE(checker->is_running());
|
| - EXPECT_GT(checks_failed, 0);
|
| - ValidateExpectedCalls(ExtensionInstallChecker::CHECK_ALL, *checker);
|
| -
|
| - // Set up different return values.
|
| - checker->set_blacklist_state(kBlacklistState2);
|
| - checker->set_policy_check_error(kDummyPolicyError2);
|
| - checker->set_requirements_error(kDummyRequirementsError2);
|
| -
|
| - // Run the install checker again and ensure the second set of return values
|
| - // is received.
|
| - checker->Start(ExtensionInstallChecker::CHECK_ALL,
|
| - false /* fail fast */,
|
| - base::Bind(&ExtensionInstallCheckerMultipleInvocationTest::
|
| - ValidateSecondInvocation,
|
| - base::Unretained(this),
|
| - checker));
|
| - }
|
| -
|
| - void ValidateSecondInvocation(ExtensionInstallCheckerForTest* checker,
|
| - int checks_failed) {
|
| - ASSERT_EQ(1, callback_count_);
|
| - EXPECT_FALSE(checker->is_running());
|
| - EXPECT_EQ(ExtensionInstallChecker::CHECK_REQUIREMENTS |
|
| - ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY,
|
| - checks_failed);
|
| - ValidateExpectedCalls(ExtensionInstallChecker::CHECK_ALL, *checker);
|
| -
|
| - EXPECT_EQ(kBlacklistState2, checker->blacklist_state());
|
| - ExpectPolicyError(kDummyPolicyError2, *checker);
|
| - ExpectRequirementsError(kDummyRequirementsError2, *checker);
|
| - }
|
| -
|
| - private:
|
| - int callback_count_;
|
| -};
|
| -
|
| // Test the case where all tests pass.
|
| TEST_F(ExtensionInstallCheckerTest, AllSucceeded) {
|
| - ExtensionInstallCheckerForTest sync_checker;
|
| + ExtensionInstallCheckerForTest sync_checker(
|
| + ExtensionInstallChecker::CHECK_ALL, /*fail_fast=*/false);
|
| DoRunAllChecksPass(&sync_checker);
|
|
|
| - ExtensionInstallCheckerAsync async_checker;
|
| + ExtensionInstallCheckerAsync async_checker(ExtensionInstallChecker::CHECK_ALL,
|
| + /*fail_fast=*/false);
|
| DoRunAllChecksPass(&async_checker);
|
| }
|
|
|
| // Test the case where all tests fail.
|
| TEST_F(ExtensionInstallCheckerTest, AllFailed) {
|
| - ExtensionInstallCheckerForTest sync_checker;
|
| + ExtensionInstallCheckerForTest sync_checker(
|
| + ExtensionInstallChecker::CHECK_ALL, /*fail_fast=*/false);
|
| DoRunAllChecksFail(&sync_checker);
|
|
|
| - ExtensionInstallCheckerAsync async_checker;
|
| + ExtensionInstallCheckerAsync async_checker(ExtensionInstallChecker::CHECK_ALL,
|
| + /*fail_fast=*/false);
|
| DoRunAllChecksFail(&async_checker);
|
| }
|
|
|
| // Test running only a subset of tests.
|
| TEST_F(ExtensionInstallCheckerTest, RunSubsetOfChecks) {
|
| - ExtensionInstallCheckerForTest sync_checker;
|
| - ExtensionInstallCheckerAsync async_checker;
|
| - DoRunSubsetOfChecks(&sync_checker);
|
| - DoRunSubsetOfChecks(&async_checker);
|
| + DoRunSubsetOfChecks(ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY |
|
| + ExtensionInstallChecker::CHECK_REQUIREMENTS);
|
| + DoRunSubsetOfChecks(ExtensionInstallChecker::CHECK_BLACKLIST |
|
| + ExtensionInstallChecker::CHECK_REQUIREMENTS);
|
| + DoRunSubsetOfChecks(ExtensionInstallChecker::CHECK_BLACKLIST);
|
| }
|
|
|
| // Test fail fast with synchronous callbacks.
|
| TEST_F(ExtensionInstallCheckerTest, FailFastSync) {
|
| // This test assumes some internal knowledge of the implementation - that
|
| // the policy check runs first.
|
| - ExtensionInstallCheckerForTest checker;
|
| - SetAllErrors(&checker);
|
| - RunChecker(&checker,
|
| - true /* fail fast */,
|
| - ExtensionInstallChecker::CHECK_ALL,
|
| - ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY,
|
| - ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY);
|
| -
|
| - ExpectRequirementsPass(checker);
|
| - ExpectPolicyError(checker);
|
| - ExpectBlacklistPass(checker);
|
| -
|
| - // This test assumes some internal knowledge of the implementation - that
|
| - // the requirements check runs before the blacklist check.
|
| - SetAllErrors(&checker);
|
| - RunChecker(&checker,
|
| - true /* fail fast */,
|
| - ExtensionInstallChecker::CHECK_REQUIREMENTS |
|
| - ExtensionInstallChecker::CHECK_BLACKLIST,
|
| - ExtensionInstallChecker::CHECK_REQUIREMENTS,
|
| - ExtensionInstallChecker::CHECK_REQUIREMENTS);
|
| + {
|
| + ExtensionInstallCheckerForTest checker(ExtensionInstallChecker::CHECK_ALL,
|
| + /*fail_fast=*/true);
|
| + SetAllErrors(&checker);
|
| + RunChecker(&checker, ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY,
|
| + ExtensionInstallChecker::CHECK_MANAGEMENT_POLICY);
|
| +
|
| + ExpectRequirementsPass(checker);
|
| + ExpectPolicyError(checker);
|
| + ExpectBlacklistPass(checker);
|
| + }
|
|
|
| - ExpectRequirementsError(checker);
|
| - ExpectPolicyPass(checker);
|
| - ExpectBlacklistPass(checker);
|
| + {
|
| + ExtensionInstallCheckerForTest checker(
|
| + ExtensionInstallChecker::CHECK_REQUIREMENTS |
|
| + ExtensionInstallChecker::CHECK_BLACKLIST,
|
| + /*fail_fast=*/true);
|
| + SetAllErrors(&checker);
|
| + RunChecker(&checker, ExtensionInstallChecker::CHECK_REQUIREMENTS,
|
| + ExtensionInstallChecker::CHECK_REQUIREMENTS);
|
| +
|
| + ExpectRequirementsError(checker);
|
| + ExpectPolicyPass(checker);
|
| + ExpectBlacklistPass(checker);
|
| + }
|
| }
|
|
|
| // Test fail fast with asynchronous callbacks.
|
| @@ -430,7 +341,9 @@ TEST_F(ExtensionInstallCheckerTest, FailFastAsync) {
|
| // the requirements check runs before the blacklist check. Both checks should
|
| // be called, but the requirements check callback arrives first and the
|
| // blacklist result will be discarded.
|
| - ExtensionInstallCheckerAsync checker;
|
| + ExtensionInstallCheckerAsync checker(ExtensionInstallChecker::CHECK_ALL,
|
| + /*fail_fast=*/true);
|
| +
|
| SetAllErrors(&checker);
|
|
|
| // The policy check is synchronous and needs to pass for the other tests to
|
| @@ -438,8 +351,6 @@ TEST_F(ExtensionInstallCheckerTest, FailFastAsync) {
|
| checker.set_policy_check_error(std::string());
|
|
|
| RunChecker(&checker,
|
| - true /* fail fast */,
|
| - ExtensionInstallChecker::CHECK_ALL,
|
| ExtensionInstallChecker::CHECK_ALL,
|
| ExtensionInstallChecker::CHECK_REQUIREMENTS);
|
|
|
| @@ -448,41 +359,4 @@ TEST_F(ExtensionInstallCheckerTest, FailFastAsync) {
|
| ExpectBlacklistPass(checker);
|
| }
|
|
|
| -// Test multiple invocations of the install checker. Wait for all checks to
|
| -// complete.
|
| -TEST_F(ExtensionInstallCheckerMultipleInvocationTest, CompleteAll) {
|
| - ExtensionInstallCheckerAsync checker;
|
| - SetAllErrors(&checker);
|
| -
|
| - // Start the second check as soon as the callback of the first run is invoked.
|
| - checker.Start(
|
| - ExtensionInstallChecker::CHECK_ALL,
|
| - false /* fail fast */,
|
| - base::Bind(
|
| - &ExtensionInstallCheckerMultipleInvocationTest::RunSecondInvocation,
|
| - base::Unretained(this),
|
| - &checker));
|
| - base::RunLoop().RunUntilIdle();
|
| -}
|
| -
|
| -// Test multiple invocations of the install checker and fail fast.
|
| -TEST_F(ExtensionInstallCheckerMultipleInvocationTest, FailFast) {
|
| - ExtensionInstallCheckerAsync checker;
|
| - SetAllErrors(&checker);
|
| -
|
| - // The policy check is synchronous and needs to pass for the other tests to
|
| - // run.
|
| - checker.set_policy_check_error(std::string());
|
| -
|
| - // Start the second check as soon as the callback of the first run is invoked.
|
| - checker.Start(
|
| - ExtensionInstallChecker::CHECK_ALL,
|
| - true /* fail fast */,
|
| - base::Bind(
|
| - &ExtensionInstallCheckerMultipleInvocationTest::RunSecondInvocation,
|
| - base::Unretained(this),
|
| - &checker));
|
| - base::RunLoop().RunUntilIdle();
|
| -}
|
| -
|
| } // namespace extensions
|
|
|