X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fchrome%2Fbrowser%2Fui%2Fpasswords%2Fmanage_passwords_ui_controller.cc;h=899edd95ce88a711383c0d4ac857e00b7a926b5d;hb=4a1a0bdd01eef90b0826a0e761d3379d3715c10f;hp=89c4c8a9944406f3fee6b8c8de24dea6ad6b9491;hpb=b1be5ca53587d23e7aeb77b26861fdc0a181ffd8;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/src/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc index 89c4c8a..899edd9 100644 --- a/src/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc +++ b/src/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc @@ -12,7 +12,7 @@ #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/chrome_pages.h" -#include "chrome/browser/ui/omnibox/location_bar.h" +#include "chrome/browser/ui/location_bar/location_bar.h" #include "chrome/browser/ui/passwords/manage_passwords_icon.h" #include "chrome/common/url_constants.h" #include "components/password_manager/core/browser/password_store.h" @@ -30,7 +30,28 @@ password_manager::PasswordStore* GetPasswordStore( Profile::EXPLICIT_ACCESS).get(); } -} // namespace +autofill::ConstPasswordFormMap ConstifyMap( + const autofill::PasswordFormMap& map) { + autofill::ConstPasswordFormMap ret; + ret.insert(map.begin(), map.end()); + return ret; +} + +// Performs a deep copy of the PasswordForm pointers in |map|. The resulting map +// is returned via |ret|. |deleter| is populated with these new objects. +void DeepCopyMap(const autofill::PasswordFormMap& map, + autofill::ConstPasswordFormMap* ret, + ScopedVector* deleter) { + ConstifyMap(map).swap(*ret); + deleter->clear(); + for (autofill::ConstPasswordFormMap::iterator i = ret->begin(); + i != ret->end(); ++i) { + deleter->push_back(new autofill::PasswordForm(*i->second)); + i->second = deleter->back(); + } +} + +} // namespace DEFINE_WEB_CONTENTS_USER_DATA_KEY(ManagePasswordsUIController); @@ -65,17 +86,28 @@ void ManagePasswordsUIController::UpdateBubbleAndIconVisibility() { } void ManagePasswordsUIController::OnPasswordSubmitted( - PasswordFormManager* form_manager) { - form_manager_.reset(form_manager); - password_form_map_ = form_manager_->best_matches(); + scoped_ptr form_manager) { + form_manager_ = form_manager.Pass(); + password_form_map_ = ConstifyMap(form_manager_->best_matches()); origin_ = PendingCredentials().origin; state_ = password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE; UpdateBubbleAndIconVisibility(); } +void ManagePasswordsUIController::OnAutomaticPasswordSave( + scoped_ptr form_manager) { + form_manager_ = form_manager.Pass(); + password_form_map_ = ConstifyMap(form_manager_->best_matches()); + password_form_map_[form_manager_->associated_username()] = + &form_manager_->pending_credentials(); + origin_ = form_manager_->pending_credentials().origin; + state_ = password_manager::ui::CONFIRMATION_STATE; + UpdateBubbleAndIconVisibility(); +} + void ManagePasswordsUIController::OnPasswordAutofilled( const PasswordFormMap& password_form_map) { - password_form_map_ = password_form_map; + DeepCopyMap(password_form_map, &password_form_map_, &new_password_forms_); origin_ = password_form_map_.begin()->second->origin; state_ = password_manager::ui::MANAGE_STATE; UpdateBubbleAndIconVisibility(); @@ -83,7 +115,7 @@ void ManagePasswordsUIController::OnPasswordAutofilled( void ManagePasswordsUIController::OnBlacklistBlockedAutofill( const PasswordFormMap& password_form_map) { - password_form_map_ = password_form_map; + DeepCopyMap(password_form_map, &password_form_map_, &new_password_forms_); origin_ = password_form_map_.begin()->second->origin; state_ = password_manager::ui::BLACKLIST_STATE; UpdateBubbleAndIconVisibility(); @@ -134,21 +166,42 @@ void ManagePasswordsUIController:: #endif } +void ManagePasswordsUIController::NavigateToAccountCentralManagementPage() { + // TODO(gcasto): FindBowserWithWebContents() doesn't exist on Android. + // Need to determine how this should work there. +#if !defined(OS_ANDROID) + Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); + content::OpenURLParams params( + GURL(chrome::kAutoPasswordGenerationLearnMoreURL), content::Referrer(), + NEW_FOREGROUND_TAB, content::PAGE_TRANSITION_LINK, false); + browser->OpenURL(params); +#endif +} + void ManagePasswordsUIController::SavePassword() { DCHECK(PasswordPendingUserDecision()); + SavePasswordInternal(); + state_ = password_manager::ui::MANAGE_STATE; + UpdateBubbleAndIconVisibility(); +} + +void ManagePasswordsUIController::SavePasswordInternal() { DCHECK(form_manager_.get()); form_manager_->Save(); - state_ = password_manager::ui::MANAGE_STATE; } void ManagePasswordsUIController::NeverSavePassword() { DCHECK(PasswordPendingUserDecision()); - DCHECK(form_manager_.get()); - form_manager_->PermanentlyBlacklist(); + NeverSavePasswordInternal(); state_ = password_manager::ui::BLACKLIST_STATE; UpdateBubbleAndIconVisibility(); } +void ManagePasswordsUIController::NeverSavePasswordInternal() { + DCHECK(form_manager_.get()); + form_manager_->PermanentlyBlacklist(); +} + void ManagePasswordsUIController::UnblacklistSite() { // We're in one of two states: either the user _just_ blacklisted the site // by clicking "Never save" in the pending bubble, or the user is visiting @@ -194,23 +247,24 @@ const autofill::PasswordForm& ManagePasswordsUIController:: void ManagePasswordsUIController::UpdateIconAndBubbleState( ManagePasswordsIcon* icon) { - if (state_ == password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE) { + if (password_manager::ui::IsAutomaticDisplayState(state_)) { // We must display the icon before showing the bubble, as the bubble would // be otherwise unanchored. However, we can't change the controller's state - // until _after_ the bubble is shown, as our metrics depend on the - // distinction between PENDING_PASSWORD_AND_BUBBLE_STATE and - // PENDING_PASSWORD_STATE to determine if the bubble opened automagically - // or via user action. - icon->SetState(password_manager::ui::PENDING_PASSWORD_STATE); + // until _after_ the bubble is shown, as our metrics depend on the seeing + // the original state to determine if the bubble opened automagically or via + // user action. + password_manager::ui::State end_state = + GetEndStateForAutomaticState(state_); + icon->SetState(end_state); ShowBubbleWithoutUserInteraction(); - state_ = password_manager::ui::PENDING_PASSWORD_STATE; - } else { + state_ = end_state; + } else { icon->SetState(state_); } } void ManagePasswordsUIController::ShowBubbleWithoutUserInteraction() { - DCHECK_EQ(state_, password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE); + DCHECK(password_manager::ui::IsAutomaticDisplayState(state_)); #if !defined(OS_ANDROID) Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); if (!browser || browser->toolbar_model()->input_in_progress())