1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOCOMPLETE_HISTORY_MANAGER_H_ 6 #define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOCOMPLETE_HISTORY_MANAGER_H_ 7 8 #include <vector> 9 10 #include "base/gtest_prod_util.h" 11 #include "base/prefs/pref_member.h" 12 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h" 13 #include "components/webdata/common/web_data_service_consumer.h" 14 15 namespace autofill { 16 17 class AutofillDriver; 18 class AutofillExternalDelegate; 19 class AutofillClient; 20 struct FormData; 21 22 // Per-tab Autocomplete history manager. Handles receiving form data 23 // from the renderer and the storing and retrieving of form data 24 // through WebDataServiceBase. 25 class AutocompleteHistoryManager : public WebDataServiceConsumer { 26 public: 27 AutocompleteHistoryManager(AutofillDriver* driver, 28 AutofillClient* autofill_client); 29 virtual ~AutocompleteHistoryManager(); 30 31 // WebDataServiceConsumer implementation. 32 virtual void OnWebDataServiceRequestDone( 33 WebDataServiceBase::Handle h, 34 const WDTypedResult* result) OVERRIDE; 35 36 // Pass-through functions that are called by AutofillManager, after it has 37 // dispatched a message. 38 void OnGetAutocompleteSuggestions( 39 int query_id, 40 const base::string16& name, 41 const base::string16& prefix, 42 const std::string form_control_type, 43 const std::vector<base::string16>& autofill_values, 44 const std::vector<base::string16>& autofill_labels, 45 const std::vector<base::string16>& autofill_icons, 46 const std::vector<int>& autofill_unique_ids); 47 virtual void OnFormSubmitted(const FormData& form); 48 49 // Must be public for the external delegate to use. 50 void OnRemoveAutocompleteEntry(const base::string16& name, 51 const base::string16& value); 52 53 // Sets our external delegate. 54 void SetExternalDelegate(AutofillExternalDelegate* delegate); 55 56 protected: 57 friend class AutofillManagerTest; 58 59 // Sends the given |suggestions| for display in the Autofill popup. 60 void SendSuggestions(const std::vector<base::string16>* suggestions); 61 62 private: 63 // Cancels the currently pending WebDataService query, if there is one. 64 void CancelPendingQuery(); 65 66 // Provides driver-level context. Must outlive this object. 67 AutofillDriver* driver_; 68 scoped_refptr<AutofillWebDataService> database_; 69 70 // When the manager makes a request from WebDataServiceBase, the database is 71 // queried on another thread, we record the query handle until we get called 72 // back. We also store the autofill results so we can send them together. 73 WebDataServiceBase::Handle pending_query_handle_; 74 int query_id_; 75 std::vector<base::string16> autofill_values_; 76 std::vector<base::string16> autofill_labels_; 77 std::vector<base::string16> autofill_icons_; 78 std::vector<int> autofill_unique_ids_; 79 80 // Delegate to perform external processing (display, selection) on 81 // our behalf. Weak. 82 AutofillExternalDelegate* external_delegate_; 83 84 // Delegate to provide whether or not autocomplete functionality is enabled. 85 AutofillClient* const autofill_client_; 86 87 // Whether IPC is sent. 88 bool send_ipc_; 89 90 DISALLOW_COPY_AND_ASSIGN(AutocompleteHistoryManager); 91 }; 92 93 } // namespace autofill 94 95 #endif // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOCOMPLETE_HISTORY_MANAGER_H_ 96