Index: components/autofill/browser/autofill_external_delegate.cc |
diff --git a/components/autofill/browser/autofill_external_delegate.cc b/components/autofill/browser/autofill_external_delegate.cc |
deleted file mode 100644 |
index 94e2d299e483a093c6ad12923cb5ea1e7a5a6ae0..0000000000000000000000000000000000000000 |
--- a/components/autofill/browser/autofill_external_delegate.cc |
+++ /dev/null |
@@ -1,391 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "components/autofill/browser/autofill_external_delegate.h" |
- |
-#include "base/strings/utf_string_conversions.h" |
-#include "components/autofill/browser/autocomplete_history_manager.h" |
-#include "components/autofill/browser/autofill_manager.h" |
-#include "components/autofill/core/common/autofill_messages.h" |
-#include "content/public/browser/navigation_controller.h" |
-#include "content/public/browser/notification_service.h" |
-#include "content/public/browser/notification_source.h" |
-#include "content/public/browser/notification_types.h" |
-#include "content/public/browser/render_view_host.h" |
-#include "content/public/browser/web_contents.h" |
-#include "grit/component_strings.h" |
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebAutofillClient.h" |
-#include "ui/base/l10n/l10n_util.h" |
- |
-#if defined(OS_ANDROID) |
-#include "content/public/browser/android/content_view_core.h" |
-#endif |
- |
-using content::RenderViewHost; |
-using WebKit::WebAutofillClient; |
- |
-namespace autofill { |
- |
-AutofillExternalDelegate::AutofillExternalDelegate( |
- content::WebContents* web_contents, |
- AutofillManager* autofill_manager) |
- : web_contents_(web_contents), |
- autofill_manager_(autofill_manager), |
- password_autofill_manager_(web_contents), |
- autofill_query_id_(0), |
- display_warning_if_disabled_(false), |
- has_autofill_suggestion_(false), |
- has_shown_autofill_popup_for_current_edit_(false), |
- registered_keyboard_listener_with_(NULL), |
- weak_ptr_factory_(this) { |
- DCHECK(autofill_manager); |
- |
- registrar_.Add(this, |
- content::NOTIFICATION_WEB_CONTENTS_VISIBILITY_CHANGED, |
- content::Source<content::WebContents>(web_contents)); |
- registrar_.Add( |
- this, |
- content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
- content::Source<content::NavigationController>( |
- &(web_contents->GetController()))); |
-} |
- |
-AutofillExternalDelegate::~AutofillExternalDelegate() {} |
- |
-void AutofillExternalDelegate::OnQuery(int query_id, |
- const FormData& form, |
- const FormFieldData& field, |
- const gfx::RectF& element_bounds, |
- bool display_warning_if_disabled) { |
- autofill_query_form_ = form; |
- autofill_query_field_ = field; |
- display_warning_if_disabled_ = display_warning_if_disabled; |
- autofill_query_id_ = query_id; |
- element_bounds_ = element_bounds; |
-} |
- |
-void AutofillExternalDelegate::OnSuggestionsReturned( |
- int query_id, |
- const std::vector<base::string16>& autofill_values, |
- const std::vector<base::string16>& autofill_labels, |
- const std::vector<base::string16>& autofill_icons, |
- const std::vector<int>& autofill_unique_ids) { |
- if (query_id != autofill_query_id_) |
- return; |
- |
- std::vector<base::string16> values(autofill_values); |
- std::vector<base::string16> labels(autofill_labels); |
- std::vector<base::string16> icons(autofill_icons); |
- std::vector<int> ids(autofill_unique_ids); |
- |
- // Add or hide warnings as appropriate. |
- ApplyAutofillWarnings(&values, &labels, &icons, &ids); |
- |
- // Add a separator to go between the values and menu items. |
- values.push_back(base::string16()); |
- labels.push_back(base::string16()); |
- icons.push_back(base::string16()); |
- ids.push_back(WebAutofillClient::MenuItemIDSeparator); |
- |
- // Only include "Autofill Options" special menu item if we have Autofill |
- // suggestions. |
- has_autofill_suggestion_ = false; |
- for (size_t i = 0; i < ids.size(); ++i) { |
- if (ids[i] > 0) { |
- has_autofill_suggestion_ = true; |
- break; |
- } |
- } |
- |
- if (has_autofill_suggestion_) |
- ApplyAutofillOptions(&values, &labels, &icons, &ids); |
- |
- // Remove the separator if it is the last element. |
- DCHECK_GT(ids.size(), 0U); |
- if (ids.back() == WebAutofillClient::MenuItemIDSeparator) { |
- values.pop_back(); |
- labels.pop_back(); |
- icons.pop_back(); |
- ids.pop_back(); |
- } |
- |
- InsertDataListValues(&values, &labels, &icons, &ids); |
- |
- if (values.empty()) { |
- // No suggestions, any popup currently showing is obsolete. |
- autofill_manager_->delegate()->HideAutofillPopup(); |
- return; |
- } |
- |
- // Send to display. |
- if (autofill_query_field_.is_focusable) { |
- autofill_manager_->delegate()->ShowAutofillPopup( |
- element_bounds_, |
- autofill_query_field_.text_direction, |
- values, |
- labels, |
- icons, |
- ids, |
- GetWeakPtr()); |
- } |
-} |
- |
-void AutofillExternalDelegate::OnShowPasswordSuggestions( |
- const std::vector<base::string16>& suggestions, |
- const FormFieldData& field, |
- const gfx::RectF& element_bounds) { |
- autofill_query_field_ = field; |
- element_bounds_ = element_bounds; |
- |
- if (suggestions.empty()) { |
- autofill_manager_->delegate()->HideAutofillPopup(); |
- return; |
- } |
- |
- std::vector<base::string16> empty(suggestions.size()); |
- std::vector<int> password_ids(suggestions.size(), |
- WebAutofillClient::MenuItemIDPasswordEntry); |
- autofill_manager_->delegate()->ShowAutofillPopup( |
- element_bounds_, |
- autofill_query_field_.text_direction, |
- suggestions, |
- empty, |
- empty, |
- password_ids, |
- GetWeakPtr()); |
-} |
- |
-void AutofillExternalDelegate::SetCurrentDataListValues( |
- const std::vector<base::string16>& data_list_values, |
- const std::vector<base::string16>& data_list_labels, |
- const std::vector<base::string16>& data_list_icons, |
- const std::vector<int>& data_list_unique_ids) { |
- data_list_values_ = data_list_values; |
- data_list_labels_ = data_list_labels; |
- data_list_icons_ = data_list_icons; |
- data_list_unique_ids_ = data_list_unique_ids; |
-} |
- |
-void AutofillExternalDelegate::OnPopupShown( |
- content::KeyboardListener* listener) { |
- if (!registered_keyboard_listener_with_) { |
- registered_keyboard_listener_with_ = web_contents_->GetRenderViewHost(); |
- registered_keyboard_listener_with_->AddKeyboardListener(listener); |
- } |
- |
- autofill_manager_->OnDidShowAutofillSuggestions( |
- has_autofill_suggestion_ && !has_shown_autofill_popup_for_current_edit_); |
- has_shown_autofill_popup_for_current_edit_ |= has_autofill_suggestion_; |
-} |
- |
-void AutofillExternalDelegate::OnPopupHidden( |
- content::KeyboardListener* listener) { |
- if (registered_keyboard_listener_with_ == web_contents_->GetRenderViewHost()) |
- web_contents_->GetRenderViewHost()->RemoveKeyboardListener(listener); |
- |
- registered_keyboard_listener_with_ = NULL; |
-} |
- |
-void AutofillExternalDelegate::DidSelectSuggestion(int identifier) { |
- ClearPreviewedForm(); |
- |
- // Only preview the data if it is a profile. |
- if (identifier > 0) |
- FillAutofillFormData(identifier, true); |
-} |
- |
-void AutofillExternalDelegate::DidAcceptSuggestion(const base::string16& value, |
- int identifier) { |
- RenderViewHost* host = web_contents_->GetRenderViewHost(); |
- |
- if (identifier == WebAutofillClient::MenuItemIDAutofillOptions) { |
- // User selected 'Autofill Options'. |
- autofill_manager_->OnShowAutofillDialog(); |
- } else if (identifier == WebAutofillClient::MenuItemIDClearForm) { |
- // User selected 'Clear form'. |
- host->Send(new AutofillMsg_ClearForm(host->GetRoutingID())); |
- } else if (identifier == WebAutofillClient::MenuItemIDPasswordEntry) { |
- bool success = password_autofill_manager_.DidAcceptAutofillSuggestion( |
- autofill_query_field_, value); |
- DCHECK(success); |
- } else if (identifier == WebAutofillClient::MenuItemIDDataListEntry) { |
- host->Send(new AutofillMsg_AcceptDataListSuggestion(host->GetRoutingID(), |
- value)); |
- } else if (identifier == WebAutofillClient::MenuItemIDAutocompleteEntry) { |
- // User selected an Autocomplete, so we fill directly. |
- host->Send(new AutofillMsg_SetNodeText(host->GetRoutingID(), value)); |
- } else { |
- FillAutofillFormData(identifier, false); |
- } |
- |
- autofill_manager_->delegate()->HideAutofillPopup(); |
-} |
- |
-void AutofillExternalDelegate::RemoveSuggestion(const base::string16& value, |
- int identifier) { |
- if (identifier > 0) { |
- autofill_manager_->RemoveAutofillProfileOrCreditCard(identifier); |
- } else { |
- autofill_manager_->RemoveAutocompleteEntry(autofill_query_field_.name, |
- value); |
- } |
-} |
- |
-void AutofillExternalDelegate::DidEndTextFieldEditing() { |
- autofill_manager_->delegate()->HideAutofillPopup(); |
- |
- has_shown_autofill_popup_for_current_edit_ = false; |
-} |
- |
-void AutofillExternalDelegate::ClearPreviewedForm() { |
- RenderViewHost* host = web_contents_->GetRenderViewHost(); |
- if (host) |
- host->Send(new AutofillMsg_ClearPreviewedForm(host->GetRoutingID())); |
-} |
- |
-void AutofillExternalDelegate::Reset() { |
- autofill_manager_->delegate()->HideAutofillPopup(); |
- |
- password_autofill_manager_.Reset(); |
-} |
- |
-void AutofillExternalDelegate::AddPasswordFormMapping( |
- const FormFieldData& form, |
- const PasswordFormFillData& fill_data) { |
- password_autofill_manager_.AddPasswordFormMapping(form, fill_data); |
-} |
- |
-base::WeakPtr<AutofillExternalDelegate> AutofillExternalDelegate::GetWeakPtr() { |
- return weak_ptr_factory_.GetWeakPtr(); |
-} |
- |
-void AutofillExternalDelegate::FillAutofillFormData(int unique_id, |
- bool is_preview) { |
- // If the selected element is a warning we don't want to do anything. |
- if (unique_id == WebAutofillClient::MenuItemIDWarningMessage) |
- return; |
- |
- RenderViewHost* host = web_contents_->GetRenderViewHost(); |
- |
- if (is_preview) { |
- host->Send(new AutofillMsg_SetAutofillActionPreview( |
- host->GetRoutingID())); |
- } else { |
- host->Send(new AutofillMsg_SetAutofillActionFill( |
- host->GetRoutingID())); |
- } |
- |
- // Fill the values for the whole form. |
- autofill_manager_->OnFillAutofillFormData(autofill_query_id_, |
- autofill_query_form_, |
- autofill_query_field_, |
- unique_id); |
-} |
- |
-void AutofillExternalDelegate::ApplyAutofillWarnings( |
- std::vector<base::string16>* autofill_values, |
- std::vector<base::string16>* autofill_labels, |
- std::vector<base::string16>* autofill_icons, |
- std::vector<int>* autofill_unique_ids) { |
- if (!autofill_query_field_.should_autocomplete) { |
- // If autofill is disabled and we had suggestions, show a warning instead. |
- autofill_values->assign( |
- 1, l10n_util::GetStringUTF16(IDS_AUTOFILL_WARNING_FORM_DISABLED)); |
- autofill_labels->assign(1, base::string16()); |
- autofill_icons->assign(1, base::string16()); |
- autofill_unique_ids->assign(1, WebAutofillClient::MenuItemIDWarningMessage); |
- } else if (autofill_unique_ids->size() > 1 && |
- (*autofill_unique_ids)[0] == |
- WebAutofillClient::MenuItemIDWarningMessage) { |
- // If we received a warning instead of suggestions from autofill but regular |
- // suggestions from autocomplete, don't show the autofill warning. |
- autofill_values->erase(autofill_values->begin()); |
- autofill_labels->erase(autofill_labels->begin()); |
- autofill_icons->erase(autofill_icons->begin()); |
- autofill_unique_ids->erase(autofill_unique_ids->begin()); |
- } |
- |
- // If we were about to show a warning and we shouldn't, don't. |
- if (!autofill_unique_ids->empty() && |
- (*autofill_unique_ids)[0] == |
- WebAutofillClient::MenuItemIDWarningMessage && |
- !display_warning_if_disabled_) { |
- autofill_values->clear(); |
- autofill_labels->clear(); |
- autofill_icons->clear(); |
- autofill_unique_ids->clear(); |
- } |
-} |
- |
-void AutofillExternalDelegate::ApplyAutofillOptions( |
- std::vector<base::string16>* autofill_values, |
- std::vector<base::string16>* autofill_labels, |
- std::vector<base::string16>* autofill_icons, |
- std::vector<int>* autofill_unique_ids) { |
- // The form has been auto-filled, so give the user the chance to clear the |
- // form. Append the 'Clear form' menu item. |
- if (autofill_query_field_.is_autofilled) { |
- autofill_values->push_back( |
- l10n_util::GetStringUTF16(IDS_AUTOFILL_CLEAR_FORM_MENU_ITEM)); |
- autofill_labels->push_back(base::string16()); |
- autofill_icons->push_back(base::string16()); |
- autofill_unique_ids->push_back(WebAutofillClient::MenuItemIDClearForm); |
- } |
- |
- // Append the 'Chrome Autofill options' menu item; |
- autofill_values->push_back( |
- l10n_util::GetStringUTF16(IDS_AUTOFILL_OPTIONS_POPUP)); |
- autofill_labels->push_back(base::string16()); |
- autofill_icons->push_back(base::string16()); |
- autofill_unique_ids->push_back(WebAutofillClient::MenuItemIDAutofillOptions); |
-} |
- |
-void AutofillExternalDelegate::InsertDataListValues( |
- std::vector<base::string16>* autofill_values, |
- std::vector<base::string16>* autofill_labels, |
- std::vector<base::string16>* autofill_icons, |
- std::vector<int>* autofill_unique_ids) { |
- if (data_list_values_.empty()) |
- return; |
- |
- // Insert the separator between the datalist and Autofill values (if there |
- // are any). |
- if (!autofill_values->empty()) { |
- autofill_values->insert(autofill_values->begin(), base::string16()); |
- autofill_labels->insert(autofill_labels->begin(), base::string16()); |
- autofill_icons->insert(autofill_icons->begin(), base::string16()); |
- autofill_unique_ids->insert(autofill_unique_ids->begin(), |
- WebAutofillClient::MenuItemIDSeparator); |
- } |
- |
- // Insert the datalist elements. |
- autofill_values->insert(autofill_values->begin(), |
- data_list_values_.begin(), |
- data_list_values_.end()); |
- autofill_labels->insert(autofill_labels->begin(), |
- data_list_labels_.begin(), |
- data_list_labels_.end()); |
- autofill_icons->insert(autofill_icons->begin(), |
- data_list_icons_.begin(), |
- data_list_icons_.end()); |
- autofill_unique_ids->insert(autofill_unique_ids->begin(), |
- data_list_unique_ids_.begin(), |
- data_list_unique_ids_.end()); |
-} |
- |
-void AutofillExternalDelegate::Observe( |
- int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) { |
- if (type == content::NOTIFICATION_WEB_CONTENTS_VISIBILITY_CHANGED) { |
- if (!*content::Details<bool>(details).ptr()) |
- autofill_manager_->delegate()->HideAutofillPopup(); |
- } else if (type == content::NOTIFICATION_NAV_ENTRY_COMMITTED) { |
- autofill_manager_->delegate()->HideAutofillPopup(); |
- } else { |
- NOTREACHED(); |
- } |
-} |
- |
-} // namespace autofill |