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

Unified Diff: components/autofill/browser/autofill_external_delegate.cc

Issue 17392006: In components/autofill, move browser/ to core/browser/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase to fix conflicts Created 7 years, 6 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/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

Powered by Google App Engine
This is Rietveld 408576698