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

Side by Side Diff: components/autofill/content/renderer/password_generation_agent.cc

Issue 1084063002: [Password Generation] Fix bug where generation would never trigger on iframes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Disabled Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/test/data/password/framed_signup_form.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/autofill/content/renderer/password_generation_agent.h" 5 #include "components/autofill/content/renderer/password_generation_agent.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "components/autofill/content/common/autofill_messages.h" 10 #include "components/autofill/content/common/autofill_messages.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 password_is_generated_(false), 111 password_is_generated_(false),
112 password_edited_(false), 112 password_edited_(false),
113 generation_popup_shown_(false), 113 generation_popup_shown_(false),
114 editing_popup_shown_(false), 114 editing_popup_shown_(false),
115 enabled_(password_generation::IsPasswordGenerationEnabled()) { 115 enabled_(password_generation::IsPasswordGenerationEnabled()) {
116 VLOG(2) << "Password Generation is " << (enabled_ ? "Enabled" : "Disabled"); 116 VLOG(2) << "Password Generation is " << (enabled_ ? "Enabled" : "Disabled");
117 } 117 }
118 PasswordGenerationAgent::~PasswordGenerationAgent() {} 118 PasswordGenerationAgent::~PasswordGenerationAgent() {}
119 119
120 void PasswordGenerationAgent::DidFinishDocumentLoad() { 120 void PasswordGenerationAgent::DidFinishDocumentLoad() {
121 if (render_frame()->GetWebFrame()->parent()) 121 // Update stats for main frame navigation.
122 return; 122 if (!render_frame()->GetWebFrame()->parent()) {
123 // In every navigation, the IPC message sent by the password autofill
124 // manager to query whether the current form is blacklisted or not happens
125 // when the document load finishes, so we need to clear previous states
126 // here before we hear back from the browser. We only clear this state on
127 // main frame load as we don't want subframe loads to clear state that we
128 // have received from the main frame. Note that we assume there is only one
129 // account creation form, but there could be multiple password forms in
130 // each frame.
131 not_blacklisted_password_form_origins_.clear();
132 generation_enabled_forms_.clear();
133 generation_element_.reset();
134 possible_account_creation_forms_.clear();
123 135
124 // In every navigation, the IPC message sent by the password autofill manager 136 // Log statistics after navigation so that we only log once per page.
125 // to query whether the current form is blacklisted or not happens when the 137 if (generation_form_data_ &&
126 // document load finishes, so we need to clear previous states here before we 138 generation_form_data_->password_elements.empty()) {
127 // hear back from the browser. We only clear this state on main frame load 139 password_generation::LogPasswordGenerationEvent(
128 // as we don't want subframe loads to clear state that we have received from 140 password_generation::NO_SIGN_UP_DETECTED);
129 // the main frame. Note that we assume there is only one account creation 141 } else {
130 // form, but there could be multiple password forms in each frame. 142 password_generation::LogPasswordGenerationEvent(
131 not_blacklisted_password_form_origins_.clear(); 143 password_generation::SIGN_UP_DETECTED);
132 generation_enabled_forms_.clear(); 144 }
133 generation_element_.reset(); 145 generation_form_data_.reset();
134 possible_account_creation_forms_.clear(); 146 password_is_generated_ = false;
147 if (password_edited_) {
148 password_generation::LogPasswordGenerationEvent(
149 password_generation::PASSWORD_EDITED);
150 }
151 password_edited_ = false;
135 152
136 // Log statistics after navigation so that we only log once per page. 153 if (generation_popup_shown_) {
137 if (generation_form_data_ && 154 password_generation::LogPasswordGenerationEvent(
138 generation_form_data_->password_elements.empty()) { 155 password_generation::GENERATION_POPUP_SHOWN);
139 password_generation::LogPasswordGenerationEvent( 156 }
140 password_generation::NO_SIGN_UP_DETECTED); 157 generation_popup_shown_ = false;
141 } else { 158
142 password_generation::LogPasswordGenerationEvent( 159 if (editing_popup_shown_) {
143 password_generation::SIGN_UP_DETECTED); 160 password_generation::LogPasswordGenerationEvent(
161 password_generation::EDITING_POPUP_SHOWN);
162 }
163 editing_popup_shown_ = false;
144 } 164 }
145 generation_form_data_.reset();
146 password_is_generated_ = false;
147 if (password_edited_) {
148 password_generation::LogPasswordGenerationEvent(
149 password_generation::PASSWORD_EDITED);
150 }
151 password_edited_ = false;
152
153 if (generation_popup_shown_) {
154 password_generation::LogPasswordGenerationEvent(
155 password_generation::GENERATION_POPUP_SHOWN);
156 }
157 generation_popup_shown_ = false;
158
159 if (editing_popup_shown_) {
160 password_generation::LogPasswordGenerationEvent(
161 password_generation::EDITING_POPUP_SHOWN);
162 }
163 editing_popup_shown_ = false;
164 165
165 FindPossibleGenerationForm(); 166 FindPossibleGenerationForm();
166 } 167 }
167 168
168 void PasswordGenerationAgent::OnDynamicFormsSeen() { 169 void PasswordGenerationAgent::OnDynamicFormsSeen() {
169 FindPossibleGenerationForm(); 170 FindPossibleGenerationForm();
170 } 171 }
171 172
172 void PasswordGenerationAgent::FindPossibleGenerationForm() { 173 void PasswordGenerationAgent::FindPossibleGenerationForm() {
173 if (!enabled_) 174 if (!enabled_)
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 std::vector<blink::WebInputElement> passwords; 207 std::vector<blink::WebInputElement> passwords;
207 if (GetAccountCreationPasswordFields(forms[i], &passwords)) { 208 if (GetAccountCreationPasswordFields(forms[i], &passwords)) {
208 AccountCreationFormData ac_form_data( 209 AccountCreationFormData ac_form_data(
209 make_linked_ptr(password_form.release()), passwords); 210 make_linked_ptr(password_form.release()), passwords);
210 possible_account_creation_forms_.push_back(ac_form_data); 211 possible_account_creation_forms_.push_back(ac_form_data);
211 } 212 }
212 } 213 }
213 214
214 if (!possible_account_creation_forms_.empty()) { 215 if (!possible_account_creation_forms_.empty()) {
215 VLOG(2) << possible_account_creation_forms_.size() 216 VLOG(2) << possible_account_creation_forms_.size()
216 << " possible account creation forms deteceted"; 217 << " possible account creation forms deteceted";
217 DetermineGenerationElement(); 218 DetermineGenerationElement();
218 } 219 }
219 } 220 }
220 221
221 bool PasswordGenerationAgent::ShouldAnalyzeDocument() const { 222 bool PasswordGenerationAgent::ShouldAnalyzeDocument() const {
222 // Make sure that this security origin is allowed to use password manager. 223 // Make sure that this security origin is allowed to use password manager.
223 // Generating a password that can't be saved is a bad idea. 224 // Generating a password that can't be saved is a bad idea.
224 blink::WebSecurityOrigin origin = 225 blink::WebSecurityOrigin origin =
225 render_frame()->GetWebFrame()->document().securityOrigin(); 226 render_frame()->GetWebFrame()->document().securityOrigin();
226 if (!origin.canAccessPasswordManager()) { 227 if (!origin.canAccessPasswordManager()) {
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 *generation_form_data_->form)); 424 *generation_form_data_->form));
424 425
425 editing_popup_shown_ = true; 426 editing_popup_shown_ = true;
426 } 427 }
427 428
428 void PasswordGenerationAgent::HidePopup() { 429 void PasswordGenerationAgent::HidePopup() {
429 Send(new AutofillHostMsg_HidePasswordGenerationPopup(routing_id())); 430 Send(new AutofillHostMsg_HidePasswordGenerationPopup(routing_id()));
430 } 431 }
431 432
432 } // namespace autofill 433 } // namespace autofill
OLDNEW
« no previous file with comments | « chrome/test/data/password/framed_signup_form.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698