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

Unified Diff: components/autofill/content/renderer/password_autofill_agent.cc

Issue 208453002: Add "previewing on hover" support for password field. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update code as per review comments on SelectionRange. Created 6 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 side-by-side diff with in-line comments
Download patch
Index: components/autofill/content/renderer/password_autofill_agent.cc
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc
index 9e1e1db7025acd8685af9239015a95f397cd8bc2..6474e9548212bd7a17061e866506d23d0cbb4961 100644
--- a/components/autofill/content/renderer/password_autofill_agent.cc
+++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -229,6 +229,9 @@ PasswordAutofillAgent::PasswordAutofillAgent(content::RenderView* render_view)
usernames_usage_(NOTHING_TO_AUTOFILL),
web_view_(render_view->GetWebView()),
logging_state_active_(false),
+ was_username_autofilled_(false),
+ was_password_autofilled_(false),
+ selection_start_(0),
weak_ptr_factory_(this) {
}
@@ -367,7 +370,7 @@ bool PasswordAutofillAgent::TextFieldHandlingKeyDown(
return true;
}
-bool PasswordAutofillAgent::AcceptSuggestion(
+bool PasswordAutofillAgent::FillSuggestion(
const blink::WebNode& node,
const blink::WebString& username,
const blink::WebString& password) {
@@ -391,11 +394,43 @@ bool PasswordAutofillAgent::AcceptSuggestion(
return true;
}
+bool PasswordAutofillAgent::PreviewSuggestion(
+ const blink::WebNode& node,
+ const blink::WebString& username,
+ const blink::WebString& password) {
+ blink::WebInputElement username_element;
+ PasswordInfo password_info;
+
+ if (!FindLoginInfo(node, &username_element, &password_info) ||
+ !IsElementAutocompletable(username_element) ||
+ !IsElementAutocompletable(password_info.password_field)) {
+ return false;
+ }
+
+ was_username_autofilled_ = username_element.isAutofilled();
+ selection_start_= username_element.selectionStart();
Ilya Sherman 2014/05/20 08:34:37 nit: Please leave a space before the '=' sign.
ziran.sun 2014/05/20 20:48:11 Done.
+ username_element.setSuggestedValue(username);
+ username_element.setAutofilled(true);
+ username_element.setSelectionRange(
+ selection_start_,
+ username_element.suggestedValue().length());
+
+ was_password_autofilled_ = password_info.password_field.isAutofilled();
+ password_info.password_field.setSuggestedValue(password);
+ password_info.password_field.setAutofilled(true);
+
+ return true;
+}
+
bool PasswordAutofillAgent::DidClearAutofillSelection(
const blink::WebNode& node) {
- blink::WebInputElement input;
- PasswordInfo password;
- return FindLoginInfo(node, &input, &password);
+ blink::WebInputElement username_element;
+ PasswordInfo password_info;
+ if (!FindLoginInfo(node, &username_element, &password_info))
+ return false;
+
+ ClearPreview(&username_element, &password_info.password_field);
+ return true;
}
bool PasswordAutofillAgent::ShowSuggestions(
@@ -1026,4 +1061,19 @@ bool PasswordAutofillAgent::FindLoginInfo(const blink::WebNode& node,
return true;
}
+void PasswordAutofillAgent::ClearPreview(
+ blink::WebInputElement* username,
+ blink::WebInputElement* password) {
+ if (!username->suggestedValue().isEmpty()) {
+ username->setSuggestedValue(blink::WebString());
+ username->setAutofilled(was_username_autofilled_);
+ username->setSelectionRange(selection_start_,
+ username->value().length());
+ }
+ if (!password->suggestedValue().isEmpty()) {
+ password->setSuggestedValue(blink::WebString());
+ password->setAutofilled(was_password_autofilled_);
+ }
+}
+
} // namespace autofill

Powered by Google App Engine
This is Rietveld 408576698