This source file includes following definitions.
- logger_
- PromptUserToSavePassword
- PasswordWasAutofilled
- AuthenticateAutofillAndFillForm
- GetProfile
- HidePasswordGenerationPopup
- GetPrefs
- GetPasswordStore
- GetDriver
- GetProbabilityForExperiment
- IsPasswordSyncEnabled
- SetLogger
- LogSavePasswordProgress
- GetGenerationManagerFromWebContents
- GetManagerFromWebContents
- SetTestObserver
- OnMessageReceived
- GetBoundsInScreenSpace
- ShowPasswordGenerationPopup
- ShowPasswordEditingPopup
- CommitFillPasswordForm
#include "chrome/browser/password_manager/chrome_password_manager_client.h"
#include "base/bind_helpers.h"
#include "base/command_line.h"
#include "base/memory/singleton.h"
#include "base/metrics/histogram.h"
#include "chrome/browser/password_manager/password_manager_util.h"
#include "chrome/browser/password_manager/password_store_factory.h"
#include "chrome/browser/password_manager/save_password_infobar_delegate.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sync/profile_sync_service.h"
#include "chrome/browser/sync/profile_sync_service_factory.h"
#include "chrome/browser/ui/autofill/password_generation_popup_controller_impl.h"
#include "chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/chrome_version_info.h"
#include "components/autofill/content/common/autofill_messages.h"
#include "components/autofill/core/browser/password_generator.h"
#include "components/autofill/core/common/password_form.h"
#include "components/password_manager/core/browser/password_form_manager.h"
#include "components/password_manager/core/browser/password_manager.h"
#include "components/password_manager/core/browser/password_manager_logger.h"
#include "components/password_manager/core/browser/password_manager_metrics_util.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_view.h"
#include "ipc/ipc_message_macros.h"
#if defined(OS_ANDROID)
#include "chrome/browser/android/password_authentication_manager.h"
#endif
DEFINE_WEB_CONTENTS_USER_DATA_KEY(ChromePasswordManagerClient);
ChromePasswordManagerClient::ChromePasswordManagerClient(
content::WebContents* web_contents)
: content::WebContentsObserver(web_contents),
driver_(web_contents, this),
observer_(NULL),
weak_factory_(this),
logger_(NULL) {}
ChromePasswordManagerClient::~ChromePasswordManagerClient() {}
void ChromePasswordManagerClient::PromptUserToSavePassword(
PasswordFormManager* form_to_save) {
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableSavePasswordBubble)) {
ManagePasswordsBubbleUIController* manage_passwords_bubble_ui_controller =
ManagePasswordsBubbleUIController::FromWebContents(web_contents());
if (manage_passwords_bubble_ui_controller) {
manage_passwords_bubble_ui_controller->OnPasswordSubmitted(form_to_save);
} else {
delete form_to_save;
}
} else {
std::string uma_histogram_suffix(
password_manager_metrics_util::GroupIdToString(
password_manager_metrics_util::MonitoredDomainGroupId(
form_to_save->realm(), GetPrefs())));
SavePasswordInfoBarDelegate::Create(
web_contents(), form_to_save, uma_histogram_suffix);
}
}
void ChromePasswordManagerClient::PasswordWasAutofilled(
const autofill::PasswordFormMap& best_matches) const {
ManagePasswordsBubbleUIController* manage_passwords_bubble_ui_controller =
ManagePasswordsBubbleUIController::FromWebContents(web_contents());
if (manage_passwords_bubble_ui_controller &&
CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableSavePasswordBubble)) {
manage_passwords_bubble_ui_controller->OnPasswordAutofilled(best_matches);
}
}
void ChromePasswordManagerClient::AuthenticateAutofillAndFillForm(
scoped_ptr<autofill::PasswordFormFillData> fill_data) {
#if defined(OS_ANDROID)
PasswordAuthenticationManager::AuthenticatePasswordAutofill(
web_contents(),
base::Bind(&ChromePasswordManagerClient::CommitFillPasswordForm,
weak_factory_.GetWeakPtr(),
base::Owned(fill_data.release())));
#else
CommitFillPasswordForm(fill_data.get());
#endif
}
Profile* ChromePasswordManagerClient::GetProfile() {
return Profile::FromBrowserContext(web_contents()->GetBrowserContext());
}
void ChromePasswordManagerClient::HidePasswordGenerationPopup() {
if (popup_controller_)
popup_controller_->HideAndDestroy();
}
PrefService* ChromePasswordManagerClient::GetPrefs() {
return GetProfile()->GetPrefs();
}
PasswordStore* ChromePasswordManagerClient::GetPasswordStore() {
return PasswordStoreFactory::GetForProfile(GetProfile(),
Profile::EXPLICIT_ACCESS).get();
}
PasswordManagerDriver* ChromePasswordManagerClient::GetDriver() {
return &driver_;
}
base::FieldTrial::Probability
ChromePasswordManagerClient::GetProbabilityForExperiment(
const std::string& experiment_name) {
base::FieldTrial::Probability enabled_probability = 0;
if (experiment_name == PasswordManager::kOtherPossibleUsernamesExperiment) {
switch (chrome::VersionInfo::GetChannel()) {
case chrome::VersionInfo::CHANNEL_DEV:
case chrome::VersionInfo::CHANNEL_BETA:
enabled_probability = 50;
break;
default:
break;
}
}
return enabled_probability;
}
bool ChromePasswordManagerClient::IsPasswordSyncEnabled() {
ProfileSyncService* sync_service =
ProfileSyncServiceFactory::GetForProfile(GetProfile());
if (sync_service && sync_service->HasSyncSetupCompleted())
return sync_service->GetActiveDataTypes().Has(syncer::PASSWORDS);
return false;
}
void ChromePasswordManagerClient::SetLogger(
PasswordManagerLogger* logger) {
DCHECK(!logger || !logger_);
logger_ = logger;
}
void ChromePasswordManagerClient::LogSavePasswordProgress(
const std::string& text) {
if (logger_)
logger_->LogSavePasswordProgress(text);
}
PasswordGenerationManager*
ChromePasswordManagerClient::GetGenerationManagerFromWebContents(
content::WebContents* contents) {
ChromePasswordManagerClient* client =
ChromePasswordManagerClient::FromWebContents(contents);
if (!client)
return NULL;
return client->GetDriver()->GetPasswordGenerationManager();
}
PasswordManager* ChromePasswordManagerClient::GetManagerFromWebContents(
content::WebContents* contents) {
ChromePasswordManagerClient* client =
ChromePasswordManagerClient::FromWebContents(contents);
if (!client)
return NULL;
return client->GetDriver()->GetPasswordManager();
}
void ChromePasswordManagerClient::SetTestObserver(
autofill::PasswordGenerationPopupObserver* observer) {
observer_ = observer;
}
bool ChromePasswordManagerClient::OnMessageReceived(
const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(ChromePasswordManagerClient, message)
IPC_MESSAGE_HANDLER(AutofillHostMsg_ShowPasswordGenerationPopup,
ShowPasswordGenerationPopup)
IPC_MESSAGE_HANDLER(AutofillHostMsg_ShowPasswordEditingPopup,
ShowPasswordEditingPopup)
IPC_MESSAGE_HANDLER(AutofillHostMsg_HidePasswordGenerationPopup,
HidePasswordGenerationPopup)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
gfx::RectF ChromePasswordManagerClient::GetBoundsInScreenSpace(
const gfx::RectF& bounds) {
gfx::Rect client_area;
web_contents()->GetView()->GetContainerBounds(&client_area);
return bounds + client_area.OffsetFromOrigin();
}
void ChromePasswordManagerClient::ShowPasswordGenerationPopup(
const gfx::RectF& bounds,
int max_length,
const autofill::PasswordForm& form) {
#if defined(USE_AURA)
gfx::RectF element_bounds_in_screen_space = GetBoundsInScreenSpace(bounds);
popup_controller_ =
autofill::PasswordGenerationPopupControllerImpl::GetOrCreate(
popup_controller_,
element_bounds_in_screen_space,
form,
max_length,
driver_.GetPasswordManager(),
observer_,
web_contents(),
web_contents()->GetView()->GetNativeView());
popup_controller_->Show(true );
#endif
}
void ChromePasswordManagerClient::ShowPasswordEditingPopup(
const gfx::RectF& bounds,
const autofill::PasswordForm& form) {
#if defined(USE_AURA)
gfx::RectF element_bounds_in_screen_space = GetBoundsInScreenSpace(bounds);
popup_controller_ =
autofill::PasswordGenerationPopupControllerImpl::GetOrCreate(
popup_controller_,
element_bounds_in_screen_space,
form,
0,
driver_.GetPasswordManager(),
observer_,
web_contents(),
web_contents()->GetView()->GetNativeView());
popup_controller_->Show(false );
#endif
}
void ChromePasswordManagerClient::CommitFillPasswordForm(
autofill::PasswordFormFillData* data) {
driver_.FillPasswordForm(*data);
}