| 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
|
|
|