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 15namespace autofill { 16 17class AutofillDriver; 18class AutofillExternalDelegate; 19class AutofillClient; 20struct 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. 25class 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