| Index: chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
|
| diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
|
| index 8fe645bced0a05f365b9f48794204d786f0bba78..72d8ac238ab29348116abb6ce12fb14416086bd0 100644
|
| --- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
|
| +++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
|
| @@ -41,11 +41,8 @@ Profile* GetProfileFromWebContents(content::WebContents* web_contents) {
|
| return Profile::FromBrowserContext(web_contents->GetBrowserContext());
|
| }
|
|
|
| -void CleanStatisticsForSite(content::WebContents* web_contents,
|
| - const GURL& origin) {
|
| - DCHECK(web_contents);
|
| - Profile* profile =
|
| - Profile::FromBrowserContext(web_contents->GetBrowserContext());
|
| +void CleanStatisticsForSite(Profile* profile, const GURL& origin) {
|
| + DCHECK(profile);
|
| password_manager::PasswordStore* password_store =
|
| PasswordStoreFactory::GetForProfile(profile,
|
| ServiceAccessType::IMPLICIT_ACCESS)
|
| @@ -173,7 +170,7 @@ void ManagePasswordsBubbleModel::InteractionKeeper::ReportInteractions(
|
| password_manager::metrics_util::CHROME_SIGNIN_OK ||
|
| sign_in_promo_dismissal_reason_ ==
|
| password_manager::metrics_util::CHROME_SIGNIN_CANCEL) {
|
| - DCHECK(model->web_contents());
|
| + DCHECK(model->delegate_);
|
| int show_count = model->GetProfile()->GetPrefs()->GetInteger(
|
| password_manager::prefs::kNumberSignInPasswordPromoShown);
|
| UMA_HISTOGRAM_COUNTS_100("PasswordManager.SignInPromoCountTilClick",
|
| @@ -192,13 +189,9 @@ void ManagePasswordsBubbleModel::InteractionKeeper::ReportInteractions(
|
| metrics_util::NO_UPDATE_SUBMISSION) {
|
| update_password_submission_event_ =
|
| model->GetUpdateDismissalReason(NO_INTERACTION);
|
| - PasswordsModelDelegate* delegate =
|
| - model->web_contents()
|
| - ? PasswordsModelDelegateFromWebContents(model->web_contents())
|
| - : nullptr;
|
| - if (delegate &&
|
| + if (model->delegate_ &&
|
| model->state() == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE)
|
| - delegate->OnNoInteractionOnUpdate();
|
| + model->delegate_->OnNoInteractionOnUpdate();
|
| }
|
|
|
| if (update_password_submission_event_ != metrics_util::NO_UPDATE_SUBMISSION)
|
| @@ -207,25 +200,22 @@ void ManagePasswordsBubbleModel::InteractionKeeper::ReportInteractions(
|
| }
|
|
|
| ManagePasswordsBubbleModel::ManagePasswordsBubbleModel(
|
| - content::WebContents* web_contents,
|
| + base::WeakPtr<PasswordsModelDelegate> delegate,
|
| DisplayReason display_reason)
|
| - : content::WebContentsObserver(web_contents),
|
| - password_overridden_(false) {
|
| - PasswordsModelDelegate* delegate =
|
| - PasswordsModelDelegateFromWebContents(web_contents);
|
| -
|
| - origin_ = delegate->GetOrigin();
|
| - state_ = delegate->GetState();
|
| + : password_overridden_(false),
|
| + delegate_(std::move(delegate)) {
|
| + origin_ = delegate_->GetOrigin();
|
| + state_ = delegate_->GetState();
|
| if (state_ == password_manager::ui::PENDING_PASSWORD_STATE ||
|
| state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) {
|
| - pending_password_ = delegate->GetPendingPassword();
|
| - local_credentials_ = DeepCopyForms(delegate->GetCurrentForms());
|
| + pending_password_ = delegate_->GetPendingPassword();
|
| + local_credentials_ = DeepCopyForms(delegate_->GetCurrentForms());
|
| } else if (state_ == password_manager::ui::CONFIRMATION_STATE) {
|
| // We don't need anything.
|
| } else if (state_ == password_manager::ui::AUTO_SIGNIN_STATE) {
|
| - pending_password_ = delegate->GetPendingPassword();
|
| + pending_password_ = delegate_->GetPendingPassword();
|
| } else {
|
| - local_credentials_ = DeepCopyForms(delegate->GetCurrentForms());
|
| + local_credentials_ = DeepCopyForms(delegate_->GetCurrentForms());
|
| }
|
|
|
| if (state_ == password_manager::ui::PENDING_PASSWORD_STATE ||
|
| @@ -264,14 +254,14 @@ ManagePasswordsBubbleModel::ManagePasswordsBubbleModel(
|
| interaction_stats.origin_domain = origin_.GetOrigin();
|
| interaction_stats.username_value = pending_password_.username_value;
|
| password_manager::InteractionsStats* stats =
|
| - delegate->GetCurrentInteractionStats();
|
| + delegate_->GetCurrentInteractionStats();
|
| if (stats) {
|
| DCHECK_EQ(interaction_stats.username_value, stats->username_value);
|
| DCHECK_EQ(interaction_stats.origin_domain, stats->origin_domain);
|
| interaction_stats.dismissal_count = stats->dismissal_count;
|
| }
|
| } else if (state_ == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) {
|
| - password_overridden_ = delegate->IsPasswordOverridden();
|
| + password_overridden_ = delegate_->IsPasswordOverridden();
|
| }
|
|
|
| manage_link_ =
|
| @@ -327,17 +317,13 @@ ManagePasswordsBubbleModel::ManagePasswordsBubbleModel(
|
| interaction_keeper_.reset(new InteractionKeeper(std::move(interaction_stats),
|
| display_disposition));
|
|
|
| - delegate->OnBubbleShown();
|
| + delegate_->OnBubbleShown();
|
| }
|
|
|
| ManagePasswordsBubbleModel::~ManagePasswordsBubbleModel() {
|
| interaction_keeper_->ReportInteractions(this);
|
| - // web_contents() is nullptr if the tab is closing.
|
| - PasswordsModelDelegate* delegate =
|
| - web_contents() ? PasswordsModelDelegateFromWebContents(web_contents())
|
| - : nullptr;
|
| - if (delegate)
|
| - delegate->OnBubbleHidden();
|
| + if (delegate_)
|
| + delegate_->OnBubbleHidden();
|
| }
|
|
|
| void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() {
|
| @@ -345,8 +331,8 @@ void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() {
|
| interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_NEVER);
|
| interaction_keeper_->set_update_password_submission_event(
|
| GetUpdateDismissalReason(NOPE_CLICKED));
|
| - CleanStatisticsForSite(web_contents(), origin_);
|
| - PasswordsModelDelegateFromWebContents(web_contents())->NeverSavePassword();
|
| + CleanStatisticsForSite(GetProfile(), origin_);
|
| + delegate_->NeverSavePassword();
|
| }
|
|
|
| void ManagePasswordsBubbleModel::OnSaveClicked() {
|
| @@ -354,22 +340,21 @@ void ManagePasswordsBubbleModel::OnSaveClicked() {
|
| interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_SAVE);
|
| interaction_keeper_->set_update_password_submission_event(
|
| GetUpdateDismissalReason(UPDATE_CLICKED));
|
| - CleanStatisticsForSite(web_contents(), origin_);
|
| - PasswordsModelDelegateFromWebContents(web_contents())->SavePassword();
|
| + CleanStatisticsForSite(GetProfile(), origin_);
|
| + delegate_->SavePassword();
|
| }
|
|
|
| void ManagePasswordsBubbleModel::OnNopeUpdateClicked() {
|
| interaction_keeper_->set_update_password_submission_event(
|
| GetUpdateDismissalReason(NOPE_CLICKED));
|
| - PasswordsModelDelegateFromWebContents(web_contents())->OnNopeUpdateClicked();
|
| + delegate_->OnNopeUpdateClicked();
|
| }
|
|
|
| void ManagePasswordsBubbleModel::OnUpdateClicked(
|
| const autofill::PasswordForm& password_form) {
|
| interaction_keeper_->set_update_password_submission_event(
|
| GetUpdateDismissalReason(UPDATE_CLICKED));
|
| - PasswordsModelDelegateFromWebContents(web_contents())->UpdatePassword(
|
| - password_form);
|
| + delegate_->UpdatePassword(password_form);
|
| }
|
|
|
| void ManagePasswordsBubbleModel::OnDoneClicked() {
|
| @@ -386,18 +371,15 @@ void ManagePasswordsBubbleModel::OnManageLinkClicked() {
|
| interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_MANAGE);
|
| if (GetSmartLockBrandingState(GetProfile()) ==
|
| password_bubble_experiment::SmartLockBranding::FULL) {
|
| - PasswordsModelDelegateFromWebContents(web_contents())
|
| - ->NavigateToExternalPasswordManager();
|
| + delegate_->NavigateToExternalPasswordManager();
|
| } else {
|
| - PasswordsModelDelegateFromWebContents(web_contents())
|
| - ->NavigateToPasswordManagerSettingsPage();
|
| + delegate_->NavigateToPasswordManagerSettingsPage();
|
| }
|
| }
|
|
|
| void ManagePasswordsBubbleModel::OnBrandLinkClicked() {
|
| interaction_keeper_->set_dismissal_reason(metrics_util::CLICKED_BRAND_NAME);
|
| - PasswordsModelDelegateFromWebContents(web_contents())
|
| - ->NavigateToSmartLockHelpPage();
|
| + delegate_->NavigateToSmartLockHelpPage();
|
| }
|
|
|
| void ManagePasswordsBubbleModel::OnAutoSignInToastTimeout() {
|
| @@ -426,8 +408,7 @@ void ManagePasswordsBubbleModel::OnSignInToChromeClicked() {
|
| metrics_util::CHROME_SIGNIN_OK);
|
| GetProfile()->GetPrefs()->SetBoolean(
|
| password_manager::prefs::kWasSignInPasswordPromoClicked, true);
|
| - PasswordsModelDelegateFromWebContents(web_contents())
|
| - ->NavigateToChromeSignIn();
|
| + delegate_->NavigateToChromeSignIn();
|
| }
|
|
|
| void ManagePasswordsBubbleModel::OnSkipSignInClicked() {
|
| @@ -438,7 +419,11 @@ void ManagePasswordsBubbleModel::OnSkipSignInClicked() {
|
| }
|
|
|
| Profile* ManagePasswordsBubbleModel::GetProfile() const {
|
| - return GetProfileFromWebContents(web_contents());
|
| + return GetProfileFromWebContents(GetWebContents());
|
| +}
|
| +
|
| +content::WebContents* ManagePasswordsBubbleModel::GetWebContents() const {
|
| + return delegate_ ? delegate_->GetWebContents() : nullptr;
|
| }
|
|
|
| bool ManagePasswordsBubbleModel::ShouldShowMultipleAccountUpdateUI() const {
|
| @@ -491,14 +476,14 @@ void ManagePasswordsBubbleModel::UpdatePendingStateTitle() {
|
| ? PasswordTittleType::SAVE_PASSWORD
|
| : PasswordTittleType::SAVE_ACCOUNT);
|
| GetSavePasswordDialogTitleTextAndLinkRange(
|
| - web_contents()->GetVisibleURL(), origin_,
|
| + GetWebContents()->GetVisibleURL(), origin_,
|
| GetSmartLockBrandingState(GetProfile()) !=
|
| password_bubble_experiment::SmartLockBranding::NONE,
|
| type, &title_, &title_brand_link_range_);
|
| }
|
|
|
| void ManagePasswordsBubbleModel::UpdateManageStateTitle() {
|
| - GetManagePasswordsDialogTitleText(web_contents()->GetVisibleURL(), origin_,
|
| + GetManagePasswordsDialogTitleText(GetWebContents()->GetVisibleURL(), origin_,
|
| &title_);
|
| }
|
|
|
|
|