Index: components/password_manager/content/browser/content_password_manager_driver.cc |
diff --git a/components/password_manager/content/browser/content_password_manager_driver.cc b/components/password_manager/content/browser/content_password_manager_driver.cc |
index 62c20e6eed31e3ac72466c800c421635e0b00d3d..2139c85a07c0e2e38f7d8e26488f7cc87dfc7458 100644 |
--- a/components/password_manager/content/browser/content_password_manager_driver.cc |
+++ b/components/password_manager/content/browser/content_password_manager_driver.cc |
@@ -5,14 +5,18 @@ |
#include "components/password_manager/content/browser/content_password_manager_driver.h" |
#include "components/autofill/content/browser/content_autofill_driver.h" |
+#include "components/autofill/content/browser/content_autofill_driver_factory.h" |
#include "components/autofill/content/common/autofill_messages.h" |
#include "components/autofill/core/common/form_data.h" |
#include "components/autofill/core/common/password_form.h" |
+#include "components/password_manager/content/browser/content_password_manager_driver_factory.h" |
#include "components/password_manager/core/browser/password_manager_client.h" |
#include "content/public/browser/browser_context.h" |
#include "content/public/browser/navigation_details.h" |
#include "content/public/browser/navigation_entry.h" |
+#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/render_view_host.h" |
+#include "content/public/browser/site_instance.h" |
#include "content/public/browser/web_contents.h" |
#include "content/public/common/ssl_status.h" |
#include "ipc/ipc_message_macros.h" |
@@ -21,37 +25,44 @@ |
namespace password_manager { |
ContentPasswordManagerDriver::ContentPasswordManagerDriver( |
- content::WebContents* web_contents, |
+ content::RenderFrameHost* render_frame_host, |
PasswordManagerClient* client, |
autofill::AutofillClient* autofill_client) |
- : WebContentsObserver(web_contents), |
- password_manager_(client), |
- password_generation_manager_(client), |
- password_autofill_manager_(client, autofill_client), |
+ : render_frame_host_(render_frame_host), |
+ client_(client), |
+ password_generation_manager_(client, this), |
+ password_autofill_manager_(client, this, autofill_client), |
next_free_key_(0) { |
- DCHECK(web_contents); |
} |
ContentPasswordManagerDriver::~ContentPasswordManagerDriver() {} |
+// static |
+ContentPasswordManagerDriver* |
+ContentPasswordManagerDriver::GetForRenderFrameHost( |
+ content::RenderFrameHost* render_frame_host) { |
+ return ContentPasswordManagerDriverFactory::FromWebContents( |
+ content::WebContents::FromRenderFrameHost(render_frame_host)) |
+ ->GetDriverForFrame(render_frame_host); |
+} |
+ |
void ContentPasswordManagerDriver::FillPasswordForm( |
const autofill::PasswordFormFillData& form_data) { |
const int key = next_free_key_++; |
password_autofill_manager_.OnAddPasswordFormMapping(key, form_data); |
- DCHECK(web_contents()); |
- web_contents()->GetRenderViewHost()->Send(new AutofillMsg_FillPasswordForm( |
- web_contents()->GetRenderViewHost()->GetRoutingID(), key, form_data)); |
+ render_frame_host_->Send(new AutofillMsg_FillPasswordForm( |
+ render_frame_host_->GetRoutingID(), key, form_data)); |
} |
void ContentPasswordManagerDriver::AllowPasswordGenerationForForm( |
const autofill::PasswordForm& form) { |
- content::RenderViewHost* host = web_contents()->GetRenderViewHost(); |
+ content::RenderFrameHost* host = render_frame_host_; |
host->Send(new AutofillMsg_FormNotBlacklisted(host->GetRoutingID(), form)); |
} |
void ContentPasswordManagerDriver::AccountCreationFormsFound( |
const std::vector<autofill::FormData>& forms) { |
- content::RenderViewHost* host = web_contents()->GetRenderViewHost(); |
+ content::RenderFrameHost* host = render_frame_host_; |
host->Send(new AutofillMsg_AccountCreationFormsDetected(host->GetRoutingID(), |
forms)); |
} |
@@ -59,7 +70,7 @@ void ContentPasswordManagerDriver::AccountCreationFormsFound( |
void ContentPasswordManagerDriver::FillSuggestion( |
const base::string16& username, |
const base::string16& password) { |
- content::RenderViewHost* host = web_contents()->GetRenderViewHost(); |
+ content::RenderFrameHost* host = render_frame_host_; |
host->Send( |
new AutofillMsg_FillPasswordSuggestion(host->GetRoutingID(), |
username, |
@@ -69,7 +80,7 @@ void ContentPasswordManagerDriver::FillSuggestion( |
void ContentPasswordManagerDriver::PreviewSuggestion( |
const base::string16& username, |
const base::string16& password) { |
- content::RenderViewHost* host = web_contents()->GetRenderViewHost(); |
+ content::RenderFrameHost* host = render_frame_host_; |
host->Send( |
new AutofillMsg_PreviewPasswordSuggestion(host->GetRoutingID(), |
username, |
@@ -77,36 +88,18 @@ void ContentPasswordManagerDriver::PreviewSuggestion( |
} |
void ContentPasswordManagerDriver::ClearPreviewedForm() { |
- content::RenderViewHost* host = web_contents()->GetRenderViewHost(); |
+ content::RenderFrameHost* host = render_frame_host_; |
host->Send( |
new AutofillMsg_ClearPreviewedForm(host->GetRoutingID())); |
} |
-bool ContentPasswordManagerDriver::DidLastPageLoadEncounterSSLErrors() { |
- DCHECK(web_contents()); |
- // TODO(vabr): This is a wrong entry to look at for HTTP basic auth, |
- // http://crbug.com/388246. |
- content::NavigationEntry* entry = |
- web_contents()->GetController().GetLastCommittedEntry(); |
- if (!entry) { |
- return false; |
- } |
- |
- return net::IsCertStatusError(entry->GetSSL().cert_status); |
-} |
- |
-bool ContentPasswordManagerDriver::IsOffTheRecord() { |
- DCHECK(web_contents()); |
- return web_contents()->GetBrowserContext()->IsOffTheRecord(); |
-} |
- |
PasswordGenerationManager* |
ContentPasswordManagerDriver::GetPasswordGenerationManager() { |
return &password_generation_manager_; |
} |
PasswordManager* ContentPasswordManagerDriver::GetPasswordManager() { |
- return &password_manager_; |
+ return client_->GetPasswordManager(); |
} |
PasswordAutofillManager* |
@@ -114,41 +107,57 @@ ContentPasswordManagerDriver::GetPasswordAutofillManager() { |
return &password_autofill_manager_; |
} |
-void ContentPasswordManagerDriver::DidNavigateMainFrame( |
- const content::LoadCommittedDetails& details, |
- const content::FrameNavigateParams& params) { |
- password_manager_.DidNavigateMainFrame(details.is_in_page); |
-} |
- |
-bool ContentPasswordManagerDriver::OnMessageReceived( |
- const IPC::Message& message) { |
+bool ContentPasswordManagerDriver::HandleMessage(const IPC::Message& message) { |
bool handled = true; |
- IPC_BEGIN_MESSAGE_MAP(PasswordManager, message) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_PasswordFormsParsed, |
- &password_manager_, |
- PasswordManager::OnPasswordFormsParsed) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_PasswordFormsRendered, |
- &password_manager_, |
- PasswordManager::OnPasswordFormsRendered) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_PasswordFormSubmitted, |
- &password_manager_, |
- PasswordManager::OnPasswordFormSubmitted) |
+ IPC_BEGIN_MESSAGE_MAP(ContentPasswordManagerDriver, message) |
+ IPC_MESSAGE_HANDLER(AutofillHostMsg_PasswordFormsParsed, |
+ OnPasswordFormsParsed) |
+ IPC_MESSAGE_HANDLER(AutofillHostMsg_PasswordFormsRendered, |
+ OnPasswordFormsRendered) |
+ IPC_MESSAGE_HANDLER(AutofillHostMsg_PasswordFormSubmitted, |
+ OnPasswordFormSubmitted) |
IPC_MESSAGE_FORWARD(AutofillHostMsg_ShowPasswordSuggestions, |
&password_autofill_manager_, |
PasswordAutofillManager::OnShowPasswordSuggestions) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_RecordSavePasswordProgress, |
- password_manager_.client(), |
+ IPC_MESSAGE_FORWARD(AutofillHostMsg_RecordSavePasswordProgress, client_, |
PasswordManagerClient::LogSavePasswordProgress) |
IPC_MESSAGE_UNHANDLED(handled = false) |
IPC_END_MESSAGE_MAP() |
- |
return handled; |
} |
+void ContentPasswordManagerDriver::OnPasswordFormsParsed( |
+ const std::vector<autofill::PasswordForm>& forms) { |
+ GetPasswordManager()->OnPasswordFormsParsed(this, forms); |
+} |
+ |
+void ContentPasswordManagerDriver::OnPasswordFormsRendered( |
+ const std::vector<autofill::PasswordForm>& visible_forms, |
+ bool did_stop_loading) { |
+ GetPasswordManager()->OnPasswordFormsRendered(this, visible_forms, |
+ did_stop_loading); |
+} |
+ |
+void ContentPasswordManagerDriver::OnPasswordFormSubmitted( |
+ const autofill::PasswordForm& password_form) { |
+ GetPasswordManager()->OnPasswordFormSubmitted(this, password_form); |
+} |
+ |
+void ContentPasswordManagerDriver::DidNavigateFrame( |
+ const content::LoadCommittedDetails& details, |
+ const content::FrameNavigateParams& params) { |
+ GetPasswordAutofillManager()->Reset(); |
+ if (!render_frame_host_->GetParent()) |
+ GetPasswordManager()->DidNavigateMainFrame(details.is_in_page); |
+} |
+ |
autofill::AutofillManager* ContentPasswordManagerDriver::GetAutofillManager() { |
- autofill::ContentAutofillDriver* driver = |
- autofill::ContentAutofillDriver::FromWebContents(web_contents()); |
- return driver ? driver->autofill_manager() : NULL; |
+ autofill::ContentAutofillDriverFactory* factory = |
+ autofill::ContentAutofillDriverFactory::FromWebContents( |
+ content::WebContents::FromRenderFrameHost(render_frame_host_)); |
+ return factory |
+ ? factory->DriverForFrame(render_frame_host_)->autofill_manager() |
+ : nullptr; |
} |
} // namespace password_manager |