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 autofill_external_delegate()65 AutofillExternalDelegate* autofill_external_delegate() { 66 return &autofill_external_delegate_; 67 } 68 autofill_manager()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