Index: components/autofill/content/browser/content_autofill_driver_factory.cc |
diff --git a/components/autofill/content/browser/content_autofill_driver_factory.cc b/components/autofill/content/browser/content_autofill_driver_factory.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1e49757a5844655c9540f5031028b702ebad4f49 |
--- /dev/null |
+++ b/components/autofill/content/browser/content_autofill_driver_factory.cc |
@@ -0,0 +1,107 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "components/autofill/content/browser/content_autofill_driver_factory.h" |
+ |
+#include "components/autofill/content/browser/content_autofill_driver.h" |
+#include "components/autofill/core/browser/autofill_client.h" |
+#include "components/autofill/core/browser/autofill_manager.h" |
+#include "components/autofill/core/browser/form_structure.h" |
+#include "components/autofill/core/common/autofill_switches.h" |
+#include "content/public/browser/render_frame_host.h" |
+#include "content/public/browser/web_contents.h" |
+#include "ipc/ipc_message_macros.h" |
+ |
+namespace autofill { |
+ |
+namespace { |
+ |
+const char kContentAutofillDriverFactoryWebContentsUserDataKey[] = |
+ "web_contents_autofill_driver_factory"; |
+ |
+} // namespace |
+ |
+// static |
+void ContentAutofillDriverFactory::CreateForWebContentsAndDelegate( |
+ content::WebContents* contents, |
+ AutofillClient* client, |
+ const std::string& app_locale, |
+ AutofillManager::AutofillDownloadManagerState enable_download_manager) { |
+ if (FromWebContents(contents)) |
+ return; |
+ |
+ contents->SetUserData( |
+ kContentAutofillDriverFactoryWebContentsUserDataKey, |
+ new ContentAutofillDriverFactory(contents, client, app_locale, |
+ enable_download_manager)); |
+} |
+ |
+// static |
+ContentAutofillDriverFactory* ContentAutofillDriverFactory::FromWebContents( |
+ content::WebContents* contents) { |
+ return static_cast<ContentAutofillDriverFactory*>(contents->GetUserData( |
+ kContentAutofillDriverFactoryWebContentsUserDataKey)); |
+} |
+ |
+ContentAutofillDriverFactory::ContentAutofillDriverFactory( |
+ content::WebContents* web_contents, |
+ AutofillClient* client, |
+ const std::string& app_locale, |
+ AutofillManager::AutofillDownloadManagerState enable_download_manager) |
+ : content::WebContentsObserver(web_contents), |
+ client_(client), |
+ app_locale_(app_locale), |
+ enable_download_manager_(enable_download_manager) { |
+ if (web_contents->GetMainFrame()) |
+ CreateDriverForFrame(web_contents->GetMainFrame()); |
+} |
+ |
+ContentAutofillDriverFactory::~ContentAutofillDriverFactory() { |
+} |
+ |
+ContentAutofillDriver* ContentAutofillDriverFactory::DriverForFrame( |
+ content::RenderFrameHost* render_frame_host) { |
+ return frame_driver_map_[render_frame_host]; |
+} |
+ |
+bool ContentAutofillDriverFactory::OnMessageReceived( |
+ const IPC::Message& message, |
+ content::RenderFrameHost* render_frame_host) { |
+ return frame_driver_map_[render_frame_host]->HandleMessage(message); |
+} |
+ |
+void ContentAutofillDriverFactory::RenderFrameCreated( |
+ content::RenderFrameHost* render_frame_host) { |
+ CreateDriverForFrame(render_frame_host); |
+} |
+ |
+void ContentAutofillDriverFactory::RenderFrameDeleted( |
+ content::RenderFrameHost* render_frame_host) { |
+ delete frame_driver_map_[render_frame_host]; |
+ frame_driver_map_.erase(render_frame_host); |
+} |
+ |
+void ContentAutofillDriverFactory::DidNavigateAnyFrame( |
+ content::RenderFrameHost* render_frame_host, |
+ const content::LoadCommittedDetails& details, |
+ const content::FrameNavigateParams& params) { |
+ frame_driver_map_[render_frame_host]->DidNavigateFrame(details, params); |
+} |
+ |
+void ContentAutofillDriverFactory::NavigationEntryCommitted( |
+ const content::LoadCommittedDetails& load_details) { |
+ client_->HideAutofillPopup(); |
+} |
+ |
+void ContentAutofillDriverFactory::WasHidden() { |
+ client_->HideAutofillPopup(); |
+} |
+ |
+void ContentAutofillDriverFactory::CreateDriverForFrame( |
+ content::RenderFrameHost* render_frame_host) { |
+ frame_driver_map_[render_frame_host] = new ContentAutofillDriver( |
+ render_frame_host, client_, app_locale_, enable_download_manager_); |
+} |
+ |
+} // namespace autofill |