| Index: components/password_manager/core/browser/password_form_manager_unittest.cc
 | 
| diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc
 | 
| index e4ed9f70800446feb8141ee565fbee0a998aad22..ebef05d0719f3cf5d1e6bcfbdbb768eb7838fb05 100644
 | 
| --- a/components/password_manager/core/browser/password_form_manager_unittest.cc
 | 
| +++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
 | 
| @@ -387,9 +387,9 @@ class PasswordFormManagerTest : public testing::Test {
 | 
|      saved_match_.form_data.fields.push_back(field);
 | 
|  
 | 
|      password_manager_.reset(new PasswordManager(&client_));
 | 
| -    form_manager_.reset(new PasswordFormManager(
 | 
| +    form_manager_ = base::MakeRefCounted<PasswordFormManager>(
 | 
|          password_manager_.get(), &client_, client_.driver(), observed_form_,
 | 
| -        base::MakeUnique<NiceMock<MockFormSaver>>(), &fake_form_fetcher_));
 | 
| +        base::MakeUnique<NiceMock<MockFormSaver>>(), &fake_form_fetcher_);
 | 
|    }
 | 
|  
 | 
|    // Save saved_match() for observed_form() where |observed_form_data|,
 | 
| @@ -406,9 +406,10 @@ class PasswordFormManagerTest : public testing::Test {
 | 
|  
 | 
|      FakeFormFetcher fetcher;
 | 
|      fetcher.Fetch();
 | 
| -    PasswordFormManager form_manager(
 | 
| -        password_manager(), client(), client()->driver(), form,
 | 
| -        base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
 | 
| +    scoped_refptr<PasswordFormManager> form_manager(
 | 
| +        base::MakeRefCounted<PasswordFormManager>(
 | 
| +            password_manager(), client(), client()->driver(), form,
 | 
| +            base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
 | 
|      PasswordForm match = CreateSavedMatch(false);
 | 
|      match.generation_upload_status = status;
 | 
|      match.times_used = times_used;
 | 
| @@ -437,8 +438,8 @@ class PasswordFormManagerTest : public testing::Test {
 | 
|      if (field_type) {
 | 
|        // Show the password generation popup to check that the generation vote
 | 
|        // would be ignored.
 | 
| -      form_manager.set_generation_element(saved_match()->password_element);
 | 
| -      form_manager.set_generation_popup_was_shown(true);
 | 
| +      form_manager->set_generation_element(saved_match()->password_element);
 | 
| +      form_manager->set_generation_popup_was_shown(true);
 | 
|        expect_generation_vote =
 | 
|            *field_type != autofill::ACCOUNT_CREATION_PASSWORD;
 | 
|  
 | 
| @@ -459,9 +460,9 @@ class PasswordFormManagerTest : public testing::Test {
 | 
|                    StartUploadRequest(_, _, _, _, _))
 | 
|            .Times(0);
 | 
|      }
 | 
| -    form_manager.ProvisionallySave(
 | 
| +    form_manager->ProvisionallySave(
 | 
|          form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
| -    form_manager.Save();
 | 
| +    form_manager->Save();
 | 
|      Mock::VerifyAndClearExpectations(
 | 
|          client()->mock_driver()->mock_autofill_download_manager());
 | 
|    }
 | 
| @@ -495,9 +496,10 @@ class PasswordFormManagerTest : public testing::Test {
 | 
|  
 | 
|      FakeFormFetcher fetcher;
 | 
|      fetcher.Fetch();
 | 
| -    PasswordFormManager form_manager(
 | 
| -        password_manager(), client(), client()->driver(), *observed_form(),
 | 
| -        base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
 | 
| +    scoped_refptr<PasswordFormManager> form_manager(
 | 
| +        base::MakeRefCounted<PasswordFormManager>(
 | 
| +            password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +            base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
 | 
|      fetcher.SetNonFederated({saved_match()}, 0u);
 | 
|  
 | 
|      // User submits current and new credentials to the observed form.
 | 
| @@ -507,21 +509,21 @@ class PasswordFormManagerTest : public testing::Test {
 | 
|      submitted_form.password_value = saved_match()->password_value;
 | 
|      submitted_form.new_password_value = ASCIIToUTF16("test2");
 | 
|      submitted_form.preferred = true;
 | 
| -    form_manager.ProvisionallySave(
 | 
| +    form_manager->ProvisionallySave(
 | 
|          submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|  
 | 
|      // Successful login. The PasswordManager would instruct PasswordFormManager
 | 
|      // to update.
 | 
| -    EXPECT_FALSE(form_manager.IsNewLogin());
 | 
| +    EXPECT_FALSE(form_manager->IsNewLogin());
 | 
|      EXPECT_FALSE(
 | 
| -        form_manager.is_possible_change_password_form_without_username());
 | 
| +        form_manager->is_possible_change_password_form_without_username());
 | 
|  
 | 
|      // By now, the PasswordFormManager should have promoted the new password
 | 
|      // value already to be the current password, and should no longer maintain
 | 
|      // any info about the new password value.
 | 
|      EXPECT_EQ(submitted_form.new_password_value,
 | 
| -              form_manager.pending_credentials().password_value);
 | 
| -    EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
 | 
| +              form_manager->pending_credentials().password_value);
 | 
| +    EXPECT_TRUE(form_manager->pending_credentials().new_password_value.empty());
 | 
|  
 | 
|      std::map<base::string16, autofill::ServerFieldType> expected_types;
 | 
|      expected_types[ASCIIToUTF16("full_name")] = autofill::UNKNOWN_TYPE;
 | 
| @@ -557,13 +559,13 @@ class PasswordFormManagerTest : public testing::Test {
 | 
|  
 | 
|      switch (field_type) {
 | 
|        case autofill::NEW_PASSWORD:
 | 
| -        form_manager.Update(*saved_match());
 | 
| +        form_manager->Update(*saved_match());
 | 
|          break;
 | 
|        case autofill::PROBABLY_NEW_PASSWORD:
 | 
| -        form_manager.OnNoInteraction(true /* it is an update */);
 | 
| +        form_manager->OnNoInteraction(true /* it is an update */);
 | 
|          break;
 | 
|        case autofill::NOT_NEW_PASSWORD:
 | 
| -        form_manager.OnNopeUpdateClicked();
 | 
| +        form_manager->OnNopeUpdateClicked();
 | 
|          break;
 | 
|        default:
 | 
|          NOTREACHED();
 | 
| @@ -638,9 +640,10 @@ class PasswordFormManagerTest : public testing::Test {
 | 
|  
 | 
|      FakeFormFetcher fetcher;
 | 
|      fetcher.Fetch();
 | 
| -    PasswordFormManager form_manager(
 | 
| -        password_manager(), client(), client()->driver(), form,
 | 
| -        base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
 | 
| +    scoped_refptr<PasswordFormManager> form_manager(
 | 
| +        base::MakeRefCounted<PasswordFormManager>(
 | 
| +            password_manager(), client(), client()->driver(), form,
 | 
| +            base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
 | 
|  
 | 
|      fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
 | 
|  
 | 
| @@ -649,13 +652,13 @@ class PasswordFormManagerTest : public testing::Test {
 | 
|      if (interaction == SAVE)
 | 
|        expected_available_field_types.insert(autofill::PASSWORD);
 | 
|  
 | 
| -    form_manager.set_is_manual_generation(is_manual_generation);
 | 
| +    form_manager->set_is_manual_generation(is_manual_generation);
 | 
|      base::string16 generation_element = is_change_password_form
 | 
|                                              ? form.new_password_element
 | 
|                                              : form.password_element;
 | 
| -    form_manager.set_generation_element(generation_element);
 | 
| -    form_manager.set_generation_popup_was_shown(true);
 | 
| -    form_manager.set_has_generated_password(has_generated_password);
 | 
| +    form_manager->set_generation_element(generation_element);
 | 
| +    form_manager->set_generation_popup_was_shown(true);
 | 
| +    form_manager->set_has_generated_password(has_generated_password);
 | 
|  
 | 
|      // Figure out expected generation event type.
 | 
|      autofill::AutofillUploadContents::Field::PasswordGenerationType
 | 
| @@ -676,17 +679,17 @@ class PasswordFormManagerTest : public testing::Test {
 | 
|                  form_structure.FormSignatureAsStr(), expected_generation_types),
 | 
|              false, expected_available_field_types, std::string(), true));
 | 
|  
 | 
| -    form_manager.ProvisionallySave(
 | 
| +    form_manager->ProvisionallySave(
 | 
|          submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|      switch (interaction) {
 | 
|        case SAVE:
 | 
| -        form_manager.Save();
 | 
| +        form_manager->Save();
 | 
|          break;
 | 
|        case NEVER:
 | 
| -        form_manager.OnNeverClicked();
 | 
| +        form_manager->OnNeverClicked();
 | 
|          break;
 | 
|        case NO_INTERACTION:
 | 
| -        form_manager.OnNoInteraction(false /* not an update prompt*/);
 | 
| +        form_manager->OnNoInteraction(false /* not an update prompt*/);
 | 
|          break;
 | 
|      }
 | 
|      Mock::VerifyAndClearExpectations(
 | 
| @@ -750,9 +753,10 @@ class PasswordFormManagerTest : public testing::Test {
 | 
|        const char* filled_username,
 | 
|        const char* filled_password,
 | 
|        const char* submitted_password = nullptr) {
 | 
| -    PasswordFormManager form_manager(
 | 
| -        password_manager(), client(), client()->driver(), *observed_form(),
 | 
| -        base::MakeUnique<NiceMock<MockFormSaver>>(), fetcher);
 | 
| +    scoped_refptr<PasswordFormManager> form_manager(
 | 
| +        base::MakeRefCounted<PasswordFormManager>(
 | 
| +            password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +            base::MakeUnique<NiceMock<MockFormSaver>>(), fetcher));
 | 
|  
 | 
|      EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
 | 
|                  StartUploadRequest(_, _, _, _, _))
 | 
| @@ -788,13 +792,13 @@ class PasswordFormManagerTest : public testing::Test {
 | 
|            submitted_password ? base::ASCIIToUTF16(submitted_password)
 | 
|                               : base::ASCIIToUTF16(filled_password);
 | 
|  
 | 
| -      form_manager.ProvisionallySave(
 | 
| +      form_manager->ProvisionallySave(
 | 
|            submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|        if (submit_result == SimulatedSubmitResult::PASSED) {
 | 
| -        form_manager.LogSubmitPassed();
 | 
| -        form_manager.Save();
 | 
| +        form_manager->LogSubmitPassed();
 | 
| +        form_manager->Save();
 | 
|        } else {
 | 
| -        form_manager.LogSubmitFailed();
 | 
| +        form_manager->LogSubmitFailed();
 | 
|        }
 | 
|      }
 | 
|    }
 | 
| @@ -811,7 +815,7 @@ class PasswordFormManagerTest : public testing::Test {
 | 
|    // Define |fake_form_fetcher_| before |form_manager_|, because the former
 | 
|    // needs to outlive the latter.
 | 
|    FakeFormFetcher fake_form_fetcher_;
 | 
| -  std::unique_ptr<PasswordFormManager> form_manager_;
 | 
| +  scoped_refptr<PasswordFormManager> form_manager_;
 | 
|  };
 | 
|  
 | 
|  class PasswordFormManagerFillOnAccountSelectTest
 | 
| @@ -930,9 +934,10 @@ TEST_F(PasswordFormManagerTest, TestBlacklistMatching) {
 | 
|    observed_form()->signon_realm = "http://accounts.google.com";
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), *observed_form(),
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|  
 | 
|    // Doesn't apply because it is just a PSL match of the observed form.
 | 
|    PasswordForm blacklisted_psl = *observed_form();
 | 
| @@ -975,12 +980,12 @@ TEST_F(PasswordFormManagerTest, TestBlacklistMatching) {
 | 
|                                                saved_match()};
 | 
|    fetcher.SetNonFederated(matches, 0u);
 | 
|  
 | 
| -  EXPECT_TRUE(form_manager.IsBlacklisted());
 | 
| -  EXPECT_THAT(form_manager.blacklisted_matches(),
 | 
| +  EXPECT_TRUE(form_manager->IsBlacklisted());
 | 
| +  EXPECT_THAT(form_manager->blacklisted_matches(),
 | 
|                UnorderedElementsAre(Pointee(blacklisted_match),
 | 
|                                     Pointee(blacklisted_match2)));
 | 
| -  EXPECT_EQ(1u, form_manager.best_matches().size());
 | 
| -  EXPECT_EQ(*saved_match(), *form_manager.preferred_match());
 | 
| +  EXPECT_EQ(1u, form_manager->best_matches().size());
 | 
| +  EXPECT_EQ(*saved_match(), *form_manager->preferred_match());
 | 
|  }
 | 
|  
 | 
|  // Test that even in the presence of blacklisted matches, the non-blacklisted
 | 
| @@ -1070,9 +1075,10 @@ TEST_F(PasswordFormManagerTest, TestNewLoginFromNewPasswordElement) {
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), *observed_form(),
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|    fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
 | 
|  
 | 
|    // User enters current and new credentials to the observed form.
 | 
| @@ -1081,28 +1087,28 @@ TEST_F(PasswordFormManagerTest, TestNewLoginFromNewPasswordElement) {
 | 
|    credentials.password_value = ASCIIToUTF16("oldpassword");
 | 
|    credentials.new_password_value = ASCIIToUTF16("newpassword");
 | 
|    credentials.preferred = true;
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|  
 | 
|    // Successful login. The PasswordManager would instruct PasswordFormManager
 | 
|    // to save, which should know this is a new login.
 | 
| -  EXPECT_TRUE(form_manager.IsNewLogin());
 | 
| -  EXPECT_EQ(credentials.origin, form_manager.pending_credentials().origin);
 | 
| +  EXPECT_TRUE(form_manager->IsNewLogin());
 | 
| +  EXPECT_EQ(credentials.origin, form_manager->pending_credentials().origin);
 | 
|    EXPECT_EQ(credentials.signon_realm,
 | 
| -            form_manager.pending_credentials().signon_realm);
 | 
| -  EXPECT_EQ(credentials.action, form_manager.pending_credentials().action);
 | 
| -  EXPECT_TRUE(form_manager.pending_credentials().preferred);
 | 
| +            form_manager->pending_credentials().signon_realm);
 | 
| +  EXPECT_EQ(credentials.action, form_manager->pending_credentials().action);
 | 
| +  EXPECT_TRUE(form_manager->pending_credentials().preferred);
 | 
|    EXPECT_EQ(credentials.username_value,
 | 
| -            form_manager.pending_credentials().username_value);
 | 
| +            form_manager->pending_credentials().username_value);
 | 
|  
 | 
|    // By this point, the PasswordFormManager should have promoted the new
 | 
|    // password value to be the current password, and should have wiped the
 | 
|    // password element name: it is likely going to be different on a login
 | 
|    // form, so it is not worth remembering them.
 | 
|    EXPECT_EQ(credentials.new_password_value,
 | 
| -            form_manager.pending_credentials().password_value);
 | 
| -  EXPECT_TRUE(form_manager.pending_credentials().password_element.empty());
 | 
| -  EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
 | 
| +            form_manager->pending_credentials().password_value);
 | 
| +  EXPECT_TRUE(form_manager->pending_credentials().password_element.empty());
 | 
| +  EXPECT_TRUE(form_manager->pending_credentials().new_password_value.empty());
 | 
|  }
 | 
|  
 | 
|  TEST_F(PasswordFormManagerTest, TestUpdatePassword) {
 | 
| @@ -1153,9 +1159,10 @@ TEST_F(PasswordFormManagerTest, TestUpdatePasswordFromNewPasswordElement) {
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), *observed_form(),
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|    fetcher.SetNonFederated({saved_match()}, 0u);
 | 
|  
 | 
|    // User submits current and new credentials to the observed form.
 | 
| @@ -1164,28 +1171,28 @@ TEST_F(PasswordFormManagerTest, TestUpdatePasswordFromNewPasswordElement) {
 | 
|    credentials.password_value = saved_match()->password_value;
 | 
|    credentials.new_password_value = ASCIIToUTF16("test2");
 | 
|    credentials.preferred = true;
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|  
 | 
|    // Successful login. The PasswordManager would instruct PasswordFormManager
 | 
|    // to save, and since this is an update, it should know not to save as a new
 | 
|    // login.
 | 
| -  EXPECT_FALSE(form_manager.IsNewLogin());
 | 
| +  EXPECT_FALSE(form_manager->IsNewLogin());
 | 
|  
 | 
|    // By now, the PasswordFormManager should have promoted the new password value
 | 
|    // already to be the current password, and should no longer maintain any info
 | 
|    // about the new password.
 | 
|    EXPECT_EQ(credentials.new_password_value,
 | 
| -            form_manager.pending_credentials().password_value);
 | 
| -  EXPECT_TRUE(form_manager.pending_credentials().new_password_element.empty());
 | 
| -  EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
 | 
| +            form_manager->pending_credentials().password_value);
 | 
| +  EXPECT_TRUE(form_manager->pending_credentials().new_password_element.empty());
 | 
| +  EXPECT_TRUE(form_manager->pending_credentials().new_password_value.empty());
 | 
|  
 | 
|    // Trigger saving to exercise some special case handling for updating.
 | 
|    PasswordForm new_credentials;
 | 
| -  EXPECT_CALL(MockFormSaver::Get(&form_manager), Update(_, _, _, nullptr))
 | 
| +  EXPECT_CALL(MockFormSaver::Get(form_manager.get()), Update(_, _, _, nullptr))
 | 
|        .WillOnce(testing::SaveArg<0>(&new_credentials));
 | 
|  
 | 
| -  form_manager.Save();
 | 
| +  form_manager->Save();
 | 
|  
 | 
|    // No meta-information should be updated, only the password.
 | 
|    EXPECT_EQ(credentials.new_password_value, new_credentials.password_value);
 | 
| @@ -1204,9 +1211,10 @@ TEST_F(PasswordFormManagerTest, TestIgnoreResult_Paths) {
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), observed,
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), observed,
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|  
 | 
|    PasswordForm saved_form = observed;
 | 
|    saved_form.origin = GURL("https://accounts.google.com/a/OtherLoginAuth");
 | 
| @@ -1214,8 +1222,8 @@ TEST_F(PasswordFormManagerTest, TestIgnoreResult_Paths) {
 | 
|    fetcher.SetNonFederated({&saved_form}, 0u);
 | 
|  
 | 
|    // Different paths for action / origin are okay.
 | 
| -  EXPECT_EQ(1u, form_manager.best_matches().size());
 | 
| -  EXPECT_EQ(*form_manager.best_matches().begin()->second, saved_form);
 | 
| +  EXPECT_EQ(1u, form_manager->best_matches().size());
 | 
| +  EXPECT_EQ(*form_manager->best_matches().begin()->second, saved_form);
 | 
|  }
 | 
|  
 | 
|  // Test that saved empty action URL is updated with the submitted action URL.
 | 
| @@ -1375,9 +1383,10 @@ TEST_F(PasswordFormManagerTest,
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), signup_form,
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), signup_form,
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|    EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_));
 | 
|    PasswordForm simulated_result = CreateSavedMatch(false);
 | 
|    fetcher.SetNonFederated({&simulated_result}, 0u);
 | 
| @@ -1527,9 +1536,10 @@ TEST_F(PasswordFormManagerTest, TestUpdateIncompleteCredentials) {
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), encountered_form,
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), encountered_form,
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|  
 | 
|    PasswordForm incomplete_form;
 | 
|    incomplete_form.origin = GURL("http://accounts.google.com/LoginAuth");
 | 
| @@ -1555,16 +1565,16 @@ TEST_F(PasswordFormManagerTest, TestUpdateIncompleteCredentials) {
 | 
|    // Feed the incomplete credentials to the manager.
 | 
|    fetcher.SetNonFederated({&incomplete_form}, 0u);
 | 
|  
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        complete_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|    // By now that form has been used once.
 | 
|    complete_form.times_used = 1;
 | 
|    obsolete_form.times_used = 1;
 | 
|  
 | 
|    // Check that PasswordStore receives an update request with the complete form.
 | 
| -  EXPECT_CALL(MockFormSaver::Get(&form_manager),
 | 
| +  EXPECT_CALL(MockFormSaver::Get(form_manager.get()),
 | 
|                Update(complete_form, _, _, Pointee(obsolete_form)));
 | 
| -  form_manager.Save();
 | 
| +  form_manager->Save();
 | 
|  }
 | 
|  
 | 
|  // Test that public-suffix-matched credentials score lower than same-origin
 | 
| @@ -1706,10 +1716,11 @@ TEST_F(PasswordFormManagerTest, InvalidActionURLsDoNotMatch) {
 | 
|                     PasswordFormManager::RESULT_ACTION_MATCH);
 | 
|    // Then when the observed form has an invalid URL:
 | 
|    PasswordForm valid_action_form(*observed_form());
 | 
| -  PasswordFormManager invalid_manager(
 | 
| -      password_manager(), client(), client()->driver(), invalid_action_form,
 | 
| -      base::MakeUnique<MockFormSaver>(), fake_form_fetcher());
 | 
| -  EXPECT_EQ(0, invalid_manager.DoesManage(valid_action_form, nullptr) &
 | 
| +  scoped_refptr<PasswordFormManager> invalid_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), invalid_action_form,
 | 
| +          base::MakeUnique<MockFormSaver>(), fake_form_fetcher()));
 | 
| +  EXPECT_EQ(0, invalid_manager->DoesManage(valid_action_form, nullptr) &
 | 
|                     PasswordFormManager::RESULT_ACTION_MATCH);
 | 
|  }
 | 
|  
 | 
| @@ -1723,10 +1734,11 @@ TEST_F(PasswordFormManagerTest, EmptyActionURLsDoNotMatchNonEmpty) {
 | 
|                     PasswordFormManager::RESULT_ACTION_MATCH);
 | 
|    // Then when the observed form has an empty URL:
 | 
|    PasswordForm valid_action_form(*observed_form());
 | 
| -  PasswordFormManager empty_action_manager(
 | 
| -      password_manager(), client(), client()->driver(), empty_action_form,
 | 
| -      base::MakeUnique<MockFormSaver>(), fake_form_fetcher());
 | 
| -  EXPECT_EQ(0, empty_action_manager.DoesManage(valid_action_form, nullptr) &
 | 
| +  scoped_refptr<PasswordFormManager> empty_action_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), empty_action_form,
 | 
| +          base::MakeUnique<MockFormSaver>(), fake_form_fetcher()));
 | 
| +  EXPECT_EQ(0, empty_action_manager->DoesManage(valid_action_form, nullptr) &
 | 
|                     PasswordFormManager::RESULT_ACTION_MATCH);
 | 
|  }
 | 
|  
 | 
| @@ -1739,10 +1751,11 @@ TEST_F(PasswordFormManagerTest, NonHTMLFormsDoNotMatchHTMLForms) {
 | 
|  
 | 
|    // The other way round: observing a non-HTML form, don't match a HTML form.
 | 
|    PasswordForm html_form(*observed_form());
 | 
| -  PasswordFormManager non_html_manager(
 | 
| -      password_manager(), client(), kNoDriver, non_html_form,
 | 
| -      base::MakeUnique<MockFormSaver>(), fake_form_fetcher());
 | 
| -  EXPECT_EQ(0, non_html_manager.DoesManage(html_form, nullptr) &
 | 
| +  scoped_refptr<PasswordFormManager> non_html_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), kNoDriver, non_html_form,
 | 
| +          base::MakeUnique<MockFormSaver>(), fake_form_fetcher()));
 | 
| +  EXPECT_EQ(0, non_html_manager->DoesManage(html_form, nullptr) &
 | 
|                     PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH);
 | 
|  }
 | 
|  
 | 
| @@ -1776,16 +1789,18 @@ TEST_F(PasswordFormManagerTest,
 | 
|  
 | 
|    PasswordForm secure_observed_form(*observed_form());
 | 
|    secure_observed_form.origin = GURL("https://accounts.google.com/a/LoginAuth");
 | 
| -  PasswordFormManager secure_manager(
 | 
| -      password_manager(), client(), client()->driver(), secure_observed_form,
 | 
| -      base::MakeUnique<MockFormSaver>(), fake_form_fetcher());
 | 
| +  scoped_refptr<PasswordFormManager> secure_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(),
 | 
| +          secure_observed_form, base::MakeUnique<MockFormSaver>(),
 | 
| +          fake_form_fetcher()));
 | 
|    // Also for HTTPS in the observed form, and HTTP in the compared form, an
 | 
|    // exact path match is expected.
 | 
| -  EXPECT_EQ(0, secure_manager.DoesManage(form_longer_path, nullptr) &
 | 
| +  EXPECT_EQ(0, secure_manager->DoesManage(form_longer_path, nullptr) &
 | 
|                     PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH);
 | 
|    // Not even upgrade to HTTPS in the compared form should help.
 | 
|    form_longer_path.origin = GURL("https://accounts.google.com/a/LoginAuth/sec");
 | 
| -  EXPECT_EQ(0, secure_manager.DoesManage(form_longer_path, nullptr) &
 | 
| +  EXPECT_EQ(0, secure_manager->DoesManage(form_longer_path, nullptr) &
 | 
|                     PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH);
 | 
|  }
 | 
|  
 | 
| @@ -1873,9 +1888,10 @@ TEST_F(PasswordFormManagerTest, UploadFormData_NewPassword) {
 | 
|    // Don't vote for the username field yet.
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(
 | 
| -      password_manager(), client(), client()->driver(), *saved_match(),
 | 
| -      base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *saved_match(),
 | 
| +          base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
 | 
|    fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
 | 
|  
 | 
|    PasswordForm form_to_save(*saved_match());
 | 
| @@ -1888,18 +1904,19 @@ TEST_F(PasswordFormManagerTest, UploadFormData_NewPassword) {
 | 
|    EXPECT_CALL(
 | 
|        *client()->mock_driver()->mock_autofill_download_manager(),
 | 
|        StartUploadRequest(_, false, expected_available_field_types, _, true));
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
| -  form_manager.Save();
 | 
| +  form_manager->Save();
 | 
|  }
 | 
|  
 | 
|  TEST_F(PasswordFormManagerTest, UploadFormData_NewPassword_Blacklist) {
 | 
|    // Do not upload a vote if the user is blacklisting the form.
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager blacklist_form_manager(
 | 
| -      password_manager(), client(), client()->driver(), *saved_match(),
 | 
| -      base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> blacklist_form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *saved_match(),
 | 
| +          base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
 | 
|    fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
 | 
|  
 | 
|    autofill::ServerFieldTypeSet expected_available_field_types;
 | 
| @@ -1908,7 +1925,7 @@ TEST_F(PasswordFormManagerTest, UploadFormData_NewPassword_Blacklist) {
 | 
|    EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
 | 
|                StartUploadRequest(_, _, expected_available_field_types, _, true))
 | 
|        .Times(0);
 | 
| -  blacklist_form_manager.PermanentlyBlacklist();
 | 
| +  blacklist_form_manager->PermanentlyBlacklist();
 | 
|  }
 | 
|  
 | 
|  TEST_F(PasswordFormManagerTest, UploadPasswordForm) {
 | 
| @@ -1993,9 +2010,10 @@ TEST_F(PasswordFormManagerTest, DriverDeletedBeforeStoreDone) {
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), form,
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), form,
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|  
 | 
|    // Suddenly, the frame and its driver disappear.
 | 
|    client()->KillDriver();
 | 
| @@ -2073,10 +2091,11 @@ TEST_F(PasswordFormManagerTest, TestSuggestingPasswordChangeForms) {
 | 
|        base::ASCIIToUTF16("new_pwd");
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager manager_creds(
 | 
| -      password_manager(), client(), client()->driver(),
 | 
| -      observed_change_password_form, base::MakeUnique<MockFormSaver>(),
 | 
| -      &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> manager_creds(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(),
 | 
| +          observed_change_password_form, base::MakeUnique<MockFormSaver>(),
 | 
| +          &fetcher));
 | 
|  
 | 
|    autofill::PasswordFormFillData fill_data;
 | 
|    EXPECT_CALL(*client()->mock_driver(), FillPasswordForm(_))
 | 
| @@ -2084,7 +2103,7 @@ TEST_F(PasswordFormManagerTest, TestSuggestingPasswordChangeForms) {
 | 
|  
 | 
|    PasswordForm result = CreateSavedMatch(false);
 | 
|    fetcher.SetNonFederated({&result}, 0u);
 | 
| -  EXPECT_EQ(1u, manager_creds.best_matches().size());
 | 
| +  EXPECT_EQ(1u, manager_creds->best_matches().size());
 | 
|    EXPECT_EQ(0u, fill_data.additional_logins.size());
 | 
|    EXPECT_TRUE(fill_data.wait_for_username);
 | 
|  }
 | 
| @@ -2110,9 +2129,10 @@ TEST_F(PasswordFormManagerTest, TestUpdateMethod) {
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), *observed_form(),
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|  
 | 
|    fetcher.SetNonFederated({saved_match()}, 0u);
 | 
|  
 | 
| @@ -2122,29 +2142,29 @@ TEST_F(PasswordFormManagerTest, TestUpdateMethod) {
 | 
|    credentials.password_value = saved_match()->password_value;
 | 
|    credentials.new_password_value = ASCIIToUTF16("test2");
 | 
|    credentials.preferred = true;
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|  
 | 
|    // Successful login. The PasswordManager would instruct PasswordFormManager
 | 
|    // to save, and since this is an update, it should know not to save as a new
 | 
|    // login.
 | 
| -  EXPECT_FALSE(form_manager.IsNewLogin());
 | 
| +  EXPECT_FALSE(form_manager->IsNewLogin());
 | 
|    EXPECT_FALSE(
 | 
| -      form_manager.is_possible_change_password_form_without_username());
 | 
| +      form_manager->is_possible_change_password_form_without_username());
 | 
|  
 | 
|    // By now, the PasswordFormManager should have promoted the new password value
 | 
|    // already to be the current password, and should no longer maintain any info
 | 
|    // about the new password value.
 | 
|    EXPECT_EQ(credentials.new_password_value,
 | 
| -            form_manager.pending_credentials().password_value);
 | 
| -  EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
 | 
| +            form_manager->pending_credentials().password_value);
 | 
| +  EXPECT_TRUE(form_manager->pending_credentials().new_password_value.empty());
 | 
|  
 | 
|    // Trigger saving to exercise some special case handling during updating.
 | 
|    PasswordForm new_credentials;
 | 
| -  EXPECT_CALL(MockFormSaver::Get(&form_manager), Update(_, _, _, nullptr))
 | 
| +  EXPECT_CALL(MockFormSaver::Get(form_manager.get()), Update(_, _, _, nullptr))
 | 
|        .WillOnce(SaveArg<0>(&new_credentials));
 | 
|  
 | 
| -  form_manager.Update(*saved_match());
 | 
| +  form_manager->Update(*saved_match());
 | 
|  
 | 
|    // No meta-information should be updated, only the password.
 | 
|    EXPECT_EQ(credentials.new_password_value, new_credentials.password_value);
 | 
| @@ -2175,9 +2195,10 @@ TEST_F(PasswordFormManagerTest, TestUpdateNoUsernameTextfieldPresent) {
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), *observed_form(),
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|  
 | 
|    fetcher.SetNonFederated({saved_match()}, 0u);
 | 
|  
 | 
| @@ -2188,30 +2209,31 @@ TEST_F(PasswordFormManagerTest, TestUpdateNoUsernameTextfieldPresent) {
 | 
|    credentials.password_value = saved_match()->password_value;
 | 
|    credentials.new_password_value = ASCIIToUTF16("test2");
 | 
|    credentials.preferred = true;
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|  
 | 
|    // Successful login. The PasswordManager would instruct PasswordFormManager
 | 
|    // to save, and since this is an update, it should know not to save as a new
 | 
|    // login.
 | 
| -  EXPECT_FALSE(form_manager.IsNewLogin());
 | 
| -  EXPECT_TRUE(form_manager.is_possible_change_password_form_without_username());
 | 
| +  EXPECT_FALSE(form_manager->IsNewLogin());
 | 
| +  EXPECT_TRUE(
 | 
| +      form_manager->is_possible_change_password_form_without_username());
 | 
|  
 | 
|    // By now, the PasswordFormManager should have promoted the new password value
 | 
|    // already to be the current password, and should no longer maintain any info
 | 
|    // about the new password value.
 | 
|    EXPECT_EQ(saved_match()->username_value,
 | 
| -            form_manager.pending_credentials().username_value);
 | 
| +            form_manager->pending_credentials().username_value);
 | 
|    EXPECT_EQ(credentials.new_password_value,
 | 
| -            form_manager.pending_credentials().password_value);
 | 
| -  EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
 | 
| +            form_manager->pending_credentials().password_value);
 | 
| +  EXPECT_TRUE(form_manager->pending_credentials().new_password_value.empty());
 | 
|  
 | 
|    // Trigger saving to exercise some special case handling during updating.
 | 
|    PasswordForm new_credentials;
 | 
| -  EXPECT_CALL(MockFormSaver::Get(&form_manager), Update(_, _, _, nullptr))
 | 
| +  EXPECT_CALL(MockFormSaver::Get(form_manager.get()), Update(_, _, _, nullptr))
 | 
|        .WillOnce(SaveArg<0>(&new_credentials));
 | 
|  
 | 
| -  form_manager.Update(form_manager.pending_credentials());
 | 
| +  form_manager->Update(form_manager->pending_credentials());
 | 
|  
 | 
|    // No other information than password value should be updated. In particular
 | 
|    // not the username.
 | 
| @@ -2230,21 +2252,22 @@ TEST_F(PasswordFormManagerTest, WipeStoreCopyIfOutdated_BeforeStoreCallback) {
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), form,
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), form,
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|    // The creation of |fetcher| keeps it waiting for store results. This test
 | 
|    // keeps the fetcher waiting on purpose.
 | 
|  
 | 
|    PasswordForm submitted_form(form);
 | 
|    submitted_form.password_value += ASCIIToUTF16("add stuff, make it different");
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|  
 | 
|    base::HistogramTester histogram_tester;
 | 
| -  EXPECT_CALL(MockFormSaver::Get(&form_manager),
 | 
| -              WipeOutdatedCopies(form_manager.pending_credentials(), _, _));
 | 
| -  form_manager.WipeStoreCopyIfOutdated();
 | 
| +  EXPECT_CALL(MockFormSaver::Get(form_manager.get()),
 | 
| +              WipeOutdatedCopies(form_manager->pending_credentials(), _, _));
 | 
| +  form_manager->WipeStoreCopyIfOutdated();
 | 
|    histogram_tester.ExpectUniqueSample("PasswordManager.StoreReadyWhenWiping", 0,
 | 
|                                        1);
 | 
|  }
 | 
| @@ -2363,9 +2386,10 @@ TEST_F(PasswordFormManagerTest, UploadChangePasswordForm) {
 | 
|  TEST_F(PasswordFormManagerTest, TestUpdatePSLMatchedCredentials) {
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), *observed_form(),
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|    fetcher.SetNonFederated({saved_match(), psl_saved_match()}, 0u);
 | 
|  
 | 
|    // User submits a credentials with an old username and a new password.
 | 
| @@ -2373,24 +2397,24 @@ TEST_F(PasswordFormManagerTest, TestUpdatePSLMatchedCredentials) {
 | 
|    credentials.username_value = saved_match()->username_value;
 | 
|    credentials.password_value = ASCIIToUTF16("new_password");
 | 
|    credentials.preferred = true;
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|  
 | 
|    // Successful login. The PasswordManager would instruct PasswordFormManager
 | 
|    // to save, and since this is an update, it should know not to save as a new
 | 
|    // login.
 | 
| -  EXPECT_FALSE(form_manager.IsNewLogin());
 | 
| +  EXPECT_FALSE(form_manager->IsNewLogin());
 | 
|  
 | 
|    // Trigger saving to exercise some special case handling during updating.
 | 
|    PasswordForm new_credentials;
 | 
|    std::vector<autofill::PasswordForm> credentials_to_update;
 | 
| -  EXPECT_CALL(MockFormSaver::Get(&form_manager), Update(_, _, _, nullptr))
 | 
| +  EXPECT_CALL(MockFormSaver::Get(form_manager.get()), Update(_, _, _, nullptr))
 | 
|        .WillOnce(testing::DoAll(SaveArg<0>(&new_credentials),
 | 
|                                 SaveArgPointee<2>(&credentials_to_update)));
 | 
|    EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
 | 
|                StartUploadRequest(_, false, _, _, true));
 | 
|  
 | 
| -  form_manager.Save();
 | 
| +  form_manager->Save();
 | 
|  
 | 
|    // No meta-information should be updated, only the password.
 | 
|    EXPECT_EQ(credentials.password_value, new_credentials.password_value);
 | 
| @@ -2415,9 +2439,10 @@ TEST_F(PasswordFormManagerTest,
 | 
|         TestNotUpdatePSLMatchedCredentialsWithAnotherUsername) {
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), *observed_form(),
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|    psl_saved_match()->username_value += ASCIIToUTF16("1");
 | 
|    fetcher.SetNonFederated({saved_match(), psl_saved_match()}, 0u);
 | 
|  
 | 
| @@ -2426,23 +2451,23 @@ TEST_F(PasswordFormManagerTest,
 | 
|    credentials.username_value = saved_match()->username_value;
 | 
|    credentials.password_value = ASCIIToUTF16("new_password");
 | 
|    credentials.preferred = true;
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|  
 | 
|    // Successful login. The PasswordManager would instruct PasswordFormManager
 | 
|    // to save, and since this is an update, it should know not to save as a new
 | 
|    // login.
 | 
| -  EXPECT_FALSE(form_manager.IsNewLogin());
 | 
| +  EXPECT_FALSE(form_manager->IsNewLogin());
 | 
|  
 | 
|    // Trigger saving to exercise some special case handling during updating.
 | 
|    PasswordForm new_credentials;
 | 
| -  EXPECT_CALL(MockFormSaver::Get(&form_manager),
 | 
| +  EXPECT_CALL(MockFormSaver::Get(form_manager.get()),
 | 
|                Update(_, _, Pointee(IsEmpty()), nullptr))
 | 
|        .WillOnce(testing::SaveArg<0>(&new_credentials));
 | 
|    EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
 | 
|                StartUploadRequest(_, false, _, _, true));
 | 
|  
 | 
| -  form_manager.Save();
 | 
| +  form_manager->Save();
 | 
|  
 | 
|    // No meta-information should be updated, only the password.
 | 
|    EXPECT_EQ(credentials.password_value, new_credentials.password_value);
 | 
| @@ -2456,9 +2481,10 @@ TEST_F(PasswordFormManagerTest,
 | 
|         TestNotUpdatePSLMatchedCredentialsWithAnotherPassword) {
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), *observed_form(),
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|    psl_saved_match()->password_value += ASCIIToUTF16("1");
 | 
|    fetcher.SetNonFederated({saved_match(), psl_saved_match()}, 0u);
 | 
|  
 | 
| @@ -2467,23 +2493,23 @@ TEST_F(PasswordFormManagerTest,
 | 
|    credentials.username_value = saved_match()->username_value;
 | 
|    credentials.password_value = ASCIIToUTF16("new_password");
 | 
|    credentials.preferred = true;
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|  
 | 
|    // Successful login. The PasswordManager would instruct PasswordFormManager
 | 
|    // to save, and since this is an update, it should know not to save as a new
 | 
|    // login.
 | 
| -  EXPECT_FALSE(form_manager.IsNewLogin());
 | 
| +  EXPECT_FALSE(form_manager->IsNewLogin());
 | 
|  
 | 
|    // Trigger saving to exercise some special case handling during updating.
 | 
|    PasswordForm new_credentials;
 | 
| -  EXPECT_CALL(MockFormSaver::Get(&form_manager),
 | 
| +  EXPECT_CALL(MockFormSaver::Get(form_manager.get()),
 | 
|                Update(_, _, Pointee(IsEmpty()), nullptr))
 | 
|        .WillOnce(testing::SaveArg<0>(&new_credentials));
 | 
|    EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
 | 
|                StartUploadRequest(_, false, _, _, true));
 | 
|  
 | 
| -  form_manager.Save();
 | 
| +  form_manager->Save();
 | 
|  
 | 
|    // No meta-information should be updated, only the password.
 | 
|    EXPECT_EQ(credentials.password_value, new_credentials.password_value);
 | 
| @@ -2496,9 +2522,10 @@ TEST_F(PasswordFormManagerTest,
 | 
|  TEST_F(PasswordFormManagerTest, TestNotUpdateWhenOnlyPSLMatched) {
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), *observed_form(),
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|    fetcher.SetNonFederated({psl_saved_match()}, 0u);
 | 
|  
 | 
|    // User submits a credentials with an old username and a new password.
 | 
| @@ -2506,18 +2533,18 @@ TEST_F(PasswordFormManagerTest, TestNotUpdateWhenOnlyPSLMatched) {
 | 
|    credentials.username_value = saved_match()->username_value;
 | 
|    credentials.password_value = ASCIIToUTF16("new_password");
 | 
|    credentials.preferred = true;
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|  
 | 
| -  EXPECT_TRUE(form_manager.IsNewLogin());
 | 
| +  EXPECT_TRUE(form_manager->IsNewLogin());
 | 
|  
 | 
|    // PSL matched credential should not be updated, since we are not sure that
 | 
|    // this is the same credential as submitted one.
 | 
|    PasswordForm new_credentials;
 | 
| -  EXPECT_CALL(MockFormSaver::Get(&form_manager), Save(_, _, nullptr))
 | 
| +  EXPECT_CALL(MockFormSaver::Get(form_manager.get()), Save(_, _, nullptr))
 | 
|        .WillOnce(testing::SaveArg<0>(&new_credentials));
 | 
|  
 | 
| -  form_manager.Save();
 | 
| +  form_manager->Save();
 | 
|  
 | 
|    EXPECT_EQ(credentials.password_value, new_credentials.password_value);
 | 
|    EXPECT_EQ(credentials.username_value, new_credentials.username_value);
 | 
| @@ -2652,9 +2679,10 @@ TEST_F(PasswordFormManagerTest,
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), *observed_form(),
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|    fetcher.SetNonFederated({saved_match()}, 0u);
 | 
|  
 | 
|    // User submits current and new credentials to the observed form.
 | 
| @@ -2662,20 +2690,21 @@ TEST_F(PasswordFormManagerTest,
 | 
|    submitted_form.password_value = saved_match()->password_value;
 | 
|    submitted_form.new_password_value = ASCIIToUTF16("test2");
 | 
|    submitted_form.preferred = true;
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|  
 | 
|    // Successful login. The PasswordManager would instruct PasswordFormManager
 | 
|    // to update.
 | 
| -  EXPECT_FALSE(form_manager.IsNewLogin());
 | 
| -  EXPECT_TRUE(form_manager.is_possible_change_password_form_without_username());
 | 
| +  EXPECT_FALSE(form_manager->IsNewLogin());
 | 
| +  EXPECT_TRUE(
 | 
| +      form_manager->is_possible_change_password_form_without_username());
 | 
|  
 | 
|    // By now, the PasswordFormManager should have promoted the new password
 | 
|    // value already to be the current password, and should no longer maintain
 | 
|    // any info about the new password value.
 | 
|    EXPECT_EQ(submitted_form.new_password_value,
 | 
| -            form_manager.pending_credentials().password_value);
 | 
| -  EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
 | 
| +            form_manager->pending_credentials().password_value);
 | 
| +  EXPECT_TRUE(form_manager->pending_credentials().new_password_value.empty());
 | 
|  
 | 
|    std::map<base::string16, autofill::ServerFieldType> expected_types;
 | 
|    expected_types[observed_form()->password_element] = autofill::PASSWORD;
 | 
| @@ -2699,7 +2728,7 @@ TEST_F(PasswordFormManagerTest,
 | 
|                                   false, expected_available_field_types,
 | 
|                                   expected_login_signature, true));
 | 
|  
 | 
| -  form_manager.Update(*saved_match());
 | 
| +  form_manager->Update(*saved_match());
 | 
|  }
 | 
|  
 | 
|  // Checks uploading a vote about the usage of the password generation popup.
 | 
| @@ -2735,14 +2764,15 @@ TEST_F(PasswordFormManagerTest, FormClassifierVoteUpload) {
 | 
|  
 | 
|      FakeFormFetcher fetcher;
 | 
|      fetcher.Fetch();
 | 
| -    PasswordFormManager form_manager(
 | 
| -        password_manager(), client(), client()->driver(), form,
 | 
| -        base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
 | 
| +    scoped_refptr<PasswordFormManager> form_manager(
 | 
| +        base::MakeRefCounted<PasswordFormManager>(
 | 
| +            password_manager(), client(), client()->driver(), form,
 | 
| +            base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
 | 
|      base::string16 generation_element = form.password_element;
 | 
|      if (found_generation_element)
 | 
| -      form_manager.SaveGenerationFieldDetectedByClassifier(generation_element);
 | 
| +      form_manager->SaveGenerationFieldDetectedByClassifier(generation_element);
 | 
|      else
 | 
| -      form_manager.SaveGenerationFieldDetectedByClassifier(base::string16());
 | 
| +      form_manager->SaveGenerationFieldDetectedByClassifier(base::string16());
 | 
|  
 | 
|      fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
 | 
|  
 | 
| @@ -2754,9 +2784,9 @@ TEST_F(PasswordFormManagerTest, FormClassifierVoteUpload) {
 | 
|                                 found_generation_element, generation_element),
 | 
|                             false, _, _, true));
 | 
|  
 | 
| -    form_manager.ProvisionallySave(
 | 
| +    form_manager->ProvisionallySave(
 | 
|          submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
| -    form_manager.Save();
 | 
| +    form_manager->Save();
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -2772,9 +2802,10 @@ TEST_F(PasswordFormManagerTest, FieldPropertiesMasksUpload) {
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(
 | 
| -      password_manager(), client(), client()->driver(), form,
 | 
| -      base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), form,
 | 
| +          base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
 | 
|    fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
 | 
|  
 | 
|    DCHECK_EQ(3U, form.form_data.fields.size());
 | 
| @@ -2793,9 +2824,9 @@ TEST_F(PasswordFormManagerTest, FieldPropertiesMasksUpload) {
 | 
|                StartUploadRequest(
 | 
|                    CheckFieldPropertiesMasksUpload(expected_field_properties),
 | 
|                    false, _, _, true));
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
| -  form_manager.Save();
 | 
| +  form_manager->Save();
 | 
|  }
 | 
|  
 | 
|  TEST_F(PasswordFormManagerTest, TestSavingAPIFormsWithSamePassword) {
 | 
| @@ -2807,9 +2838,10 @@ TEST_F(PasswordFormManagerTest, TestSavingAPIFormsWithSamePassword) {
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(password_manager(), client(),
 | 
| -                                   client()->driver(), *observed_form(),
 | 
| -                                   base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<MockFormSaver>(), &fetcher));
 | 
|    fetcher.SetNonFederated({saved_match()}, 0u);
 | 
|  
 | 
|    // User submits new credentials with the same password as in already saved
 | 
| @@ -2820,16 +2852,16 @@ TEST_F(PasswordFormManagerTest, TestSavingAPIFormsWithSamePassword) {
 | 
|    credentials.password_value = saved_match()->password_value;
 | 
|    credentials.preferred = true;
 | 
|  
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
|  
 | 
| -  EXPECT_TRUE(form_manager.IsNewLogin());
 | 
| +  EXPECT_TRUE(form_manager->IsNewLogin());
 | 
|  
 | 
|    PasswordForm new_credentials;
 | 
| -  EXPECT_CALL(MockFormSaver::Get(&form_manager), Save(_, _, nullptr))
 | 
| +  EXPECT_CALL(MockFormSaver::Get(form_manager.get()), Save(_, _, nullptr))
 | 
|        .WillOnce(SaveArg<0>(&new_credentials));
 | 
|  
 | 
| -  form_manager.Save();
 | 
| +  form_manager->Save();
 | 
|  
 | 
|    EXPECT_EQ(saved_match()->username_value + ASCIIToUTF16("1"),
 | 
|              new_credentials.username_value);
 | 
| @@ -2873,9 +2905,10 @@ TEST_F(PasswordFormManagerTest, ProbablyAccountCreationUpload) {
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(
 | 
| -      password_manager(), client(), client()->driver(), form,
 | 
| -      base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), form,
 | 
| +          base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
 | 
|  
 | 
|    PasswordForm form_to_save(form);
 | 
|    form_to_save.preferred = true;
 | 
| @@ -2903,9 +2936,9 @@ TEST_F(PasswordFormManagerTest, ProbablyAccountCreationUpload) {
 | 
|                        false /* expect_generation_vote */),
 | 
|                    false, expected_available_field_types, std::string(), true));
 | 
|  
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
| -  form_manager.Save();
 | 
| +  form_manager->Save();
 | 
|  }
 | 
|  
 | 
|  TEST_F(PasswordFormManagerFillOnAccountSelectTest, ProcessFrame) {
 | 
| @@ -2961,11 +2994,12 @@ TEST_F(PasswordFormManagerTest, RemoveResultsWithWrongScheme_ObservingHTML) {
 | 
|        observed.scheme = kCorrectScheme;
 | 
|        FakeFormFetcher fetcher;
 | 
|        fetcher.Fetch();
 | 
| -      PasswordFormManager form_manager(
 | 
| -          password_manager(), client(),
 | 
| -          (kCorrectScheme == PasswordForm::SCHEME_HTML ? client()->driver()
 | 
| -                                                       : nullptr),
 | 
| -          observed, base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
 | 
| +      scoped_refptr<PasswordFormManager> form_manager(
 | 
| +          base::MakeRefCounted<PasswordFormManager>(
 | 
| +              password_manager(), client(),
 | 
| +              (kCorrectScheme == PasswordForm::SCHEME_HTML ? client()->driver()
 | 
| +                                                           : nullptr),
 | 
| +              observed, base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
 | 
|  
 | 
|        PasswordForm match = *saved_match();
 | 
|        match.scheme = kCorrectScheme;
 | 
| @@ -2974,20 +3008,20 @@ TEST_F(PasswordFormManagerTest, RemoveResultsWithWrongScheme_ObservingHTML) {
 | 
|        non_match.scheme = kWrongScheme;
 | 
|  
 | 
|        // First try putting the correct scheme first in returned matches.
 | 
| -      static_cast<FormFetcher::Consumer*>(&form_manager)
 | 
| +      static_cast<FormFetcher::Consumer*>(form_manager.get())
 | 
|            ->ProcessMatches({&match, &non_match}, 0u);
 | 
|  
 | 
| -      EXPECT_EQ(1u, form_manager.best_matches().size());
 | 
| +      EXPECT_EQ(1u, form_manager->best_matches().size());
 | 
|        EXPECT_EQ(kCorrectScheme,
 | 
| -                form_manager.best_matches().begin()->second->scheme);
 | 
| +                form_manager->best_matches().begin()->second->scheme);
 | 
|  
 | 
|        // Now try putting the correct scheme last in returned matches.
 | 
| -      static_cast<FormFetcher::Consumer*>(&form_manager)
 | 
| +      static_cast<FormFetcher::Consumer*>(form_manager.get())
 | 
|            ->ProcessMatches({&non_match, &match}, 0u);
 | 
|  
 | 
| -      EXPECT_EQ(1u, form_manager.best_matches().size());
 | 
| +      EXPECT_EQ(1u, form_manager->best_matches().size());
 | 
|        EXPECT_EQ(kCorrectScheme,
 | 
| -                form_manager.best_matches().begin()->second->scheme);
 | 
| +                form_manager->best_matches().begin()->second->scheme);
 | 
|      }
 | 
|    }
 | 
|  }
 | 
| @@ -3132,13 +3166,13 @@ TEST_F(PasswordFormManagerTest, DropFetcherOnDestruction) {
 | 
|    MockFormFetcher fetcher;
 | 
|    FormFetcher::Consumer* added_consumer = nullptr;
 | 
|    EXPECT_CALL(fetcher, AddConsumer(_)).WillOnce(SaveArg<0>(&added_consumer));
 | 
| -  auto form_manager = base::MakeUnique<PasswordFormManager>(
 | 
| +  auto form_manager = base::MakeRefCounted<PasswordFormManager>(
 | 
|        password_manager(), client(), client()->driver(), *observed_form(),
 | 
|        base::MakeUnique<MockFormSaver>(), &fetcher);
 | 
|    EXPECT_EQ(form_manager.get(), added_consumer);
 | 
|  
 | 
|    EXPECT_CALL(fetcher, RemoveConsumer(form_manager.get()));
 | 
| -  form_manager.reset();
 | 
| +  form_manager = nullptr;
 | 
|  }
 | 
|  
 | 
|  // Check that if asked to take ownership of the same FormFetcher which it had
 | 
| @@ -3147,17 +3181,18 @@ TEST_F(PasswordFormManagerTest, DropFetcherOnDestruction) {
 | 
|  TEST_F(PasswordFormManagerTest, GrabFetcher_Same) {
 | 
|    auto fetcher = base::MakeUnique<MockFormFetcher>();
 | 
|    fetcher->Fetch();
 | 
| -  PasswordFormManager form_manager(
 | 
| -      password_manager(), client(), client()->driver(), *observed_form(),
 | 
| -      base::MakeUnique<MockFormSaver>(), fetcher.get());
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<MockFormSaver>(), fetcher.get()));
 | 
|  
 | 
|    EXPECT_CALL(*fetcher, AddConsumer(_)).Times(0);
 | 
|    EXPECT_CALL(*fetcher, RemoveConsumer(_)).Times(0);
 | 
| -  form_manager.GrabFetcher(std::move(fetcher));
 | 
| +  form_manager->GrabFetcher(std::move(fetcher));
 | 
|    // There will be a RemoveConsumer call as soon as form_manager goes out of
 | 
|    // scope, but the test needs to ensure that there is none as a result of
 | 
|    // GrabFetcher.
 | 
| -  Mock::VerifyAndClearExpectations(form_manager.form_fetcher());
 | 
| +  Mock::VerifyAndClearExpectations(form_manager->form_fetcher());
 | 
|  }
 | 
|  
 | 
|  // Check that if asked to take ownership of a different FormFetcher than which
 | 
| @@ -3189,15 +3224,16 @@ TEST_F(PasswordFormManagerTest, GrabFetcher_Remove) {
 | 
|    FormFetcher::Consumer* added_consumer = nullptr;
 | 
|    EXPECT_CALL(old_fetcher, AddConsumer(_))
 | 
|        .WillOnce(SaveArg<0>(&added_consumer));
 | 
| -  PasswordFormManager form_manager(
 | 
| -      password_manager(), client(), client()->driver(), *observed_form(),
 | 
| -      base::MakeUnique<MockFormSaver>(), &old_fetcher);
 | 
| -  EXPECT_EQ(&form_manager, added_consumer);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<MockFormSaver>(), &old_fetcher));
 | 
| +  EXPECT_EQ(form_manager.get(), added_consumer);
 | 
|  
 | 
|    auto new_fetcher = base::MakeUnique<MockFormFetcher>();
 | 
| -  EXPECT_CALL(*new_fetcher, AddConsumer(&form_manager));
 | 
| -  EXPECT_CALL(old_fetcher, RemoveConsumer(&form_manager));
 | 
| -  form_manager.GrabFetcher(std::move(new_fetcher));
 | 
| +  EXPECT_CALL(*new_fetcher, AddConsumer(form_manager.get()));
 | 
| +  EXPECT_CALL(old_fetcher, RemoveConsumer(form_manager.get()));
 | 
| +  form_manager->GrabFetcher(std::move(new_fetcher));
 | 
|  }
 | 
|  
 | 
|  TEST_F(PasswordFormManagerTest, UploadSignInForm_WithAutofillTypes) {
 | 
| @@ -3214,9 +3250,10 @@ TEST_F(PasswordFormManagerTest, UploadSignInForm_WithAutofillTypes) {
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(
 | 
| -      password_manager(), client(), client()->driver(), *observed_form(),
 | 
| -      base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
 | 
|    fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
 | 
|  
 | 
|    PasswordForm form_to_save(*observed_form());
 | 
| @@ -3229,9 +3266,9 @@ TEST_F(PasswordFormManagerTest, UploadSignInForm_WithAutofillTypes) {
 | 
|        client()->mock_driver()->mock_autofill_manager();
 | 
|    EXPECT_CALL(*mock_autofill_manager, StartUploadProcessPtr(_, _, true))
 | 
|        .WillOnce(WithArg<0>(SaveToUniquePtr(&uploaded_form_structure)));
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
| -  form_manager.Save();
 | 
| +  form_manager->Save();
 | 
|  
 | 
|    ASSERT_EQ(2u, uploaded_form_structure->field_count());
 | 
|    autofill::ServerFieldTypeSet expected_types = {autofill::PASSWORD};
 | 
| @@ -3251,9 +3288,10 @@ TEST_F(PasswordFormManagerTest, NoUploadsForSubmittedFormWithOnlyOneField) {
 | 
|  
 | 
|    FakeFormFetcher fetcher;
 | 
|    fetcher.Fetch();
 | 
| -  PasswordFormManager form_manager(
 | 
| -      password_manager(), client(), client()->driver(), *observed_form(),
 | 
| -      base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
| +          password_manager(), client(), client()->driver(), *observed_form(),
 | 
| +          base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
 | 
|    fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
 | 
|  
 | 
|    PasswordForm form_to_save(*observed_form());
 | 
| @@ -3263,9 +3301,9 @@ TEST_F(PasswordFormManagerTest, NoUploadsForSubmittedFormWithOnlyOneField) {
 | 
|    auto* mock_autofill_manager =
 | 
|        client()->mock_driver()->mock_autofill_manager();
 | 
|    EXPECT_CALL(*mock_autofill_manager, StartUploadProcessPtr(_, _, _)).Times(0);
 | 
| -  form_manager.ProvisionallySave(
 | 
| +  form_manager->ProvisionallySave(
 | 
|        form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
 | 
| -  form_manager.Save();
 | 
| +  form_manager->Save();
 | 
|  }
 | 
|  
 | 
|  TEST_F(PasswordFormManagerTest,
 | 
| @@ -3274,12 +3312,12 @@ TEST_F(PasswordFormManagerTest,
 | 
|  
 | 
|    fake_form_fetcher()->set_did_complete_querying_suppressed_forms(false);
 | 
|    fake_form_fetcher()->Fetch();
 | 
| -  std::unique_ptr<PasswordFormManager> form_manager =
 | 
| -      base::MakeUnique<PasswordFormManager>(
 | 
| +  scoped_refptr<PasswordFormManager> form_manager(
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
|            password_manager(), client(), client()->driver(), *observed_form(),
 | 
| -          base::MakeUnique<NiceMock<MockFormSaver>>(), fake_form_fetcher());
 | 
| +          base::MakeUnique<NiceMock<MockFormSaver>>(), fake_form_fetcher()));
 | 
|    fake_form_fetcher()->SetNonFederated(std::vector<const PasswordForm*>(), 0u);
 | 
| -  form_manager.reset();
 | 
| +  form_manager = nullptr;
 | 
|  
 | 
|    histogram_tester.ExpectUniqueSample(
 | 
|        "PasswordManager.QueryingSuppressedAccountsFinished", false, 1);
 | 
| @@ -3472,12 +3510,12 @@ TEST_F(PasswordFormManagerTest, SuppressedHTTPSFormsHistogram_NotRecordedFor) {
 | 
|    fetcher.set_did_complete_querying_suppressed_forms(true);
 | 
|    fetcher.Fetch();
 | 
|  
 | 
| -  std::unique_ptr<PasswordFormManager> form_manager =
 | 
| -      base::MakeUnique<PasswordFormManager>(
 | 
| +  scoped_refptr<PasswordFormManager> form_manager =
 | 
| +      base::MakeRefCounted<PasswordFormManager>(
 | 
|            password_manager(), client(), client()->driver(), https_observed_form,
 | 
|            base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
 | 
|    fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
 | 
| -  form_manager.reset();
 | 
| +  form_manager = nullptr;
 | 
|  
 | 
|    histogram_tester.ExpectUniqueSample(
 | 
|        "PasswordManager.QueryingSuppressedAccountsFinished", true, 1);
 | 
| 
 |