1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_AUTOFILL_AUTOFILL_MANAGER_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_AUTOFILL_AUTOFILL_MANAGER_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include <list> 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <map> 11201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include <string> 12201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include <vector> 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14a1fe9c0450e6d56112949b33ef2f7491e0cf0f60Kristian Monsen#ifdef ANDROID 15a1fe9c0450e6d56112949b33ef2f7491e0cf0f60Kristian Monsen#include "base/base_api.h" 16a1fe9c0450e6d56112949b33ef2f7491e0cf0f60Kristian Monsen#endif 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/basictypes.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/compiler_specific.h" 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/gtest_prod_util.h" 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_vector.h" 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/string16.h" 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autofill/autofill_download.h" 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/autofill/field_types.h" 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/autofill/form_structure.h" 26cfb4826edae011aed657a813297687800ed85e17Kristian Monsen#ifndef ANDROID 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/tab_contents/navigation_controller.h" 28cfb4826edae011aed657a813297687800ed85e17Kristian Monsen#endif 29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents_observer.h" 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass AutofillField; 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass AutofillProfile; 33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass AutofillMetrics; 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CreditCard; 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass PersonalDataManager; 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PrefService; 3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass RenderViewHost; 38e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsenclass TabContents; 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40ec088f53b6595e64df8841a817706e6d086cb17cBen Murdoch#ifdef ANDROID 41ec088f53b6595e64df8841a817706e6d086cb17cBen Murdochclass AutoFillHost; 42ec088f53b6595e64df8841a817706e6d086cb17cBen Murdoch#endif 43cfb4826edae011aed657a813297687800ed85e17Kristian Monsen 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstruct ViewHostMsg_FrameNavigate_Params; 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace IPC { 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass Message; 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 49ec088f53b6595e64df8841a817706e6d086cb17cBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace webkit_glue { 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct FormData; 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstruct FormField; 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Manages saving and restoring the user's personal information entered into web 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// forms. 57a1fe9c0450e6d56112949b33ef2f7491e0cf0f60Kristian Monsenclass 58a1fe9c0450e6d56112949b33ef2f7491e0cf0f60Kristian Monsen#ifdef ANDROID 59a1fe9c0450e6d56112949b33ef2f7491e0cf0f60Kristian MonsenBASE_API 60a1fe9c0450e6d56112949b33ef2f7491e0cf0f60Kristian Monsen#endif 61a1fe9c0450e6d56112949b33ef2f7491e0cf0f60Kristian MonsenAutofillManager : public TabContentsObserver, 62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public AutofillDownloadManager::Observer { 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 64dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen explicit AutofillManager(TabContents* tab_contents); 65dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual ~AutofillManager(); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 676e1a1d3242a4de2a633c62ba45948dd2d0620990Kristian Monsen#ifndef ANDROID 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Registers our browser prefs. 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void RegisterBrowserPrefs(PrefService* prefs); 706e1a1d3242a4de2a633c62ba45948dd2d0620990Kristian Monsen#endif 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 726e1a1d3242a4de2a633c62ba45948dd2d0620990Kristian Monsen#ifndef ANDROID 73dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Registers our Enable/Disable Autofill pref. 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void RegisterUserPrefs(PrefService* prefs); 756e1a1d3242a4de2a633c62ba45948dd2d0620990Kristian Monsen#endif 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 77e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen#ifndef ANDROID 7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // TabContentsObserver implementation. 7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void DidNavigateMainFramePostCommit( 8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NavigationController::LoadCommittedDetails& details, 8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const ViewHostMsg_FrameNavigate_Params& params); 8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual bool OnMessageReceived(const IPC::Message& message); 83e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen#endif 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // AutofillDownloadManager::Observer implementation: 86dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void OnLoadedAutofillHeuristics(const std::string& heuristic_xml); 87dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void OnUploadedAutofillHeuristics(const std::string& form_signature); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnHeuristicsRequestError( 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& form_signature, 90dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutofillDownloadManager::AutofillRequestType request_type, 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int http_error); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns the value of the AutofillEnabled pref. 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool IsAutofillEnabled() const; 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Imports the form data, submitted by the user, into |personal_data_|. 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void ImportFormData(const FormStructure& submitted_form); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 99dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Uploads the form data to the Autofill server. 10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void UploadFormData(const FormStructure& submitted_form); 10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 10272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Reset cache. 10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void Reset(); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 105e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen#ifdef ANDROID 106e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen void OnFormsSeenWrapper(const std::vector<webkit_glue::FormData>& forms) { 107e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen OnFormsSeen(forms); 108e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen } 109e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen 110307db3d811ae8f73246af95b9bf4e4a5f82f65ebBen Murdoch bool OnQueryFormFieldAutoFillWrapper(const webkit_glue::FormData& form, 111e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen const webkit_glue::FormField& field) { 112cfb4826edae011aed657a813297687800ed85e17Kristian Monsen return OnQueryFormFieldAutofill(0, form, field); 113e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen } 114e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen 115e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen void OnFillAutoFillFormDataWrapper(int query_id, 116e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen const webkit_glue::FormData& form, 117e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen const webkit_glue::FormField& field, 118e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen int unique_id) { 119cfb4826edae011aed657a813297687800ed85e17Kristian Monsen OnFillAutofillFormData(query_id, form, field, unique_id); 120e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen } 121e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen#endif 122e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // For tests: 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The string/int pair is composed of the guid string and variant index 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // respectively. The variant index is an index into the multi-valued item 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // (where applicable). 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen typedef std::pair<std::string, size_t> GUIDPair; 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 131dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutofillManager(TabContents* tab_contents, 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PersonalDataManager* personal_data); 1333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_personal_data_manager(PersonalDataManager* personal_data) { 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_ = personal_data; 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const AutofillMetrics* metric_logger() const { return metric_logger_.get(); } 139dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_metric_logger(const AutofillMetrics* metric_logger); 14021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 14172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ScopedVector<FormStructure>* form_structures() { return &form_structures_; } 14272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 143201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Maps GUIDs to and from IDs that are used to identify profiles and credit 144201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // cards sent to and from the renderer process. 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual int GUIDToID(const GUIDPair& guid); 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual const GUIDPair IDToGUID(int id); 147201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 148201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Methods for packing and unpacking credit card and profile IDs for sending 149201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // and receiving to and from the renderer process. 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int PackGUIDs(const GUIDPair& cc_guid, const GUIDPair& profile_guid); 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void UnpackGUIDs(int id, GUIDPair* cc_guid, GUIDPair* profile_guid); 152201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 15472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnFormSubmitted(const webkit_glue::FormData& form); 15572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnFormsSeen(const std::vector<webkit_glue::FormData>& forms); 156e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen#ifdef ANDROID 157cfb4826edae011aed657a813297687800ed85e17Kristian Monsen bool 158e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen#else 159cfb4826edae011aed657a813297687800ed85e17Kristian Monsen void 160e673c43ad7cf68f9dfcc0e8b797a5c1b38e2fa63Kristian Monsen#endif 161cfb4826edae011aed657a813297687800ed85e17Kristian Monsen OnQueryFormFieldAutofill(int query_id, 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const webkit_glue::FormData& form, 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const webkit_glue::FormField& field); 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void OnFillAutofillFormData(int query_id, 16572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const webkit_glue::FormData& form, 16672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const webkit_glue::FormField& field, 16772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int unique_id); 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void OnShowAutofillDialog(); 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void OnDidFillAutofillFormData(); 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void OnDidShowAutofillSuggestions(); 17172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 172201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Fills |host| with the RenderViewHost for this tab. 173dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Returns false if Autofill is disabled or if the host is unavailable. 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool GetHost(const std::vector<AutofillProfile*>& profiles, 175201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::vector<CreditCard*>& credit_cards, 176ec088f53b6595e64df8841a817706e6d086cb17cBen Murdoch#ifdef ANDROID 177ec088f53b6595e64df8841a817706e6d086cb17cBen Murdoch AutoFillHost** host) WARN_UNUSED_RESULT; 178ec088f53b6595e64df8841a817706e6d086cb17cBen Murdoch#else 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen RenderViewHost** host) const WARN_UNUSED_RESULT; 180cfb4826edae011aed657a813297687800ed85e17Kristian Monsen#endif 181201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 18272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Fills |form_structure| cached element corresponding to |form|. 18372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Returns false if the cached element was not found. 18472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool FindCachedForm(const webkit_glue::FormData& form, 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FormStructure** form_structure) const WARN_UNUSED_RESULT; 18672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 187201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Fills |form_structure| and |autofill_field| with the cached elements 188201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // corresponding to |form| and |field|. Returns false if the cached elements 189201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // were not found. 190201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool FindCachedFormAndField( 191201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const webkit_glue::FormData& form, 192201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const webkit_glue::FormField& field, 193201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch FormStructure** form_structure, 194dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutofillField** autofill_field) WARN_UNUSED_RESULT; 195201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns a list of values from the stored profiles that match |type| and the 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // value of |field| and returns the labels of the matching profiles. |labels| 198513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // is filled with the Profile label. 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void GetProfileSuggestions(FormStructure* form, 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const webkit_glue::FormField& field, 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillFieldType type, 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<string16>* values, 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<string16>* labels, 2043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::vector<string16>* icons, 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<int>* unique_ids); 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns a list of values from the stored credit cards that match |type| and 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the value of |field| and returns the labels of the matching credit cards. 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void GetCreditCardSuggestions(FormStructure* form, 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const webkit_glue::FormField& field, 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillFieldType type, 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<string16>* values, 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<string16>* labels, 2143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::vector<string16>* icons, 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<int>* unique_ids); 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Set |field| argument's value based on |type| and contents of the 2183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // |credit_card|. 2193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void FillCreditCardFormField(const CreditCard* credit_card, 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillFieldType type, 2213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick webkit_glue::FormField* field); 2223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Set |field| argument's value based on |type| and contents of the |profile|. 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The |variant| parameter specifies which value in a multi-valued profile. 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void FillFormField(const AutofillProfile* profile, 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillFieldType type, 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen size_t variant, 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch webkit_glue::FormField* field); 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Set |field| argument's value for phone/fax number based on contents of the 23172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // |profile|. |type| is the type of the phone. 232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The |variant| parameter specifies which value in a multi-valued profile. 233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void FillPhoneNumberField(const AutofillProfile* profile, 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillFieldType type, 235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen size_t variant, 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch webkit_glue::FormField* field); 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 238dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Parses the forms using heuristic matching and querying the Autofill server. 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ParseForms(const std::vector<webkit_glue::FormData>& forms); 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Uses existing personal data to determine possible field types for the 24272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // |submitted_form|. 24372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void DeterminePossibleFieldTypesForUpload(FormStructure* submitted_form); 24472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The personal data manager, used to save and load personal data to/from the 246dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // web database. This is overridden by the AutofillManagerTest. 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Weak reference. 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // May be NULL. NULL indicates OTR. 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PersonalDataManager* personal_data_; 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::list<std::string> autofilled_forms_signatures_; 252dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Handles queries and uploads to Autofill servers. 253dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AutofillDownloadManager download_manager_; 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 255dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Should be set to true in AutofillManagerTest and other tests, false in 256dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // AutofillDownloadManagerTest and in non-test environment. Is false by 25721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // default for the public constructor, and true by default for the test-only 25821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // constructors. 2593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool disable_download_manager_requests_; 2603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 26121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // For logging UMA metrics. Overridden by metrics tests. 262dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_ptr<const AutofillMetrics> metric_logger_; 26321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Have we logged whether Autofill is enabled for this page load? 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool has_logged_autofill_enabled_; 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Have we logged an address suggestions count metric for this page? 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool has_logged_address_suggestions_count_; 2693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Our copy of the form data. 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ScopedVector<FormStructure> form_structures_; 27272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 273513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // GUID to ID mapping. We keep two maps to convert back and forth. 274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::map<GUIDPair, int> guid_id_map_; 275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::map<int, GUIDPair> id_guid_map_; 276513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 277dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen friend class AutofillManagerTest; 278201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch friend class FormStructureBrowserTest; 279dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FillCreditCardForm); 280dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, 28172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FillCreditCardFormNoYearNoMonth); 282dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FillCreditCardFormYearNoMonth); 283dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FillCreditCardFormNoYearMonth); 284dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FillCreditCardFormYearMonth); 285dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FillAddressForm); 286dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FillAddressAndCreditCardForm); 287dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FillFormWithMultipleSections); 288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FillFormWithMultipleEmails); 289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FillAutofilledForm); 290dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FillPhoneNumber); 291dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FormChangesRemoveField); 292dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FormChangesAddField); 293ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FormSubmitted); 294ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, FormSubmittedServerTypes); 295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, AddressSuggestionsCount); 296ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, AutofillIsEnabledAtPageLoad); 297dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, 298dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NoQualityMetricsForNonAutofillableForms); 299ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, QualityMetrics); 300dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, QualityMetricsForFailure); 301dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, QualityMetricsWithExperimentId); 302ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, SaneMetricsWithCacheMismatch); 303dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 304dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DISALLOW_COPY_AND_ASSIGN(AutofillManager); 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_AUTOFILL_AUTOFILL_MANAGER_H_ 308