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_CONTENT_BROWSER_REQUEST_AUTOCOMPLETE_MANAGER_H_
6#define COMPONENTS_AUTOFILL_CONTENT_BROWSER_REQUEST_AUTOCOMPLETE_MANAGER_H_
7
8#include "base/callback_forward.h"
9#include "base/memory/weak_ptr.h"
10#include "components/autofill/core/browser/autofill_client.h"
11
12class GURL;
13
14namespace autofill {
15
16class ContentAutofillDriver;
17struct FormData;
18class FormStructure;
19
20// Driver for the requestAutocomplete flow.
21class RequestAutocompleteManager {
22 public:
23  explicit RequestAutocompleteManager(ContentAutofillDriver* autofill_driver);
24  ~RequestAutocompleteManager();
25
26  // Requests an interactive autocomplete UI to be shown for |frame_url| with
27  // |form|.
28  void OnRequestAutocomplete(const FormData& form, const GURL& frame_url);
29
30  // Requests that any running interactive autocomplete be cancelled.
31  void OnCancelRequestAutocomplete();
32
33 private:
34  // Tells the renderer that the current interactive autocomplete dialog
35  // finished with the |result| saying if it was successful or not, and
36  // |form_structure| containing the filled form data. |debug_message| will
37  // be printed to the developer console.
38  void ReturnAutocompleteResult(
39      AutofillClient::RequestAutocompleteResult result,
40      const base::string16& debug_message,
41      const FormStructure* form_structure);
42
43  // Shows the requestAutocomplete dialog for |source_url| with data from |form|
44  // and calls |callback| once the interaction is complete.
45  void ShowRequestAutocompleteDialog(
46      const FormData& form,
47      const GURL& source_url,
48      const AutofillClient::ResultCallback& callback);
49
50  // The autofill driver owns and outlives |this|.
51  ContentAutofillDriver* const autofill_driver_;  // weak.
52
53  base::WeakPtrFactory<RequestAutocompleteManager> weak_ptr_factory_;
54};
55
56}  // namespace autofill
57
58#endif  // COMPONENTS_AUTOFILL_CONTENT_BROWSER_REQUEST_AUTOCOMPLETE_MANAGER_H_
59