Home | History | Annotate | Download | only in browser
      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