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

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

Issue 63273002: Rename WebKit namespace to blink (part 4) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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 | Annotate | Revision Log
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/renderer/password_form_conversion_utils.h" 10 #include "components/autofill/content/renderer/password_form_conversion_utils.h"
(...skipping 15 matching lines...) Expand all
26 #include "third_party/WebKit/public/web/WebView.h" 26 #include "third_party/WebKit/public/web/WebView.h"
27 #include "ui/gfx/rect.h" 27 #include "ui/gfx/rect.h"
28 28
29 namespace autofill { 29 namespace autofill {
30 30
31 namespace { 31 namespace {
32 32
33 // Returns true if we think that this form is for account creation. |passwords| 33 // Returns true if we think that this form is for account creation. |passwords|
34 // is filled with the password field(s) in the form. 34 // is filled with the password field(s) in the form.
35 bool GetAccountCreationPasswordFields( 35 bool GetAccountCreationPasswordFields(
36 const WebKit::WebFormElement& form, 36 const blink::WebFormElement& form,
37 std::vector<WebKit::WebInputElement>* passwords) { 37 std::vector<blink::WebInputElement>* passwords) {
38 // Grab all of the passwords for the form. 38 // Grab all of the passwords for the form.
39 WebKit::WebVector<WebKit::WebFormControlElement> control_elements; 39 blink::WebVector<blink::WebFormControlElement> control_elements;
40 form.getFormControlElements(control_elements); 40 form.getFormControlElements(control_elements);
41 41
42 size_t num_input_elements = 0; 42 size_t num_input_elements = 0;
43 for (size_t i = 0; i < control_elements.size(); i++) { 43 for (size_t i = 0; i < control_elements.size(); i++) {
44 WebKit::WebInputElement* input_element = 44 blink::WebInputElement* input_element =
45 toWebInputElement(&control_elements[i]); 45 toWebInputElement(&control_elements[i]);
46 // Only pay attention to visible password fields. 46 // Only pay attention to visible password fields.
47 if (input_element && 47 if (input_element &&
48 input_element->isTextField() && 48 input_element->isTextField() &&
49 input_element->hasNonEmptyBoundingBox()) { 49 input_element->hasNonEmptyBoundingBox()) {
50 num_input_elements++; 50 num_input_elements++;
51 if (input_element->isPasswordField()) 51 if (input_element->isPasswordField())
52 passwords->push_back(*input_element); 52 passwords->push_back(*input_element);
53 } 53 }
54 } 54 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 } // namespace 96 } // namespace
97 97
98 PasswordGenerationAgent::PasswordGenerationAgent( 98 PasswordGenerationAgent::PasswordGenerationAgent(
99 content::RenderView* render_view) 99 content::RenderView* render_view)
100 : content::RenderViewObserver(render_view), 100 : content::RenderViewObserver(render_view),
101 render_view_(render_view) { 101 render_view_(render_view) {
102 render_view_->GetWebView()->setPasswordGeneratorClient(this); 102 render_view_->GetWebView()->setPasswordGeneratorClient(this);
103 } 103 }
104 PasswordGenerationAgent::~PasswordGenerationAgent() {} 104 PasswordGenerationAgent::~PasswordGenerationAgent() {}
105 105
106 void PasswordGenerationAgent::DidFinishDocumentLoad(WebKit::WebFrame* frame) { 106 void PasswordGenerationAgent::DidFinishDocumentLoad(blink::WebFrame* frame) {
107 // In every navigation, the IPC message sent by the password autofill manager 107 // In every navigation, the IPC message sent by the password autofill manager
108 // to query whether the current form is blacklisted or not happens when the 108 // to query whether the current form is blacklisted or not happens when the
109 // document load finishes, so we need to clear previous states here before we 109 // document load finishes, so we need to clear previous states here before we
110 // hear back from the browser. We only clear this state on main frame load 110 // hear back from the browser. We only clear this state on main frame load
111 // as we don't want subframe loads to clear state that we have recieved from 111 // as we don't want subframe loads to clear state that we have recieved from
112 // the main frame. Note that we assume there is only one account creation 112 // the main frame. Note that we assume there is only one account creation
113 // form, but there could be multiple password forms in each frame. 113 // form, but there could be multiple password forms in each frame.
114 // 114 //
115 // TODO(zysxqn): Add stat when local heuristic fires but we don't show the 115 // TODO(zysxqn): Add stat when local heuristic fires but we don't show the
116 // password generation icon. 116 // password generation icon.
117 if (!frame->parent()) { 117 if (!frame->parent()) {
118 not_blacklisted_password_form_origins_.clear(); 118 not_blacklisted_password_form_origins_.clear();
119 generation_enabled_forms_.clear(); 119 generation_enabled_forms_.clear();
120 possible_account_creation_form_.reset(new PasswordForm()); 120 possible_account_creation_form_.reset(new PasswordForm());
121 passwords_.clear(); 121 passwords_.clear();
122 } 122 }
123 } 123 }
124 124
125 void PasswordGenerationAgent::DidFinishLoad(WebKit::WebFrame* frame) { 125 void PasswordGenerationAgent::DidFinishLoad(blink::WebFrame* frame) {
126 // We don't want to generate passwords if the browser won't store or sync 126 // We don't want to generate passwords if the browser won't store or sync
127 // them. 127 // them.
128 if (!ShouldAnalyzeDocument(frame->document())) 128 if (!ShouldAnalyzeDocument(frame->document()))
129 return; 129 return;
130 130
131 WebKit::WebVector<WebKit::WebFormElement> forms; 131 blink::WebVector<blink::WebFormElement> forms;
132 frame->document().forms(forms); 132 frame->document().forms(forms);
133 for (size_t i = 0; i < forms.size(); ++i) { 133 for (size_t i = 0; i < forms.size(); ++i) {
134 if (forms[i].isNull()) 134 if (forms[i].isNull())
135 continue; 135 continue;
136 136
137 // If we can't get a valid PasswordForm, we skip this form because the 137 // If we can't get a valid PasswordForm, we skip this form because the
138 // the password won't get saved even if we generate it. 138 // the password won't get saved even if we generate it.
139 scoped_ptr<PasswordForm> password_form( 139 scoped_ptr<PasswordForm> password_form(
140 CreatePasswordForm(forms[i])); 140 CreatePasswordForm(forms[i]));
141 if (!password_form.get()) { 141 if (!password_form.get()) {
142 DVLOG(2) << "Skipping form as it would not be saved"; 142 DVLOG(2) << "Skipping form as it would not be saved";
143 continue; 143 continue;
144 } 144 }
145 145
146 // Do not generate password for GAIA since it is used to retrieve the 146 // Do not generate password for GAIA since it is used to retrieve the
147 // generated paswords. 147 // generated paswords.
148 GURL realm(password_form->signon_realm); 148 GURL realm(password_form->signon_realm);
149 if (realm == GaiaUrls::GetInstance()->gaia_login_form_realm()) 149 if (realm == GaiaUrls::GetInstance()->gaia_login_form_realm())
150 continue; 150 continue;
151 151
152 std::vector<WebKit::WebInputElement> passwords; 152 std::vector<blink::WebInputElement> passwords;
153 if (GetAccountCreationPasswordFields(forms[i], &passwords)) { 153 if (GetAccountCreationPasswordFields(forms[i], &passwords)) {
154 DVLOG(2) << "Account creation form detected"; 154 DVLOG(2) << "Account creation form detected";
155 password_generation::LogPasswordGenerationEvent( 155 password_generation::LogPasswordGenerationEvent(
156 password_generation::SIGN_UP_DETECTED); 156 password_generation::SIGN_UP_DETECTED);
157 passwords_ = passwords; 157 passwords_ = passwords;
158 possible_account_creation_form_.swap(password_form); 158 possible_account_creation_form_.swap(password_form);
159 MaybeShowIcon(); 159 MaybeShowIcon();
160 // We assume that there is only one account creation field per URL. 160 // We assume that there is only one account creation field per URL.
161 return; 161 return;
162 } 162 }
163 } 163 }
164 password_generation::LogPasswordGenerationEvent( 164 password_generation::LogPasswordGenerationEvent(
165 password_generation::NO_SIGN_UP_DETECTED); 165 password_generation::NO_SIGN_UP_DETECTED);
166 } 166 }
167 167
168 bool PasswordGenerationAgent::ShouldAnalyzeDocument( 168 bool PasswordGenerationAgent::ShouldAnalyzeDocument(
169 const WebKit::WebDocument& document) const { 169 const blink::WebDocument& document) const {
170 // Make sure that this security origin is allowed to use password manager. 170 // Make sure that this security origin is allowed to use password manager.
171 // Generating a password that can't be saved is a bad idea. 171 // Generating a password that can't be saved is a bad idea.
172 WebKit::WebSecurityOrigin origin = document.securityOrigin(); 172 blink::WebSecurityOrigin origin = document.securityOrigin();
173 if (!origin.canAccessPasswordManager()) { 173 if (!origin.canAccessPasswordManager()) {
174 DVLOG(1) << "No PasswordManager access"; 174 DVLOG(1) << "No PasswordManager access";
175 return false; 175 return false;
176 } 176 }
177 177
178 return true; 178 return true;
179 } 179 }
180 180
181 void PasswordGenerationAgent::openPasswordGenerator( 181 void PasswordGenerationAgent::openPasswordGenerator(
182 WebKit::WebInputElement& element) { 182 blink::WebInputElement& element) {
183 WebKit::WebElement button(element.passwordGeneratorButtonElement()); 183 blink::WebElement button(element.passwordGeneratorButtonElement());
184 gfx::Rect rect(button.boundsInViewportSpace()); 184 gfx::Rect rect(button.boundsInViewportSpace());
185 scoped_ptr<PasswordForm> password_form( 185 scoped_ptr<PasswordForm> password_form(
186 CreatePasswordForm(element.form())); 186 CreatePasswordForm(element.form()));
187 // We should not have shown the icon we can't create a valid PasswordForm. 187 // We should not have shown the icon we can't create a valid PasswordForm.
188 DCHECK(password_form.get()); 188 DCHECK(password_form.get());
189 189
190 Send(new AutofillHostMsg_ShowPasswordGenerationPopup(routing_id(), 190 Send(new AutofillHostMsg_ShowPasswordGenerationPopup(routing_id(),
191 rect, 191 rect,
192 element.maxLength(), 192 element.maxLength(),
193 *password_form)); 193 *password_form));
(...skipping 15 matching lines...) Expand all
209 return handled; 209 return handled;
210 } 210 }
211 211
212 void PasswordGenerationAgent::OnFormNotBlacklisted(const PasswordForm& form) { 212 void PasswordGenerationAgent::OnFormNotBlacklisted(const PasswordForm& form) {
213 not_blacklisted_password_form_origins_.push_back(form.origin); 213 not_blacklisted_password_form_origins_.push_back(form.origin);
214 MaybeShowIcon(); 214 MaybeShowIcon();
215 } 215 }
216 216
217 void PasswordGenerationAgent::OnPasswordAccepted( 217 void PasswordGenerationAgent::OnPasswordAccepted(
218 const base::string16& password) { 218 const base::string16& password) {
219 for (std::vector<WebKit::WebInputElement>::iterator it = passwords_.begin(); 219 for (std::vector<blink::WebInputElement>::iterator it = passwords_.begin();
220 it != passwords_.end(); ++it) { 220 it != passwords_.end(); ++it) {
221 it->setValue(password); 221 it->setValue(password);
222 it->setAutofilled(true); 222 it->setAutofilled(true);
223 // Advance focus to the next input field. We assume password fields in 223 // Advance focus to the next input field. We assume password fields in
224 // an account creation form are always adjacent. 224 // an account creation form are always adjacent.
225 render_view_->GetWebView()->advanceFocus(false); 225 render_view_->GetWebView()->advanceFocus(false);
226 } 226 }
227 } 227 }
228 228
229 void PasswordGenerationAgent::OnAccountCreationFormsDetected( 229 void PasswordGenerationAgent::OnAccountCreationFormsDetected(
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 return; 265 return;
266 } 266 }
267 267
268 passwords_[0].passwordGeneratorButtonElement().setAttribute("style", 268 passwords_[0].passwordGeneratorButtonElement().setAttribute("style",
269 "display:block"); 269 "display:block");
270 password_generation::LogPasswordGenerationEvent( 270 password_generation::LogPasswordGenerationEvent(
271 password_generation::ICON_SHOWN); 271 password_generation::ICON_SHOWN);
272 } 272 }
273 273
274 } // namespace autofill 274 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698