Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" | 5 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" |
| 6 | 6 |
| 7 #include "chrome/app/chrome_command_ids.h" | 7 #include "chrome/app/chrome_command_ids.h" |
| 8 #include "chrome/browser/browsing_data/browsing_data_helper.h" | 8 #include "chrome/browser/browsing_data/browsing_data_helper.h" |
| 9 #include "chrome/browser/chrome_notification_types.h" | 9 #include "chrome/browser/chrome_notification_types.h" |
| 10 #include "chrome/browser/password_manager/password_store_factory.h" | 10 #include "chrome/browser/password_manager/password_store_factory.h" |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 23 | 23 |
| 24 namespace { | 24 namespace { |
| 25 | 25 |
| 26 password_manager::PasswordStore* GetPasswordStore( | 26 password_manager::PasswordStore* GetPasswordStore( |
| 27 content::WebContents* web_contents) { | 27 content::WebContents* web_contents) { |
| 28 return PasswordStoreFactory::GetForProfile( | 28 return PasswordStoreFactory::GetForProfile( |
| 29 Profile::FromBrowserContext(web_contents->GetBrowserContext()), | 29 Profile::FromBrowserContext(web_contents->GetBrowserContext()), |
| 30 Profile::EXPLICIT_ACCESS).get(); | 30 Profile::EXPLICIT_ACCESS).get(); |
| 31 } | 31 } |
| 32 | 32 |
| 33 autofill::ConstPasswordFormMap ConstifyMap( | |
| 34 const autofill::PasswordFormMap& map) { | |
| 35 autofill::ConstPasswordFormMap ret; | |
| 36 ret.insert(map.begin(), map.end()); | |
| 37 return ret; | |
| 38 } | |
| 39 | |
| 33 } // namespace | 40 } // namespace |
| 34 | 41 |
| 35 DEFINE_WEB_CONTENTS_USER_DATA_KEY(ManagePasswordsUIController); | 42 DEFINE_WEB_CONTENTS_USER_DATA_KEY(ManagePasswordsUIController); |
| 36 | 43 |
| 37 ManagePasswordsUIController::ManagePasswordsUIController( | 44 ManagePasswordsUIController::ManagePasswordsUIController( |
| 38 content::WebContents* web_contents) | 45 content::WebContents* web_contents) |
| 39 : content::WebContentsObserver(web_contents), | 46 : content::WebContentsObserver(web_contents), |
| 40 state_(password_manager::ui::INACTIVE_STATE) { | 47 state_(password_manager::ui::INACTIVE_STATE) { |
| 41 password_manager::PasswordStore* password_store = | 48 password_manager::PasswordStore* password_store = |
| 42 GetPasswordStore(web_contents); | 49 GetPasswordStore(web_contents); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 58 Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); | 65 Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); |
| 59 if (!browser) | 66 if (!browser) |
| 60 return; | 67 return; |
| 61 LocationBar* location_bar = browser->window()->GetLocationBar(); | 68 LocationBar* location_bar = browser->window()->GetLocationBar(); |
| 62 DCHECK(location_bar); | 69 DCHECK(location_bar); |
| 63 location_bar->UpdateManagePasswordsIconAndBubble(); | 70 location_bar->UpdateManagePasswordsIconAndBubble(); |
| 64 #endif | 71 #endif |
| 65 } | 72 } |
| 66 | 73 |
| 67 void ManagePasswordsUIController::OnPasswordSubmitted( | 74 void ManagePasswordsUIController::OnPasswordSubmitted( |
| 68 PasswordFormManager* form_manager) { | 75 scoped_ptr<PasswordFormManager> form_manager) { |
| 69 form_manager_.reset(form_manager); | 76 form_manager_ = form_manager.Pass(); |
| 70 password_form_map_ = form_manager_->best_matches(); | 77 password_form_map_ = ConstifyMap(form_manager_->best_matches()); |
| 71 origin_ = PendingCredentials().origin; | 78 origin_ = PendingCredentials().origin; |
| 72 state_ = password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE; | 79 state_ = password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE; |
| 73 UpdateBubbleAndIconVisibility(); | 80 UpdateBubbleAndIconVisibility(); |
| 74 } | 81 } |
| 75 | 82 |
| 83 void ManagePasswordsUIController::OnAutomaticPasswordSave( | |
| 84 scoped_ptr<PasswordFormManager> form_manager) { | |
| 85 form_manager_ = form_manager.Pass(); | |
| 86 password_form_map_ = ConstifyMap(form_manager_->best_matches()); | |
| 87 password_form_map_[form_manager_->associated_username()] = | |
| 88 &form_manager_->pending_credentials(); | |
| 89 origin_ = form_manager_->pending_credentials().origin; | |
| 90 state_ = password_manager::ui::CONFIRMATION_STATE; | |
| 91 UpdateBubbleAndIconVisibility(); | |
| 92 } | |
| 93 | |
| 76 void ManagePasswordsUIController::OnPasswordAutofilled( | 94 void ManagePasswordsUIController::OnPasswordAutofilled( |
| 77 const PasswordFormMap& password_form_map) { | 95 const PasswordFormMap& password_form_map) { |
| 78 password_form_map_ = password_form_map; | 96 password_form_map_ = ConstifyMap(password_form_map); |
| 79 origin_ = password_form_map_.begin()->second->origin; | 97 origin_ = password_form_map_.begin()->second->origin; |
| 80 state_ = password_manager::ui::MANAGE_STATE; | 98 state_ = password_manager::ui::MANAGE_STATE; |
| 81 UpdateBubbleAndIconVisibility(); | 99 UpdateBubbleAndIconVisibility(); |
| 82 } | 100 } |
| 83 | 101 |
| 84 void ManagePasswordsUIController::OnBlacklistBlockedAutofill( | 102 void ManagePasswordsUIController::OnBlacklistBlockedAutofill( |
| 85 const PasswordFormMap& password_form_map) { | 103 const PasswordFormMap& password_form_map) { |
| 86 password_form_map_ = password_form_map; | 104 password_form_map_ = ConstifyMap(password_form_map); |
| 87 origin_ = password_form_map_.begin()->second->origin; | 105 origin_ = password_form_map_.begin()->second->origin; |
| 88 state_ = password_manager::ui::BLACKLIST_STATE; | 106 state_ = password_manager::ui::BLACKLIST_STATE; |
| 89 UpdateBubbleAndIconVisibility(); | 107 UpdateBubbleAndIconVisibility(); |
| 90 } | 108 } |
| 91 | 109 |
| 92 void ManagePasswordsUIController::WebContentsDestroyed() { | 110 void ManagePasswordsUIController::WebContentsDestroyed() { |
| 93 password_manager::PasswordStore* password_store = | 111 password_manager::PasswordStore* password_store = |
| 94 GetPasswordStore(web_contents()); | 112 GetPasswordStore(web_contents()); |
| 95 if (password_store) | 113 if (password_store) |
| 96 password_store->RemoveObserver(this); | 114 password_store->RemoveObserver(this); |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 127 NavigateToPasswordManagerSettingsPage() { | 145 NavigateToPasswordManagerSettingsPage() { |
| 128 // TODO(mkwst): chrome_pages.h is compiled out of Android. Need to figure out | 146 // TODO(mkwst): chrome_pages.h is compiled out of Android. Need to figure out |
| 129 // how this navigation should work there. | 147 // how this navigation should work there. |
| 130 #if !defined(OS_ANDROID) | 148 #if !defined(OS_ANDROID) |
| 131 chrome::ShowSettingsSubPage( | 149 chrome::ShowSettingsSubPage( |
| 132 chrome::FindBrowserWithWebContents(web_contents()), | 150 chrome::FindBrowserWithWebContents(web_contents()), |
| 133 chrome::kPasswordManagerSubPage); | 151 chrome::kPasswordManagerSubPage); |
| 134 #endif | 152 #endif |
| 135 } | 153 } |
| 136 | 154 |
| 155 void ManagePasswordsUIController::NavigateToAccountCentralManagementPage() { | |
| 156 // TODO(gcasto): Change this to navigate to account central once passwords | |
|
Mike West
2014/07/17 13:43:17
I'd either change the name of this method to "Navg
Garrett Casto
2014/07/17 20:54:55
Moved. I should probably change this name of the p
| |
| 157 // are visible there. | |
| 158 Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); | |
| 159 content::OpenURLParams params( | |
| 160 GURL(chrome::kAutoPasswordGenerationLearnMoreURL), content::Referrer(), | |
| 161 NEW_FOREGROUND_TAB, content::PAGE_TRANSITION_LINK, false); | |
| 162 browser->OpenURL(params); | |
| 163 } | |
| 164 | |
| 137 void ManagePasswordsUIController::SavePassword() { | 165 void ManagePasswordsUIController::SavePassword() { |
| 138 DCHECK(PasswordPendingUserDecision()); | 166 DCHECK(PasswordPendingUserDecision()); |
| 139 SavePasswordInternal(); | 167 SavePasswordInternal(); |
| 140 state_ = password_manager::ui::MANAGE_STATE; | 168 state_ = password_manager::ui::MANAGE_STATE; |
| 141 UpdateBubbleAndIconVisibility(); | 169 UpdateBubbleAndIconVisibility(); |
| 142 } | 170 } |
| 143 | 171 |
| 144 void ManagePasswordsUIController::SavePasswordInternal() { | 172 void ManagePasswordsUIController::SavePasswordInternal() { |
| 145 DCHECK(form_manager_.get()); | 173 DCHECK(form_manager_.get()); |
| 146 form_manager_->Save(); | 174 form_manager_->Save(); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 196 } | 224 } |
| 197 | 225 |
| 198 const autofill::PasswordForm& ManagePasswordsUIController:: | 226 const autofill::PasswordForm& ManagePasswordsUIController:: |
| 199 PendingCredentials() const { | 227 PendingCredentials() const { |
| 200 DCHECK(form_manager_); | 228 DCHECK(form_manager_); |
| 201 return form_manager_->pending_credentials(); | 229 return form_manager_->pending_credentials(); |
| 202 } | 230 } |
| 203 | 231 |
| 204 void ManagePasswordsUIController::UpdateIconAndBubbleState( | 232 void ManagePasswordsUIController::UpdateIconAndBubbleState( |
| 205 ManagePasswordsIcon* icon) { | 233 ManagePasswordsIcon* icon) { |
| 206 if (state_ == password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE) { | 234 if (password_manager::ui::IsAutomaticDisplayState(state_)) { |
| 207 // We must display the icon before showing the bubble, as the bubble would | 235 // We must display the icon before showing the bubble, as the bubble would |
| 208 // be otherwise unanchored. However, we can't change the controller's state | 236 // be otherwise unanchored. However, we can't change the controller's state |
| 209 // until _after_ the bubble is shown, as our metrics depend on the | 237 // until _after_ the bubble is shown, as our metrics depend on the seeing |
| 210 // distinction between PENDING_PASSWORD_AND_BUBBLE_STATE and | 238 // the original state to determine if the bubble opened automagically or via |
| 211 // PENDING_PASSWORD_STATE to determine if the bubble opened automagically | 239 // user action. |
| 212 // or via user action. | 240 password_manager::ui::State end_state = |
| 213 icon->SetState(password_manager::ui::PENDING_PASSWORD_STATE); | 241 GetEndStateForAutomaticState(state_); |
| 242 icon->SetState(end_state); | |
| 214 ShowBubbleWithoutUserInteraction(); | 243 ShowBubbleWithoutUserInteraction(); |
| 215 state_ = password_manager::ui::PENDING_PASSWORD_STATE; | 244 state_ = end_state; |
| 216 } else { | 245 } else { |
| 217 icon->SetState(state_); | 246 icon->SetState(state_); |
| 218 } | 247 } |
| 219 } | 248 } |
| 220 | 249 |
| 221 void ManagePasswordsUIController::ShowBubbleWithoutUserInteraction() { | 250 void ManagePasswordsUIController::ShowBubbleWithoutUserInteraction() { |
| 222 DCHECK_EQ(state_, password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE); | 251 DCHECK(password_manager::ui::IsAutomaticDisplayState(state_)); |
| 223 #if !defined(OS_ANDROID) | 252 #if !defined(OS_ANDROID) |
| 224 Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); | 253 Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); |
| 225 if (!browser || browser->toolbar_model()->input_in_progress()) | 254 if (!browser || browser->toolbar_model()->input_in_progress()) |
| 226 return; | 255 return; |
| 227 CommandUpdater* updater = browser->command_controller()->command_updater(); | 256 CommandUpdater* updater = browser->command_controller()->command_updater(); |
| 228 updater->ExecuteCommand(IDC_MANAGE_PASSWORDS_FOR_PAGE); | 257 updater->ExecuteCommand(IDC_MANAGE_PASSWORDS_FOR_PAGE); |
| 229 #endif | 258 #endif |
| 230 } | 259 } |
| 231 | 260 |
| 232 bool ManagePasswordsUIController::PasswordPendingUserDecision() const { | 261 bool ManagePasswordsUIController::PasswordPendingUserDecision() const { |
| 233 return state_ == password_manager::ui::PENDING_PASSWORD_STATE || | 262 return state_ == password_manager::ui::PENDING_PASSWORD_STATE || |
| 234 state_ == password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE; | 263 state_ == password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE; |
| 235 } | 264 } |
| OLD | NEW |