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