OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/password_manager/core/browser/password_generation_manager.h
" | 5 #include "components/password_manager/core/browser/password_generation_manager.h
" |
6 | 6 |
7 #include "components/autofill/core/browser/autofill_field.h" | 7 #include "components/autofill/core/browser/autofill_field.h" |
8 #include "components/autofill/core/browser/field_types.h" | 8 #include "components/autofill/core/browser/field_types.h" |
9 #include "components/autofill/core/browser/form_structure.h" | 9 #include "components/autofill/core/browser/form_structure.h" |
10 #include "components/autofill/core/common/password_form_generation_data.h" | 10 #include "components/autofill/core/common/password_form_generation_data.h" |
11 #include "components/password_manager/core/browser/password_manager.h" | 11 #include "components/password_manager/core/browser/password_manager.h" |
12 #include "components/password_manager/core/browser/password_manager_client.h" | 12 #include "components/password_manager/core/browser/password_manager_client.h" |
13 #include "components/password_manager/core/browser/password_manager_driver.h" | 13 #include "components/password_manager/core/browser/password_manager_driver.h" |
14 | 14 |
15 namespace password_manager { | 15 namespace password_manager { |
16 | 16 |
17 namespace { | |
18 | |
19 // Helper function that returns canonical action based on |target_url| and | |
20 // |source_url|. | |
21 GURL GetCanonicalAction(const GURL& source_url, const GURL& target_url) { | |
22 GURL action = target_url; | |
23 if (action.is_empty()) | |
24 action = source_url; | |
25 GURL::Replacements rep; | |
26 rep.ClearUsername(); | |
27 rep.ClearPassword(); | |
28 rep.ClearQuery(); | |
29 rep.ClearRef(); | |
30 return action.ReplaceComponents(rep); | |
31 } | |
32 | |
33 } // namespace | |
34 | |
35 PasswordGenerationManager::PasswordGenerationManager( | 17 PasswordGenerationManager::PasswordGenerationManager( |
36 PasswordManagerClient* client, | 18 PasswordManagerClient* client, |
37 PasswordManagerDriver* driver) | 19 PasswordManagerDriver* driver) |
38 : client_(client), driver_(driver) { | 20 : client_(client), driver_(driver) { |
39 } | 21 } |
40 | 22 |
41 PasswordGenerationManager::~PasswordGenerationManager() { | 23 PasswordGenerationManager::~PasswordGenerationManager() { |
42 } | 24 } |
43 | 25 |
44 void PasswordGenerationManager::DetectFormsEligibleForGeneration( | 26 void PasswordGenerationManager::DetectFormsEligibleForGeneration( |
45 const std::vector<autofill::FormStructure*>& forms) { | 27 const std::vector<autofill::FormStructure*>& forms) { |
46 if (!IsGenerationEnabled()) | 28 if (!IsGenerationEnabled()) |
47 return; | 29 return; |
48 | 30 |
49 std::vector<autofill::PasswordFormGenerationData> | 31 std::vector<autofill::PasswordFormGenerationData> |
50 forms_eligible_for_generation; | 32 forms_eligible_for_generation; |
51 for (std::vector<autofill::FormStructure*>::const_iterator form_it = | 33 for (std::vector<autofill::FormStructure*>::const_iterator form_it = |
52 forms.begin(); | 34 forms.begin(); |
53 form_it != forms.end(); ++form_it) { | 35 form_it != forms.end(); ++form_it) { |
54 autofill::FormStructure* form = *form_it; | 36 autofill::FormStructure* form = *form_it; |
55 for (std::vector<autofill::AutofillField*>::const_iterator field_it = | 37 for (std::vector<autofill::AutofillField*>::const_iterator field_it = |
56 form->begin(); | 38 form->begin(); |
57 field_it != form->end(); ++field_it) { | 39 field_it != form->end(); ++field_it) { |
58 autofill::AutofillField* field = *field_it; | 40 autofill::AutofillField* field = *field_it; |
59 if (field->server_type() == autofill::ACCOUNT_CREATION_PASSWORD || | 41 if (field->server_type() == autofill::ACCOUNT_CREATION_PASSWORD || |
60 field->server_type() == autofill::NEW_PASSWORD) { | 42 field->server_type() == autofill::NEW_PASSWORD) { |
61 forms_eligible_for_generation.push_back( | 43 forms_eligible_for_generation.push_back( |
62 autofill::PasswordFormGenerationData{ | 44 autofill::PasswordFormGenerationData{form->form_signature(), |
63 form->form_name(), | 45 field->GetFieldSignature()}); |
64 GetCanonicalAction(form->source_url(), form->target_url()), | |
65 *field}); | |
66 break; | 46 break; |
67 } | 47 } |
68 } | 48 } |
69 } | 49 } |
70 if (!forms_eligible_for_generation.empty()) | 50 if (!forms_eligible_for_generation.empty()) |
71 driver_->FormsEligibleForGenerationFound(forms_eligible_for_generation); | 51 driver_->FormsEligibleForGenerationFound(forms_eligible_for_generation); |
72 } | 52 } |
73 | 53 |
74 // In order for password generation to be enabled, we need to make sure: | 54 // In order for password generation to be enabled, we need to make sure: |
75 // (1) Password sync is enabled, and | 55 // (1) Password sync is enabled, and |
(...skipping 14 matching lines...) Expand all Loading... |
90 | 70 |
91 return true; | 71 return true; |
92 } | 72 } |
93 | 73 |
94 void PasswordGenerationManager::CheckIfFormClassifierShouldRun() { | 74 void PasswordGenerationManager::CheckIfFormClassifierShouldRun() { |
95 if (autofill::FormStructure::IsAutofillFieldMetadataEnabled()) | 75 if (autofill::FormStructure::IsAutofillFieldMetadataEnabled()) |
96 driver_->AllowToRunFormClassifier(); | 76 driver_->AllowToRunFormClassifier(); |
97 } | 77 } |
98 | 78 |
99 } // namespace password_manager | 79 } // namespace password_manager |
OLD | NEW |