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

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

Issue 2859243004: Add metrics for PasswordForm submission types (Closed)
Patch Set: Test added Created 3 years, 7 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
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_autofill_agent.h" 5 #include "components/autofill/content/renderer/password_autofill_agent.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <string> 10 #include <string>
(...skipping 1014 matching lines...) Expand 10 before | Expand all | Expand 10 after
1025 bool PasswordAutofillAgent::OriginCanAccessPasswordManager( 1025 bool PasswordAutofillAgent::OriginCanAccessPasswordManager(
1026 const blink::WebSecurityOrigin& origin) { 1026 const blink::WebSecurityOrigin& origin) {
1027 return origin.CanAccessPasswordManager(); 1027 return origin.CanAccessPasswordManager();
1028 } 1028 }
1029 1029
1030 void PasswordAutofillAgent::OnDynamicFormsSeen() { 1030 void PasswordAutofillAgent::OnDynamicFormsSeen() {
1031 SendPasswordForms(false /* only_visible */); 1031 SendPasswordForms(false /* only_visible */);
1032 } 1032 }
1033 1033
1034 void PasswordAutofillAgent::AJAXSucceeded() { 1034 void PasswordAutofillAgent::AJAXSucceeded() {
1035 OnSameDocumentNavigationCompleted(); 1035 OnSameDocumentNavigationCompleted(false);
1036 } 1036 }
1037 1037
1038 void PasswordAutofillAgent::OnSameDocumentNavigationCompleted() { 1038 void PasswordAutofillAgent::OnSameDocumentNavigationCompleted(
engedy 2017/05/09 22:02:58 nit: Now this sounds like: OnBanana(bool is_banana
dvadym 2017/05/10 12:10:12 Absolutely agree. But I'd prefer to use this CL ju
engedy 2017/05/10 13:07:42 Acknowledged.
1039 bool is_inpage_navigation) {
1039 if (!provisionally_saved_form_.IsPasswordValid()) 1040 if (!provisionally_saved_form_.IsPasswordValid())
1040 return; 1041 return;
1041 1042
1043 provisionally_saved_form_.SetSubmissionEvent(
1044 is_inpage_navigation ? PasswordForm::SubmissionEvent::INPAGE_NAVIGATION
1045 : PasswordForm::SubmissionEvent::XHR_SUCCEEDED);
1046
1042 // Prompt to save only if the form is now gone, either invisible or 1047 // Prompt to save only if the form is now gone, either invisible or
1043 // removed from the DOM. 1048 // removed from the DOM.
1044 blink::WebFrame* frame = render_frame()->GetWebFrame(); 1049 blink::WebFrame* frame = render_frame()->GetWebFrame();
1045 const auto& password_form = provisionally_saved_form_.password_form(); 1050 const auto& password_form = provisionally_saved_form_.password_form();
1046 if (form_util::IsFormVisible(frame, provisionally_saved_form_.form_element(), 1051 if (form_util::IsFormVisible(frame, provisionally_saved_form_.form_element(),
engedy 2017/05/09 22:02:59 It seems to me that this is called on *every* succ
dvadym 2017/05/10 12:10:12 Yeah, for me it also looks strange. It was impleme
engedy 2017/05/10 13:07:42 Can we file a tracking bug for these metrics and m
dvadym 2017/05/10 14:09:25 Done.
1047 password_form.action, password_form.origin, 1052 password_form.action, password_form.origin,
1048 password_form.form_data) || 1053 password_form.form_data) ||
1049 (provisionally_saved_form_.form_element().IsNull() && 1054 (provisionally_saved_form_.form_element().IsNull() &&
1050 IsUnownedPasswordFormVisible( 1055 IsUnownedPasswordFormVisible(
1051 frame, provisionally_saved_form_.input_element(), 1056 frame, provisionally_saved_form_.input_element(),
1052 password_form.action, password_form.origin, password_form.form_data, 1057 password_form.action, password_form.origin, password_form.form_data,
1053 form_predictions_))) { 1058 form_predictions_))) {
1054 return; 1059 return;
1055 } 1060 }
1056 1061
1057 GetPasswordManagerDriver()->InPageNavigation(password_form); 1062 GetPasswordManagerDriver()->InPageNavigation(password_form);
engedy 2017/05/09 22:02:59 nit: Then this could be updated to PasswordFormSuc
dvadym 2017/05/10 12:10:11 Absolutely agree. But I'd prefere to use this CL j
engedy 2017/05/10 13:07:42 Acknowledged.
1058 provisionally_saved_form_.Reset(); 1063 provisionally_saved_form_.Reset();
1059 } 1064 }
1060 1065
1061 void PasswordAutofillAgent::UserGestureObserved() { 1066 void PasswordAutofillAgent::UserGestureObserved() {
1062 gatekeeper_.OnUserGesture(); 1067 gatekeeper_.OnUserGesture();
1063 } 1068 }
1064 1069
1065 void PasswordAutofillAgent::SendPasswordForms(bool only_visible) { 1070 void PasswordAutofillAgent::SendPasswordForms(bool only_visible) {
1066 std::unique_ptr<RendererSavePasswordProgressLogger> logger; 1071 std::unique_ptr<RendererSavePasswordProgressLogger> logger;
1067 if (logging_state_active_) { 1072 if (logging_state_active_) {
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
1202 } 1207 }
1203 1208
1204 void PasswordAutofillAgent::WillCommitProvisionalLoad() { 1209 void PasswordAutofillAgent::WillCommitProvisionalLoad() {
1205 FrameClosing(); 1210 FrameClosing();
1206 } 1211 }
1207 1212
1208 void PasswordAutofillAgent::DidCommitProvisionalLoad( 1213 void PasswordAutofillAgent::DidCommitProvisionalLoad(
1209 bool is_new_navigation, 1214 bool is_new_navigation,
1210 bool is_same_document_navigation) { 1215 bool is_same_document_navigation) {
1211 if (is_same_document_navigation) { 1216 if (is_same_document_navigation) {
1212 OnSameDocumentNavigationCompleted(); 1217 OnSameDocumentNavigationCompleted(true);
1213 } else { 1218 } else {
1214 checked_safe_browsing_reputation_ = false; 1219 checked_safe_browsing_reputation_ = false;
1215 } 1220 }
1216 } 1221 }
1217 1222
1218 void PasswordAutofillAgent::FrameDetached() { 1223 void PasswordAutofillAgent::FrameDetached() {
1219 // If a sub frame has been destroyed while the user was entering information 1224 // If a sub frame has been destroyed while the user was entering information
1220 // into a password form, try to save the data. See https://crbug.com/450806 1225 // into a password form, try to save the data. See https://crbug.com/450806
1221 // for examples of sites that perform login using this technique. 1226 // for examples of sites that perform login using this technique.
1222 if (render_frame()->GetWebFrame()->Parent() && 1227 if (render_frame()->GetWebFrame()->Parent() &&
1223 provisionally_saved_form_.IsPasswordValid()) { 1228 provisionally_saved_form_.IsPasswordValid()) {
1229 provisionally_saved_form_.SetSubmissionEvent(
1230 PasswordForm::SubmissionEvent::FRAME_DETACHED);
1224 GetPasswordManagerDriver()->InPageNavigation( 1231 GetPasswordManagerDriver()->InPageNavigation(
1225 provisionally_saved_form_.password_form()); 1232 provisionally_saved_form_.password_form());
1226 } 1233 }
1227 FrameClosing(); 1234 FrameClosing();
1228 } 1235 }
1229 1236
1230 void PasswordAutofillAgent::WillSendSubmitEvent( 1237 void PasswordAutofillAgent::WillSendSubmitEvent(
1231 const blink::WebFormElement& form) { 1238 const blink::WebFormElement& form) {
1232 // Forms submitted via XHR are not seen by WillSubmitForm if the default 1239 // Forms submitted via XHR are not seen by WillSubmitForm if the default
1233 // onsubmit handler is overridden. Such submission first gets detected in 1240 // onsubmit handler is overridden. Such submission first gets detected in
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1273 } 1280 }
1274 if (provisionally_saved_form_.IsSet() && 1281 if (provisionally_saved_form_.IsSet() &&
1275 submitted_form->action == 1282 submitted_form->action ==
1276 provisionally_saved_form_.password_form().action) { 1283 provisionally_saved_form_.password_form().action) {
1277 if (logger) 1284 if (logger)
1278 logger->LogMessage(Logger::STRING_SUBMITTED_PASSWORD_REPLACED); 1285 logger->LogMessage(Logger::STRING_SUBMITTED_PASSWORD_REPLACED);
1279 const auto& saved_form = provisionally_saved_form_.password_form(); 1286 const auto& saved_form = provisionally_saved_form_.password_form();
1280 submitted_form->password_value = saved_form.password_value; 1287 submitted_form->password_value = saved_form.password_value;
1281 submitted_form->new_password_value = saved_form.new_password_value; 1288 submitted_form->new_password_value = saved_form.new_password_value;
1282 submitted_form->username_value = saved_form.username_value; 1289 submitted_form->username_value = saved_form.username_value;
1290 submitted_form->submission_event =
1291 PasswordForm::SubmissionEvent::HTML_FORM_SUBMISSION;
1283 } 1292 }
1284 1293
1285 // Some observers depend on sending this information now instead of when 1294 // Some observers depend on sending this information now instead of when
1286 // the frame starts loading. If there are redirects that cause a new 1295 // the frame starts loading. If there are redirects that cause a new
1287 // RenderView to be instantiated (such as redirects to the WebStore) 1296 // RenderView to be instantiated (such as redirects to the WebStore)
1288 // we will never get to finish the load. 1297 // we will never get to finish the load.
1289 GetPasswordManagerDriver()->PasswordFormSubmitted(*submitted_form); 1298 GetPasswordManagerDriver()->PasswordFormSubmitted(*submitted_form);
1290 provisionally_saved_form_.Reset(); 1299 provisionally_saved_form_.Reset();
1291 } else if (logger) { 1300 } else if (logger) {
1292 logger->LogMessage(Logger::STRING_FORM_IS_NOT_PASSWORD); 1301 logger->LogMessage(Logger::STRING_FORM_IS_NOT_PASSWORD);
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
1556 password_form->new_password_element != 1565 password_form->new_password_element !=
1557 input.NameForAutofill().Utf16()) 1566 input.NameForAutofill().Utf16())
1558 password_form.reset(); 1567 password_form.reset();
1559 } 1568 }
1560 } 1569 }
1561 } 1570 }
1562 1571
1563 if (!password_form) 1572 if (!password_form)
1564 password_form.reset(new PasswordForm()); 1573 password_form.reset(new PasswordForm());
1565 1574
1575 password_form->submission_event =
1576 PasswordForm::SubmissionEvent::BY_CONTEXT_MENU_CLICK;
1566 callback.Run(*password_form); 1577 callback.Run(*password_form);
1567 } 1578 }
1568 1579
1569 //////////////////////////////////////////////////////////////////////////////// 1580 ////////////////////////////////////////////////////////////////////////////////
1570 // PasswordAutofillAgent, private: 1581 // PasswordAutofillAgent, private:
1571 1582
1572 bool PasswordAutofillAgent::ShowSuggestionPopup( 1583 bool PasswordAutofillAgent::ShowSuggestionPopup(
1573 const PasswordInfo& password_info, 1584 const PasswordInfo& password_info,
1574 const blink::WebInputElement& user_input, 1585 const blink::WebInputElement& user_input,
1575 bool show_all, 1586 bool show_all,
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1659 PasswordAutofillAgent::GetPasswordManagerDriver() { 1670 PasswordAutofillAgent::GetPasswordManagerDriver() {
1660 if (!password_manager_driver_) { 1671 if (!password_manager_driver_) {
1661 render_frame()->GetRemoteInterfaces()->GetInterface( 1672 render_frame()->GetRemoteInterfaces()->GetInterface(
1662 mojo::MakeRequest(&password_manager_driver_)); 1673 mojo::MakeRequest(&password_manager_driver_));
1663 } 1674 }
1664 1675
1665 return password_manager_driver_; 1676 return password_manager_driver_;
1666 } 1677 }
1667 1678
1668 } // namespace autofill 1679 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698