1// Copyright 2014 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_CONTENT_AUTOFILL_DRIVER_H_
6#define COMPONENTS_AUTOFILL_CONTENT_BROWSER_CONTENT_AUTOFILL_DRIVER_H_
7
8#include <string>
9
10#include "base/memory/scoped_ptr.h"
11#include "base/supports_user_data.h"
12#include "components/autofill/content/browser/request_autocomplete_manager.h"
13#include "components/autofill/core/browser/autofill_driver.h"
14#include "components/autofill/core/browser/autofill_external_delegate.h"
15#include "components/autofill/core/browser/autofill_manager.h"
16#include "content/public/browser/web_contents_observer.h"
17
18namespace content {
19class WebContents;
20}
21
22namespace IPC {
23class Message;
24}
25
26namespace autofill {
27
28class AutofillContext;
29class AutofillClient;
30
31// Class that drives autofill flow in the browser process based on
32// communication from the renderer and from the external world. There is one
33// instance per WebContents.
34class ContentAutofillDriver : public AutofillDriver,
35                              public content::WebContentsObserver,
36                              public base::SupportsUserData::Data {
37 public:
38  static void CreateForWebContentsAndDelegate(
39      content::WebContents* contents,
40      AutofillClient* client,
41      const std::string& app_locale,
42      AutofillManager::AutofillDownloadManagerState enable_download_manager);
43  static ContentAutofillDriver* FromWebContents(content::WebContents* contents);
44
45  // AutofillDriver:
46  virtual bool IsOffTheRecord() const OVERRIDE;
47  virtual net::URLRequestContextGetter* GetURLRequestContext() OVERRIDE;
48  virtual base::SequencedWorkerPool* GetBlockingPool() OVERRIDE;
49  virtual bool RendererIsAvailable() OVERRIDE;
50  virtual void SendFormDataToRenderer(int query_id,
51                                      RendererFormDataAction action,
52                                      const FormData& data) OVERRIDE;
53  virtual void PingRenderer() OVERRIDE;
54  virtual void SendAutofillTypePredictionsToRenderer(
55      const std::vector<FormStructure*>& forms) OVERRIDE;
56  virtual void RendererShouldAcceptDataListSuggestion(
57      const base::string16& value) OVERRIDE;
58  virtual void RendererShouldClearFilledForm() OVERRIDE;
59  virtual void RendererShouldClearPreviewedForm() OVERRIDE;
60  virtual void RendererShouldFillFieldWithValue(
61      const base::string16& value) OVERRIDE;
62  virtual void RendererShouldPreviewFieldWithValue(
63      const base::string16& value) OVERRIDE;
64
65  AutofillExternalDelegate* autofill_external_delegate() {
66    return &autofill_external_delegate_;
67  }
68
69  AutofillManager* autofill_manager() { return autofill_manager_.get(); }
70
71 protected:
72  ContentAutofillDriver(
73      content::WebContents* web_contents,
74      AutofillClient* client,
75      const std::string& app_locale,
76      AutofillManager::AutofillDownloadManagerState enable_download_manager);
77  virtual ~ContentAutofillDriver();
78
79  // content::WebContentsObserver:
80  virtual void DidNavigateMainFrame(
81      const content::LoadCommittedDetails& details,
82      const content::FrameNavigateParams& params) OVERRIDE;
83  virtual void NavigationEntryCommitted(
84      const content::LoadCommittedDetails& load_details) OVERRIDE;
85  virtual void WasHidden() OVERRIDE;
86  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
87
88  // Sets the manager to |manager| and sets |manager|'s external delegate
89  // to |autofill_external_delegate_|. Takes ownership of |manager|.
90  void SetAutofillManager(scoped_ptr<AutofillManager> manager);
91
92 private:
93  // AutofillManager instance via which this object drives the shared Autofill
94  // code.
95  scoped_ptr<AutofillManager> autofill_manager_;
96
97  // AutofillExternalDelegate instance that this object instantiates in the
98  // case where the Autofill native UI is enabled.
99  AutofillExternalDelegate autofill_external_delegate_;
100
101  // Driver for the interactive autocomplete dialog.
102  RequestAutocompleteManager request_autocomplete_manager_;
103};
104
105}  // namespace autofill
106
107#endif  // COMPONENTS_AUTOFILL_CONTENT_BROWSER_CONTENT_AUTOFILL_DRIVER_H_
108