autocomplete_history_manager.h revision effb81e5f8246d0db0270817048dc992db66e9fb
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOCOMPLETE_HISTORY_MANAGER_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOCOMPLETE_HISTORY_MANAGER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/pref_member.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "components/webdata/common/web_data_service_consumer.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace autofill {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutofillDriver;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutofillExternalDelegate;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutofillManagerDelegate;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FormData;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Per-tab Autocomplete history manager. Handles receiving form data
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from the renderer and the storing and retrieving of form data
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// through WebDataServiceBase.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutocompleteHistoryManager : public WebDataServiceConsumer {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteHistoryManager(AutofillDriver* driver,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             AutofillManagerDelegate* delegate);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~AutocompleteHistoryManager();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebDataServiceConsumer implementation.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnWebDataServiceRequestDone(
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WebDataServiceBase::Handle h,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const WDTypedResult* result) OVERRIDE;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Pass-through functions that are called by AutofillManager, after it has
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // dispatched a message.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnGetAutocompleteSuggestions(
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int query_id,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const base::string16& name,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const base::string16& prefix,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::string form_control_type,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::vector<base::string16>& autofill_values,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::vector<base::string16>& autofill_labels,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::vector<base::string16>& autofill_icons,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::vector<int>& autofill_unique_ids);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnFormSubmitted(const FormData& form);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Must be public for the external delegate to use.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnRemoveAutocompleteEntry(const base::string16& name,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const base::string16& value);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets our external delegate.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetExternalDelegate(AutofillExternalDelegate* delegate);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class AutofillManagerTest;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sends the given |suggestions| for display in the Autofill popup.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SendSuggestions(const std::vector<base::string16>* suggestions);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Cancels the currently pending WebDataService query, if there is one.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CancelPendingQuery();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Provides driver-level context. Must outlive this object.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillDriver* driver_;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<AutofillWebDataService> database_;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When the manager makes a request from WebDataServiceBase, the database is
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // queried on another thread, we record the query handle until we get called
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // back.  We also store the autofill results so we can send them together.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebDataServiceBase::Handle pending_query_handle_;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int query_id_;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<base::string16> autofill_values_;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<base::string16> autofill_labels_;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<base::string16> autofill_icons_;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<int> autofill_unique_ids_;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Delegate to perform external processing (display, selection) on
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // our behalf.  Weak.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillExternalDelegate* external_delegate_;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Delegate to provide whether or not autocomplete functionality is enabled.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillManagerDelegate* const manager_delegate_;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether IPC is sent.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool send_ipc_;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
90  DISALLOW_COPY_AND_ASSIGN(AutocompleteHistoryManager);
91};
92
93}  // namespace autofill
94
95#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOCOMPLETE_HISTORY_MANAGER_H_
96