Home | History | Annotate | Download | only in browser
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "components/password_manager/core/browser/password_generation_manager.h"
      6 
      7 #include "components/autofill/core/browser/autofill_field.h"
      8 #include "components/autofill/core/browser/field_types.h"
      9 #include "components/autofill/core/browser/form_structure.h"
     10 #include "components/autofill/core/common/form_data.h"
     11 #include "components/password_manager/core/browser/password_manager.h"
     12 #include "components/password_manager/core/browser/password_manager_client.h"
     13 #include "components/password_manager/core/browser/password_manager_driver.h"
     14 
     15 namespace password_manager {
     16 
     17 PasswordGenerationManager::PasswordGenerationManager(
     18     PasswordManagerClient* client)
     19     : client_(client),
     20       driver_(client->GetDriver()) {}
     21 
     22 PasswordGenerationManager::~PasswordGenerationManager() {}
     23 
     24 void PasswordGenerationManager::DetectAccountCreationForms(
     25     const std::vector<autofill::FormStructure*>& forms) {
     26   std::vector<autofill::FormData> account_creation_forms;
     27   for (std::vector<autofill::FormStructure*>::const_iterator form_it =
     28            forms.begin(); form_it != forms.end(); ++form_it) {
     29     autofill::FormStructure* form = *form_it;
     30     for (std::vector<autofill::AutofillField*>::const_iterator field_it =
     31              form->begin(); field_it != form->end(); ++field_it) {
     32       autofill::AutofillField* field = *field_it;
     33       if (field->server_type() == autofill::ACCOUNT_CREATION_PASSWORD) {
     34         account_creation_forms.push_back(form->ToFormData());
     35         break;
     36       }
     37     }
     38   }
     39   if (!account_creation_forms.empty() && IsGenerationEnabled())
     40     driver_->AccountCreationFormsFound(account_creation_forms);
     41 }
     42 
     43 // In order for password generation to be enabled, we need to make sure:
     44 // (1) Password sync is enabled, and
     45 // (2) Password saving is enabled.
     46 bool PasswordGenerationManager::IsGenerationEnabled() const {
     47   if (!driver_->GetPasswordManager()->IsSavingEnabledForCurrentPage()) {
     48     DVLOG(2) << "Generation disabled because password saving is disabled";
     49     return false;
     50   }
     51 
     52   if (!client_->IsPasswordSyncEnabled()) {
     53     DVLOG(2) << "Generation disabled because passwords are not being synced";
     54     return false;
     55   }
     56 
     57   return true;
     58 }
     59 
     60 }  // namespace password_manager
     61