• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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   // Cancels the currently pending WebDataService query, if there is one.
50   void CancelPendingQuery();
51 
52   // Must be public for the external delegate to use.
53   void OnRemoveAutocompleteEntry(const base::string16& name,
54                                  const base::string16& value);
55 
56   // Sets our external delegate.
57   void SetExternalDelegate(AutofillExternalDelegate* delegate);
58 
59  protected:
60   friend class AutofillManagerTest;
61 
62   // Sends the given |suggestions| for display in the Autofill popup.
63   void SendSuggestions(const std::vector<base::string16>* suggestions);
64 
65  private:
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