15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2013 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_AUTOFILL_MANAGER_H_ 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_AUTOFILL_MANAGER_H_ 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include <map> 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/gtest_prod_util.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/autofill/core/browser/autofill_client.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "components/autofill/core/browser/autofill_popup_delegate.h" 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "components/autofill/core/common/password_form_fill_data.h" 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace gfx { 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass RectF; 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace password_manager { 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass PasswordManagerClient; 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// This class is responsible for filling password forms. 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass PasswordAutofillManager : public autofill::AutofillPopupDelegate { 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public: 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PasswordAutofillManager(PasswordManagerClient* password_manager_client, 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) autofill::AutofillClient* autofill_client); 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ~PasswordAutofillManager(); 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // AutofillPopupDelegate implementation. 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void OnPopupShown() OVERRIDE; 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void OnPopupHidden() OVERRIDE; 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void DidSelectSuggestion(const base::string16& value, 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int identifier) OVERRIDE; 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void DidAcceptSuggestion(const base::string16& value, 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int identifier) OVERRIDE; 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void RemoveSuggestion(const base::string16& value, 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int identifier) OVERRIDE; 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void ClearPreviewedForm() OVERRIDE; 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Invoked when a password mapping is added. 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void OnAddPasswordFormMapping( 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const autofill::FormFieldData& field, 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const autofill::PasswordFormFillData& fill_data); 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Handles a request from the renderer to show a popup with the given 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // |suggestions| from the password manager. 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void OnShowPasswordSuggestions( 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const autofill::FormFieldData& field, 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const gfx::RectF& bounds, 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::vector<base::string16>& suggestions, 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::vector<base::string16>& realms); 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Invoked to clear any page specific cached values. 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void Reset(); 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // A public version of FillSuggestion(), only for use in tests. 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool FillSuggestionForTest(const autofill::FormFieldData& field, 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::string16& username); 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // A public version of PreviewSuggestion(), only for use in tests. 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool PreviewSuggestionForTest(const autofill::FormFieldData& field, 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::string16& username); 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private: 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu typedef std::map<autofill::FormFieldData, autofill::PasswordFormFillData> 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LoginToPasswordInfoMap; 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Attempts to fill the password associated with user name |username|, and 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // returns true if it was successful. 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool FillSuggestion(const autofill::FormFieldData& field, 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::string16& username); 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Attempts to preview the password associated with user name |username|, and 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // returns true if it was successful. 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool PreviewSuggestion(const autofill::FormFieldData& field, 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::string16& username); 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // If |current_username| matches a username for one of the login mappings in 805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // |fill_data|, returns true and assigns the password to |out_password|. 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Otherwise, returns false and leaves |out_password| untouched. 825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool GetPasswordForUsername( 835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::string16& current_username, 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const autofill::PasswordFormFillData& fill_data, 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::string16* out_password); 865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Finds login information for a |node| that was previously filled. 885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool FindLoginInfo(const autofill::FormFieldData& field, 895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu autofill::PasswordFormFillData* found_password); 905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // The logins we have filled so far with their associated info. 925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LoginToPasswordInfoMap login_to_password_info_; 935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Provides embedder-level operations on passwords. Must outlive |this|. 955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PasswordManagerClient* const password_manager_client_; // weak 965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) autofill::AutofillClient* const autofill_client_; // weak 985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // The form field on which the autofill popup is shown. 1005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu autofill::FormFieldData form_field_; 1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::WeakPtrFactory<PasswordAutofillManager> weak_ptr_factory_; 1035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DISALLOW_COPY_AND_ASSIGN(PasswordAutofillManager); 1055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 1065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace password_manager 1085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_AUTOFILL_MANAGER_H_ 110