Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(384)

Unified Diff: components/password_manager/content/browser/content_password_manager_driver.cc

Issue 707173004: Refactor Autofill for out of process iframes (OOPIF). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: mem leak Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698