Home | History | Annotate | Download | only in browser
      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 
     18 namespace content {
     19 class WebContents;
     20 }
     21 
     22 namespace IPC {
     23 class Message;
     24 }
     25 
     26 namespace autofill {
     27 
     28 class AutofillContext;
     29 class 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.
     34 class 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   // Returns the WebContents with which this instance is associated.
     66   content::WebContents* GetWebContents();
     67 
     68   AutofillExternalDelegate* autofill_external_delegate() {
     69     return &autofill_external_delegate_;
     70   }
     71 
     72   AutofillManager* autofill_manager() { return autofill_manager_.get(); }
     73 
     74  protected:
     75   ContentAutofillDriver(
     76       content::WebContents* web_contents,
     77       AutofillClient* client,
     78       const std::string& app_locale,
     79       AutofillManager::AutofillDownloadManagerState enable_download_manager);
     80   virtual ~ContentAutofillDriver();
     81 
     82   // content::WebContentsObserver:
     83   virtual void DidNavigateMainFrame(
     84       const content::LoadCommittedDetails& details,
     85       const content::FrameNavigateParams& params) OVERRIDE;
     86   virtual void NavigationEntryCommitted(
     87       const content::LoadCommittedDetails& load_details) OVERRIDE;
     88   virtual void WasHidden() OVERRIDE;
     89   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
     90 
     91   // Sets the manager to |manager| and sets |manager|'s external delegate
     92   // to |autofill_external_delegate_|. Takes ownership of |manager|.
     93   void SetAutofillManager(scoped_ptr<AutofillManager> manager);
     94 
     95  private:
     96   // AutofillManager instance via which this object drives the shared Autofill
     97   // code.
     98   scoped_ptr<AutofillManager> autofill_manager_;
     99 
    100   // AutofillExternalDelegate instance that this object instantiates in the
    101   // case where the Autofill native UI is enabled.
    102   AutofillExternalDelegate autofill_external_delegate_;
    103 
    104   // Driver for the interactive autocomplete dialog.
    105   RequestAutocompleteManager request_autocomplete_manager_;
    106 };
    107 
    108 }  // namespace autofill
    109 
    110 #endif  // COMPONENTS_AUTOFILL_CONTENT_BROWSER_CONTENT_AUTOFILL_DRIVER_H_
    111