autocomplete_history_manager.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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 AutofillManagerDelegate; 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 AutofillManagerDelegate* delegate); 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::vector<base::string16>& autofill_values, 43 const std::vector<base::string16>& autofill_labels, 44 const std::vector<base::string16>& autofill_icons, 45 const std::vector<int>& autofill_unique_ids); 46 virtual void OnFormSubmitted(const FormData& form); 47 48 // Must be public for the external delegate to use. 49 void OnRemoveAutocompleteEntry(const base::string16& name, 50 const base::string16& value); 51 52 // Sets our external delegate. 53 void SetExternalDelegate(AutofillExternalDelegate* delegate); 54 55 protected: 56 friend class AutofillManagerTest; 57 58 // Sends the given |suggestions| for display in the Autofill popup. 59 void SendSuggestions(const std::vector<base::string16>* suggestions); 60 61 private: 62 // Cancels the currently pending WebDataService query, if there is one. 63 void CancelPendingQuery(); 64 65 // Provides driver-level context. Must outlive this object. 66 AutofillDriver* driver_; 67 scoped_refptr<AutofillWebDataService> database_; 68 69 // When the manager makes a request from WebDataServiceBase, the database is 70 // queried on another thread, we record the query handle until we get called 71 // back. We also store the autofill results so we can send them together. 72 WebDataServiceBase::Handle pending_query_handle_; 73 int query_id_; 74 std::vector<base::string16> autofill_values_; 75 std::vector<base::string16> autofill_labels_; 76 std::vector<base::string16> autofill_icons_; 77 std::vector<int> autofill_unique_ids_; 78 79 // Delegate to perform external processing (display, selection) on 80 // our behalf. Weak. 81 AutofillExternalDelegate* external_delegate_; 82 83 // Delegate to provide whether or not autocomplete functionality is enabled. 84 AutofillManagerDelegate* const manager_delegate_; 85 86 // Whether IPC is sent. 87 bool send_ipc_; 88 89 DISALLOW_COPY_AND_ASSIGN(AutocompleteHistoryManager); 90}; 91 92} // namespace autofill 93 94#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOCOMPLETE_HISTORY_MANAGER_H_ 95